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

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBase

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_effectsObject (readonly)

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

#effectObject (readonly)

Returns the value of attribute effect.



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

def effect
  @effect
end

#effect_commentObject (readonly)

Returns the value of attribute effect_comment.



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

def effect_comment
  @effect_comment
end

#effect_suggestionObject (readonly)

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_messageObject (readonly)

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_nameObject (readonly)

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_logObject



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, comment = "", 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 = 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_argsObject

Raises:

  • (NotImplementedError)


25
26
27
# File 'lib/himari/decisions/base.rb', line 25

def to_evolve_args
  raise NotImplementedError
end

#to_hObject



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: 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