aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/middleware_stack.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_controller/middleware_stack.rb')
-rw-r--r--actionpack/lib/action_controller/middleware_stack.rb22
1 files changed, 21 insertions, 1 deletions
diff --git a/actionpack/lib/action_controller/middleware_stack.rb b/actionpack/lib/action_controller/middleware_stack.rb
index a6597a6fec..ba99f77b81 100644
--- a/actionpack/lib/action_controller/middleware_stack.rb
+++ b/actionpack/lib/action_controller/middleware_stack.rb
@@ -10,10 +10,26 @@ module ActionController
@klass = klass.to_s.constantize
end
+ options = args.extract_options!
+ if options.has_key?(:if)
+ @conditional = options.delete(:if)
+ else
+ @conditional = true
+ end
+ args << options unless options.empty?
+
@args = args
@block = block
end
+ def active?
+ if @conditional.respond_to?(:call)
+ @conditional.call
+ else
+ @conditional
+ end
+ end
+
def ==(middleware)
case middleware
when Middleware
@@ -50,8 +66,12 @@ module ActionController
push(middleware)
end
+ def active
+ find_all { |middleware| middleware.active? }
+ end
+
def build(app)
- reverse.inject(app) { |a, e| e.build(a) }
+ active.reverse.inject(app) { |a, e| e.build(a) }
end
end
end