From e8b983490e6f7a3d78b9ef1941f48a322461b47c Mon Sep 17 00:00:00 2001 From: Pol Miro Date: Sun, 24 Aug 2014 15:28:20 -0700 Subject: [PATCH] Separate associations into multiple files --- lib/active_model/serializer.rb | 2 +- .../{associations.rb => association.rb} | 50 +------------------ .../serializer/association/has_many.rb | 36 +++++++++++++ .../serializer/association/has_one.rb | 22 ++++++++ 4 files changed, 61 insertions(+), 49 deletions(-) rename lib/active_model/serializer/{associations.rb => association.rb} (62%) create mode 100644 lib/active_model/serializer/association/has_many.rb create mode 100644 lib/active_model/serializer/association/has_one.rb diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index e9edf41a..f9c7e0b8 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -1,6 +1,6 @@ require 'active_model/array_serializer' require 'active_model/serializable' -require 'active_model/serializer/associations' +require 'active_model/serializer/association' require 'active_model/serializer/config' require 'thread' diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/association.rb similarity index 62% rename from lib/active_model/serializer/associations.rb rename to lib/active_model/serializer/association.rb index 44d7c84f..cdfe9195 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/association.rb @@ -1,4 +1,6 @@ require 'active_model/default_serializer' +require 'active_model/serializer/association/has_one' +require 'active_model/serializer/association/has_many' module ActiveModel class Serializer @@ -49,54 +51,6 @@ module ActiveModel def build_serializer(object, options = {}) serializer_class(object).new(object, options.merge(self.options)) end - - class HasOne < Association - def initialize(name, *args) - super - @root_key = @embedded_key.to_s.pluralize - @key ||= "#{name}_id" - end - - def serializer_class(object) - serializer_from_options || serializer_from_object(object) || default_serializer - end - - def build_serializer(object, options = {}) - options[:_wrap_in_array] = embed_in_root? - super - end - end - - class HasMany < Association - def initialize(name, *args) - super - @root_key = @embedded_key - @key ||= "#{name.to_s.singularize}_ids" - end - - def serializer_class(object) - if use_array_serializer? - ArraySerializer - else - serializer_from_options - end - end - - def options - if use_array_serializer? - { each_serializer: serializer_from_options }.merge! super - else - super - end - end - - private - - def use_array_serializer? - !serializer_from_options || - serializer_from_options && !(serializer_from_options <= ArraySerializer) - end - end end end end diff --git a/lib/active_model/serializer/association/has_many.rb b/lib/active_model/serializer/association/has_many.rb new file mode 100644 index 00000000..4480afc6 --- /dev/null +++ b/lib/active_model/serializer/association/has_many.rb @@ -0,0 +1,36 @@ +module ActiveModel + class Serializer + class Association + class HasMany < Association + def initialize(name, *args) + super + @root_key = @embedded_key + @key ||= "#{name.to_s.singularize}_ids" + end + + def serializer_class(object) + if use_array_serializer? + ArraySerializer + else + serializer_from_options + end + end + + def options + if use_array_serializer? + { each_serializer: serializer_from_options }.merge! super + else + super + end + end + + private + + def use_array_serializer? + !serializer_from_options || + serializer_from_options && !(serializer_from_options <= ArraySerializer) + end + end + end + end +end \ No newline at end of file diff --git a/lib/active_model/serializer/association/has_one.rb b/lib/active_model/serializer/association/has_one.rb new file mode 100644 index 00000000..4965e428 --- /dev/null +++ b/lib/active_model/serializer/association/has_one.rb @@ -0,0 +1,22 @@ +module ActiveModel + class Serializer + class Association + class HasOne < Association + def initialize(name, *args) + super + @root_key = @embedded_key.to_s.pluralize + @key ||= "#{name}_id" + end + + def serializer_class(object) + serializer_from_options || serializer_from_object(object) || default_serializer + end + + def build_serializer(object, options = {}) + options[:_wrap_in_array] = embed_in_root? + super + end + end + end + end +end \ No newline at end of file