aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-09-26 12:40:03 +0100
committerJon Leighton <j@jonathanleighton.com>2011-09-26 12:40:03 +0100
commita15424b92c182bcc4d2b693dc0001a44c9b0802f (patch)
treecefb6e86b574038704a9bf3b34f86509d9fbf21d /activemodel/lib/active_model
parentb838059817aca490f78e3bb74a070729270300db (diff)
downloadrails-a15424b92c182bcc4d2b693dc0001a44c9b0802f.tar.gz
rails-a15424b92c182bcc4d2b693dc0001a44c9b0802f.tar.bz2
rails-a15424b92c182bcc4d2b693dc0001a44c9b0802f.zip
Make serializable_hash take attr values directly from attributes hash.
Previously, it would use send() to get the attribute. In Active Resource, this would rely on hitting method missing. If a method with the same name was defined further up the ancestor chain, that method would wrongly be called. This change fixes test_to_xml_with_private_method_name_as_attribute in activeresource/test/cases/base_test.rb, which was broken after 51bef9d8fb0b4da7a104425ab8545e9331387743, because that change made to_xml use serializable_hash.
Diffstat (limited to 'activemodel/lib/active_model')
-rw-r--r--activemodel/lib/active_model/serialization.rb4
1 files changed, 3 insertions, 1 deletions
diff --git a/activemodel/lib/active_model/serialization.rb b/activemodel/lib/active_model/serialization.rb
index b9f6f6cbbf..a756b9f205 100644
--- a/activemodel/lib/active_model/serialization.rb
+++ b/activemodel/lib/active_model/serialization.rb
@@ -78,8 +78,10 @@ module ActiveModel
attribute_names -= Array.wrap(except).map(&:to_s)
end
+ hash = attributes.slice(*attribute_names)
+
method_names = Array.wrap(options[:methods]).select { |n| respond_to?(n) }
- hash = Hash[(attribute_names + method_names).map { |n| [n, send(n)] }]
+ method_names.each { |n| hash[n] = send(n) }
serializable_add_includes(options) do |association, records, opts|
hash[association] = if records.is_a?(Enumerable)