From 3dd422d99e8c57f113880da34f6abe583c4dadf9 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Thu, 16 May 2013 16:51:56 -0700 Subject: [PATCH] AMS::Associations::Base is now AMS::Association. HasMany and HasOne inherits from it. --- lib/active_model/serializer.rb | 8 +- lib/active_model/serializer/associations.rb | 134 ++++++++++---------- 2 files changed, 70 insertions(+), 72 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 3468a09db..c4477fb1e 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -152,7 +152,7 @@ def define_include_method(name) # with the association name does not exist, the association name is # dispatched to the serialized object. def has_many(*attrs) - associate(Associations::HasMany, attrs) + associate(Association::HasMany, attrs) end # Defines an association in the object should be rendered. @@ -162,7 +162,7 @@ def has_many(*attrs) # with the association name does not exist, the association name is # dispatched to the serialized object. def has_one(*attrs) - associate(Associations::HasOne, attrs) + associate(Association::HasOne, attrs) end # Return a schema hash for the current serializer. This information @@ -372,9 +372,9 @@ def include!(name, options={}) options = klass_options.merge options klass elsif value.respond_to?(:to_ary) - Associations::HasMany + Association::HasMany else - Associations::HasOne + Association::HasOne end options = default_embed_options.merge!(options) diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index cb3cb005c..63760d41c 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -1,79 +1,77 @@ module ActiveModel class Serializer - module Associations #:nodoc: - class Base #:nodoc: - # name: The name of the association. - # - # options: A hash. These keys are accepted: - # - # value: The object we're associating with. - # - # serializer: The class used to serialize the association. - # - # embed: Define how associations should be embedded. - # - :objects # Embed associations as full objects. - # - :ids # Embed only the association ids. - # - :ids, :include => true # Embed the association ids and include objects in the root. - # - # include: Used in conjunction with embed :ids. Includes the objects in the root. - # - # root: Used in conjunction with include: true. Defines the key used to embed the objects. - # - # key: Key name used to store the ids in. - # - # embed_key: Method used to fetch ids. Defaults to :id. - # - # polymorphic: Is the association is polymorphic?. Values: true or false. - def initialize(name, options={}, serializer_options={}) - @name = name - @object = options[:value] - - embed = options[:embed] - @embed_ids = embed == :id || embed == :ids - @embed_objects = embed == :object || embed == :objects - @embed_key = options[:embed_key] || :id - @embed_in_root = options[:include] - - serializer = options[:serializer] - @serializer = serializer.is_a?(String) ? serializer.constantize : serializer - - @options = options - @serializer_options = serializer_options - end - - attr_reader :object, :root, :name, :embed_ids, :embed_objects, :embed_in_root - alias embeddable? object - alias embed_objects? embed_objects - alias embed_ids? embed_ids - alias use_id_key? embed_ids? - alias embed_in_root? embed_in_root - - def key - if key = options[:key] - key - elsif use_id_key? - id_key - else - name - end + class Association #:nodoc: + # name: The name of the association. + # + # options: A hash. These keys are accepted: + # + # value: The object we're associating with. + # + # serializer: The class used to serialize the association. + # + # embed: Define how associations should be embedded. + # - :objects # Embed associations as full objects. + # - :ids # Embed only the association ids. + # - :ids, :include => true # Embed the association ids and include objects in the root. + # + # include: Used in conjunction with embed :ids. Includes the objects in the root. + # + # root: Used in conjunction with include: true. Defines the key used to embed the objects. + # + # key: Key name used to store the ids in. + # + # embed_key: Method used to fetch ids. Defaults to :id. + # + # polymorphic: Is the association is polymorphic?. Values: true or false. + def initialize(name, options={}, serializer_options={}) + @name = name + @object = options[:value] + + embed = options[:embed] + @embed_ids = embed == :id || embed == :ids + @embed_objects = embed == :object || embed == :objects + @embed_key = options[:embed_key] || :id + @embed_in_root = options[:include] + + serializer = options[:serializer] + @serializer = serializer.is_a?(String) ? serializer.constantize : serializer + + @options = options + @serializer_options = serializer_options + end + + attr_reader :object, :root, :name, :embed_ids, :embed_objects, :embed_in_root + alias embeddable? object + alias embed_objects? embed_objects + alias embed_ids? embed_ids + alias use_id_key? embed_ids? + alias embed_in_root? embed_in_root + + def key + if key = options[:key] + key + elsif use_id_key? + id_key + else + name end + end - private + private - attr_reader :embed_key, :serializer, :options, :serializer_options + attr_reader :embed_key, :serializer, :options, :serializer_options - def find_serializable(object) - if serializer - serializer.new(object, serializer_options) - elsif object.respond_to?(:active_model_serializer) && (ams = object.active_model_serializer) - ams.new(object, serializer_options) - else - object - end + def find_serializable(object) + if serializer + serializer.new(object, serializer_options) + elsif object.respond_to?(:active_model_serializer) && (ams = object.active_model_serializer) + ams.new(object, serializer_options) + else + object end end - class HasMany < Base #:nodoc: + class HasMany < Association #:nodoc: def root options[:root] || name end @@ -101,7 +99,7 @@ def serialize_ids end end - class HasOne < Base #:nodoc: + class HasOne < Association #:nodoc: def initialize(name, options={}, serializer_options={}) super @polymorphic = options[:polymorphic]