class ShortScale::TierCalculator

Public Class Methods

new(config = {}) click to toggle source
# File lib/short_scale/tier_calculator.rb, line 12
def initialize(config = {})
  # Prioritize provided configuration over default
  @base  = config[:base]  || @@default_config[:base]
  @tiers = config[:tiers] || @@default_config[:tiers]

  # Add zero magnitude tier (units) if not provided
  @tiers[0] ||= ''
end

Public Instance Methods

tier(number) click to toggle source

Calculates the tier for a given number

# File lib/short_scale/tier_calculator.rb, line 22
def tier(number)
  _magnitude = magnitude(number)

  # If provided number is lesser than 1 then magnitude defaults to zero
  if _magnitude > 0
    tier_magnitude = @tiers.keys.select { |limit| limit <= _magnitude }.max
  else
    tier_magnitude = 0
  end

  {
    magnitude: tier_magnitude,
    unit: @tiers[tier_magnitude]
  }
end

Private Instance Methods

magnitude(number) click to toggle source

Calculates the magnitude of a number if a given base

# File lib/short_scale/tier_calculator.rb, line 40
def magnitude(number)
  Math.log10(number) / Math.log10(@base)
end