class Unitwise::Scale
A Unitwise::Scale
represents a value and a unit, sort of like a vector, it has two components. In this case, it's a value and unit rather than a magnitude and direction. This class should be considered mostly privateish.
Public Class Methods
# File lib/unitwise/scale.rb, line 9 def initialize(value, unit) self.value = if value.is_a? self.class value.convert_to(unit).value else value end self.unit = unit freeze end
Public Instance Methods
List the atoms associated with this scale's unit. @return [Array] @api public
# File lib/unitwise/scale.rb, line 29 def atoms unit.atoms end
How far away is this instances unit from the deepest level atom. @return [Integer] @api public
# File lib/unitwise/scale.rb, line 83 def depth unit.depth + 1 end
Redefine hash equality to match the hashes @api semipublic
# File lib/unitwise/scale.rb, line 126 def eql?(other) hash == other.hash end
# File lib/unitwise/scale.rb, line 98 def expression unit.expression end
Redefine hash for apropriate hash/key lookup @api semipublic
# File lib/unitwise/scale.rb, line 119 def hash [value, unit.to_s, self.class].hash end
# File lib/unitwise/scale.rb, line 113 def inspect "#<#{self.class} value=#{simplified_value} unit=#{unit}>" end
Get a magnitude based on a linear scale value. Only used by scales with special atoms in it's hierarchy. @param scalar [Numeric] A linear scalar value @return [Numeric] The equivalent magnitude on this scale @api public
# File lib/unitwise/scale.rb, line 64 def magnitude(scalar = scalar()) if special? unit.magnitude(scalar) else value * unit.magnitude end end
The base terms this scale's unit is derived from @return [Array] An array of Unitwise::Term
@api public
# File lib/unitwise/scale.rb, line 75 def root_terms unit.root_terms end
Get a scalar value for this scale. @param magnitude [Numeric] An optional magnitude on this scale. @return [Numeric] A scalar value on a linear scale @api public
# File lib/unitwise/scale.rb, line 51 def scalar(magnitude = value) if special? unit.scalar(magnitude) else Number.rationalize(value) * Number.rationalize(unit.scalar) end end
Attempts to coerce the value to the simplest Numeric that fully expresses it's value. For instance a value of 1.0 would return 1, a value of #<BigDecimal:7f9558d559b8,'0.45E1',18(18)> would return 4.5. @return [Numeric] @api public
# File lib/unitwise/scale.rb, line 93 def simplified_value Unitwise::Number.simplify(value) end
Is this scale's unit special? @return [true, false] @api public
# File lib/unitwise/scale.rb, line 43 def special? unit.special? end
List the terms associated with this scale's unit. @return [Array] @api public
# File lib/unitwise/scale.rb, line 36 def terms unit.terms end
Convert to a simple string representing the scale. @api public
# File lib/unitwise/scale.rb, line 104 def to_s(mode = nil) unit_string = unit.to_s(mode) if unit_string && unit_string != '1' "#{simplified_value} #{unit_string}" else simplified_value.to_s end end
Set the unit vector. @param value [String, Unitwise::Unit] @api public
# File lib/unitwise/scale.rb, line 22 def unit=(value) @unit = value.is_a?(Unit) ? value : Unit.new(value) end