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 ([email protected])

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



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

def initialize(query = nil, judge: $judge, global: $global, options: $options, loog: $loog)
  query = Fbe.pmp(fb: Fbe.fb, global:, options:, loog:).hr.send(judge.gsub('-', '_')) 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:



62
63
64
65
66
67
68
# File 'lib/fbe/award.rb', line 62

def bill(vars = {})
  term = Factbase::Syntax.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:



72
73
74
75
76
77
# File 'lib/fbe/award.rb', line 72

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