Class: DataMapper::Associations::BelongsToAssociation::Instance

Inherits:
Reference
  • Object
show all
Defined in:
lib/data_mapper/associations/belongs_to_association.rb

Instance Method Summary collapse

Methods inherited from Reference

#association, #initialize

Constructor Details

This class inherits a constructor from DataMapper::Associations::Reference

Instance Method Details

#build(options) ⇒ Object



101
102
103
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 101

def build(options)
  @associated = association.associated_constant.new(options)
end

#create(options) ⇒ Object



97
98
99
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 97

def create(options)
  @associated = association.associated_constant.create(options)
end

#dirty?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 50

def dirty?
  @associated && @new_member
end

#ensure_foreign_key!Object



116
117
118
119
120
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 116

def ensure_foreign_key!
  if @associated
    @instance.instance_variable_set(association.foreign_key.instance_variable_name, @associated.key)
  end
end

#instanceObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 75

def instance
  @associated || @associated = begin                    
    if @instance.loaded_set.nil?
      nil
    else
      
      # Temp variable for the instance variable name.
      fk = association.foreign_key_column.to_sym
      
      set = @instance.loaded_set.group_by { |instance| instance.send(fk) }

      @instance.database_context.all(association.constant, association.associated_table.key.to_sym => set.keys).each do |assoc|
        set[assoc.key].each do |primary_instance|
          primary_instance.send(setter_method, assoc)
        end
      end

      @associated
    end
  end
end

#reload!Object



69
70
71
72
73
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 69

def reload!
  @new_member = false
  @associated = nil
  instance
end

#save_without_validation(database_context) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 58

def save_without_validation(database_context)
  @new_member = false
  unless @associated.nil?
    @instance.instance_variable_set(
      association.foreign_key_column.instance_variable_name,
      @associated.key
    )
    @instance.database_context.adapter.save_without_validation(database_context, @instance)
  end
end

#set(val) ⇒ Object



109
110
111
112
113
114
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 109

def set(val)
  raise "RecursionError" if val == @instance
  @new_member = true
  @instance.instance_variable_set(association.foreign_key_column.instance_variable_name, val.key)
  @associated = val
end

#setter_methodObject



105
106
107
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 105

def setter_method
  "#{@association_name}=".to_sym
end

#validate_recursively(event, cleared) ⇒ Object



54
55
56
# File 'lib/data_mapper/associations/belongs_to_association.rb', line 54

def validate_recursively(event, cleared)
  @associated.nil? || cleared.include?(@associated) || @associated.validate_recursively(event, cleared)
end