module Autodeps::Persistency::ClassMethods
Public Instance Methods
depend_on(clazz, options={})
click to toggle source
# 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 ||= {} # options[:value_mapping].keys.sort? (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