# File lib/jsonapi/relationship.rb, line 44 def primary_key # :nocov: @primary_key ||= resource_klass._primary_key # :nocov: end
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
_exclude_links()
click to toggle source
# File lib/jsonapi/relationship.rb, line 122 def _exclude_links @_exclude_links ||= [] end
belongs_to?()
click to toggle source
# File lib/jsonapi/relationship.rb, line 99 def belongs_to? # :nocov: false # :nocov: end
exclude_link?(link)
click to toggle source
# File lib/jsonapi/relationship.rb, line 126 def exclude_link?(link) _exclude_links.include?(link.to_sym) end
exclude_links(exclude)
click to toggle source
# File lib/jsonapi/relationship.rb, line 109 def exclude_links(exclude) case exclude when :default, "default" @_exclude_links = [:self, :related] when :none, "none" @_exclude_links = [] when Array @_exclude_links = exclude.collect {|link| link.to_sym} else fail "Invalid exclude_links" end end
primary_key()
click to toggle source
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