class Alchemist::CompoundMeasurement
Attributes
coefficient[R]
denominators[RW]
numerators[RW]
Public Class Methods
new(numerator)
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 6 def initialize(numerator) @coefficient = numerator.value @numerators = [numerator / @coefficient] @denominators = [] end
Public Instance Methods
*(value)
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 20 def *(value) case value when Numeric @coefficient *= value self when Alchemist::Measurement @numerators << value return consolidate end end
<=>(other)
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 12 def <=> other if @coefficient == other.coefficient [@numerators, @denominators] <=> [other.numerators, other.denominators] else @coefficient <=> other.coefficient end end
Private Instance Methods
compress_units()
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 38 def compress_units @numerators.each_with_index do |numerator, n| @denominators.each_with_index do |denominator, d| remove_excess_units(numerator, n, denominator, d) end end end
consolidate()
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 33 def consolidate compress_units set_coefficients end
method_missing(method, *attrs, &block)
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 69 def method_missing(method, *attrs, &block) if Alchemist.library.measurement_for(method) @denominators << Alchemist.measure(1, method) consolidate end end
remove_excess_units(numerator, n, denominator, d)
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 46 def remove_excess_units numerator, n, denominator, d if should_remove_units? numerator, denominator @numerators.delete_at(n) @denominators.delete_at(d) @coefficient *= (numerator / denominator) end end
set_coefficients()
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 59 def set_coefficients if @denominators.length == 0 && @numerators.length == 1 @numerators[0] * @coefficient elsif @denominators.length == 0 && @numerators.length == 0 @coefficient else self end end
should_remove_units?(numerator, denominator)
click to toggle source
# File lib/alchemist/compound_measurement.rb, line 54 def should_remove_units? numerator, denominator return false if numerator.is_a?(Numeric) || denominator.is_a?(Numeric) (Alchemist.library.measurement_for(numerator.unit_name) & Alchemist.library.measurement_for(denominator.unit_name)).length > 0 end