33require "active_support/inflector/methods"
44require "active_support/dependencies"
55
6+ class Module
7+ unless respond_to? ( :pass_keywords , true )
8+ private def pass_keywords ( *)
9+ end
10+ end
11+ end
12+
613module ActionDispatch
714 class MiddlewareStack
815 class Middleware
916 attr_reader :args , :block , :klass
1017
11- def initialize ( klass , args , block )
18+ pass_keywords def initialize ( klass , * args , & block )
1219 @klass = klass
1320 @args = args
1421 @block = block
22+ @factory = -> app { klass . new ( app , *args , &block ) }
1523 end
1624
1725 def name ; klass . name ; end
@@ -34,7 +42,7 @@ def inspect
3442 end
3543
3644 def build ( app )
37- klass . new ( app , * args , & block )
45+ @factory . call ( app )
3846 end
3947
4048 def build_instrumented ( app )
@@ -88,27 +96,27 @@ def [](i)
8896 middlewares [ i ]
8997 end
9098
91- def unshift ( klass , *args , &block )
92- middlewares . unshift ( build_middleware ( klass , args , block ) )
99+ pass_keywords def unshift ( klass , *args , &block )
100+ middlewares . unshift ( build_middleware ( klass , * args , & block ) )
93101 end
94102
95103 def initialize_copy ( other )
96104 self . middlewares = other . middlewares . dup
97105 end
98106
99- def insert ( index , klass , *args , &block )
107+ pass_keywords def insert ( index , klass , *args , &block )
100108 index = assert_index ( index , :before )
101- middlewares . insert ( index , build_middleware ( klass , args , block ) )
109+ middlewares . insert ( index , build_middleware ( klass , * args , & block ) )
102110 end
103111
104112 alias_method :insert_before , :insert
105113
106- def insert_after ( index , klass , *args , &block )
114+ pass_keywords def insert_after ( index , klass , *args , &block )
107115 index = assert_index ( index , :after )
108116 insert ( index + 1 , klass , *args , &block )
109117 end
110118
111- def swap ( target , klass , *args , &block )
119+ pass_keywords def swap ( target , klass , *args , &block )
112120 index = assert_index ( target , :before )
113121 insert ( index , klass , *args , &block )
114122 middlewares . delete_at ( index + 1 )
@@ -118,8 +126,8 @@ def delete(target)
118126 middlewares . delete_if { |m | m . klass == target }
119127 end
120128
121- def use ( klass , *args , &block )
122- middlewares . push ( build_middleware ( klass , args , block ) )
129+ pass_keywords def use ( klass , *args , &block )
130+ middlewares . push ( build_middleware ( klass , * args , & block ) )
123131 end
124132
125133 def build ( app = nil , &block )
@@ -140,8 +148,8 @@ def assert_index(index, where)
140148 i
141149 end
142150
143- def build_middleware ( klass , args , block )
144- Middleware . new ( klass , args , block )
151+ pass_keywords def build_middleware ( klass , * args , & block )
152+ Middleware . new ( klass , * args , & block )
145153 end
146154 end
147155end
0 commit comments