Class: Fbe::Award

Inherits:
Object
  • Object
show all
Defined in:
lib/fbe/award.rb

Overview

A generator of awards.

First, you should create a bylaw, using the same Lisp-ish syntax as we use in queries to a Factbase, for example:

require 'fbe/award'
a = Fbe::Award.new('(award (in loc "lines") (give (times loc 5) "for LoC"))')

Then, you can either get a bill from it:

b = a.bill(loc: 345)
puts b.points  # how many points to reward, a number
puts b.greeting  # how to explain the reward, a text

Or else, you can get a bylaw text:

p = a.bylaw
puts p.markdown  # Markdown of the bylaw
Author

Yegor Bugayenko (yegor256@gmail.com)

Copyright

Copyright © 2024 Yegor Bugayenko

License

MIT

Defined Under Namespace

Classes: BTerm, Bill, Bylaw, PTerm

Instance Method Summary collapse

Constructor Details

#initialize(query = nil, judge: $judge, global: $global, options: $options, loog: $loog) ⇒ Award

Ctor.

Parameters:

  • query (String) (defaults to: nil)

    The query with the bylaw

  • judge (String) (defaults to: $judge)

    The name of the judge



35
36
37
38
# File 'lib/fbe/award.rb', line 35

def initialize(query = nil, judge: $judge, global: $global, options: $options, loog: $loog)
  query = Fbe.pmp(fb: Fbe.fb, global:, options:, loog:).hr.send(judge.tr('-', '_')) if query.nil?
  @query = query
end

Instance Method Details

#bill(vars = {}) ⇒ Fbe::Award::Bill

Build a bill object from this award query.

Parameters:

  • vars (Hash) (defaults to: {})

    Hash of variables

Returns:



43
44
45
46
47
48
49
# File 'lib/fbe/award.rb', line 43

def bill(vars = {})
  term = Factbase::Syntax.new(Factbase.new, @query, term: Fbe::Award::BTerm).to_term
  bill = Bill.new
  vars.each { |k, v| bill.set(k, v) }
  term.bill_to(bill)
  bill
end

#bylawFbe::Award::Bylaw

Build a bylaw object from this award query.

Returns:



53
54
55
56
57
58
# File 'lib/fbe/award.rb', line 53

def bylaw
  term = Factbase::Syntax.new(Factbase.new, @query, term: Fbe::Award::PTerm).to_term
  bylaw = Bylaw.new
  term.publish_to(bylaw)
  bylaw
end