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
Class Attribute Summary collapse
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize ⇒ Base
Returns a new instance of Base.
17
18
19
20
21
|
# File 'lib/himari/decisions/base.rb', line 17
def initialize
@rule_name = nil
@effect = nil
raise "#{self.class.name}.valid_effects is missing [BUG]" unless self.class.valid_effects
end
|
Class Attribute Details
.valid_effects ⇒ Object
Returns the value of attribute valid_effects.
14
15
16
|
# File 'lib/himari/decisions/base.rb', line 14
def valid_effects
@valid_effects
end
|
Instance Attribute Details
#effect ⇒ Object
Returns the value of attribute effect.
23
24
25
|
# File 'lib/himari/decisions/base.rb', line 23
def effect
@effect
end
|
Returns the value of attribute effect_comment.
23
24
25
|
# File 'lib/himari/decisions/base.rb', line 23
def
@effect_comment
end
|
#effect_suggestion ⇒ Object
Returns the value of attribute effect_suggestion.
23
24
25
|
# File 'lib/himari/decisions/base.rb', line 23
def effect_suggestion
@effect_suggestion
end
|
#effect_user_facing_message ⇒ Object
Returns the value of attribute effect_user_facing_message.
23
24
25
|
# File 'lib/himari/decisions/base.rb', line 23
def effect_user_facing_message
@effect_user_facing_message
end
|
#rule_name ⇒ Object
Returns the value of attribute rule_name.
23
24
25
|
# File 'lib/himari/decisions/base.rb', line 23
def rule_name
@rule_name
end
|
Class Method Details
.allow_effects(*effects) ⇒ Object
9
10
11
|
# File 'lib/himari/decisions/base.rb', line 9
def self.allow_effects(*effects)
@valid_effects = effects
end
|
Instance Method Details
#allow!(*args, **kwargs) ⇒ Object
67
|
# File 'lib/himari/decisions/base.rb', line 67
def allow!(*args, **kwargs); decide!(:allow, *args, **kwargs); end
|
#as_log ⇒ Object
40
41
42
|
# File 'lib/himari/decisions/base.rb', line 40
def as_log
to_h
end
|
#continue!(*args, **kwargs) ⇒ Object
68
|
# File 'lib/himari/decisions/base.rb', line 68
def continue!(*args, **kwargs); decide!(:continue, *args, **kwargs); end
|
#decide!(effect, comment = "", user_facing_message: nil, suggest: nil) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/himari/decisions/base.rb', line 55
def decide!(effect, = "", user_facing_message: nil, suggest: nil)
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)
raise InvalidEffect, "only deny effect can have suggestion" if suggest && effect != :deny
@effect = effect
@effect_comment =
@effect_user_facing_message = user_facing_message
@effect_suggestion = suggest
nil
end
|
#deny!(*args, **kwargs) ⇒ Object
69
|
# File 'lib/himari/decisions/base.rb', line 69
def deny!(*args, **kwargs); decide!(:deny, *args, **kwargs); end
|
#evolve(rule_name) ⇒ Object
44
45
46
|
# File 'lib/himari/decisions/base.rb', line 44
def evolve(rule_name)
self.class.new(**to_evolve_args).set_rule_name(rule_name)
end
|
#set_rule_name(rule_name) ⇒ Object
48
49
50
51
52
53
|
# File 'lib/himari/decisions/base.rb', line 48
def set_rule_name(rule_name)
raise "cannot override rule_name" if @rule_name
@rule_name = rule_name
self
end
|
#skip!(*args, **kwargs) ⇒ Object
70
|
# File 'lib/himari/decisions/base.rb', line 70
def skip!(*args, **kwargs); decide!(:skip, *args, **kwargs); end
|
#to_evolve_args ⇒ Object
25
26
27
|
# File 'lib/himari/decisions/base.rb', line 25
def to_evolve_args
raise NotImplementedError
end
|
#to_h ⇒ Object
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/himari/decisions/base.rb', line 29
def to_h
{
rule_name: rule_name,
effect: effect,
effect_comment: ,
}.tap do |x|
x[:effect_user_facing_message] = effect_user_facing_message if effect_user_facing_message
x[:effect_suggestion] = effect_suggestion if effect_suggestion
end
end
|