Class: Fbe::Award::Bill
- Inherits:
-
Object
- Object
- Fbe::Award::Bill
- Defined in:
- lib/fbe/award.rb
Overview
A bill class that accumulates points and explanations for rewards.
This class tracks variables, point values, and explanatory text for each award component. It provides methods to calculate total points and generate a human-readable summary of the rewards.
Instance Attribute Summary collapse
-
#vars ⇒ Hash
readonly
Variables set in this bill.
Instance Method Summary collapse
-
#greeting ⇒ String
Generates a human-readable summary of the bill.
-
#initialize ⇒ Bill
constructor
Creates a new empty bill.
-
#line(value, text) ⇒ nil
Adds a point value with explanatory text to the bill.
-
#points ⇒ Integer
Calculates the total points in this bill.
-
#set(var, value) ⇒ Object
Sets a variable in the bill’s context.
Constructor Details
#initialize ⇒ Bill
Creates a new empty bill.
343 344 345 346 |
# File 'lib/fbe/award.rb', line 343 def initialize @lines = [] @vars = {} end |
Instance Attribute Details
#vars ⇒ Hash (readonly)
Returns Variables set in this bill.
337 338 339 |
# File 'lib/fbe/award.rb', line 337 def vars @vars end |
Instance Method Details
#greeting ⇒ String
Generates a human-readable summary of the bill.
394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/fbe/award.rb', line 394 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 |
#line(value, text) ⇒ nil
Zero-valued points are ignored
Adds a point value with explanatory text to the bill.
369 370 371 372 373 |
# File 'lib/fbe/award.rb', line 369 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 |
#points ⇒ Integer
Calculates the total points in this bill.
382 383 384 |
# File 'lib/fbe/award.rb', line 382 def points @lines.sum { |l| l[:v] }.to_f.round.to_i end |
#set(var, value) ⇒ Object
Sets a variable in the bill’s context.
356 357 358 |
# File 'lib/fbe/award.rb', line 356 def set(var, value) @vars[var] = value end |