Class: ActiveModel::SerializableResource
- Inherits:
-
Object
- Object
- ActiveModel::SerializableResource
- Defined in:
- lib/active_model/serializable_resource.rb
Constant Summary collapse
- ADAPTER_OPTION_KEYS =
Set.new([:include, :fields, :adapter])
Class Method Summary collapse
-
.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.
Instance Method Summary collapse
- #adapter ⇒ Object (also: #adapter_instance)
-
#initialize(resource, options = {}) ⇒ SerializableResource
constructor
A new instance of SerializableResource.
- #serialization_scope ⇒ Object
- #serialization_scope=(scope) ⇒ Object
- #serialization_scope_name=(scope_name) ⇒ Object
-
#serializer ⇒ Object
(also: #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.
- #serializer? ⇒ Boolean
- #serializer_instance ⇒ Object
-
#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).
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, = {}) @resource = resource @adapter_opts, @serializer_opts = .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, = {}) serializable_resource = SerializableResource.new(resource, ) if block_given? yield serializable_resource else serializable_resource end end |
Instance Method Details
#adapter ⇒ Object 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_scope ⇒ Object
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 |
#serializer ⇒ Object 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
72 73 74 |
# File 'lib/active_model/serializable_resource.rb', line 72 def serializer? use_adapter? && !!(serializer) end |
#serializer_instance ⇒ Object
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)
68 69 70 |
# File 'lib/active_model/serializable_resource.rb', line 68 def use_adapter? !(adapter_opts.key?(:adapter) && !adapter_opts[:adapter]) end |