class Interceptors::Executor
Attributes
context[R]
middleware[R]
Public Class Methods
new(context = Context.new)
click to toggle source
# File lib/interceptors/executor.rb, line 5 def initialize(context = Context.new) @middleware = Middleware.new @context = context end
Public Instance Methods
call()
click to toggle source
# File lib/interceptors/executor.rb, line 14 def call while (interceptor, step = fetch_next) with_exception_handling(interceptor) do interceptor.public_send(step, context) end end context end
register(interceptor)
click to toggle source
# File lib/interceptors/executor.rb, line 10 def register(interceptor) middleware.enqueue(interceptor) end
Private Instance Methods
fetch_next()
click to toggle source
# File lib/interceptors/executor.rb, line 26 def fetch_next if context[:error] [middleware.pop, :on_error] unless middleware.on_leave.empty? elsif !middleware.on_enter.empty? interceptor = middleware.dequeue middleware.push(interceptor) [interceptor, :on_enter] elsif !middleware.on_leave.empty? [middleware.pop, :on_leave] end end
with_exception_handling(interceptor) { || ... }
click to toggle source
# File lib/interceptors/executor.rb, line 38 def with_exception_handling(interceptor) yield rescue StandardError => e context[:error] = e context[:error_raised_at] = interceptor.class.name end