Class: Himari::Decisions::Base
- Inherits:
-
Object
- Object
- Himari::Decisions::Base
show all
- Defined in:
- lib/himari/decisions/base.rb
Defined Under Namespace
Classes: DecisionAlreadyMade, InvalidEffect
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize ⇒ Base
Returns a new instance of Base.
15
16
17
18
19
|
# File 'lib/himari/decisions/base.rb', line 15
def initialize
@rule_name = nil
@effect = nil
raise "#{self.class.name}.valid_effects is missing [BUG]" unless self.class.valid_effects
end
|
Instance Attribute Details
#effect ⇒ Object
Returns the value of attribute effect.
21
22
23
|
# File 'lib/himari/decisions/base.rb', line 21
def effect
@effect
end
|
Returns the value of attribute effect_comment.
21
22
23
|
# File 'lib/himari/decisions/base.rb', line 21
def
@effect_comment
end
|
#rule_name ⇒ Object
Returns the value of attribute rule_name.
21
22
23
|
# File 'lib/himari/decisions/base.rb', line 21
def rule_name
@rule_name
end
|
Class Method Details
.allow_effects(*effects) ⇒ Object
7
8
9
|
# File 'lib/himari/decisions/base.rb', line 7
def self.allow_effects(*effects)
@valid_effects = effects
end
|
.valid_effects ⇒ Object
11
12
13
|
# File 'lib/himari/decisions/base.rb', line 11
def self.valid_effects
@valid_effects
end
|
Instance Method Details
#allow!(comment = "") ⇒ Object
57
|
# File 'lib/himari/decisions/base.rb', line 57
def allow!( = ""); decide!(:allow, ); end
|
#as_log ⇒ Object
35
36
37
|
# File 'lib/himari/decisions/base.rb', line 35
def as_log
to_h
end
|
#continue!(comment = "") ⇒ Object
58
|
# File 'lib/himari/decisions/base.rb', line 58
def continue!( = ""); decide!(:continue, ); end
|
#decide!(effect, comment = "") ⇒ Object
49
50
51
52
53
54
55
|
# File 'lib/himari/decisions/base.rb', line 49
def decide!(effect, = "")
raise DecisionAlreadyMade, "decision can only be made once per rule (#{rule_name})" if @effect
raise InvalidEffect, "this effect is not valid under this rule. Valid effects: #{self.class.valid_effects.inspect} (#{rule_name})" unless self.class.valid_effects.include?(effect)
@effect = effect
@effect_comment =
nil
end
|
#deny!(comment = "") ⇒ Object
59
|
# File 'lib/himari/decisions/base.rb', line 59
def deny!( = ""); decide!(:deny, ); end
|
#evolve(rule_name) ⇒ Object
39
40
41
|
# File 'lib/himari/decisions/base.rb', line 39
def evolve(rule_name)
self.class.new(**to_evolve_args).set_rule_name(rule_name)
end
|
#set_rule_name(rule_name) ⇒ Object
43
44
45
46
47
|
# File 'lib/himari/decisions/base.rb', line 43
def set_rule_name(rule_name)
raise "cannot override rule_name" if @rule_name
@rule_name = rule_name
self
end
|
#skip!(comment = "") ⇒ Object
60
|
# File 'lib/himari/decisions/base.rb', line 60
def skip!( = ""); decide!(:skip, ); end
|
#to_evolve_args ⇒ Object
23
24
25
|
# File 'lib/himari/decisions/base.rb', line 23
def to_evolve_args
raise NotImplementedError
end
|
#to_h ⇒ Object
27
28
29
30
31
32
33
|
# File 'lib/himari/decisions/base.rb', line 27
def to_h
{
rule_name: rule_name,
effect: effect,
effect_comment: ,
}
end
|