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