diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 2dc8d843..855e020a 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -129,7 +129,7 @@ module ActiveModel define_include_method attr - self._associations[attr] = klass.refine(attr, options) + self._associations[attr] = [klass, options] end end @@ -217,8 +217,8 @@ module ActiveModel end associations = {} - _associations.each do |attr, association_class| - association = association_class.new(attr, self) + _associations.each do |attr, (association_class, options)| + association = association_class.new(attr, self, options) if model_association = klass.reflect_on_association(association.name) # Real association. @@ -381,8 +381,10 @@ module ActiveModel end end + klass, opts = _associations[name] association_class = - if klass = _associations[name] + if klass + options = opts.merge options klass elsif value.respond_to?(:to_ary) Associations::HasMany diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index 8606b930..35c0dc0e 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -2,34 +2,6 @@ module ActiveModel class Serializer module Associations #:nodoc: class Config #:nodoc: - class_attribute :options - - def self.refine(name, class_options) - current_class = self - - Class.new(self) do - singleton_class.class_eval do - define_method(:to_s) do - "(subclass of #{current_class.name})" - end - - alias inspect to_s - end - - self.options = class_options - - # cache the root so we can reuse it without falling back on a per-instance basis - begin - self.options[:root] ||= self.new(name, nil).root - rescue - # this could fail if it needs a valid source, for example a polymorphic association - end - - end - end - - self.options = {} - def initialize(name, source, options={}) @name = name @source = source @@ -39,8 +11,6 @@ module ActiveModel def option(key, default=nil) if @options.key?(key) @options[key] - elsif self.class.options.key?(key) - self.class.options[key] else default end