Module: CalculableAttrs::ActiveRecord::Base::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

#calculable_attr(attrs, &block) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/calculable_attrs/active_record/base.rb', line 3

def calculable_attr(attrs, &block)
  relation = block ? lambda(&block) : attrs.delete(:from)
  raise "CALCULABLE_ATTRS: Relation was missed." unless relation

  foreign_key = attrs.delete(:foreign_key) || "#{ name.tableize }.id"
  raise "CALCULABLE_ATTRS: At least one calculable attribute required." if attrs.empty?

  calculator = CalculableAttrs::Calculator.new(foreign_key: foreign_key, relation: relation, attributes: attrs)

  attrs.keys.each do |k|
    calculable_attrs_calculators[k.to_sym] = calculator
    class_eval "      def \#{ k }\n        calculable_attr_value(:\#{ k })\n      end\n    ruby\n  end\nend\n"

#calculable_attr_calculator(attr) ⇒ Object



30
31
32
# File 'lib/calculable_attrs/active_record/base.rb', line 30

def calculable_attr_calculator(attr)
  calculable_attrs_calculators[attr]
end

#calculable_attrsObject



26
27
28
# File 'lib/calculable_attrs/active_record/base.rb', line 26

def calculable_attrs
  calculable_attrs_calculators.keys
end

#calculable_attrs_calculatorsObject



22
23
24
# File 'lib/calculable_attrs/active_record/base.rb', line 22

def calculable_attrs_calculators
  @calculable_attrs_calculators ||= {}
end