Class: Alchemist::CompoundNumericConversion

Inherits:
Object
  • Object
show all
Defined in:
lib/alchemist/compound_numeric_conversion.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#denominatorsObject

Returns the value of attribute denominators.



3
4
5
# File 'lib/alchemist/compound_numeric_conversion.rb', line 3

def denominators
  @denominators
end

#numeratorsObject

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

#consolidateObject



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_sObject



42
43
44
# File 'lib/alchemist/compound_numeric_conversion.rb', line 42

def to_s
  
end