Skip to content
Kward Search API index

Class: Kward::Hooks::Decision

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/hooks/decision.rb

Overview

Normalized result returned by lifecycle hooks.

Constant Summary collapse

VALID_DECISIONS =
%w[allow deny ask modify warn retry defer].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(decision:, message: nil, payload: nil, metadata: nil) ⇒ Decision

Returns a new instance of Decision.

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
# File 'lib/kward/hooks/decision.rb', line 10

def initialize(decision:, message: nil, payload: nil, metadata: nil)
  @decision = decision.to_s
  raise ArgumentError, "Unknown hook decision: #{@decision}" unless VALID_DECISIONS.include?(@decision)

  @message = message&.to_s
  @payload = payload || {}
  @metadata =  || {}
end

Instance Attribute Details

#decisionObject (readonly)

Returns the value of attribute decision.



8
9
10
# File 'lib/kward/hooks/decision.rb', line 8

def decision
  @decision
end

#messageObject (readonly)

Returns the value of attribute message.



8
9
10
# File 'lib/kward/hooks/decision.rb', line 8

def message
  @message
end

#metadataObject (readonly)

Returns the value of attribute metadata.



8
9
10
# File 'lib/kward/hooks/decision.rb', line 8

def 
  @metadata
end

#payloadObject (readonly)

Returns the value of attribute payload.



8
9
10
# File 'lib/kward/hooks/decision.rb', line 8

def payload
  @payload
end

Class Method Details

.allow(message = nil, metadata: nil) ⇒ Object



19
20
21
# File 'lib/kward/hooks/decision.rb', line 19

def self.allow(message = nil, metadata: nil)
  new(decision: "allow", message: message, metadata: )
end

.ask(message = nil, metadata: nil) ⇒ Object



27
28
29
# File 'lib/kward/hooks/decision.rb', line 27

def self.ask(message = nil, metadata: nil)
  new(decision: "ask", message: message, metadata: )
end

.defer(message = nil, payload: nil, metadata: nil) ⇒ Object



44
45
46
# File 'lib/kward/hooks/decision.rb', line 44

def self.defer(message = nil, payload: nil, metadata: nil)
  new(decision: "defer", message: message, payload: payload, metadata: )
end

.deny(message = nil, metadata: nil) ⇒ Object



23
24
25
# File 'lib/kward/hooks/decision.rb', line 23

def self.deny(message = nil, metadata: nil)
  new(decision: "deny", message: message, metadata: )
end

.modify(payload = nil, message: nil, metadata: nil, **payload_keywords) ⇒ Object



31
32
33
34
# File 'lib/kward/hooks/decision.rb', line 31

def self.modify(payload = nil, message: nil, metadata: nil, **payload_keywords)
  payload = payload_keywords unless payload_keywords.empty?
  new(decision: "modify", message: message, payload: payload || {}, metadata: )
end

.normalize(value) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/kward/hooks/decision.rb', line 48

def self.normalize(value)
  case value
  when nil
    allow
  when Decision
    value
  when String, Symbol
    new(decision: value)
  when Hash
    new(
      decision: value[:decision] || value["decision"] || "allow",
      message: value[:message] || value["message"],
      payload: value[:payload] || value["payload"],
      metadata: value[:metadata] || value["metadata"]
    )
  else
    raise ArgumentError, "Invalid hook decision: #{value.inspect}"
  end
end

.retry(message = nil, payload: nil, metadata: nil) ⇒ Object



40
41
42
# File 'lib/kward/hooks/decision.rb', line 40

def self.retry(message = nil, payload: nil, metadata: nil)
  new(decision: "retry", message: message, payload: payload, metadata: )
end

.warn(message = nil, metadata: nil) ⇒ Object



36
37
38
# File 'lib/kward/hooks/decision.rb', line 36

def self.warn(message = nil, metadata: nil)
  new(decision: "warn", message: message, metadata: )
end

Instance Method Details

#allow?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/kward/hooks/decision.rb', line 68

def allow?
  decision == "allow"
end

#ask?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/kward/hooks/decision.rb', line 76

def ask?
  decision == "ask"
end

#blocking?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/kward/hooks/decision.rb', line 88

def blocking?
  deny? || ask?
end

#deny?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/kward/hooks/decision.rb', line 72

def deny?
  decision == "deny"
end

#modify?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/kward/hooks/decision.rb', line 80

def modify?
  decision == "modify"
end

#to_hObject



92
93
94
95
96
97
98
99
# File 'lib/kward/hooks/decision.rb', line 92

def to_h
  {
    decision: decision,
    message: message,
    payload: payload,
    metadata: 
  }
end

#warning?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/kward/hooks/decision.rb', line 84

def warning?
  decision == "warn"
end