From f00fe5595ddf741dc26127ed8fe81adad833ead5 Mon Sep 17 00:00:00 2001 From: Tema Bolshakov <abolshakov@spbtv.com> Date: Wed, 27 Aug 2014 08:17:36 +0400 Subject: [PATCH] * Rename NullAdapter to SimpleAdapter * Introduce abstract Adapter class * Organaze test structure to match convemtions --- lib/action_controller/serialization.rb | 2 +- lib/active_model/serializer.rb | 1 + lib/active_model/serializer/adapter.rb | 20 +++++++++++++++ .../{null_adapter.rb => simple_adapter.rb} | 6 +---- lib/active_model_serializers.rb | 2 +- .../simple_adapter_test.rb} | 6 ++--- test/adapter_test.rb | 25 +++++++++++++++++++ 7 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 lib/active_model/serializer/adapter.rb rename lib/active_model/serializer/adapter/{null_adapter.rb => simple_adapter.rb} (72%) rename test/{adapters/null_adapter_test.rb => adapter/simple_adapter_test.rb} (76%) create mode 100644 test/adapter_test.rb diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index d51aba0f3..f5d13287e 100644 --- a/lib/action_controller/serialization.rb +++ b/lib/action_controller/serialization.rb @@ -12,7 +12,7 @@ def _render_option_json(resource, options) if serializer # omg hax object = serializer.new(resource) - adapter = ActiveModel::Serializer::Adapter::NullAdapter.new(object) + adapter = ActiveModel::Serializer::Adapter::SimpleAdapter.new(object) super(adapter, options) else diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index c06c58a0e..255665c70 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -3,6 +3,7 @@ class Serializer extend ActiveSupport::Autoload autoload :Configuration autoload :ArraySerializer + autoload :Adapter include Configuration class << self diff --git a/lib/active_model/serializer/adapter.rb b/lib/active_model/serializer/adapter.rb new file mode 100644 index 000000000..e35c4595e --- /dev/null +++ b/lib/active_model/serializer/adapter.rb @@ -0,0 +1,20 @@ +module ActiveModel + class Serializer + class Adapter + extend ActiveSupport::Autoload + autoload :SimpleAdapter + + def initialize(serializer) + @attributes = serializer.attributes + end + + def serializable_hash(options = {}) + raise NotImplementedError, 'This is abstract method. Should be implemented at concrete adapter.' + end + + def to_json(options = {}) + raise NotImplementedError, 'This is abstract method. Should be implemented at concrete adapter.' + end + end + end +end diff --git a/lib/active_model/serializer/adapter/null_adapter.rb b/lib/active_model/serializer/adapter/simple_adapter.rb similarity index 72% rename from lib/active_model/serializer/adapter/null_adapter.rb rename to lib/active_model/serializer/adapter/simple_adapter.rb index 7ef77f21b..907493071 100644 --- a/lib/active_model/serializer/adapter/null_adapter.rb +++ b/lib/active_model/serializer/adapter/simple_adapter.rb @@ -1,11 +1,7 @@ module ActiveModel class Serializer class Adapter - class NullAdapter - def initialize(adapter) - @attributes = adapter.attributes - end - + class SimpleAdapter < Adapter def to_json(options={}) @attributes.each_with_object({}) do |(attr, value), h| h[attr] = value diff --git a/lib/active_model_serializers.rb b/lib/active_model_serializers.rb index f77742900..894ca8695 100644 --- a/lib/active_model_serializers.rb +++ b/lib/active_model_serializers.rb @@ -1,7 +1,7 @@ require "active_model" require "active_model/serializer/version" require "active_model/serializer" -require "active_model/serializer/adapter/null_adapter" +require "active_model/serializer/adapter/simple_adapter" begin require 'action_controller' diff --git a/test/adapters/null_adapter_test.rb b/test/adapter/simple_adapter_test.rb similarity index 76% rename from test/adapters/null_adapter_test.rb rename to test/adapter/simple_adapter_test.rb index b50e9e126..e03740269 100644 --- a/test/adapters/null_adapter_test.rb +++ b/test/adapter/simple_adapter_test.rb @@ -3,15 +3,15 @@ module ActiveModel class Serializer class Adapter - class NullAdapterTest < Minitest::Test + class SimpleAdapterTest < Minitest::Test def setup @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }) @profile_serializer = ProfileSerializer.new(@profile) - @adapter = NullAdapter.new(@profile_serializer) + @adapter = SimpleAdapter.new(@profile_serializer) end - def test_null_adapter + def test_simple_adapter assert_equal('{"name":"Name 1","description":"Description 1"}', @adapter.to_json) diff --git a/test/adapter_test.rb b/test/adapter_test.rb new file mode 100644 index 000000000..f9a787731 --- /dev/null +++ b/test/adapter_test.rb @@ -0,0 +1,25 @@ +require 'test_helper' + +module ActiveModel + class Serializer + class AdapterTest < Minitest::Test + def setup + profile = Profile.new + serializer = ProfileSerializer.new(profile) + @adapter = ActiveModel::Serializer::Adapter.new(serializer) + end + + def test_serializable_hash_is_abstract_method + assert_raises(NotImplementedError) do + @adapter.serializable_hash(only: [:name]) + end + end + + def test_serializable_hash_is_abstract_method + assert_raises(NotImplementedError) do + @adapter.to_json(only: [:name]) + end + end + end + end +end