提交 53fe301a 编写于 作者: S Sven Fuchs 提交者: Joshua Peek

Lazy evaluate middleware arguments [#2028 state:resolved]

Signed-off-by: NJoshua Peek <josh@joshpeek.com>
上级 9702636a
......@@ -67,11 +67,17 @@ def inspect
def build(app)
if block
klass.new(app, *args, &block)
klass.new(app, *build_args, &block)
else
klass.new(app, *args)
klass.new(app, *build_args)
end
end
private
def build_args
Array(args).map { |arg| arg.respond_to?(:call) ? arg.call : arg }
end
end
def initialize(*args, &block)
......
......@@ -5,7 +5,7 @@
use "ActionController::Failsafe"
use lambda { ActionController::Base.session_store },
ActionController::Base.session_options
lambda { ActionController::Base.session_options }
use "ActionController::RewindableInput"
use "ActionController::ParamsParser"
......
......@@ -80,4 +80,11 @@ def setup
end
assert_equal BazMiddleware, @stack.last.klass
end
test "lazy evaluates middleware arguments" do
assert_difference "@stack.size" do
@stack.use BazMiddleware, lambda { :foo }
end
assert_equal [:foo], @stack.last.send(:build_args)
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册