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
- #as_jsonapi(fields: nil, include: []) ⇒ Object
- #initialize ⇒ Object
- #requested_relationships(fields) ⇒ Object private
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 |
#initialize ⇒ Object
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 |