diff options
author | Colin Curtin <colin@procore.com> | 2008-12-20 20:21:20 -0800 |
---|---|---|
committer | Colin Curtin <colin@procore.com> | 2008-12-20 20:21:20 -0800 |
commit | 0e121f9ed93ebb417cc63307aaaf47f8adfd220d (patch) | |
tree | 39530f289b38a5dd1b2e6b170dab2631c983aaf3 /actionpack/lib/action_controller/middleware_stack.rb | |
parent | b0187434bd7601a5b2e5f7afac99c964e566b9db (diff) | |
parent | a0d091a41604d709cf2b99c85dcf4ae3ee275b9c (diff) | |
download | rails-0e121f9ed93ebb417cc63307aaaf47f8adfd220d.tar.gz rails-0e121f9ed93ebb417cc63307aaaf47f8adfd220d.tar.bz2 rails-0e121f9ed93ebb417cc63307aaaf47f8adfd220d.zip |
Merge branch 'master' of git@github.com:lifo/docrails
Diffstat (limited to 'actionpack/lib/action_controller/middleware_stack.rb')
-rw-r--r-- | actionpack/lib/action_controller/middleware_stack.rb | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/actionpack/lib/action_controller/middleware_stack.rb b/actionpack/lib/action_controller/middleware_stack.rb index a6597a6fec..74f28565c0 100644 --- a/actionpack/lib/action_controller/middleware_stack.rb +++ b/actionpack/lib/action_controller/middleware_stack.rb @@ -1,19 +1,39 @@ module ActionController class MiddlewareStack < Array class Middleware - attr_reader :klass, :args, :block + attr_reader :args, :block def initialize(klass, *args, &block) - if klass.is_a?(Class) - @klass = klass + @klass = klass + + options = args.extract_options! + if options.has_key?(:if) + @conditional = options.delete(:if) else - @klass = klass.to_s.constantize + @conditional = true end + args << options unless options.empty? @args = args @block = block end + def klass + if @klass.is_a?(Class) + @klass + else + @klass.to_s.constantize + end + end + + def active? + if @conditional.respond_to?(:call) + @conditional.call + else + @conditional + end + end + def ==(middleware) case middleware when Middleware @@ -50,8 +70,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 |