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

new(value, unit) click to toggle source
# 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

atoms() click to toggle source

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
depth() click to toggle source

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
eql?(other) click to toggle source

Redefine hash equality to match the hashes @api semipublic

# File lib/unitwise/scale.rb, line 126
def eql?(other)
  hash == other.hash
end
expression() click to toggle source
# File lib/unitwise/scale.rb, line 98
def expression
  unit.expression
end
hash() click to toggle source

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
inspect() click to toggle source
# File lib/unitwise/scale.rb, line 113
def inspect
  "#<#{self.class} value=#{simplified_value} unit=#{unit}>"
end
magnitude(scalar = scalar()) click to toggle source

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
root_terms() click to toggle source

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
scalar(magnitude = value) click to toggle source

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
simplified_value() click to toggle source

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
special?() click to toggle source

Is this scale's unit special? @return [true, false] @api public

# File lib/unitwise/scale.rb, line 43
def special?
  unit.special?
end
terms() click to toggle source

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
to_s(mode = nil) click to toggle source

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
unit=(value) click to toggle source

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