Module: ActiveModelSerializers::Adapter

Extended by:
ActiveSupport::Autoload
Defined in:
lib/active_model_serializers/adapter.rb,
lib/active_model_serializers/adapter/base.rb,
lib/active_model_serializers/adapter/json.rb,
lib/active_model_serializers/adapter/null.rb,
lib/active_model_serializers/adapter/json_api.rb,
lib/active_model_serializers/adapter/attributes.rb,
lib/active_model_serializers/adapter/json_api/meta.rb,
lib/active_model_serializers/adapter/json_api/link.rb,
lib/active_model_serializers/adapter/json_api/error.rb,
lib/active_model_serializers/adapter/json_api/jsonapi.rb,
lib/active_model_serializers/adapter/json_api/relationship.rb,
lib/active_model_serializers/adapter/json_api/deserialization.rb,
lib/active_model_serializers/adapter/json_api/pagination_links.rb,
lib/active_model_serializers/adapter/json_api/resource_identifier.rb

Defined Under Namespace

Classes: Attributes, Base, Json, JsonApi, Null

Constant Summary

UnknownAdapterError =
Class.new(ArgumentError)

Class Method Summary (collapse)

Class Method Details

+ (Object) adapter_class(adapter)

See Also:



27
28
29
# File 'lib/active_model_serializers/adapter.rb', line 27

def adapter_class(adapter)
  ActiveModelSerializers::Adapter.lookup(adapter)
end

+ (Hash<adapter_name, adapter_class>) adapter_map

Returns:



32
33
34
# File 'lib/active_model_serializers/adapter.rb', line 32

def adapter_map
  ADAPTER_MAP
end

+ (Array<Symbol>) adapters

Returns list of adapter names

Returns:

  • (Array<Symbol>)

    list of adapter names



37
38
39
# File 'lib/active_model_serializers/adapter.rb', line 37

def adapters
  adapter_map.keys.sort
end

+ (Object) configured_adapter

:nocov:



16
17
18
# File 'lib/active_model_serializers/adapter.rb', line 16

def configured_adapter
  lookup(ActiveModelSerializers.config.adapter)
end

+ (Object) create(resource, options = {})



20
21
22
23
24
# File 'lib/active_model_serializers/adapter.rb', line 20

def create(resource, options = {})
  override = options.delete(:adapter)
  klass = override ? adapter_class(override) : configured_adapter
  klass.new(resource, options)
end

+ (ActiveModelSerializers::Adapter) lookup(adapter)

Returns subclass of Adapter

Parameters:

  • adapter (String, Symbol, Class)

    name to fetch adapter by

Returns:

Raises:



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/active_model_serializers/adapter.rb', line 63

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

+ (Object) new(*args)

:nocov:



9
10
11
12
13
# File 'lib/active_model_serializers/adapter.rb', line 9

def new(*args)
  fail ArgumentError, 'Adapters inherit from Adapter::Base.' \
    "Adapter.new called with args: '#{args.inspect}', from" \
    "'caller[0]'."
end

+ (Object) register(name, klass = name)

Note:

The registered name strips out 'ActiveModelSerializers::Adapter::' so that registering 'ActiveModelSerializers::Adapter::Json' and 'Json' will both register as 'json'.

Adds an adapter 'klass' with 'name' to the 'adapter_map' Names are stringified and underscored

Examples:

AMS::Adapter.register(:my_adapter, MyAdapter)

Parameters:

  • name (Symbol, String, Class)

    name of the registered adapter

  • klass (Class) (defaults to: name)

    adapter class itself, optional if name is the class



50
51
52
53
54
# File 'lib/active_model_serializers/adapter.rb', line 50

def register(name, klass = name)
  name = name.to_s.gsub(/\AActiveModelSerializers::Adapter::/, ''.freeze)
  adapter_map[name.underscore] = klass
  self
end

+ (Object) registered_name(adapter_class)



56
57
58
# File 'lib/active_model_serializers/adapter.rb', line 56

def registered_name(adapter_class)
  ADAPTER_MAP.key adapter_class
end