class JSONAPI::Relationship

Attributes

_routed[RW]
_warned_missing_route[RW]
acts_as_set[R]
allow_include[RW]
always_include_optional_linkage_data[R]
class_name[R]
custom_methods[R]
eager_load_on_include[R]
foreign_key[R]
inverse_relationship[R]
name[R]
options[R]
parent_resource[R]
parent_resource_klass[R]
polymorphic[R]
polymorphic?[R]

Public Class Methods

new(name, options = {}) click to toggle source
# File lib/jsonapi/relationship.rb, line 12
def initialize(name, options = {})
  @name = name.to_s
  @options = options
  @acts_as_set = options.fetch(:acts_as_set, false) == true
  @foreign_key = options[:foreign_key] ? options[:foreign_key].to_sym : nil
  @parent_resource = options[:parent_resource]
  @relation_name = options.fetch(:relation_name, @name)
  @polymorphic = options.fetch(:polymorphic, false) == true
  @polymorphic_types = options[:polymorphic_types]
  if options[:polymorphic_relations]
    ActiveSupport::Deprecation.warn('Use polymorphic_types instead of polymorphic_relations')
    @polymorphic_types ||= options[:polymorphic_relations]
  end

  @always_include_optional_linkage_data = options.fetch(:always_include_optional_linkage_data, false) == true
  @eager_load_on_include = options.fetch(:eager_load_on_include, false) == true
  @allow_include = options[:allow_include]
  @class_name = nil
  @inverse_relationship = nil

  @_routed = false
  @_warned_missing_route = false

  exclude_links(options.fetch(:exclude_links, JSONAPI.configuration.default_exclude_links))

  # Custom methods are reserved for future use
  @custom_methods = options.fetch(:custom_methods, {})
end
polymorphic_types(name) click to toggle source
# File lib/jsonapi/relationship.rb, line 60
def self.polymorphic_types(name)
  @poly_hash ||= {}.tap do |hash|
    ObjectSpace.each_object do |klass|
      next unless Module === klass
      if ActiveRecord::Base > klass
        klass.reflect_on_all_associations(:has_many).select{|r| r.options[:as] }.each do |reflection|
          (hash[reflection.options[:as]] ||= []) << klass.name.underscore
        end
      end
    end
  end
  @poly_hash[name.to_sym]
end

Public Instance Methods

belongs_to?() click to toggle source
# File lib/jsonapi/relationship.rb, line 99
def belongs_to?
  # :nocov:
  false
  # :nocov:
end
primary_key() click to toggle source
# File lib/jsonapi/relationship.rb, line 44
def primary_key
  # :nocov:
  @primary_key ||= resource_klass._primary_key
  # :nocov:
end
readonly?() click to toggle source
# File lib/jsonapi/relationship.rb, line 105
def readonly?
  @options[:readonly]
end
relation_name(options) click to toggle source
# File lib/jsonapi/relationship.rb, line 86
def relation_name(options)
  case @relation_name
    when Symbol
      # :nocov:
      @relation_name
      # :nocov:
    when String
      @relation_name.to_sym
    when Proc
      @relation_name.call(options)
  end
end
resource_klass() click to toggle source
# File lib/jsonapi/relationship.rb, line 50
def resource_klass
  @resource_klass ||= @parent_resource.resource_klass_for(@class_name)
end
resource_types() click to toggle source
# File lib/jsonapi/relationship.rb, line 74
def resource_types
  if polymorphic? && belongs_to?
    @polymorphic_types ||= self.class.polymorphic_types(@relation_name).collect {|t| t.pluralize}
  else
    [resource_klass._type.to_s.pluralize]
  end
end
table_name() click to toggle source
# File lib/jsonapi/relationship.rb, line 54
def table_name
  # :nocov:
  @table_name ||= resource_klass._table_name
  # :nocov:
end
type() click to toggle source
# File lib/jsonapi/relationship.rb, line 82
def type
  @type ||= resource_klass._type.to_sym
end