17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/autodeps/persistency.rb', line 17
def depend_on(clazz, options={})
clazz = Object.const_get(clazz) if clazz.is_a?(String)
options[:key_mapping] ||= {:id => (clazz.name.underscore.gsub(/^.*\//,"") + "_id").to_sym}
class << clazz
attr_accessor :_deps, :_autodeps_after_save_callbacked
end
clazz._deps ||= {}
(clazz._deps[options[:value_mapping].keys.sort] ||= []) << Mapping.new(self, options[:key_mapping], options[:value_mapping] )
Autodeps.autorun do
end
if !clazz._autodeps_after_save_callbacked
clazz._autodeps_after_save_callbacked = true
clazz.send(:after_save) do
clazz._deps.each do |attribute_keys, values|
if attribute_keys.any? {|attribute_key| self.send("#{attribute_key.to_s}_changed?")}
values.each do |mapping|
relation = mapping.dependent
mapping.key_mapping.each do |source_key, target_key|
relation = relation.where(target_key => self.send(source_key))
end
relation.each do |tuple|
mapping.value_mapping.each do |source_key, target_key|
tuple[target_key] = self.send(source_key)
end
tuple.save
end
end
end
end
end
end
end
|