base/lib/stellar/thresholds.rb
module Stellar
class << Thresholds
COMPONENTS = [:master_weight, :low, :medium, :high]
VALID_RANGE = 0..255
def make(thresholds = {})
# error if any of the needed components are not provided
if COMPONENTS.any? { |c| thresholds[c].blank? }
raise ArgumentError, "invalid thresholds hash, must have #{COMPONENTS.inspect} keys, had: #{thresholds.keys.inspect}"
end
# error if any of the needed components are not numbers 0 <= N <= 255
COMPONENTS.each do |c|
good = true
good &&= thresholds[c].is_a?(Integer)
good &&= VALID_RANGE.include? thresholds[c]
unless good
raise ArgumentError, "invalid #{c.inspect}, must be number in (0..255), got #{thresholds[c].inspect}"
end
end
thresholds.values_at(*COMPONENTS).pack("C*")
end
def parse(combined)
master_weight, low, medium, high = combined.unpack("C*")
{
master_weight: master_weight,
low: low,
medium: medium,
high: high
}
end
end
end