From 5ac6e626b5570404c1d0aaec823050a1092a55bd Mon Sep 17 00:00:00 2001 From: Marc Love Date: Fri, 25 Oct 2013 15:33:24 -0700 Subject: [PATCH] Reduce complexity and duplication; make accessor definition more explicit --- lib/active_model/serializer.rb | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) 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={})