mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
Introduce Adapter::Base
Breaking change: - Adapters now inherit Adapter::Base - 'Adapter' is now a module, no longer a class Why? - using a class as a namespace that you also inherit from is complicated and circular at time i.e. buggy (see https://github.com/rails-api/active_model_serializers/pull/1177) - The class methods on Adapter aren't necessarily related to the instance methods, they're more Adapter functions - named `Base` because it's a Rails-ism - It helps to isolate and highlight what the Adapter interface actually is
This commit is contained in:
parent
7cf0e93d03
commit
19de5f7722
14
CHANGELOG.md
14
CHANGELOG.md
@ -1,5 +1,15 @@
|
|||||||
### 0.10.0
|
### 0.10.0
|
||||||
|
|
||||||
|
Breaking changes:
|
||||||
|
* Adapters now inherit Adapter::Base. 'Adapter' is now a module, no longer a class. [@bf4], #1138
|
||||||
|
* using a class as a namespace that you also inherit from is complicated and circular at time i.e.
|
||||||
|
buggy (see https://github.com/rails-api/active_model_serializers/pull/1177)
|
||||||
|
* The class methods on Adapter aren't necessarily related to the instance methods, they're more
|
||||||
|
Adapter functions
|
||||||
|
* named `Base` because it's a Rails-ism
|
||||||
|
* It helps to isolate and highlight what the Adapter interface actually is
|
||||||
|
|
||||||
|
Features:
|
||||||
* adds adapters pattern
|
* adds adapters pattern
|
||||||
* adds support for `meta` and `meta_key` [@kurko]
|
* adds support for `meta` and `meta_key` [@kurko]
|
||||||
* adds method to override association [@kurko]
|
* adds method to override association [@kurko]
|
||||||
@ -12,3 +22,7 @@
|
|||||||
* adds FlattenJSON as default adapter [@joaomdmoura]
|
* adds FlattenJSON as default adapter [@joaomdmoura]
|
||||||
* adds support for `pagination links` at top level of JsonApi adapter [@bacarini]
|
* adds support for `pagination links` at top level of JsonApi adapter [@bacarini]
|
||||||
* adds extended format for `include` option to JsonApi adapter [@beauby]
|
* adds extended format for `include` option to JsonApi adapter [@beauby]
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
|
||||||
|
Misc:
|
||||||
|
|||||||
@ -1,26 +1,30 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
UnknownAdapterError = Class.new(ArgumentError)
|
UnknownAdapterError = Class.new(ArgumentError)
|
||||||
ADAPTER_MAP = {}
|
ADAPTER_MAP = {}
|
||||||
private_constant :ADAPTER_MAP if defined?(private_constant)
|
private_constant :ADAPTER_MAP if defined?(private_constant)
|
||||||
require 'active_model/serializer/adapter/fragment_cache'
|
require 'active_model/serializer/adapter/fragment_cache'
|
||||||
require 'active_model/serializer/adapter/cached_serializer'
|
require 'active_model/serializer/adapter/cached_serializer'
|
||||||
|
|
||||||
def self.create(resource, options = {})
|
class << self # All methods are class functions
|
||||||
|
def new(*args)
|
||||||
|
fail ArgumentError, 'Adapters inherit from Adapter::Base.' \
|
||||||
|
"Adapter.new called with args: '#{args.inspect}', from" \
|
||||||
|
"'caller[0]'."
|
||||||
|
end
|
||||||
|
|
||||||
|
def create(resource, options = {})
|
||||||
override = options.delete(:adapter)
|
override = options.delete(:adapter)
|
||||||
klass = override ? adapter_class(override) : ActiveModel::Serializer.adapter
|
klass = override ? adapter_class(override) : ActiveModel::Serializer.adapter
|
||||||
klass.new(resource, options)
|
klass.new(resource, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
# @see ActiveModel::Serializer::Adapter.lookup
|
# @see ActiveModel::Serializer::Adapter.lookup
|
||||||
def self.adapter_class(adapter)
|
def adapter_class(adapter)
|
||||||
ActiveModel::Serializer::Adapter.lookup(adapter)
|
ActiveModel::Serializer::Adapter.lookup(adapter)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Only the Adapter class has these methods.
|
|
||||||
# None of the sublasses have them.
|
|
||||||
class << ActiveModel::Serializer::Adapter
|
|
||||||
# @return Hash<adapter_name, adapter_class>
|
# @return Hash<adapter_name, adapter_class>
|
||||||
def adapter_map
|
def adapter_map
|
||||||
ADAPTER_MAP
|
ADAPTER_MAP
|
||||||
@ -76,58 +80,8 @@ module ActiveModel
|
|||||||
private :find_by_name
|
private :find_by_name
|
||||||
end
|
end
|
||||||
|
|
||||||
# Automatically register adapters when subclassing
|
|
||||||
def self.inherited(subclass)
|
|
||||||
ActiveModel::Serializer::Adapter.register(subclass)
|
|
||||||
end
|
|
||||||
|
|
||||||
attr_reader :serializer, :instance_options
|
|
||||||
|
|
||||||
def initialize(serializer, options = {})
|
|
||||||
@serializer = serializer
|
|
||||||
@instance_options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def serializable_hash(options = nil)
|
|
||||||
raise NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.'
|
|
||||||
end
|
|
||||||
|
|
||||||
def as_json(options = nil)
|
|
||||||
hash = serializable_hash(options)
|
|
||||||
include_meta(hash)
|
|
||||||
hash
|
|
||||||
end
|
|
||||||
|
|
||||||
def fragment_cache(*args)
|
|
||||||
raise NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.'
|
|
||||||
end
|
|
||||||
|
|
||||||
def cache_check(serializer)
|
|
||||||
CachedSerializer.new(serializer).cache_check(self) do
|
|
||||||
yield
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def meta
|
|
||||||
serializer.meta if serializer.respond_to?(:meta)
|
|
||||||
end
|
|
||||||
|
|
||||||
def meta_key
|
|
||||||
serializer.meta_key || 'meta'.freeze
|
|
||||||
end
|
|
||||||
|
|
||||||
def root
|
|
||||||
serializer.json_key.to_sym if serializer.json_key
|
|
||||||
end
|
|
||||||
|
|
||||||
def include_meta(json)
|
|
||||||
json[meta_key] = meta if meta
|
|
||||||
json
|
|
||||||
end
|
|
||||||
|
|
||||||
# Gotta be at the bottom to use the code above it :(
|
# Gotta be at the bottom to use the code above it :(
|
||||||
|
require 'active_model/serializer/adapter/base'
|
||||||
require 'active_model/serializer/adapter/null'
|
require 'active_model/serializer/adapter/null'
|
||||||
require 'active_model/serializer/adapter/attributes'
|
require 'active_model/serializer/adapter/attributes'
|
||||||
require 'active_model/serializer/adapter/json'
|
require 'active_model/serializer/adapter/json'
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class Attributes < Adapter
|
class Attributes < Base
|
||||||
def serializable_hash(options = nil)
|
def serializable_hash(options = nil)
|
||||||
options ||= {}
|
options ||= {}
|
||||||
if serializer.respond_to?(:each)
|
if serializer.respond_to?(:each)
|
||||||
|
|||||||
58
lib/active_model/serializer/adapter/base.rb
Normal file
58
lib/active_model/serializer/adapter/base.rb
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
module ActiveModel
|
||||||
|
class Serializer
|
||||||
|
module Adapter
|
||||||
|
class Base
|
||||||
|
# Automatically register adapters when subclassing
|
||||||
|
def self.inherited(subclass)
|
||||||
|
ActiveModel::Serializer::Adapter.register(subclass)
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_reader :serializer, :instance_options
|
||||||
|
|
||||||
|
def initialize(serializer, options = {})
|
||||||
|
@serializer = serializer
|
||||||
|
@instance_options = options
|
||||||
|
end
|
||||||
|
|
||||||
|
def serializable_hash(_options = nil)
|
||||||
|
fail NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.'
|
||||||
|
end
|
||||||
|
|
||||||
|
def as_json(options = nil)
|
||||||
|
hash = serializable_hash(options)
|
||||||
|
include_meta(hash)
|
||||||
|
hash
|
||||||
|
end
|
||||||
|
|
||||||
|
def fragment_cache(*_args)
|
||||||
|
fail NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.'
|
||||||
|
end
|
||||||
|
|
||||||
|
def cache_check(serializer)
|
||||||
|
CachedSerializer.new(serializer).cache_check(self) do
|
||||||
|
yield
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def meta
|
||||||
|
serializer.meta if serializer.respond_to?(:meta)
|
||||||
|
end
|
||||||
|
|
||||||
|
def meta_key
|
||||||
|
serializer.meta_key || 'meta'.freeze
|
||||||
|
end
|
||||||
|
|
||||||
|
def root
|
||||||
|
serializer.json_key.to_sym if serializer.json_key
|
||||||
|
end
|
||||||
|
|
||||||
|
def include_meta(json)
|
||||||
|
json[meta_key] = meta if meta
|
||||||
|
json
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -1,6 +1,6 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class CachedSerializer
|
class CachedSerializer
|
||||||
def initialize(serializer)
|
def initialize(serializer)
|
||||||
@cached_serializer = serializer
|
@cached_serializer = serializer
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class FragmentCache
|
class FragmentCache
|
||||||
attr_reader :serializer
|
attr_reader :serializer
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class Json < Adapter
|
class Json < Base
|
||||||
extend ActiveSupport::Autoload
|
extend ActiveSupport::Autoload
|
||||||
autoload :FragmentCache
|
autoload :FragmentCache
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class Json
|
class Json
|
||||||
class FragmentCache
|
class FragmentCache
|
||||||
def fragment_cache(cached_hash, non_cached_hash)
|
def fragment_cache(cached_hash, non_cached_hash)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi < Adapter
|
class JsonApi < Base
|
||||||
extend ActiveSupport::Autoload
|
extend ActiveSupport::Autoload
|
||||||
autoload :PaginationLinks
|
autoload :PaginationLinks
|
||||||
autoload :FragmentCache
|
autoload :FragmentCache
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class FragmentCache
|
class FragmentCache
|
||||||
def fragment_cache(root, cached_hash, non_cached_hash)
|
def fragment_cache(root, cached_hash, non_cached_hash)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi < Adapter
|
class JsonApi < Base
|
||||||
class PaginationLinks
|
class PaginationLinks
|
||||||
FIRST_PAGE = 1
|
FIRST_PAGE = 1
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class Null < Adapter
|
class Null < Base
|
||||||
def serializable_hash(options = nil)
|
def serializable_hash(options = nil)
|
||||||
{}
|
{}
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class FragmentCacheTest < Minitest::Test
|
class FragmentCacheTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
@spam = Spam::UnrelatedLink.new(id: 'spam-id-1')
|
@spam = Spam::UnrelatedLink.new(id: 'spam-id-1')
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class Json
|
class Json
|
||||||
class BelongsToTest < Minitest::Test
|
class BelongsToTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class Json
|
class Json
|
||||||
class Collection < Minitest::Test
|
class Collection < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class Json
|
class Json
|
||||||
class HasManyTestTest < Minitest::Test
|
class HasManyTestTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class BelongsToTest < Minitest::Test
|
class BelongsToTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class CollectionTest < Minitest::Test
|
class CollectionTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class HasManyEmbedIdsTest < Minitest::Test
|
class HasManyEmbedIdsTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
# Test 'has_many :assocs, serializer: AssocXSerializer'
|
# Test 'has_many :assocs, serializer: AssocXSerializer'
|
||||||
class HasManyExplicitSerializerTest < Minitest::Test
|
class HasManyExplicitSerializerTest < Minitest::Test
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class HasManyTest < Minitest::Test
|
class HasManyTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class HasOneTest < Minitest::Test
|
class HasOneTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApiTest < Minitest::Test
|
class JsonApiTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
ActionController::Base.cache_store.clear
|
ActionController::Base.cache_store.clear
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class LinkedTest < Minitest::Test
|
class LinkedTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -6,7 +6,7 @@ require 'kaminari/hooks'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class PaginationLinksTest < Minitest::Test
|
class PaginationLinksTest < Minitest::Test
|
||||||
URI = 'http://example.com'
|
URI = 'http://example.com'
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonApi
|
class JsonApi
|
||||||
class ResourceTypeConfigTest < Minitest::Test
|
class ResourceTypeConfigTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class JsonTest < Minitest::Test
|
class JsonTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
ActionController::Base.cache_store.clear
|
ActionController::Base.cache_store.clear
|
||||||
|
|||||||
@ -2,7 +2,7 @@ require 'test_helper'
|
|||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
class Adapter
|
module Adapter
|
||||||
class NullTest < Minitest::Test
|
class NullTest < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
||||||
|
|||||||
@ -6,7 +6,7 @@ module ActiveModel
|
|||||||
def setup
|
def setup
|
||||||
profile = Profile.new
|
profile = Profile.new
|
||||||
@serializer = ProfileSerializer.new(profile)
|
@serializer = ProfileSerializer.new(profile)
|
||||||
@adapter = ActiveModel::Serializer::Adapter.new(@serializer)
|
@adapter = ActiveModel::Serializer::Adapter::Base.new(@serializer)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_serializable_hash_is_abstract_method
|
def test_serializable_hash_is_abstract_method
|
||||||
|
|||||||
@ -127,7 +127,7 @@ module ActiveModel
|
|||||||
def test_inherited_adapter_hooks_register_adapter
|
def test_inherited_adapter_hooks_register_adapter
|
||||||
Object.const_set(:MyAdapter, Class.new)
|
Object.const_set(:MyAdapter, Class.new)
|
||||||
my_adapter = MyAdapter
|
my_adapter = MyAdapter
|
||||||
ActiveModel::Serializer::Adapter.inherited(my_adapter)
|
ActiveModel::Serializer::Adapter::Base.inherited(my_adapter)
|
||||||
assert_equal ActiveModel::Serializer::Adapter.lookup(:my_adapter), my_adapter
|
assert_equal ActiveModel::Serializer::Adapter.lookup(:my_adapter), my_adapter
|
||||||
ensure
|
ensure
|
||||||
ActiveModel::Serializer::Adapter.adapter_map.delete('my_adapter'.freeze)
|
ActiveModel::Serializer::Adapter.adapter_map.delete('my_adapter'.freeze)
|
||||||
@ -138,7 +138,7 @@ module ActiveModel
|
|||||||
Object.const_set(:MyNamespace, Module.new)
|
Object.const_set(:MyNamespace, Module.new)
|
||||||
MyNamespace.const_set(:MyAdapter, Class.new)
|
MyNamespace.const_set(:MyAdapter, Class.new)
|
||||||
my_adapter = MyNamespace::MyAdapter
|
my_adapter = MyNamespace::MyAdapter
|
||||||
ActiveModel::Serializer::Adapter.inherited(my_adapter)
|
ActiveModel::Serializer::Adapter::Base.inherited(my_adapter)
|
||||||
assert_equal ActiveModel::Serializer::Adapter.lookup(:'my_namespace/my_adapter'), my_adapter
|
assert_equal ActiveModel::Serializer::Adapter.lookup(:'my_namespace/my_adapter'), my_adapter
|
||||||
ensure
|
ensure
|
||||||
ActiveModel::Serializer::Adapter.adapter_map.delete('my_namespace/my_adapter'.freeze)
|
ActiveModel::Serializer::Adapter.adapter_map.delete('my_namespace/my_adapter'.freeze)
|
||||||
@ -151,8 +151,8 @@ module ActiveModel
|
|||||||
my_adapter = MyAdapter
|
my_adapter = MyAdapter
|
||||||
Object.const_set(:MySubclassedAdapter, Class.new(MyAdapter))
|
Object.const_set(:MySubclassedAdapter, Class.new(MyAdapter))
|
||||||
my_subclassed_adapter = MySubclassedAdapter
|
my_subclassed_adapter = MySubclassedAdapter
|
||||||
ActiveModel::Serializer::Adapter.inherited(my_adapter)
|
ActiveModel::Serializer::Adapter::Base.inherited(my_adapter)
|
||||||
ActiveModel::Serializer::Adapter.inherited(my_subclassed_adapter)
|
ActiveModel::Serializer::Adapter::Base.inherited(my_subclassed_adapter)
|
||||||
assert_equal ActiveModel::Serializer::Adapter.lookup(:my_adapter), my_adapter
|
assert_equal ActiveModel::Serializer::Adapter.lookup(:my_adapter), my_adapter
|
||||||
assert_equal ActiveModel::Serializer::Adapter.lookup(:my_subclassed_adapter), my_subclassed_adapter
|
assert_equal ActiveModel::Serializer::Adapter.lookup(:my_subclassed_adapter), my_subclassed_adapter
|
||||||
ensure
|
ensure
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user