From 7858a32e1b2e5a64b0ef774530f0d80a588ed8f3 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Mon, 11 Jun 2007 07:45:56 +0000 Subject: Remove deprecated find_first and find_all. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6998 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/lib/active_record/associations.rb | 1 - .../associations/has_many_association.rb | 19 --- activerecord/lib/active_record/base.rb | 11 +- .../lib/active_record/deprecated_associations.rb | 11 -- .../lib/active_record/deprecated_finders.rb | 44 ------- activerecord/test/associations_test.rb | 46 +++---- activerecord/test/deprecated_associations_test.rb | 9 +- activerecord/test/deprecated_finder_test.rb | 135 ++------------------- activerecord/test/finder_test.rb | 8 ++ 9 files changed, 36 insertions(+), 248 deletions(-) delete mode 100644 activerecord/lib/active_record/deprecated_finders.rb diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index c1e93116d5..d30756b9c7 100755 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1205,7 +1205,6 @@ module ActiveRecord deprecated_remove_association_relation(association_name) deprecated_has_collection_method(association_name) deprecated_find_in_collection_method(association_name) - deprecated_find_all_in_collection_method(association_name) deprecated_collection_create_method(association_name) deprecated_collection_build_method(association_name) end diff --git a/activerecord/lib/active_record/associations/has_many_association.rb b/activerecord/lib/active_record/associations/has_many_association.rb index 3ea8187cb8..1c96353863 100644 --- a/activerecord/lib/active_record/associations/has_many_association.rb +++ b/activerecord/lib/active_record/associations/has_many_association.rb @@ -20,25 +20,6 @@ module ActiveRecord end end - # DEPRECATED. - def find_all(runtime_conditions = nil, orderings = nil, limit = nil, joins = nil) - if @reflection.options[:finder_sql] - @reflection.klass.find_by_sql(@finder_sql) - else - conditions = @finder_sql - conditions += " AND (#{sanitize_sql(runtime_conditions)})" if runtime_conditions - orderings ||= @reflection.options[:order] - @reflection.klass.find_all(conditions, orderings, limit, joins) - end - end - deprecate :find_all => "use find(:all, ...) instead" - - # DEPRECATED. Find the first associated record. All arguments are optional. - def find_first(conditions = nil, orderings = nil) - find_all(conditions, orderings, 1).first - end - deprecate :find_first => "use find(:first, ...) instead" - # Count the number of associated records. All arguments are optional. def count(*args) if @reflection.options[:counter_sql] diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 8c7b83f82a..fa34db9c68 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1,7 +1,6 @@ require 'base64' require 'yaml' require 'set' -require 'active_record/deprecated_finders' module ActiveRecord #:nodoc: class ActiveRecordError < StandardError #:nodoc: @@ -1207,7 +1206,7 @@ module ActiveRecord #:nodoc: # or find_or_create_by_user_and_password(user, password). def method_missing(method_id, *arguments) if match = /^find_(all_by|by)_([_a-zA-Z]\w*)$/.match(method_id.to_s) - finder, deprecated_finder = determine_finder(match), determine_deprecated_finder(match) + finder = determine_finder(match) attribute_names = extract_attribute_names_from_match(match) super unless all_attributes_exists?(attribute_names) @@ -1234,9 +1233,7 @@ module ActiveRecord #:nodoc: end else - ActiveSupport::Deprecation.silence do - send(deprecated_finder, sanitize_sql(attributes), *arguments[attribute_names.length..-1]) - end + raise ArgumentError, "Unrecognized arguments for #{method_id}: #{extra_options.inspect}" end elsif match = /^find_or_(initialize|create)_by_([_a-zA-Z]\w*)$/.match(method_id.to_s) instantiator = determine_instantiator(match) @@ -1262,10 +1259,6 @@ module ActiveRecord #:nodoc: match.captures.first == 'all_by' ? :find_every : :find_initial end - def determine_deprecated_finder(match) - match.captures.first == 'all_by' ? :find_all : :find_first - end - def determine_instantiator(match) match.captures.first == 'initialize' ? :new : :create end diff --git a/activerecord/lib/active_record/deprecated_associations.rb b/activerecord/lib/active_record/deprecated_associations.rb index 01410c4a7b..c973b65dbc 100644 --- a/activerecord/lib/active_record/deprecated_associations.rb +++ b/activerecord/lib/active_record/deprecated_associations.rb @@ -49,17 +49,6 @@ module ActiveRecord end_eval end - def deprecated_find_all_in_collection_method(collection_name)# :nodoc: - module_eval <<-"end_eval", __FILE__, __LINE__ - def find_all_in_#{collection_name}(runtime_conditions = nil, orderings = nil, limit = nil, joins = nil) - ActiveSupport::Deprecation.silence do - #{collection_name}.find_all(runtime_conditions, orderings, limit, joins) - end - end - deprecate :find_all_in_#{collection_name} => "use #{collection_name}.find(:all, ...) instead" - end_eval - end - def deprecated_collection_create_method(collection_name)# :nodoc: module_eval <<-"end_eval", __FILE__, __LINE__ def create_in_#{collection_name}(attributes = {}) diff --git a/activerecord/lib/active_record/deprecated_finders.rb b/activerecord/lib/active_record/deprecated_finders.rb deleted file mode 100644 index d4dcaa3fa0..0000000000 --- a/activerecord/lib/active_record/deprecated_finders.rb +++ /dev/null @@ -1,44 +0,0 @@ -module ActiveRecord - class Base - class << self - # DEPRECATION NOTICE: This method is deprecated in favor of find with the :conditions option. - # - # Works like find, but the record matching +id+ must also meet the +conditions+. - # +RecordNotFound+ is raised if no record can be found matching the +id+ or meeting the condition. - # Example: - # Person.find_on_conditions 5, "first_name LIKE '%dav%' AND last_name = 'heinemeier'" - def find_on_conditions(ids, conditions) # :nodoc: - find(ids, :conditions => conditions) - end - deprecate :find_on_conditions => "use find(ids, :conditions => conditions)" - - # DEPRECATION NOTICE: This method is deprecated in favor of find(:first, options). - # - # Returns the object for the first record responding to the conditions in +conditions+, - # such as "group = 'master'". If more than one record is returned from the query, it's the first that'll - # be used to create the object. In such cases, it might be beneficial to also specify - # +orderings+, like "income DESC, name", to control exactly which record is to be used. Example: - # Employee.find_first "income > 50000", "income DESC, name" - def find_first(conditions = nil, orderings = nil, joins = nil) # :nodoc: - find(:first, :conditions => conditions, :order => orderings, :joins => joins) - end - deprecate :find_first => "use find(:first, ...)" - - # DEPRECATION NOTICE: This method is deprecated in favor of find(:all, options). - # - # Returns an array of all the objects that could be instantiated from the associated - # table in the database. The +conditions+ can be used to narrow the selection of objects (WHERE-part), - # such as by "color = 'red'", and arrangement of the selection can be done through +orderings+ (ORDER BY-part), - # such as by "last_name, first_name DESC". A maximum of returned objects and their offset can be specified in - # +limit+ with either just a single integer as the limit or as an array with the first element as the limit, - # the second as the offset. Examples: - # Project.find_all "category = 'accounts'", "last_accessed DESC", 15 - # Project.find_all ["category = ?", category_name], "created ASC", [15, 20] - def find_all(conditions = nil, orderings = nil, limit = nil, joins = nil) # :nodoc: - limit, offset = limit.is_a?(Array) ? limit : [ limit, nil ] - find(:all, :conditions => conditions, :order => orderings, :joins => joins, :limit => limit, :offset => offset) - end - deprecate :find_all => "use find(:all, ...)" - end - end -end diff --git a/activerecord/test/associations_test.rb b/activerecord/test/associations_test.rb index 4045fd8a58..f009c4348e 100755 --- a/activerecord/test/associations_test.rb +++ b/activerecord/test/associations_test.rb @@ -534,44 +534,30 @@ class HasManyAssociationsTest < Test::Unit::TestCase end def test_find_all - assert_deprecated 'find_all' do - firm = Firm.find_first - assert_equal firm.clients, firm.clients.find_all - assert_equal 2, firm.clients.find(:all, :conditions => "#{QUOTED_TYPE} = 'Client'").length - assert_equal 1, firm.clients.find(:all, :conditions => "name = 'Summit'").length - end + firm = Firm.find(:first) + assert_equal 2, firm.clients.find(:all, :conditions => "#{QUOTED_TYPE} = 'Client'").length + assert_equal 1, firm.clients.find(:all, :conditions => "name = 'Summit'").length end def test_find_all_sanitized - assert_deprecated 'find_all' do - firm = Firm.find_first - assert_equal firm.clients.find_all("name = 'Summit'"), firm.clients.find_all(["name = '%s'", "Summit"]) - summit = firm.clients.find(:all, :conditions => "name = 'Summit'") - assert_equal summit, firm.clients.find(:all, :conditions => ["name = ?", "Summit"]) - assert_equal summit, firm.clients.find(:all, :conditions => ["name = :name", { :name => "Summit" }]) - end + firm = Firm.find(:first) + summit = firm.clients.find(:all, :conditions => "name = 'Summit'") + assert_equal summit, firm.clients.find(:all, :conditions => ["name = ?", "Summit"]) + assert_equal summit, firm.clients.find(:all, :conditions => ["name = :name", { :name => "Summit" }]) end def test_find_first - assert_deprecated 'find_first' do - firm = Firm.find_first - client2 = Client.find(2) - assert_equal firm.clients.first, firm.clients.find_first - assert_equal client2, firm.clients.find_first("#{QUOTED_TYPE} = 'Client'") - assert_equal client2, firm.clients.find(:first, :conditions => "#{QUOTED_TYPE} = 'Client'") - end + firm = Firm.find(:first) + client2 = Client.find(2) + assert_equal firm.clients.first, firm.clients.find(:first) + assert_equal client2, firm.clients.find(:first, :conditions => "#{QUOTED_TYPE} = 'Client'") end def test_find_first_sanitized - assert_deprecated 'find_first' do - firm = Firm.find_first - client2 = Client.find(2) - assert_deprecated(/find_first/) do - assert_equal client2, firm.clients.find_first(["#{QUOTED_TYPE} = ?", "Client"]) - end - assert_equal client2, firm.clients.find(:first, :conditions => ["#{QUOTED_TYPE} = ?", 'Client']) - assert_equal client2, firm.clients.find(:first, :conditions => ["#{QUOTED_TYPE} = :type", { :type => 'Client' }]) - end + firm = Firm.find(:first) + client2 = Client.find(2) + assert_equal client2, firm.clients.find(:first, :conditions => ["#{QUOTED_TYPE} = ?", 'Client']) + assert_equal client2, firm.clients.find(:first, :conditions => ["#{QUOTED_TYPE} = :type", { :type => 'Client' }]) end def test_find_in_collection @@ -1647,7 +1633,7 @@ class HasAndBelongsToManyAssociationsTest < Test::Unit::TestCase assert david.projects(true).empty? end - def test_rich_association + def test_deprecated_push_with_attributes_was_removed jamis = developers(:jamis) assert_raise(NoMethodError) do jamis.projects.push_with_attributes(projects(:action_controller), :joined_on => Date.today) diff --git a/activerecord/test/deprecated_associations_test.rb b/activerecord/test/deprecated_associations_test.rb index d9b1cc944f..5887a7b53d 100755 --- a/activerecord/test/deprecated_associations_test.rb +++ b/activerecord/test/deprecated_associations_test.rb @@ -17,8 +17,6 @@ raise "ActiveRecord should have barked on bad collection keys" unless bad_collec class DeprecatedAssociationWarningsTest < Test::Unit::TestCase def test_deprecation_warnings - assert_deprecated('find_first') { Firm.find_first } - assert_deprecated('find_all') { Firm.find_all } assert_deprecated('has_account?') { Firm.find(:first).has_account? } assert_deprecated('has_clients?') { Firm.find(:first).has_clients? } end @@ -239,7 +237,7 @@ class DeprecatedAssociationsTest < Test::Unit::TestCase def test_has_and_belongs_to_many_zero david = Developer.find(1) assert_deprecated do - david.remove_projects Project.find_all + david.remove_projects Project.find(:all) assert_equal 0, david.projects_count assert !david.has_projects? end @@ -358,9 +356,8 @@ class DeprecatedAssociationsTest < Test::Unit::TestCase end def test_has_many_find_all - assert_deprecated 'find_all_in_clients' do - assert_equal 2, @firm.find_all_in_clients("#{QUOTED_TYPE} = 'Client'").length - assert_equal 1, @firm.find_all_in_clients("name = 'Summit'").length + assert_raise(NoMethodError) do + @firm.find_all_in_clients("#{QUOTED_TYPE} = 'Client'") end end diff --git a/activerecord/test/deprecated_finder_test.rb b/activerecord/test/deprecated_finder_test.rb index 796e46f8c2..097c9131dc 100755 --- a/activerecord/test/deprecated_finder_test.rb +++ b/activerecord/test/deprecated_finder_test.rb @@ -1,90 +1,19 @@ require 'abstract_unit' -require 'fixtures/company' -require 'fixtures/topic' -require 'fixtures/reply' require 'fixtures/entrant' -require 'fixtures/developer' class DeprecatedFinderTest < Test::Unit::TestCase - fixtures :companies, :topics, :entrants, :developers + fixtures :entrants - def test_find_all_with_limit - entrants = assert_deprecated { Entrant.find_all nil, "id ASC", 2 } - assert_equal 2, entrants.size - assert_equal entrants(:first), entrants.first + def test_deprecated_find_all_was_removed + assert_raise(NoMethodError) { Entrant.find_all } end - def test_find_all_with_prepared_limit_and_offset - entrants = assert_deprecated { Entrant.find_all nil, "id ASC", [2, 1] } - assert_equal 2, entrants.size - assert_equal entrants(:second), entrants.first + def test_deprecated_find_first_was_removed + assert_raise(NoMethodError) { Entrant.find_first } end - def test_find_first - first = assert_deprecated { Topic.find_first "title = 'The First Topic'" } - assert_equal topics(:first), first - end - - def test_find_first_failing - first = assert_deprecated { Topic.find_first "title = 'The First Topic!'" } - assert_nil first - end - - def test_deprecated_find_on_conditions - assert_deprecated 'find_on_conditions' do - assert Topic.find_on_conditions(1, ["approved = ?", false]) - assert_raises(ActiveRecord::RecordNotFound) { Topic.find_on_conditions(1, ["approved = ?", true]) } - end - end - - def test_condition_interpolation - assert_deprecated do - assert_kind_of Firm, Company.find_first(["name = '%s'", "37signals"]) - assert_nil Company.find_first(["name = '%s'", "37signals!"]) - assert_nil Company.find_first(["name = '%s'", "37signals!' OR 1=1"]) - assert_kind_of Time, Topic.find_first(["id = %d", 1]).written_on - end - end - - def test_bind_variables - assert_deprecated do - assert_kind_of Firm, Company.find_first(["name = ?", "37signals"]) - assert_nil Company.find_first(["name = ?", "37signals!"]) - assert_nil Company.find_first(["name = ?", "37signals!' OR 1=1"]) - assert_kind_of Time, Topic.find_first(["id = ?", 1]).written_on - assert_raises(ActiveRecord::PreparedStatementInvalid) { - Company.find_first(["id=? AND name = ?", 2]) - } - assert_raises(ActiveRecord::PreparedStatementInvalid) { - Company.find_first(["id=?", 2, 3, 4]) - } - end - end - - def test_bind_variables_with_quotes - Company.create("name" => "37signals' go'es agains") - assert_deprecated do - assert_not_nil Company.find_first(["name = ?", "37signals' go'es agains"]) - end - end - - def test_named_bind_variables_with_quotes - Company.create("name" => "37signals' go'es agains") - assert_deprecated do - assert_not_nil Company.find_first(["name = :name", {:name => "37signals' go'es agains"}]) - end - end - - def test_named_bind_variables - assert_equal '1', bind(':a', :a => 1) # ' ruby-mode - assert_equal '1 1', bind(':a :a', :a => 1) # ' ruby-mode - - assert_deprecated do - assert_kind_of Firm, Company.find_first(["name = :name", { :name => "37signals" }]) - assert_nil Company.find_first(["name = :name", { :name => "37signals!" }]) - assert_nil Company.find_first(["name = :name", { :name => "37signals!' OR 1=1" }]) - assert_kind_of Time, Topic.find_first(["id = :id", { :id => 1 }]).written_on - end + def test_deprecated_find_on_conditions_was_removed + assert_raise(NoMethodError) { Entrant.find_on_conditions } end def test_count @@ -98,54 +27,4 @@ class DeprecatedFinderTest < Test::Unit::TestCase assert_equal(1, Entrant.count_by_sql(["SELECT COUNT(*) FROM entrants WHERE id > ?", 2])) assert_equal(2, Entrant.count_by_sql(["SELECT COUNT(*) FROM entrants WHERE id > ?", 1])) end - - def test_find_all_with_limit - assert_deprecated do - first_five_developers = Developer.find_all nil, 'id ASC', 5 - assert_equal 5, first_five_developers.length - assert_equal 'David', first_five_developers.first.name - assert_equal 'fixture_5', first_five_developers.last.name - - no_developers = Developer.find_all nil, 'id ASC', 0 - assert_equal 0, no_developers.length - - assert_equal first_five_developers, Developer.find_all(nil, 'id ASC', [5]) - assert_equal no_developers, Developer.find_all(nil, 'id ASC', [0]) - end - end - - def test_find_all_with_limit_and_offset - assert_deprecated do - first_three_developers = Developer.find_all nil, 'id ASC', [3, 0] - second_three_developers = Developer.find_all nil, 'id ASC', [3, 3] - last_two_developers = Developer.find_all nil, 'id ASC', [2, 8] - - assert_equal 3, first_three_developers.length - assert_equal 3, second_three_developers.length - assert_equal 2, last_two_developers.length - - assert_equal 'David', first_three_developers.first.name - assert_equal 'fixture_4', second_three_developers.first.name - assert_equal 'fixture_9', last_two_developers.first.name - end - end - - def test_find_all_by_one_attribute_with_options - assert_not_deprecated do - topics = Topic.find_all_by_content("Have a nice day", "id DESC") - assert topics(:first), topics.last - - topics = Topic.find_all_by_content("Have a nice day", "id DESC") - assert topics(:first), topics.first - end - end - - protected - def bind(statement, *vars) - if vars.first.is_a?(Hash) - ActiveRecord::Base.send(:replace_named_bind_variables, statement, vars.first) - else - ActiveRecord::Base.send(:replace_bind_variables, statement, vars) - end - end end diff --git a/activerecord/test/finder_test.rb b/activerecord/test/finder_test.rb index 38838cab83..f4ab465bf4 100644 --- a/activerecord/test/finder_test.rb +++ b/activerecord/test/finder_test.rb @@ -176,6 +176,14 @@ class FinderTest < Test::Unit::TestCase assert_raises(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => { :author_name => "David", :title => "The First Topic", :replies_count => 1, :approved => true }) } end + + def test_condition_interpolation + assert_kind_of Firm, Company.find(:first, :conditions => ["name = '%s'", "37signals"]) + assert_nil Company.find(:first, :conditions => ["name = '%s'", "37signals!"]) + assert_nil Company.find(:first, :conditions => ["name = '%s'", "37signals!' OR 1=1"]) + assert_kind_of Time, Topic.find(:first, :conditions => ["id = %d", 1]).written_on + end + def test_condition_array_interpolation assert_kind_of Firm, Company.find(:first, :conditions => ["name = '%s'", "37signals"]) assert_nil Company.find(:first, :conditions => ["name = '%s'", "37signals!"]) -- cgit v1.2.3