Skip to content

Commit edf30bb

Browse files
committed
Better serializer registration, get more than just the first module
But is potentially breaking anyone on rc3, but the fix is just to manually register the adapter with the rc3-style name
1 parent ee40e9f commit edf30bb

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

lib/active_model/serializer/adapter.rb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,17 @@ 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
50+
name.gsub!('ActiveModel::Serializer::Adapter::'.freeze, ''.freeze)
51+
adapter_map.update(name.underscore => klass)
4752
self
4853
end
4954

@@ -78,7 +83,7 @@ def find_by_name(adapter_name)
7883

7984
# Automatically register adapters when subclassing
8085
def self.inherited(subclass)
81-
ActiveModel::Serializer::Adapter.register(subclass.to_s.demodulize, subclass)
86+
ActiveModel::Serializer::Adapter.register(subclass)
8287
end
8388

8489
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)