From 897b56bb2f8c2a904f546db1a32bad074463ec9b Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Mon, 27 Dec 2010 12:47:30 -0700 Subject: I N C E P T I O N: flatten_deeper works around a bug in Ruby 1.8.2. --- .../lib/active_record/associations/association_collection.rb | 4 ++-- .../lib/active_record/associations/has_association.rb | 12 ------------ .../associations/has_many_through_association.rb | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb index 97d9288874..108e316672 100644 --- a/activerecord/lib/active_record/associations/association_collection.rb +++ b/activerecord/lib/active_record/associations/association_collection.rb @@ -125,7 +125,7 @@ module ActiveRecord load_target if @owner.new_record? transaction do - flatten_deeper(records).each do |record| + records.flatten.each do |record| raise_on_type_mismatch(record) add_record_to_target_with_callbacks(record) do |r| result &&= insert_record(record) unless @owner.new_record? @@ -501,7 +501,7 @@ module ActiveRecord end def remove_records(*records) - records = flatten_deeper(records) + records = records.flatten records.each { |record| raise_on_type_mismatch(record) } transaction do diff --git a/activerecord/lib/active_record/associations/has_association.rb b/activerecord/lib/active_record/associations/has_association.rb index 4407e2ea9a..0ecdb696ea 100644 --- a/activerecord/lib/active_record/associations/has_association.rb +++ b/activerecord/lib/active_record/associations/has_association.rb @@ -37,18 +37,6 @@ module ActiveRecord conditions << Arel.sql(sql_conditions) if sql_conditions aliased_table.create_and(conditions) end - - if RUBY_VERSION < '1.9.2' - # Array#flatten has problems with recursive arrays before Ruby 1.9.2. - # Going one level deeper solves the majority of the problems. - def flatten_deeper(array) - array.collect { |element| (element.respond_to?(:flatten) && !element.is_a?(Hash)) ? element.flatten : element }.flatten - end - else - def flatten_deeper(array) - array.flatten - end - end end end end diff --git a/activerecord/lib/active_record/associations/has_many_through_association.rb b/activerecord/lib/active_record/associations/has_many_through_association.rb index ba464c8d79..e2b008034e 100644 --- a/activerecord/lib/active_record/associations/has_many_through_association.rb +++ b/activerecord/lib/active_record/associations/has_many_through_association.rb @@ -10,7 +10,7 @@ module ActiveRecord def destroy(*records) transaction do - delete_records(flatten_deeper(records)) + delete_records(records.flatten) super end end -- cgit v1.2.3