module ActiveModelSerializers::Adapter
Constants
- ADAPTER_MAP
- UnknownAdapterError
Public Class Methods
adapter_class(adapter)
click to toggle source
@see ActiveModelSerializers::Adapter.lookup
# File lib/active_model_serializers/adapter.rb, line 29 def adapter_class(adapter) ActiveModelSerializers::Adapter.lookup(adapter) end
adapter_map()
click to toggle source
@return [Hash<adapter_name, adapter_class
>]
# File lib/active_model_serializers/adapter.rb, line 34 def adapter_map ADAPTER_MAP end
adapters()
click to toggle source
@return [Array<Symbol>] list of adapter names
# File lib/active_model_serializers/adapter.rb, line 39 def adapters adapter_map.keys.sort! end
configured_adapter()
click to toggle source
:nocov:
# File lib/active_model_serializers/adapter.rb, line 18 def configured_adapter lookup(ActiveModelSerializers.config.adapter) end
create(resource, options = {})
click to toggle source
# File lib/active_model_serializers/adapter.rb, line 22 def create(resource, options = {}) override = options.delete(:adapter) klass = override ? adapter_class(override) : configured_adapter klass.new(resource, options) end
lookup(adapter)
click to toggle source
@param adapter [String, Symbol, Class] name to fetch adapter by @return [ActiveModelSerializers::Adapter] subclass of Adapter
@raise [UnknownAdapterError]
# File lib/active_model_serializers/adapter.rb, line 65 def lookup(adapter) # 1. return if is a class return adapter if adapter.is_a?(Class) adapter_name = adapter.to_s.underscore # 2. return if registered adapter_map.fetch(adapter_name) do # 3. try to find adapter class from environment adapter_class = find_by_name(adapter_name) register(adapter_name, adapter_class) adapter_class end rescue NameError, ArgumentError => e failure_message = "NameError: #{e.message}. Unknown adapter: #{adapter.inspect}. Valid adapters are: #{adapters}" raise UnknownAdapterError, failure_message, e.backtrace end
new(*args)
click to toggle source
:nocov:
# File lib/active_model_serializers/adapter.rb, line 11 def new(*args) fail ArgumentError, 'Adapters inherit from Adapter::Base.' \ "Adapter.new called with args: '#{args.inspect}', from" \ "'caller[0]'." end
register(name, klass = name)
click to toggle source
Adds an adapter 'klass' with 'name' to the 'adapter_map' Names are stringified and underscored @param name [Symbol, String, Class] name of the registered adapter @param klass [Class] adapter class itself, optional if name is the class @example
AMS::Adapter.register(:my_adapter, MyAdapter)
@note The registered name strips out 'ActiveModelSerializers::Adapter::'
so that registering 'ActiveModelSerializers::Adapter::Json' and 'Json' will both register as 'json'.
# File lib/active_model_serializers/adapter.rb, line 52 def register(name, klass = name) name = name.to_s.gsub(/\AActiveModelSerializers::Adapter::/, ''.freeze) adapter_map[name.underscore] = klass self end
registered_name(adapter_class)
click to toggle source
# File lib/active_model_serializers/adapter.rb, line 58 def registered_name(adapter_class) ADAPTER_MAP.key adapter_class end
Private Class Methods
find_by_name(adapter_name)
click to toggle source
@api private
# File lib/active_model_serializers/adapter.rb, line 83 def find_by_name(adapter_name) adapter_name = adapter_name.to_s.classify.tr('API', 'Api') "ActiveModelSerializers::Adapter::#{adapter_name}".safe_constantize || "ActiveModelSerializers::Adapter::#{adapter_name.pluralize}".safe_constantize or # rubocop:disable Style/AndOr fail UnknownAdapterError end