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
- #[](index) ⇒ Object
-
#build(builder = Rack::Builder.new) ⇒ Rack::Builder
The builder object with our middlewares applied.
- #concat(other_specs) ⇒ Object
- #each(&block) ⇒ 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 ⇒ Object
Constructor Details
#initialize ⇒ Stack
Returns a new instance of Stack.
43 44 45 46 |
# File 'lib/grape/middleware/stack.rb', line 43 def initialize @middlewares = [] @others = [] end |
Instance Attribute Details
#middlewares ⇒ Object
Returns the value of attribute middlewares.
41 42 43 |
# File 'lib/grape/middleware/stack.rb', line 41 def middlewares @middlewares end |
#others ⇒ Object
Returns the value of attribute others.
41 42 43 |
# File 'lib/grape/middleware/stack.rb', line 41 def others @others end |
Instance Method Details
#[](index) ⇒ Object
60 61 62 |
# File 'lib/grape/middleware/stack.rb', line 60 def [](index) middlewares[index] end |
#build(builder = Rack::Builder.new) ⇒ Rack::Builder
Returns the builder object with our middlewares applied.
96 97 98 99 100 101 102 |
# File 'lib/grape/middleware/stack.rb', line 96 def build(builder = Rack::Builder.new) others.shift(others.size).each { |m| merge_with(m) } middlewares.each do |m| m.use_in(builder) end builder end |
#concat(other_specs) ⇒ Object
106 107 108 109 |
# File 'lib/grape/middleware/stack.rb', line 106 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(&block) ⇒ Object
48 49 50 |
# File 'lib/grape/middleware/stack.rb', line 48 def each(&block) @middlewares.each(&block) end |
#insert(index, *args, &block) ⇒ Object Also known as: insert_before
64 65 66 67 68 |
# File 'lib/grape/middleware/stack.rb', line 64 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
73 74 75 76 |
# File 'lib/grape/middleware/stack.rb', line 73 def insert_after(index, *args, &block) index = assert_index(index, :after) insert(index + 1, *args, &block) end |
#last ⇒ Object
56 57 58 |
# File 'lib/grape/middleware/stack.rb', line 56 def last middlewares.last end |
#merge_with(middleware_specs) ⇒ Object
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/grape/middleware/stack.rb', line 84 def merge_with(middleware_specs) middleware_specs.each do |operation, *args| if args.last.is_a?(Proc) last_proc = args.pop public_send(operation, *args, &last_proc) else public_send(operation, *args) end end end |
#size ⇒ Object
52 53 54 |
# File 'lib/grape/middleware/stack.rb', line 52 def size middlewares.size end |
#use ⇒ Object
79 80 81 82 |
# File 'lib/grape/middleware/stack.rb', line 79 def use(...) middleware = self.class::Middleware.new(...) middlewares.push(middleware) end |