diff --git a/lib/action_controller/serialization.rb b/lib/action_controller/serialization.rb index d51aba0f..f5d13287 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::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 c06c58a0..255665c7 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -3,6 +3,7 @@ module ActiveModel 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 00000000..e35c4595 --- /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 7ef77f21..90749307 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 f7774290..894ca869 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 b50e9e12..e0374026 100644 --- a/test/adapters/null_adapter_test.rb +++ b/test/adapter/simple_adapter_test.rb @@ -3,15 +3,15 @@ require 'test_helper' 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 00000000..f9a78773 --- /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