Avoid Configuration inheritance

This commit is contained in:
Santiago Pastorino 2014-01-16 13:47:42 -02:00
parent 1a26a089d5
commit ada072f316
2 changed files with 31 additions and 11 deletions

View File

@ -4,7 +4,13 @@ module ActiveModel
class Serializer class Serializer
class Configuration class Configuration
class << self class << self
def valid_options
@valid_options ||= []
end
def options(*names) def options(*names)
valid_options.concat names
names.each do |name| names.each do |name|
attr_writer name attr_writer name
@ -54,15 +60,27 @@ module ActiveModel
end end
end end
class GlobalConfiguration < SerializerConfiguration class GlobalConfiguration < Configuration
include Singleton include Singleton
options :root, :embed, :embed_in_root
def initialize def initialize
super nil super nil
end end
def default_options
{ embed: :objects }
end
end
class ClassConfiguration < Configuration
options :root, :embed, :embed_in_root
def default_options
{ embed: :objects }
end end
class ClassConfiguration < SerializerConfiguration
def embed_objects=(value) def embed_objects=(value)
@embed = :objects if value @embed = :objects if value
end end
@ -80,16 +98,22 @@ module ActiveModel
end end
end end
class InstanceConfiguration < ClassConfiguration class InstanceConfiguration < Configuration
options :scope, :meta, :meta_key, :wrap_in_array, :serializer, :prefixes, :template, :layout options :root, :embed, :embed_in_root, :scope, :meta, :meta_key, :wrap_in_array,
:serializer, :prefixes, :template, :layout
def default_options def default_options
super.merge! meta_key: :meta { embed: :objects, meta_key: :meta }
end end
end end
class ArrayConfiguration < InstanceConfiguration class ArrayConfiguration < Configuration
options :each_serializer, :resource_name options :root, :embed, :embed_in_root, :scope, :meta, :meta_key, :wrap_in_array,
:serializer, :prefixes, :template, :layout, :each_serializer, :resource_name
def default_options
{ embed: :objects, meta_key: :meta }
end
end end
end end
end end

View File

@ -116,10 +116,6 @@ module ActiveModel
@configuration = InstanceConfiguration.new nil, scope: :current_user @configuration = InstanceConfiguration.new nil, scope: :current_user
end end
def test_configuration_inherits_from_base_class
assert_kind_of ClassConfiguration, @configuration
end
def test_configuration_has_root_option def test_configuration_has_root_option
assert_equal :current_user, @configuration.scope assert_equal :current_user, @configuration.scope
end end