Class: SelfishAssociations::Association

Inherits:
Object
  • Object
show all
Defined in:
lib/selfish_associations/associations/association.rb

Instance Method Summary collapse

Constructor Details

#initialize(name, model, scope = nil, options = {}) ⇒ Association

Returns a new instance of Association.



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/selfish_associations/associations/association.rb', line 12

def initialize(name, model, scope = nil, options = {})
  options = options.symbolize_keys
  @name = name.to_s
  @model = model
  @foreign_class_name = (options[:class_name] || name.to_s.classify).to_s
  @foreign_key = options[:foreign_key] == false ? false : (options[:foreign_key] || @model.name.foreign_key).to_sym
  @scopes = []

  add_scope(scope) if scope.present?
  add_scope(foreign_key_scope) if @foreign_key.present?
  validate
end

Instance Method Details

#create_for(instance) ⇒ Object



47
48
49
# File 'lib/selfish_associations/associations/association.rb', line 47

def create_for(instance)
  foreign_class.create(instance_create_attributes(instance))
end

#foreign_classObject



29
30
31
# File 'lib/selfish_associations/associations/association.rb', line 29

def foreign_class
  @foreign_class ||= self.class.const_get(@foreign_class_name)
end

#initialize_for(instance) ⇒ Object



43
44
45
# File 'lib/selfish_associations/associations/association.rb', line 43

def initialize_for(instance)
  foreign_class.new(instance_create_attributes(instance))
end

#inspectObject



25
26
27
# File 'lib/selfish_associations/associations/association.rb', line 25

def inspect
  "#<#{self.class}:#{self.object_id} @name=#{@name} @model=#{@model} @foreign_class=#{foreign_class} @foreign_key=#{@foreign_key}>"
end

#joinObject



33
34
35
36
37
# File 'lib/selfish_associations/associations/association.rb', line 33

def join
  conditions = arelize_conditions(relation_reader.conditions_for_find)
  arel_join = @model.arel_table.join(foreign_class.arel_table).on(conditions).join_sources
  @model.joins(joins_for_find).joins(arel_join).merge(foreign_class.all)
end

#matches_for(instance) ⇒ Object



39
40
41
# File 'lib/selfish_associations/associations/association.rb', line 39

def matches_for(instance)
  foreign_class.where(instance_find_conditions(instance))
end