Class: Hubbado::Sequence::Runner::Dispatch

Inherits:
Object
  • Object
show all
Includes:
Log::Dependency
Defined in:
lib/hubbado/sequence/runner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sequencer_class, result) ⇒ Dispatch

Returns a new instance of Dispatch.



30
31
32
33
34
# File 'lib/hubbado/sequence/runner.rb', line 30

def initialize(sequencer_class, result)
  @sequencer_class = sequencer_class
  @result = result
  @handled = false
end

Instance Attribute Details

#resultObject (readonly)

Returns the value of attribute result.



28
29
30
# File 'lib/hubbado/sequence/runner.rb', line 28

def result
  @result
end

#returnedObject (readonly)

Returns the value of attribute returned.



28
29
30
# File 'lib/hubbado/sequence/runner.rb', line 28

def returned
  @returned
end

#sequencer_classObject (readonly)

Returns the value of attribute sequencer_class.



28
29
30
# File 'lib/hubbado/sequence/runner.rb', line 28

def sequencer_class
  @sequencer_class
end

Instance Method Details

#codeObject



72
73
74
# File 'lib/hubbado/sequence/runner.rb', line 72

def code
  @result.error&.[](:code)
end

#enforce_safety_nets!Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/hubbado/sequence/runner.rb', line 80

def enforce_safety_nets!
  return if handled?

  log_unhandled

  case code
  when :forbidden
    raise Errors::Unauthorized.new(
      "#{@sequencer_class.name} denied: #{@result.message}",
      @result
    )
  when :not_found
    raise Errors::NotFound, "#{@sequencer_class.name} reported not_found"
  else
    raise Errors::Failed, "#{@sequencer_class.name} failed (#{code}): #{@result.message}"
  end
end

#handled?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/hubbado/sequence/runner.rb', line 76

def handled?
  @result.ok? || @handled
end

#log_unhandledObject



98
99
100
# File 'lib/hubbado/sequence/runner.rb', line 98

def log_unhandled
  logger.error("Sequencer #{@sequencer_class.name} failed unhandled at #{step_label} (#{code}): #{trail_summary}")
end

#not_foundObject



48
49
50
51
52
# File 'lib/hubbado/sequence/runner.rb', line 48

def not_found
  return unless code == :not_found
  execute { yield(@result.ctx) }
  logger.info("Sequencer #{@sequencer_class.name} not found at #{step_label}: #{trail_summary}")
end

#otherwiseObject

otherwise deliberately does not catch policy denials or not_found —those have their own required handlers.



62
63
64
65
66
67
68
69
70
# File 'lib/hubbado/sequence/runner.rb', line 62

def otherwise
  return if @result.ok?
  return if code == :forbidden
  return if code == :not_found
  return if @handled

  execute { yield(@result.ctx) }
  logger.info("Sequencer #{@sequencer_class.name} failed at #{step_label} (#{code}): #{trail_summary}")
end

#policy_failedObject



42
43
44
45
46
# File 'lib/hubbado/sequence/runner.rb', line 42

def policy_failed
  return unless code == :forbidden
  execute { yield(@result.ctx) }
  logger.info("Sequencer #{@sequencer_class.name} policy failed at #{step_label} (#{code}): #{trail_summary}")
end

#successObject



36
37
38
39
40
# File 'lib/hubbado/sequence/runner.rb', line 36

def success
  return unless @result.ok?
  execute { yield(@result.ctx) }
  logger.info("Sequencer #{@sequencer_class.name} succeeded: #{trail_summary}")
end

#validation_failedObject



54
55
56
57
58
# File 'lib/hubbado/sequence/runner.rb', line 54

def validation_failed
  return unless code == :validation_failed
  execute { yield(@result.ctx) }
  logger.info("Sequencer #{@sequencer_class.name} validation failed at #{step_label}: #{trail_summary}")
end