Sha256: b0698330fb2dc43be8bb2e07b86ef1c49ab2b3bd6532cb44c11cd24319d5b1c3
Contents?: true
Size: 984 Bytes
Versions: 2
Compression:
Stored size: 984 Bytes
Contents
module Net class HTTP module Middleware class Chain attr_accessor :stack def initialize(&block) @stack = [] instance_eval(&block) if block_given? end def use(middleware, *args) stack << [middleware, args] end def call(request, body = nil, &on_finish) build_call_chain(stack.dup, on_finish).call(request, body) end private def build_call_chain(stack, on_finish) stack.reverse.reduce(FinalizeMiddleware.new(on_finish)) do |chain, current_middleware| klass, args = current_middleware klass.new(chain, *args) end end # Final middleware which will execute orig_request class FinalizeMiddleware def initialize(on_finish) @on_finish = on_finish end def call(_req, _body = nil) @on_finish.call end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
net-http-middleware-0.2.0 | lib/net/http/middleware/chain.rb |
net-http-middleware-0.1.0 | lib/net/http/middleware/chain.rb |