Sha256: c3e810eeaface9ec6b36ad4cb61fef701457566a277998f4d57c0e94f3d1a924
Contents?: true
Size: 1 KB
Versions: 1
Compression:
Stored size: 1 KB
Contents
module Interceptors class Executor attr_reader :middleware, :context def initialize(context = Context.new) @middleware = Middleware.new @context = context end def register(interceptor) middleware.enqueue(interceptor) end def call while (interceptor, step = fetch_next) with_exception_handling(interceptor) do interceptor.public_send(step, context) end end context end private 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 def with_exception_handling(interceptor) yield rescue StandardError => e context[:error] = e context[:error_raised_at] = interceptor.class.name end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
interceptors-0.1.1 | lib/interceptors/executor.rb |