diff options
author | Rick Olson <technoweenie@gmail.com> | 2006-04-30 20:36:37 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2006-04-30 20:36:37 +0000 |
commit | 325cb1269cb2aa8e1abe7bc103db3cb47ae5eaf6 (patch) | |
tree | 7b623489e92e99c3beae1f1624484a4aaf42e6cc | |
parent | 59bd6586c8e7e290187978f3868d435ee267006c (diff) | |
download | rails-325cb1269cb2aa8e1abe7bc103db3cb47ae5eaf6.tar.gz rails-325cb1269cb2aa8e1abe7bc103db3cb47ae5eaf6.tar.bz2 rails-325cb1269cb2aa8e1abe7bc103db3cb47ae5eaf6.zip |
Namespaced OrderedHash so the Rails implementation does not clash with any others. (fixes #4911) [Julian Tarkhanov]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4318 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r-- | activerecord/lib/active_record/calculations.rb | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/ordered_options.rb | 5 | ||||
-rw-r--r-- | railties/CHANGELOG | 2 | ||||
-rw-r--r-- | railties/lib/initializer.rb | 41 |
4 files changed, 21 insertions, 29 deletions
diff --git a/activerecord/lib/active_record/calculations.rb b/activerecord/lib/active_record/calculations.rb index e16bf9e6d7..409466866f 100644 --- a/activerecord/lib/active_record/calculations.rb +++ b/activerecord/lib/active_record/calculations.rb @@ -217,7 +217,7 @@ module ActiveRecord key_records = key_records.inject({}) { |hsh, r| hsh.merge(r.id => r) } end - calculated_data.inject(OrderedHash.new) do |all, row| + calculated_data.inject(ActiveSupport::OrderedHash.new) do |all, row| key = associated ? key_records[row[group_alias].to_i] : type_cast_calculated_value(row[group_alias], group_column) value = row[aggregate_alias] all << [key, type_cast_calculated_value(value, column, operation)] diff --git a/activesupport/lib/active_support/ordered_options.rb b/activesupport/lib/active_support/ordered_options.rb index 0e97578b3e..1e925145aa 100644 --- a/activesupport/lib/active_support/ordered_options.rb +++ b/activesupport/lib/active_support/ordered_options.rb @@ -1,4 +1,5 @@ -class OrderedHash < Array #:nodoc: +# OrderedHash is namespaced to prevent conflicts with other implementations +class ActiveSupport::OrderedHash < Array #:nodoc: def []=(key, value) if pair = find_pair(key) pair.pop @@ -24,7 +25,7 @@ class OrderedHash < Array #:nodoc: end end -class OrderedOptions < OrderedHash #:nodoc: +class OrderedOptions < ActiveSupport::OrderedHash #:nodoc: def []=(key, value) super(key.to_sym, value) end diff --git a/railties/CHANGELOG b/railties/CHANGELOG index 75f4f15e06..0d1d84a61b 100644 --- a/railties/CHANGELOG +++ b/railties/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Namespaced OrderedHash so the Rails implementation does not clash with any others. (fixes #4911) [Julian Tarkhanov] + * Replace Ruby's deprecated append_features in favor of included. [Marcel Molina Jr.] * Added script/process/inspector to do simple process status information on Rails dispatchers keeping pid files in tmp/pids [DHH] diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index 96144091e8..16f213bc16 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -448,7 +448,7 @@ module Rails self.database_configuration_file = default_database_configuration_file for framework in default_frameworks - self.send("#{framework}=", OrderedOptions.new) + self.send("#{framework}=", Rails::OrderedOptions.new) end end @@ -576,9 +576,12 @@ module Rails end # Needs to be duplicated from Active Support since its needed before Active -# Support is available. -class OrderedHash < Array #:nodoc: - def []=(key, value) +# Support is available. Here both Options and Hash are namespaced to prevent +# conflicts with other implementations AND with the classes residing in ActiveSupport. +class Rails::OrderedOptions < Array #:nodoc: + def []=(key, value) + key = key.to_sym + if pair = find_pair(key) pair.pop pair << value @@ -586,30 +589,10 @@ class OrderedHash < Array #:nodoc: self << [key, value] end end - - def [](key) - pair = find_pair(key) - pair ? pair.last : nil - end - - def keys - self.collect { |i| i.first } - end - private - def find_pair(key) - self.each { |i| return i if i.first == key } - return false - end -end - -class OrderedOptions < OrderedHash #:nodoc: - def []=(key, value) - super(key.to_sym, value) - end - def [](key) - super(key.to_sym) + pair = find_pair(key.to_sym) + pair ? pair.last : nil end def method_missing(name, *args) @@ -619,4 +602,10 @@ class OrderedOptions < OrderedHash #:nodoc: self[name] end end + + private + def find_pair(key) + self.each { |i| return i if i.first == key } + return false + end end
\ No newline at end of file |