From b1f7a5ccda1fab89f5a8f93c57d9a76d4055d977 Mon Sep 17 00:00:00 2001 From: Tema Bolshakov Date: Wed, 27 Aug 2014 11:02:39 +0400 Subject: [PATCH] Move Adapter.adapter_for to Serializer.adapter --- lib/action_controller/serialization.rb | 2 +- lib/active_model/serializer.rb | 18 ++++++++++ lib/active_model/serializer/adapter.rb | 18 ---------- test/adapter_test.rb | 49 ------------------------- test/serializers/adapter_for_test.rb | 50 ++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 68 deletions(-) create mode 100644 test/serializers/adapter_for_test.rb diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index 9b80887f..a69109e5 100644 --- a/lib/action_controller/serialization.rb +++ b/lib/action_controller/serialization.rb @@ -12,7 +12,7 @@ module ActionController if serializer # omg hax object = serializer.new(resource) - adapter = ActiveModel::Serializer::Adapter.adapter_for(object) + adapter = ActiveModel::Serializer.adapter.new(object) super(adapter, options) else diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 255665c7..7addc6e6 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -74,6 +74,24 @@ module ActiveModel end end + def self.adapter + adapter_class = case config.adapter + when Symbol + class_name = "ActiveModel::Serializer::Adapter::#{config.adapter.to_s.classify}Adapter" + if Object.const_defined?(class_name) + Object.const_get(class_name) + end + when Class + config.adapter + end + unless adapter_class + valid_adapters = Adapter.constants.map { |klass| ":#{klass.to_s.sub('Adapter', '').downcase}" } + raise ArgumentError, "Unknown adapter: #{config.adapter}. Valid adapters are: #{valid_adapters}" + end + + adapter_class + end + attr_accessor :object def initialize(object) diff --git a/lib/active_model/serializer/adapter.rb b/lib/active_model/serializer/adapter.rb index 5c2b299e..b5fe211c 100644 --- a/lib/active_model/serializer/adapter.rb +++ b/lib/active_model/serializer/adapter.rb @@ -18,24 +18,6 @@ module ActiveModel def to_json(options={}) serializable_hash(options).to_json end - - def self.adapter_for(serializer) - adapter_class = case serializer.config.adapter - when Symbol - class_name = "ActiveModel::Serializer::Adapter::#{serializer.config.adapter.to_s.classify}Adapter" - if Object.const_defined?(class_name) - Object.const_get(class_name) - end - when Class - serializer.config.adapter - end - unless adapter_class - valid_adapters = self.constants.map { |klass| ":#{klass.to_s.sub('Adapter', '').downcase}" } - raise ArgumentError, "Unknown adapter: #{serializer.config.adapter}. Valid adapters are: #{valid_adapters}" - end - - adapter_class.new(serializer) - end end end end diff --git a/test/adapter_test.rb b/test/adapter_test.rb index e3d3eb82..737e0c4e 100644 --- a/test/adapter_test.rb +++ b/test/adapter_test.rb @@ -19,54 +19,5 @@ module ActiveModel assert_equal @serializer, @adapter.serializer end end - - class AdapterForTest < Minitest::Test - def setup - profile = Profile.new - @serializer = ProfileSerializer.new(profile) - @previous_adapter = ActiveModel::Serializer.config.adapter - end - - def teardown - ActiveModel::Serializer.config.adapter = @previous_adapter - end - - def test_returns_default_adapter - adapter = Adapter.adapter_for(@serializer) - assert_kind_of ActiveModel::Serializer::Adapter::SimpleAdapter, adapter - end - - def test_overwrite_adapter_with_symbol - ActiveModel::Serializer.config.adapter = :null - - adapter = Adapter.adapter_for(@serializer) - assert_kind_of ActiveModel::Serializer::Adapter::NullAdapter, adapter - ensure - - end - - def test_overwrite_adapter_with_class - ActiveModel::Serializer.config.adapter = ActiveModel::Serializer::Adapter::NullAdapter - - adapter = Adapter.adapter_for(@serializer) - assert_kind_of ActiveModel::Serializer::Adapter::NullAdapter, adapter - end - - def test_raises_exception_if_invalid_symbol_given - ActiveModel::Serializer.config.adapter = :unknown - - assert_raises ArgumentError do - Adapter.adapter_for(@serializer) - end - end - - def test_raises_exception_if_it_does_not_know_hot_to_infer_adapter - ActiveModel::Serializer.config.adapter = 42 - - assert_raises ArgumentError do - Adapter.adapter_for(@serializer) - end - end - end end end diff --git a/test/serializers/adapter_for_test.rb b/test/serializers/adapter_for_test.rb new file mode 100644 index 00000000..668dd6b0 --- /dev/null +++ b/test/serializers/adapter_for_test.rb @@ -0,0 +1,50 @@ +module ActiveModel + class Serializer + class AdapterForTest < Minitest::Test + def setup + @previous_adapter = ActiveModel::Serializer.config.adapter + end + + def teardown + ActiveModel::Serializer.config.adapter = @previous_adapter + end + + def test_returns_default_adapter + adapter = ActiveModel::Serializer.adapter + assert_equal ActiveModel::Serializer::Adapter::SimpleAdapter, adapter + end + + def test_overwrite_adapter_with_symbol + ActiveModel::Serializer.config.adapter = :null + + adapter = ActiveModel::Serializer.adapter + assert_equal ActiveModel::Serializer::Adapter::NullAdapter, adapter + ensure + + end + + def test_overwrite_adapter_with_class + ActiveModel::Serializer.config.adapter = ActiveModel::Serializer::Adapter::NullAdapter + + adapter = ActiveModel::Serializer.adapter + assert_equal ActiveModel::Serializer::Adapter::NullAdapter, adapter + end + + def test_raises_exception_if_invalid_symbol_given + ActiveModel::Serializer.config.adapter = :unknown + + assert_raises ArgumentError do + ActiveModel::Serializer.adapter + end + end + + def test_raises_exception_if_it_does_not_know_hot_to_infer_adapter + ActiveModel::Serializer.config.adapter = 42 + + assert_raises ArgumentError do + ActiveModel::Serializer.adapter + end + end + end + end +end