Class: Hubbado::Sequence::Runner::Dispatch
- Inherits:
-
Object
- Object
- Hubbado::Sequence::Runner::Dispatch
- Includes:
- Log::Dependency
- Defined in:
- lib/hubbado/sequence/runner.rb
Instance Attribute Summary collapse
-
#result ⇒ Object
readonly
Returns the value of attribute result.
-
#returned ⇒ Object
readonly
Returns the value of attribute returned.
-
#sequencer_class ⇒ Object
readonly
Returns the value of attribute sequencer_class.
Instance Method Summary collapse
- #code ⇒ Object
- #enforce_safety_nets! ⇒ Object
- #handled? ⇒ Boolean
-
#initialize(sequencer_class, result) ⇒ Dispatch
constructor
A new instance of Dispatch.
- #log_unhandled ⇒ Object
- #not_found ⇒ Object
-
#otherwise ⇒ Object
otherwise deliberately does not catch policy denials or not_found — those have their own required handlers.
- #policy_failed ⇒ Object
- #success ⇒ Object
- #validation_failed ⇒ Object
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
#result ⇒ Object (readonly)
Returns the value of attribute result.
28 29 30 |
# File 'lib/hubbado/sequence/runner.rb', line 28 def result @result end |
#returned ⇒ Object (readonly)
Returns the value of attribute returned.
28 29 30 |
# File 'lib/hubbado/sequence/runner.rb', line 28 def returned @returned end |
#sequencer_class ⇒ Object (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
#code ⇒ Object
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.}", @result ) when :not_found raise Errors::NotFound, "#{@sequencer_class.name} reported not_found" else raise Errors::Failed, "#{@sequencer_class.name} failed (#{code}): #{@result.}" end end |
#handled? ⇒ Boolean
76 77 78 |
# File 'lib/hubbado/sequence/runner.rb', line 76 def handled? @result.ok? || @handled end |
#log_unhandled ⇒ Object
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_found ⇒ Object
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 |
#otherwise ⇒ Object
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_failed ⇒ Object
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 |
#success ⇒ Object
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_failed ⇒ Object
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 |