class MeasureScaler::Prefix

Attributes

factor[R]
symbol[R]

Public Class Methods

new(symbol) click to toggle source
# File lib/measure_scaler/prefix.rb, line 6
def initialize(symbol)
  validate(symbol)

  @symbol = symbol
  @factor = find_factor(symbol)
end

Public Instance Methods

scale(proposed_order=0) click to toggle source
# File lib/measure_scaler/prefix.rb, line 14
def scale(proposed_order=0)
  proposed_order = align_to_3(proposed_order)
  # return the effective order and the new symbol
  new_factor = [@factor+proposed_order, MAX_FACTOR].min
  new_factor = [new_factor, MIN_FACTOR].max
  new_symbol = find_symbol(new_factor)
  effective_order  = new_factor - @factor
  [effective_order, new_symbol] # TODO: perché non ritornare [new_order, Prefix.new(new_symbol)] ?
end
to_s() click to toggle source
# File lib/measure_scaler/prefix.rb, line 24
def to_s
  @symbol
end

Private Instance Methods

align_to_3(ord) click to toggle source
# File lib/measure_scaler/prefix.rb, line 33
def align_to_3(ord)
  if ord%3==0
    ord
  else
    (ord/3.0).round*3
  end
end
validate(symbol) click to toggle source
# File lib/measure_scaler/prefix.rb, line 29
def validate(symbol)
  raise PrefixError, "#{symbol} is not a valid prefix symbol" if !valid?(symbol)
end