Class: JSONAPI::Serializer

Constant Summary collapse

JSONAPI_VERSION =
"1.1"

Class Method Summary collapse

Instance Method Summary collapse

Methods included from JSONAPI::Serialization::MetaSerialization

#record_meta

Methods included from JSONAPI::Serialization::IncludesSerialization

#build_include_context, #serialize_included

Methods included from JSONAPI::Serialization::IncludeFiltering

#filter_loaded_records

Methods included from JSONAPI::Serialization::IncludePathHelpers

#include_paths_to_relationship_names, #normalize_include_paths

Methods included from JSONAPI::Serialization::LinksSerialization

#serialize_links

Methods included from JSONAPI::Serialization::RelationshipsSerialization

#serialize_relationships

Methods included from JSONAPI::Serialization::AttributesSerialization

#serialize_attributes

Methods included from ActiveStorageSupport

#active_storage_attachment?, #append_only_enabled?, #attach_active_storage_files, #extract_active_storage_params_from_hash, #filter_active_storage_from_includes, #filter_polymorphic_from_includes, #find_blob_by_signed_id, #find_relationship_definition, #process_active_storage_attachment, #purge_on_nil_enabled?, #resolve_model_class_for_attachment, #serialize_active_storage_relationship, #serialize_blob_identifier

Constructor Details

#initialize(record, definition: nil, base_definition: nil, parent_record: nil, association_name: nil, authorization_context: nil, include_filter_cache: nil) ⇒ Serializer

Returns a new instance of Serializer.



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/json_api/serialization/serializer.rb', line 38

def initialize(record, definition: nil, base_definition: nil, parent_record: nil, association_name: nil,
               authorization_context: nil, include_filter_cache: nil)
  @record = record
  @definition = definition || ResourceLoader.find_for_model(record.class)
  @base_definition = base_definition
  @parent_record = parent_record
  @association_name = association_name
  @authorization_context = authorization_context
  @include_filter_cache = include_filter_cache
  @sti_subclass = nil
end

Class Method Details

.build_jsonapi_objectObject



28
29
30
31
32
# File 'lib/json_api/serialization/serializer.rb', line 28

def self.build_jsonapi_object
  obj = { version: JSONAPI_VERSION }
  obj[:meta] = JSONAPI.configuration.jsonapi_meta if JSONAPI.configuration.jsonapi_meta
  obj
end

.jsonapi_objectObject



24
25
26
# File 'lib/json_api/serialization/serializer.rb', line 24

def self.jsonapi_object
  @jsonapi_object ||= build_jsonapi_object.freeze
end

.reset_jsonapi_object!Object



34
35
36
# File 'lib/json_api/serialization/serializer.rb', line 34

def self.reset_jsonapi_object!
  @jsonapi_object = nil
end

Instance Method Details

#serialize_record(fields = {}, requested_relationships: nil) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/json_api/serialization/serializer.rb', line 65

def serialize_record(fields = {}, requested_relationships: nil)
  {
    type: record_type,
    id: record_id,
    attributes: serialize_attributes(fields),
    relationships: serialize_relationships(requested_relationships),
    links: serialize_links,
    meta: record_meta,
  }.compact
end

#to_hash(include: [], fields: {}, document_meta: nil, include_context: nil) ⇒ Object

include_context shares one IncludeContext across a whole collection: a record reached from several primaries then serializes once instead of once per primary. Callers that pass it read the accumulated records from the context, not from each result's :included.



54
55
56
57
58
59
60
61
62
63
# File 'lib/json_api/serialization/serializer.rb', line 54

def to_hash(include: [], fields: {}, document_meta: nil, include_context: nil)
  include_paths = normalize_include_paths(include)
  top_level_relationships = include_paths_to_relationship_names(include_paths, "")
  {
    jsonapi: jsonapi_object,
    data: serialize_record(fields, requested_relationships: top_level_relationships),
    included: serialize_included(include_paths, fields, context: include_context),
    meta: document_meta,
  }.compact
end