Module: Rubel::Functions::Defaults
- Included in:
- Base
- Defined in:
- lib/rubel/functions/defaults.rb
Overview
Default/standard functions like SUM,AVG,COUNT,etc that operate on numbers and are application independent.
Instance Method Summary collapse
-
#AVG(*values) ⇒ Numeric
Returns the average of all number (ignores nil values).
-
#COUNT(*values) ⇒ Numeric
Returns how many values.
-
#DIVIDE(*values) ⇒ Numeric
Divides the first with the second.
- #MAP(elements, attr_name) ⇒ Object
-
#PRODUCT(*values) ⇒ Numeric
Multiplies all numbers (ignores nil values).
-
#SUM(*values) ⇒ Numeric
Returns the sum of all numbers (ignores nil values).
Instance Method Details
#AVG(*values) ⇒ Numeric
Returns the average of all number (ignores nil values).
58 59 60 61 62 |
# File 'lib/rubel/functions/defaults.rb', line 58 def AVG(*values) values.flatten! values.compact! SUM(values) / COUNT(values) end |
#COUNT(*values) ⇒ Numeric
Returns how many values. Removes nil values, but does not remove duplicates.
41 42 43 44 45 46 |
# File 'lib/rubel/functions/defaults.rb', line 41 def COUNT(*values) values.flatten! values.compact! values.length end |
#DIVIDE(*values) ⇒ Numeric
Divides the first with the second.
125 126 127 128 129 130 131 132 133 |
# File 'lib/rubel/functions/defaults.rb', line 125 def DIVIDE(*values) a,b = values.tap(&:flatten!) if a.nil? || a.to_f == 0.0 0.0 else a.to_f / b end end |
#MAP(elements, attr_name) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/rubel/functions/defaults.rb', line 6 def MAP(elements, attr_name) elements = [elements] unless elements.is_a?(::Array) elements.tap(&:flatten!).map! do |a| if attr_name.respond_to?(:call) a.instance_exec(&attr_name) else # to_s imported, for when MAP(..., demand) demand comes through method_missing (as a symbol) a.instance_eval(attr_name.to_s) end end elements.length <= 1 ? (elements.first || 0.0) : elements end |
#PRODUCT(*values) ⇒ Numeric
Multiplies all numbers (ignores nil values).
92 93 94 95 96 |
# File 'lib/rubel/functions/defaults.rb', line 92 def PRODUCT(*values) values.flatten! values.compact! values.inject(1) {|total,value| total = total * value} end |
#SUM(*values) ⇒ Numeric
Returns the sum of all numbers (ignores nil values).
75 76 77 78 79 |
# File 'lib/rubel/functions/defaults.rb', line 75 def SUM(*values) values.flatten! values.compact! values.inject(0) {|h,v| h + v } end |