diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index a7af3235..2b782152 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -1,6 +1,7 @@ require 'active_model/array_serializer' require 'active_model/serializable' require 'active_model/serializer/associations' +require 'active_model/serializer/settings' module ActiveModel class Serializer @@ -12,6 +13,10 @@ module ActiveModel base._associations = [] end + def setup + yield SETTINGS + end + def serializer_for(resource) if resource.respond_to?(:to_ary) ArraySerializer diff --git a/lib/active_model/serializer/settings.rb b/lib/active_model/serializer/settings.rb new file mode 100644 index 00000000..4a3e7c9d --- /dev/null +++ b/lib/active_model/serializer/settings.rb @@ -0,0 +1,27 @@ +module ActiveModel + class Serializer + class Settings + def initialize + @data = {} + end + + def [](key) + @data[key.to_s] + end + + def []=(key, value) + @data[key.to_s] = value + end + + def each(&block) + @data.each(&block) + end + + def clear + @data.clear + end + end + + SETTINGS = Settings.new + end +end diff --git a/test/unit/active_model/serializer/settings_test.rb b/test/unit/active_model/serializer/settings_test.rb new file mode 100644 index 00000000..abd5531b --- /dev/null +++ b/test/unit/active_model/serializer/settings_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +module ActiveModel + class Serializer + class Settings + class Test < ActiveModel::TestCase + def test_settings_const_is_an_instance_of_settings + assert_kind_of Settings, SETTINGS + end + + def test_settings_instance + settings = Settings.new + settings[:setting1] = 'value1' + + assert_equal 'value1', settings[:setting1] + end + + def test_each_settings + settings = Settings.new + settings['setting1'] = 'value1' + settings['setting2'] = 'value2' + + actual = {} + + settings.each do |k, v| + actual[k] = v + end + + assert_equal({ 'setting1' => 'value1', 'setting2' => 'value2' }, actual) + + end + end + + class SetupTest < ActiveModel::TestCase + def test_setup + ActiveModel::Serializer.setup do |settings| + settings[:a] = 'v1' + settings[:b] = 'v2' + end + + assert_equal 'v1', SETTINGS[:a] + assert_equal 'v2', SETTINGS[:b] + ensure + SETTINGS.clear + end + end + end + end +end