class Fbe::Award::Bill

A bill.

def greeting

def greeting
  items = @lines.map { |l| "#{format('%+d', l[:v])} #{l[:t]}" }
  case items.size
  when 0
    "You've earned nothing. "
  when 1
    "You've earned #{format('%+d', points)} points. "
  else
    "You've earned #{format('%+d', points)} points for this: #{items.join('; ')}. "
  end
end

def initialize

def initialize
  @lines = []
  @vars = {}
end

def line(value, text)

def line(value, text)
  return if value.zero?
  text = text.gsub(/\$\{([a-z_0-9]+)\}/) { |_x| @vars[Regexp.last_match[1].to_sym] }
  @lines << { v: value, t: text }
end

def points

def points
  @lines.sum { |l| l[:v] }.to_f.round.to_i
end

def set(var, value)

def set(var, value)
  @vars[var] = value
end