diff options
Diffstat (limited to 'actionpack/lib/action_dispatch/utils/middleware_stack.rb')
-rw-r--r-- | actionpack/lib/action_dispatch/utils/middleware_stack.rb | 16 |
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) |