diff options
| -rw-r--r-- | activerecord/lib/active_record/relation/finder_methods.rb | 16 | ||||
| -rw-r--r-- | activerecord/test/cases/finder_test.rb | 28 | 
2 files changed, 26 insertions, 18 deletions
| diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb index 0c9c761f97..40d52575ab 100644 --- a/activerecord/lib/active_record/relation/finder_methods.rb +++ b/activerecord/lib/active_record/relation/finder_methods.rb @@ -103,7 +103,7 @@ module ActiveRecord      # Same as +take+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found. Note that <tt>take!</tt> accepts no arguments.      def take! -      take or raise RecordNotFound +      take or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Find the first record (or first N records if a parameter is supplied). @@ -138,7 +138,7 @@ module ActiveRecord      # Same as +first+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found. Note that <tt>first!</tt> accepts no arguments.      def first! -      first or raise RecordNotFound +      first or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Find the last record (or last N records if a parameter is supplied). @@ -171,7 +171,7 @@ module ActiveRecord      # Same as +last+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found. Note that <tt>last!</tt> accepts no arguments.      def last! -      last or raise RecordNotFound +      last or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Find the second record. @@ -187,7 +187,7 @@ module ActiveRecord      # Same as +second+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found.      def second! -      second or raise RecordNotFound +      second or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Find the third record. @@ -203,7 +203,7 @@ module ActiveRecord      # Same as +third+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found.      def third! -      third or raise RecordNotFound +      third or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Find the fourth record. @@ -219,7 +219,7 @@ module ActiveRecord      # Same as +fourth+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found.      def fourth! -      fourth or raise RecordNotFound +      fourth or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Find the fifth record. @@ -235,7 +235,7 @@ module ActiveRecord      # Same as +fifth+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found.      def fifth! -      fifth or raise RecordNotFound +      fifth or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Find the forty-second record. Also known as accessing "the reddit". @@ -251,7 +251,7 @@ module ActiveRecord      # Same as +forty_two+ but raises <tt>ActiveRecord::RecordNotFound</tt> if no record      # is found.      def forty_two! -      forty_two or raise RecordNotFound +      forty_two or raise RecordNotFound.new("Couldn't find #{@klass.name} with [#{arel.where_sql}]")      end      # Returns +true+ if a record exists in the table that matches the +id+ or diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index 0f52f2c0fc..2657774291 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -248,7 +248,7 @@ class FinderTest < ActiveRecord::TestCase    end    def test_take_bang_missing -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.where("title = 'This title does not exist'").take!      end    end @@ -268,7 +268,7 @@ class FinderTest < ActiveRecord::TestCase    end    def test_first_bang_missing -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.where("title = 'This title does not exist'").first!      end    end @@ -282,7 +282,7 @@ class FinderTest < ActiveRecord::TestCase    def test_model_class_responds_to_first_bang      assert Topic.first!      Topic.delete_all -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.first!      end    end @@ -304,7 +304,7 @@ class FinderTest < ActiveRecord::TestCase    def test_model_class_responds_to_second_bang      assert Topic.second!      Topic.delete_all -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.second!      end    end @@ -326,7 +326,7 @@ class FinderTest < ActiveRecord::TestCase    def test_model_class_responds_to_third_bang      assert Topic.third!      Topic.delete_all -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.third!      end    end @@ -348,7 +348,7 @@ class FinderTest < ActiveRecord::TestCase    def test_model_class_responds_to_fourth_bang      assert Topic.fourth!      Topic.delete_all -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.fourth!      end    end @@ -370,7 +370,7 @@ class FinderTest < ActiveRecord::TestCase    def test_model_class_responds_to_fifth_bang      assert Topic.fifth!      Topic.delete_all -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.fifth!      end    end @@ -382,14 +382,14 @@ class FinderTest < ActiveRecord::TestCase    end    def test_last_bang_missing -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.where("title = 'This title does not exist'").last!      end    end    def test_model_class_responds_to_last_bang      assert_equal topics(:fifth), Topic.last! -    assert_raises ActiveRecord::RecordNotFound do +    assert_raises_with_message ActiveRecord::RecordNotFound, "Couldn't find Topic" do        Topic.delete_all        Topic.last!      end @@ -760,7 +760,9 @@ class FinderTest < ActiveRecord::TestCase    def test_find_by_one_attribute_bang      assert_equal topics(:first), Topic.find_by_title!("The First Topic") -    assert_raise(ActiveRecord::RecordNotFound) { Topic.find_by_title!("The First Topic!") } +    assert_raises_with_message(ActiveRecord::RecordNotFound, "Couldn't find Topic") do +      Topic.find_by_title!("The First Topic!") +    end    end    def test_find_by_on_attribute_that_is_a_reserved_word @@ -1029,4 +1031,10 @@ class FinderTest < ActiveRecord::TestCase          end        end)      end + +    def assert_raises_with_message(exception_class, message, &block) +      err = assert_raises(exception_class) { block.call } +      assert_match message, err.message +    end +  end | 
