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