Module: CalculableAttrs::ActiveRecord::Base

Defined in:
lib/calculable_attrs/active_record/base.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



35
36
37
# File 'lib/calculable_attrs/active_record/base.rb', line 35

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#calculable_attr_value(name) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/calculable_attrs/active_record/base.rb', line 39

def calculable_attr_value(name)
  name = name.to_sym
  check_calculable_attr_name!(name)
  unless calculable_attrs_calculated_flags[name]
    recalc_calculable_attr_with_siblings(name)
  end
  calculable_attrs_values[name]
end

#calculable_attrs_valuesObject



55
56
57
# File 'lib/calculable_attrs/active_record/base.rb', line 55

def calculable_attrs_values
  @calculable_attrs_values ||= {}
end

#calculable_attrs_values=(values) ⇒ Object



59
60
61
# File 'lib/calculable_attrs/active_record/base.rb', line 59

def calculable_attrs_values=(values)
  values.each { |key, value| set_calculable_attr_value(key, value) }
end

#recalc_calculable_attr_with_siblings(name) ⇒ Object



63
64
65
66
67
68
# File 'lib/calculable_attrs/active_record/base.rb', line 63

def recalc_calculable_attr_with_siblings(name)
  name = name.to_sym
  check_calculable_attr_name!(name)
  calculator = self.class.calculable_attrs_calculators[name]
  self.calculable_attrs_values = calculator.calculate_all(id)
end

#set_calculable_attr_value(name, value) ⇒ Object



48
49
50
51
52
53
# File 'lib/calculable_attrs/active_record/base.rb', line 48

def set_calculable_attr_value(name, value)
  name = name.to_sym
  check_calculable_attr_name!(name)
  calculable_attrs_calculated_flags[name] = true
  calculable_attrs_values[name] = value
end