module ActsAsAggregateRoot::ClassMethods
Public Instance Methods
acts_as_aggregate_root()
click to toggle source
# File lib/acts_as_aggregate_root/acts_as_aggregate_root.rb, line 7 def acts_as_aggregate_root def add_destroy_methods_to_class(klass) klass.reflections.select {|(k,v)| v.macro == :has_many }.each {|(name,reflection)| add_destroy_method(klass,name.to_s) reflection.options[:autosave] = true add_destroy_methods_to_class(reflection.klass) } end def add_destroy_method(klass,reflection_name) klass.instance_eval do method_name = "has_many_dependent_destroy_for_#{reflection_name}".to_sym define_method(method_name) do send(reflection_name).each { |o| o.destroy } end before_destroy method_name end end self.instance_eval do def has_many(association_id, options = {}, &extension) # options .merge! :autosave => true , :dependent => :destroy super reflection = create_has_many_reflection(association_id, options, &extension) reflection.options[:autosave] = true add_destroy_method(self,reflection.name) add_destroy_methods_to_class(reflection.klass) end end end
add_destroy_method(klass,reflection_name)
click to toggle source
# File lib/acts_as_aggregate_root/acts_as_aggregate_root.rb, line 18 def add_destroy_method(klass,reflection_name) klass.instance_eval do method_name = "has_many_dependent_destroy_for_#{reflection_name}".to_sym define_method(method_name) do send(reflection_name).each { |o| o.destroy } end before_destroy method_name end end
add_destroy_methods_to_class(klass)
click to toggle source
# File lib/acts_as_aggregate_root/acts_as_aggregate_root.rb, line 9 def add_destroy_methods_to_class(klass) klass.reflections.select {|(k,v)| v.macro == :has_many }.each {|(name,reflection)| add_destroy_method(klass,name.to_s) reflection.options[:autosave] = true add_destroy_methods_to_class(reflection.klass) } end
has_many(association_id, options = {}, &extension)
click to toggle source
Calls superclass method
# File lib/acts_as_aggregate_root/acts_as_aggregate_root.rb, line 29 def has_many(association_id, options = {}, &extension) # options .merge! :autosave => true , :dependent => :destroy super reflection = create_has_many_reflection(association_id, options, &extension) reflection.options[:autosave] = true add_destroy_method(self,reflection.name) add_destroy_methods_to_class(reflection.klass) end