class JsonApiModel::Associations::Base

Attributes

base_class[RW]
key[RW]
name[RW]
opts[RW]

Public Class Methods

new( base_class, name, opts = {} ) click to toggle source
# File lib/json_api_model/associations/base.rb, line 8
def initialize( base_class, name, opts = {} )
  self.name       = name
  self.opts       = opts
  self.key        = idify( base_class )
  self.base_class = base_class

  validate_opts!
end

Public Instance Methods

association_class() click to toggle source
# File lib/json_api_model/associations/base.rb, line 25
def association_class
  @associated_class ||= opts[:class] ||
                        opts[:class_name]&.constantize ||
                        derived_class
end
fetch( instance ) click to toggle source
# File lib/json_api_model/associations/base.rb, line 17
def fetch( instance )
  process association_class.send( action, query( instance ) )
end
json_relationship?() click to toggle source
# File lib/json_api_model/associations/base.rb, line 21
def json_relationship?
  association_class < JsonApiModel::Model
end
process( results ) click to toggle source
# File lib/json_api_model/associations/base.rb, line 31
def process( results )
  results
end

Protected Instance Methods

additional_options() click to toggle source
# File lib/json_api_model/associations/base.rb, line 49
def additional_options
  []
end
derived_class() click to toggle source
# File lib/json_api_model/associations/base.rb, line 41
def derived_class
  name.to_s.singularize.classify.constantize
end
idify( class_name ) click to toggle source
# File lib/json_api_model/associations/base.rb, line 37
def idify( class_name )
  "#{class_name.to_s.demodulize.underscore}_id"
end
supported_options() click to toggle source
# File lib/json_api_model/associations/base.rb, line 45
def supported_options
  [ :class, :class_name ] + additional_options
end
validate_opts!() click to toggle source
# File lib/json_api_model/associations/base.rb, line 53
def validate_opts!
  if name.to_s == "object"
    raise "#{base_class}: 'object_id' is a reserved keyword in ruby and cannot be overridden"
  end
  (opts.keys - supported_options).each do | opt |
    raise "#{base_class}: #{opt} is not supported."
  end
end