Class: DataMapper::Associations::HasManyAssociation::Set
- Inherits:
-
Reference
show all
- Includes:
- Enumerable
- Defined in:
- lib/data_mapper/associations/has_many_association.rb
Instance Method Summary
collapse
Methods inherited from Reference
#association, #initialize
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(symbol, *args, &block) ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 104
def method_missing(symbol, *args, &block)
if items.respond_to?(symbol)
items.send(symbol, *args, &block)
elsif association.associated_table.associations.any? { |assoc| assoc.name == symbol }
results = []
each do |item|
unless (val = item.send(symbol)).blank?
results << (val.is_a?(Enumerable) ? val.entries : val)
end
end
results.flatten
elsif items.size == 1 && items.first.respond_to?(symbol)
items.first.send(symbol, *args, &block)
else
super
end
end
|
Instance Method Details
#<<(associated_item) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 70
def <<(associated_item)
(@items || @items = []) << associated_item
fk = association.foreign_key_column
foreign_association = association.associated_table.associations.find do |mapping|
mapping.is_a?(BelongsToAssociation) && mapping.foreign_key_column == fk
end
associated_item.send("#{foreign_association.name}=", @instance) if foreign_association
return @items
end
|
#==(other) ⇒ Object
154
155
156
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 154
def ==(other)
(items.size == 1 ? items.first : items) == other
end
|
#build(options) ⇒ Object
84
85
86
87
88
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 84
def build(options)
item = association.associated_constant.new(options)
self << item
item
end
|
#create(options) ⇒ Object
90
91
92
93
94
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 90
def create(options)
item = build(options)
item.save
item
end
|
#dirty? ⇒ Boolean
37
38
39
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 37
def dirty?
@items && @items.any? { |item| item.dirty? }
end
|
66
67
68
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 66
def each
items.each { |item| yield item }
end
|
150
151
152
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 150
def inspect
entries.inspect
end
|
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 130
def items
@items || begin
if @instance.loaded_set.nil?
@items = []
else
associated_items = fetch_sets
association_ivar_name = association.instance_variable_name
setter_method = "#{@association_name}=".to_sym
@instance.loaded_set.each do |entry|
entry.send(setter_method, associated_items[entry.key])
end
return @items
end end end
|
126
127
128
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 126
def reload!
@items = nil
end
|
#respond_to?(symbol) ⇒ Boolean
122
123
124
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 122
def respond_to?(symbol)
items.respond_to?(symbol) || super
end
|
#save_without_validation(database_context) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 45
def save_without_validation(database_context)
adapter = @instance.database_context.adapter
adapter.connection do |db|
command = db.create_command(association.to_disassociate_sql)
command.execute_non_query(@instance.key)
end
unless @items.nil? || @items.empty?
setter_method = "#{@association_name}=".to_sym
ivar_name = association.foreign_key_column.instance_variable_name
@items.each do |item|
item.instance_variable_set(ivar_name, @instance.key)
@instance.database_context.adapter.save_without_validation(database_context, item)
end
end
end
|
#set(value) ⇒ Object
96
97
98
99
100
101
102
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 96
def set(value)
values = value.is_a?(Enumerable) ? value : [value]
@items = []
values.each do |item|
self << item
end
end
|
#validate_recursively(event, cleared) ⇒ Object
41
42
43
|
# File 'lib/data_mapper/associations/has_many_association.rb', line 41
def validate_recursively(event, cleared)
@items.blank? || @items.all? { |item| cleared.include?(item) || item.validate_recursively(event, cleared) }
end
|