class JSONAPI::Serializable::Relationship

Public Class Methods

new(exposures = {}, options = {}, &block) click to toggle source
# File lib/jsonapi/serializable/relationship.rb, line 9
def initialize(exposures = {}, options = {}, &block)
  exposures.each { |k, v| instance_variable_set("@#{k}", v) }
  @_exposures = exposures
  @_options   = options
  @_links     = {}
  instance_eval(&block)
end

Public Instance Methods

as_jsonapi(included) click to toggle source
# File lib/jsonapi/serializable/relationship.rb, line 17
def as_jsonapi(included)
  {}.tap do |hash|
    hash[:links] = @_links           if @_links.any?
    hash[:data]  = linkage_data      if included || @_include_linkage
    hash[:meta]  = @_meta            unless @_meta.nil?
    hash[:meta]  = { included: false } if hash.empty?
  end
end

Private Instance Methods

linkage_data() click to toggle source

@api private

# File lib/jsonapi/serializable/relationship.rb, line 39
def linkage_data
  return @_linkage_block.call if @_linkage_block

  linkage_data = related_resources.map do |res|
    { type: res.jsonapi_type, id: res.jsonapi_id }
  end

  resources.respond_to?(:each) ? linkage_data : linkage_data.first
end
resources() click to toggle source

@api private

# File lib/jsonapi/serializable/relationship.rb, line 34
def resources
  @_resources ||= @_resources_block.call
end