Module: CalculableAttrs::ActiveRecord::Base::ClassMethods
- Defined in:
- lib/calculable_attrs/active_record/base.rb
Instance Method Summary collapse
- #calculable_attr(attrs, &block) ⇒ Object
- #calculable_attr_calculator(attr) ⇒ Object
- #calculable_attrs ⇒ Object
- #calculable_attrs_calculators ⇒ Object
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_attrs ⇒ Object
26 27 28 |
# File 'lib/calculable_attrs/active_record/base.rb', line 26 def calculable_attrs calculable_attrs_calculators.keys end |
#calculable_attrs_calculators ⇒ Object
22 23 24 |
# File 'lib/calculable_attrs/active_record/base.rb', line 22 def calculable_attrs_calculators @calculable_attrs_calculators ||= {} end |