Class: RaceGuard::Rule::Builder
- Inherits:
-
Object
- Object
- RaceGuard::Rule::Builder
- Defined in:
- lib/race_guard/rule.rb
Overview
DSL used inside define_rule blocks.
Class Method Summary collapse
Instance Method Summary collapse
- #build ⇒ Object
- #detect(&block) ⇒ Object
- #hook(event, &block) ⇒ Object
-
#initialize(name) ⇒ Builder
constructor
A new instance of Builder.
- #message(&block) ⇒ Object
- #run_on(*events) ⇒ Object
- #severity(level) ⇒ Object
Constructor Details
#initialize(name) ⇒ Builder
Returns a new instance of Builder.
35 36 37 38 39 40 41 42 |
# File 'lib/race_guard/rule.rb', line 35 def initialize(name) @name = name.to_sym @detect = nil @message = nil @hooks = {} @run_on = Set.new @severity = nil end |
Class Method Details
.validate_event!(event) ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/race_guard/rule.rb', line 80 def self.validate_event!(event) sym = event.to_sym return sym if Rule::KNOWN_EVENTS.include?(sym) list = Rule::KNOWN_EVENTS.join(', ') raise ArgumentError, "unknown rule event #{event.inspect} (expected one of: #{list})" end |
Instance Method Details
#build ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/race_guard/rule.rb', line 65 def build raise ArgumentError, "rule #{@name.inspect} requires detect { ... }" unless @detect raise ArgumentError, "rule #{@name.inspect} requires message { ... }" unless @message hooks_frozen = @hooks.transform_values { |list| list.dup.freeze }.freeze Rule.new( name: @name, detect_proc: @detect, message_proc: @message, hooks: hooks_frozen.freeze, run_on: @run_on.dup.freeze, severity_override: @severity ) end |
#detect(&block) ⇒ Object
44 45 46 |
# File 'lib/race_guard/rule.rb', line 44 def detect(&block) @detect = block end |
#hook(event, &block) ⇒ Object
52 53 54 55 |
# File 'lib/race_guard/rule.rb', line 52 def hook(event, &block) sym = self.class.validate_event!(event) (@hooks[sym] ||= []) << block end |
#message(&block) ⇒ Object
48 49 50 |
# File 'lib/race_guard/rule.rb', line 48 def (&block) @message = block end |
#run_on(*events) ⇒ Object
57 58 59 |
# File 'lib/race_guard/rule.rb', line 57 def run_on(*events) events.flatten.compact.each { |e| @run_on.add(self.class.validate_event!(e)) } end |
#severity(level) ⇒ Object
61 62 63 |
# File 'lib/race_guard/rule.rb', line 61 def severity(level) @severity = level&.to_sym end |