Module: JSONAPI::Serializable::Resource::Relationships

Included in:
JSONAPI::Serializable::Resource
Defined in:
lib/jsonapi/serializable/resource/relationships.rb

Overview

Mixin to handle resource relationships.

Defined Under Namespace

Modules: DSL

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.prepended(klass) ⇒ Object



8
9
10
11
12
13
14
15
16
17
# File 'lib/jsonapi/serializable/resource/relationships.rb', line 8

def self.prepended(klass)
  super
  klass.class_eval do
    extend DSL
    class << self
      attr_accessor :relationship_blocks
    end
    self.relationship_blocks = {}
  end
end

Instance Method Details

#as_jsonapi(fields: nil, include: []) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/jsonapi/serializable/resource/relationships.rb', line 28

def as_jsonapi(fields: nil, include: [])
  super.tap do |hash|
    rels = requested_relationships(fields)
           .each_with_object({}) do |(k, v), h|
      h[k] = v.as_jsonapi(include.include?(k))
    end
    hash[:relationships] = rels if rels.any?
  end
end

#initializeObject



19
20
21
22
23
24
25
# File 'lib/jsonapi/serializable/resource/relationships.rb', line 19

def initialize(*)
  super
  @_relationships = self.class.relationship_blocks
                        .each_with_object({}) do |(k, v), h|
    h[k] = Relationship.new(@_exposures, &v)
  end
end

#requested_relationships(fields) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



39
40
41
42
# File 'lib/jsonapi/serializable/resource/relationships.rb', line 39

def requested_relationships(fields)
  @_relationships
    .select { |k, _| fields.nil? || fields.include?(k) }
end