Skip to content

Commit 701eb17

Browse files
committed
Merge pull request #1172 from bf4/better_adapter_registration
Better serializer registration, get more than just the first module
2 parents e0a0ad3 + eb1264a commit 701eb17

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

lib/active_model/serializer/adapter.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@ def adapters
3838

3939
# Adds an adapter 'klass' with 'name' to the 'adapter_map'
4040
# Names are stringified and underscored
41-
# @param [Symbol, String] name of the registered adapter
42-
# @param [Class] klass - adapter class itself
41+
# @param name [Symbol, String, Class] name of the registered adapter
42+
# @param klass [Class] adapter class itself, optional if name is the class
4343
# @example
4444
# AMS::Adapter.register(:my_adapter, MyAdapter)
45-
def register(name, klass)
46-
adapter_map.update(name.to_s.underscore => klass)
45+
# @note The registered name strips out 'ActiveModel::Serializer::Adapter::'
46+
# so that registering 'ActiveModel::Serializer::Adapter::Json' and
47+
# 'Json' will both register as 'json'.
48+
def register(name, klass = name)
49+
name = name.to_s.gsub(/\AActiveModel::Serializer::Adapter::/, ''.freeze)
50+
adapter_map.update(name.underscore => klass)
4751
self
4852
end
4953

@@ -78,7 +82,7 @@ def find_by_name(adapter_name)
7882

7983
# Automatically register adapters when subclassing
8084
def self.inherited(subclass)
81-
ActiveModel::Serializer::Adapter.register(subclass.to_s.demodulize, subclass)
85+
ActiveModel::Serializer::Adapter.register(subclass)
8286
end
8387

8488
attr_reader :serializer, :instance_options

test/serializers/adapter_for_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,14 @@ def test_inherited_adapter_hooks_register_adapter
138138
Object.send(:remove_const, :MyAdapter)
139139
end
140140

141-
def test_inherited_adapter_hooks_register_demodulized_adapter
141+
def test_inherited_adapter_hooks_register_namespaced_adapter
142142
Object.const_set(:MyNamespace, Module.new)
143143
MyNamespace.const_set(:MyAdapter, Class.new)
144144
my_adapter = MyNamespace::MyAdapter
145145
ActiveModel::Serializer::Adapter.inherited(my_adapter)
146-
assert_equal ActiveModel::Serializer::Adapter.lookup(:my_adapter), my_adapter
146+
assert_equal ActiveModel::Serializer::Adapter.lookup(:'my_namespace/my_adapter'), my_adapter
147147
ensure
148-
ActiveModel::Serializer::Adapter.adapter_map.delete('my_adapter'.freeze)
148+
ActiveModel::Serializer::Adapter.adapter_map.delete('my_namespace/my_adapter'.freeze)
149149
MyNamespace.send(:remove_const, :MyAdapter)
150150
Object.send(:remove_const, :MyNamespace)
151151
end

0 commit comments

Comments
 (0)