Class: Himari::Decisions::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/himari/decisions/base.rb

Direct Known Subclasses

Authentication, Authorization, Claims

Defined Under Namespace

Classes: DecisionAlreadyMade, InvalidEffect

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBase

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

#effectObject (readonly)

Returns the value of attribute effect.



21
22
23
# File 'lib/himari/decisions/base.rb', line 21

def effect
  @effect
end

#effect_commentObject (readonly)

Returns the value of attribute effect_comment.



21
22
23
# File 'lib/himari/decisions/base.rb', line 21

def effect_comment
  @effect_comment
end

#rule_nameObject (readonly)

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_effectsObject



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!(comment = ""); decide!(:allow, comment); end

#as_logObject



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!(comment = ""); decide!(:continue, comment); end

#decide!(effect, comment = "") ⇒ Object



49
50
51
52
53
54
55
# File 'lib/himari/decisions/base.rb', line 49

def decide!(effect, comment = "")
  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 = comment
  nil
end

#deny!(comment = "") ⇒ Object



59
# File 'lib/himari/decisions/base.rb', line 59

def deny!(comment = ""); decide!(:deny, comment); 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!(comment = ""); decide!(:skip, comment); end

#to_evolve_argsObject

Raises:

  • (NotImplementedError)


23
24
25
# File 'lib/himari/decisions/base.rb', line 23

def to_evolve_args
  raise NotImplementedError
end

#to_hObject



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: effect_comment,
  }
end