Class: Alchemist::CompoundNumericConversion
- Inherits:
-
Object
- Object
- Alchemist::CompoundNumericConversion
- Defined in:
- lib/alchemist/compound_numeric_conversion.rb
Instance Attribute Summary collapse
-
#denominators ⇒ Object
Returns the value of attribute denominators.
-
#numerators ⇒ Object
Returns the value of attribute numerators.
Instance Method Summary collapse
- #*(value) ⇒ Object
- #consolidate ⇒ Object
-
#initialize(numerator) ⇒ CompoundNumericConversion
constructor
A new instance of CompoundNumericConversion.
- #method_missing(method, *attrs, &block) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(numerator) ⇒ CompoundNumericConversion
Returns a new instance of CompoundNumericConversion.
4 5 6 7 8 |
# File 'lib/alchemist/compound_numeric_conversion.rb', line 4 def initialize(numerator) @coefficient = 1 #* numerator.to_f @numerators = [numerator] @denominators = [] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *attrs, &block) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/alchemist/compound_numeric_conversion.rb', line 46 def method_missing(method, *attrs, &block) if Conversions[method] @denominators << 1.send(method) consolidate end end |
Instance Attribute Details
#denominators ⇒ Object
Returns the value of attribute denominators.
3 4 5 |
# File 'lib/alchemist/compound_numeric_conversion.rb', line 3 def denominators @denominators end |
#numerators ⇒ Object
Returns the value of attribute numerators.
3 4 5 |
# File 'lib/alchemist/compound_numeric_conversion.rb', line 3 def numerators @numerators end |
Instance Method Details
#*(value) ⇒ Object
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/alchemist/compound_numeric_conversion.rb', line 9 def *(value) case value when Numeric @coefficient *= value self when Alchemist::NumericConversion @numerators << value return consolidate end end |
#consolidate ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/alchemist/compound_numeric_conversion.rb', line 20 def consolidate @numerators.each_with_index do |numerator, n| @denominators.each_with_index do |denominator, d| next if numerator.is_a?(Numeric) next if denominator.is_a?(Numeric) if (Conversions[numerator.unit_name] & Conversions[denominator.unit_name]).length > 0 value = numerator / denominator @numerators.delete_at(n) @denominators.delete_at(d) @coefficient *= value end end end if @denominators.length == 0 && @numerators.length == 1 @numerators[0] * @coefficient elsif @denominators.length == 0 && @numerators.length == 0 @coefficient else self end end |
#to_s ⇒ Object
42 43 44 |
# File 'lib/alchemist/compound_numeric_conversion.rb', line 42 def to_s end |