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