class ActiveForce::Association::Association

Attributes

options[RW]
parent[R]
relation_name[RW]

Public Class Methods

new(parent, relation_name, options = {}) click to toggle source
# File lib/active_force/association/association.rb, line 9
def initialize parent, relation_name, options = {}
  @parent        = parent
  @relation_name = relation_name
  @options       = options
  define_relation_method
  define_assignment_method
end

Public Instance Methods

foreign_key() click to toggle source
# File lib/active_force/association/association.rb, line 21
def foreign_key
  options[:foreign_key] || default_foreign_key
end
load_target(owner) click to toggle source
# File lib/active_force/association/association.rb, line 50
def load_target(owner)
  if loadable?(owner)
    target(owner)
  else
    target_when_unloadable
  end
end
relation_model() click to toggle source
# File lib/active_force/association/association.rb, line 17
def relation_model
  (options[:model] || relation_name.to_s.singularize.camelcase).to_s.constantize
end
relationship_name() click to toggle source
# File lib/active_force/association/association.rb, line 25
def relationship_name
  options[:relationship_name] || relation_model.to_s.constantize.table_name
end
represents_sfdc_table?(sfdc_table_name) click to toggle source

Does this association’s relation_model represent sfdc_table_name? Examples of sfdc_table_name could be ‘Quota__r’ or ‘Account’.

# File lib/active_force/association/association.rb, line 41
def represents_sfdc_table?(sfdc_table_name)
  name = sfdc_table_name.sub(/__r\z/, '').singularize
  relationship_name.sub(/__c\z|__r\z/, '') == name
end
scoped?() click to toggle source
# File lib/active_force/association/association.rb, line 33
def scoped?
  options[:scoped_as].present?
end
scoped_as() click to toggle source
# File lib/active_force/association/association.rb, line 29
def scoped_as
  options[:scoped_as] || nil
end
sfdc_association_field() click to toggle source
# File lib/active_force/association/association.rb, line 46
def sfdc_association_field
  relationship_name.gsub /__c\z/, '__r'
end

Private Instance Methods

apply_scope(query, owner) click to toggle source
# File lib/active_force/association/association.rb, line 91
def apply_scope(query, owner)
  return query unless (scope = options[:scoped_as])

  if scope.arity.positive?
    query.instance_exec(owner, &scope)
  else
    query.instance_exec(&scope)
  end
end
define_assignment_method() click to toggle source
# File lib/active_force/association/association.rb, line 82
def define_assignment_method
  raise NoMethodError, 'define_assignment_method must be implemented'
end
define_relation_method() click to toggle source
# File lib/active_force/association/association.rb, line 74
def define_relation_method
  association = self
  method_name = relation_name
  parent.send(:define_method, method_name) do
    association_cache.fetch(method_name) { association_cache[method_name] = association.load_target(self) }
  end
end
infer_foreign_key_from_model(model) click to toggle source
# File lib/active_force/association/association.rb, line 86
def infer_foreign_key_from_model(model)
  name = model.custom_table? ? model.name : model.table_name
  name.foreign_key.to_sym
end
loadable?(owner) click to toggle source
# File lib/active_force/association/association.rb, line 62
def loadable?(owner)
  owner&.persisted?
end
target(_owner) click to toggle source
# File lib/active_force/association/association.rb, line 66
def target(_owner)
  raise NoMethodError, 'target must be implemented'
end
target_when_unloadable() click to toggle source
# File lib/active_force/association/association.rb, line 70
def target_when_unloadable
  nil
end