diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 563bef67..fc6d1265 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -69,14 +69,7 @@ end def attributes(*attrs) @_attributes.concat attrs - - attrs.each do |attr| - unless method_defined?(attr) - define_method attr do - object.read_attribute_for_serialization(attr) - end - end - end + attrs.each{|attr| define_attribute_accessor(attr)} end def has_one(*attrs) @@ -93,15 +86,27 @@ end options = attrs.extract_options! attrs.each do |attr| - unless method_defined?(attr) - define_method attr do - object.send attr - end - end - + define_association_accessor(attr) @_associations[attr] = klass.new(attr, options) end end + + def define_accessor_unless_defined(attr, &block) + return if method_defined?(attr) + define_method(attr, &block) + end + + def define_attribute_accessor(attr) + define_accessor_unless_defined attr do + object.read_attribute_for_serialization(attr) + end + end + + def define_association_accessor(attr) + define_accessor_unless_defined attr do + object.send attr + end + end end def initialize(object, options={})