Class: Grape::Middleware::Stack
- Inherits:
-
Object
- Object
- Grape::Middleware::Stack
- Includes:
- Enumerable
- Defined in:
- lib/grape/middleware/stack.rb
Overview
Class to handle the stack of middlewares based on ActionDispatch::MiddlewareStack It allows to insert and insert after
Defined Under Namespace
Classes: Middleware
Instance Attribute Summary collapse
-
#middlewares ⇒ Object
Returns the value of attribute middlewares.
-
#others ⇒ Object
Returns the value of attribute others.
Instance Method Summary collapse
- #[](i) ⇒ Object
-
#build(builder = Rack::Builder.new) ⇒ Rack::Builder
The builder object with our middlewares applied.
- #concat(other_specs) ⇒ Object
- #each ⇒ Object
-
#initialize ⇒ Stack
constructor
A new instance of Stack.
- #insert(index, *args, &block) ⇒ Object (also: #insert_before)
- #insert_after(index, *args, &block) ⇒ Object
- #last ⇒ Object
- #merge_with(middleware_specs) ⇒ Object
- #size ⇒ Object
- #use(*args, &block) ⇒ Object
Constructor Details
#initialize ⇒ Stack
Returns a new instance of Stack.
39 40 41 42 |
# File 'lib/grape/middleware/stack.rb', line 39 def initialize @middlewares = [] @others = [] end |
Instance Attribute Details
#middlewares ⇒ Object
Returns the value of attribute middlewares.
37 38 39 |
# File 'lib/grape/middleware/stack.rb', line 37 def middlewares @middlewares end |
#others ⇒ Object
Returns the value of attribute others.
37 38 39 |
# File 'lib/grape/middleware/stack.rb', line 37 def others @others end |
Instance Method Details
#[](i) ⇒ Object
56 57 58 |
# File 'lib/grape/middleware/stack.rb', line 56 def [](i) middlewares[i] end |
#build(builder = Rack::Builder.new) ⇒ Rack::Builder
Returns the builder object with our middlewares applied.
89 90 91 92 93 94 95 |
# File 'lib/grape/middleware/stack.rb', line 89 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) ⇒ Object
99 100 101 102 |
# File 'lib/grape/middleware/stack.rb', line 99 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 ⇒ Object
44 45 46 |
# File 'lib/grape/middleware/stack.rb', line 44 def each @middlewares.each { |x| yield x } end |
#insert(index, *args, &block) ⇒ Object Also known as: insert_before
60 61 62 63 64 |
# File 'lib/grape/middleware/stack.rb', line 60 def insert(index, *args, &block) index = assert_index(index, :before) middleware = self.class::Middleware.new(*args, &block) middlewares.insert(index, middleware) end |
#insert_after(index, *args, &block) ⇒ Object
68 69 70 71 |
# File 'lib/grape/middleware/stack.rb', line 68 def insert_after(index, *args, &block) index = assert_index(index, :after) insert(index + 1, *args, &block) end |
#last ⇒ Object
52 53 54 |
# File 'lib/grape/middleware/stack.rb', line 52 def last middlewares.last end |
#merge_with(middleware_specs) ⇒ Object
78 79 80 81 82 83 84 85 86 |
# File 'lib/grape/middleware/stack.rb', line 78 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 ⇒ Object
48 49 50 |
# File 'lib/grape/middleware/stack.rb', line 48 def size middlewares.size end |
#use(*args, &block) ⇒ Object
73 74 75 76 |
# File 'lib/grape/middleware/stack.rb', line 73 def use(*args, &block) middleware = self.class::Middleware.new(*args, &block) middlewares.push(middleware) end |