class Acfs::Service::Middleware::Stack
Constants
- IDENTITY
- MUTEX
Attributes
middlewares[R]
Public Class Methods
new()
click to toggle source
# File lib/acfs/service/middleware/stack.rb, line 14 def initialize @middlewares = [] end
Public Instance Methods
build(app = IDENTITY)
click to toggle source
# File lib/acfs/service/middleware/stack.rb, line 34 def build(app = IDENTITY) middlewares.reverse.inject(app) do |next_middleware, current_middleware| klass, args, block = current_middleware args ||= [] if klass.is_a?(Class) klass.new(next_middleware, *args, &block) elsif klass.respond_to?(:call) lambda do |env| next_middleware.call(klass.call(env, *args)) end else raise "Invalid middleware, doesn't respond to `call`: #{klass.inspect}" end end end
build!()
click to toggle source
# File lib/acfs/service/middleware/stack.rb, line 24 def build! return if @app MUTEX.synchronize do return if @app @app = build end end
call(request)
click to toggle source
# File lib/acfs/service/middleware/stack.rb, line 18 def call(request) build! unless @app @app.call request end
clear()
click to toggle source
# File lib/acfs/service/middleware/stack.rb, line 59 def clear middlewares.clear end
each() { |first| ... }
click to toggle source
# File lib/acfs/service/middleware/stack.rb, line 55 def each middlewares.each {|x| yield x.first } end
insert(index, klass, *args, &block)
click to toggle source
# File lib/acfs/service/middleware/stack.rb, line 51 def insert(index, klass, *args, &block) middlewares.insert(index, [klass, args, block]) end