class AttributeDependsCalculator::Factory
Attributes
association[RW]
column[RW]
klass[RW]
parameter[RW]
Public Class Methods
new(klass, column, params)
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 14 def initialize(klass, column, params) self.klass, self.column = klass, column self.parameter = Parameter.new(params) self.association = fetch_association end
Public Instance Methods
perform()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 20 def perform define_calculator define_operator_callback append_callbacks end
Private Instance Methods
after_callback_proc()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 72 def after_callback_proc method_name = calculate_method_name klass_name = klass.name lambda { |record| attr_name = record.class.reflect_on_all_associations.find {|assoc| assoc.class_name == klass_name}.name record.public_send(attr_name).send(method_name) } end
append_callback_hook()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 65 def append_callback_hook association.after_save after_callback_proc association.after_destroy after_callback_proc end
append_callbacks()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 61 def append_callbacks append_callback_hook end
calculate()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 37 def calculate if self.proc? "self.#{column}_depends_callback(#{depend_association_name})" else "self.#{depend_association_name}.#{expression}" end end
calculate_method_name()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 53 def calculate_method_name "calculate_and_update_#{column}" end
define_calculator()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 28 def define_calculator self.klass.class_eval <<-METHOD, __FILE__, __LINE__ + 1 def #{calculate_method_name} total = #{calculate} update(:#{column} => total) end METHOD end
define_operator_callback()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 45 def define_operator_callback callback, column = self.callback, self.column return if callback.nil? self.klass.class_eval do define_method "#{column}_depends_callback", &callback end end
fetch_association()
click to toggle source
# File lib/attribute_depends_calculator/factory.rb, line 57 def fetch_association ObjectSpace.const_get klass.reflect_on_association(depend_association_name).class_name end