aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/utils/middleware_stack.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_dispatch/utils/middleware_stack.rb')
-rw-r--r--actionpack/lib/action_dispatch/utils/middleware_stack.rb16
1 files changed, 13 insertions, 3 deletions
diff --git a/actionpack/lib/action_dispatch/utils/middleware_stack.rb b/actionpack/lib/action_dispatch/utils/middleware_stack.rb
index 924e3dbbc2..ee5f28d5cb 100644
--- a/actionpack/lib/action_dispatch/utils/middleware_stack.rb
+++ b/actionpack/lib/action_dispatch/utils/middleware_stack.rb
@@ -27,7 +27,9 @@ module ActionDispatch
end
def klass
- if @klass.is_a?(Class)
+ if @klass.respond_to?(:call)
+ @klass.call
+ elsif @klass.is_a?(Class)
@klass
else
@klass.to_s.constantize
@@ -37,6 +39,8 @@ module ActionDispatch
end
def active?
+ return false unless klass
+
if @conditional.respond_to?(:call)
@conditional.call
else
@@ -63,11 +67,17 @@ module ActionDispatch
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)