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