class Grape::Middleware::Stack
Class to handle the stack of middlewares based on ActionDispatch::MiddlewareStack It allows to insert and insert after
Attributes
middlewares[RW]
others[RW]
Public Class Methods
new()
click to toggle source
# File lib/grape/middleware/stack.rb, line 37 def initialize @middlewares = [] @others = [] end
Public Instance Methods
[](i)
click to toggle source
# File lib/grape/middleware/stack.rb, line 54 def [](i) middlewares[i] end
build(builder = Rack::Builder.new)
click to toggle source
@return [Rack::Builder] the builder object with our middlewares applied
# File lib/grape/middleware/stack.rb, line 87 def build(builder = Rack::Builder.new) others.shift(others.size).each(&method(:merge_with)) middlewares.each do |m| m.block ? builder.use(m.klass, *m.args, &m.block) : builder.use(m.klass, *m.args) end builder end
concat(other_specs)
click to toggle source
@description Add middlewares with :use operation to the stack. Store others with :insert_* operation for later @param [Array] other_specs An array of middleware specifications (e.g. [[:use, klass], [:insert_before, *args]])
# File lib/grape/middleware/stack.rb, line 97 def concat(other_specs) @others << Array(other_specs).reject { |o| o.first == :use } merge_with Array(other_specs).select { |o| o.first == :use } end
each() { |x| ... }
click to toggle source
# File lib/grape/middleware/stack.rb, line 42 def each @middlewares.each { |x| yield x } end
insert(index, *args, &block)
click to toggle source
# File lib/grape/middleware/stack.rb, line 58 def insert(index, *args, &block) index = assert_index(index, :before) middleware = self.class::Middleware.new(*args, &block) middlewares.insert(index, middleware) end
Also aliased as: insert_before
insert_after(index, *args, &block)
click to toggle source
# File lib/grape/middleware/stack.rb, line 66 def insert_after(index, *args, &block) index = assert_index(index, :after) insert(index + 1, *args, &block) end
last()
click to toggle source
# File lib/grape/middleware/stack.rb, line 50 def last middlewares.last end
merge_with(middleware_specs)
click to toggle source
# File lib/grape/middleware/stack.rb, line 76 def merge_with(middleware_specs) middleware_specs.each do |operation, *args| if args.last.is_a?(Proc) public_send(operation, *args, &args.pop) else public_send(operation, *args) end end end
size()
click to toggle source
# File lib/grape/middleware/stack.rb, line 46 def size middlewares.size end
use(*args, &block)
click to toggle source
# File lib/grape/middleware/stack.rb, line 71 def use(*args, &block) middleware = self.class::Middleware.new(*args, &block) middlewares.push(middleware) end
Protected Instance Methods
assert_index(index, where)
click to toggle source
# File lib/grape/middleware/stack.rb, line 104 def assert_index(index, where) i = index.is_a?(Integer) ? index : middlewares.index(index) i || raise("No such middleware to insert #{where}: #{index.inspect}") end