Class: ActiveModel::SerializableResource

Inherits:
Object
  • Object
show all
Defined in:
lib/active_model/serializable_resource.rb

Constant Summary collapse

ADAPTER_OPTION_KEYS =
Set.new([:include, :fields, :adapter])

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource, options = {}) ⇒ SerializableResource

Returns a new instance of SerializableResource.



6
7
8
9
10
# File 'lib/active_model/serializable_resource.rb', line 6

def initialize(resource, options = {})
  @resource = resource
  @adapter_opts, @serializer_opts =
    options.partition { |k, _| ADAPTER_OPTION_KEYS.include? k }.map { |h| Hash[h] }
end

Class Method Details

.serialize(resource, options = {}) ⇒ Object

Primary interface to building a serializer (with adapter) If no block is given, returns the serializable_resource, ready for #as_json/#to_json/#serializable_hash. Otherwise, yields the serializable_resource and returns the contents of the block



19
20
21
22
23
24
25
26
# File 'lib/active_model/serializable_resource.rb', line 19

def self.serialize(resource, options = {})
  serializable_resource = SerializableResource.new(resource, options)
  if block_given?
    yield serializable_resource
  else
    serializable_resource
  end
end

Instance Method Details

#adapterObject Also known as: adapter_instance



40
41
42
# File 'lib/active_model/serializable_resource.rb', line 40

def adapter
  @adapter ||= ActiveModel::Serializer::Adapter.create(serializer_instance, adapter_opts)
end

#serialization_scopeObject



32
33
34
# File 'lib/active_model/serializable_resource.rb', line 32

def serialization_scope
  serializer_opts[:scope]
end

#serialization_scope=(scope) ⇒ Object



28
29
30
# File 'lib/active_model/serializable_resource.rb', line 28

def serialization_scope=(scope)
  serializer_opts[:scope] = scope
end

#serialization_scope_name=(scope_name) ⇒ Object



36
37
38
# File 'lib/active_model/serializable_resource.rb', line 36

def serialization_scope_name=(scope_name)
  serializer_opts[:scope_name] = scope_name
end

#serializerObject Also known as: serializer_class

Get serializer either explicitly :serializer or implicitly from resource Remove :serializer key from serializer_opts Replace :serializer key with :each_serializer if present



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/active_model/serializable_resource.rb', line 52

def serializer
  @serializer ||=
    begin
      @serializer = serializer_opts.delete(:serializer)
      @serializer ||= ActiveModel::Serializer.serializer_for(resource)

      if serializer_opts.key?(:each_serializer)
        serializer_opts[:serializer] = serializer_opts.delete(:each_serializer)
      end
      @serializer
    end
end

#serializer?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/active_model/serializable_resource.rb', line 72

def serializer?
  use_adapter? && !!(serializer)
end

#serializer_instanceObject



45
46
47
# File 'lib/active_model/serializable_resource.rb', line 45

def serializer_instance
  @serializer_instance ||= serializer.new(resource, serializer_opts)
end

#use_adapter?Boolean

True when no explicit adapter given, or explicit appear is truthy (non-nil) False when explicit adapter is falsy (nil or false)

Returns:

  • (Boolean)


68
69
70
# File 'lib/active_model/serializable_resource.rb', line 68

def use_adapter?
  !(adapter_opts.key?(:adapter) && !adapter_opts[:adapter])
end