diff options
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware')
| -rw-r--r-- | actionpack/lib/action_dispatch/middleware/stack.rb | 72 | 
1 files changed, 15 insertions, 57 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/stack.rb b/actionpack/lib/action_dispatch/middleware/stack.rb index 5c5362ce4a..0e5ab507df 100644 --- a/actionpack/lib/action_dispatch/middleware/stack.rb +++ b/actionpack/lib/action_dispatch/middleware/stack.rb @@ -3,49 +3,15 @@ require "active_support/inflector/methods"  module ActionDispatch    class MiddlewareStack < Array      class Middleware -      def self.new(klass, *args, &block) -        if klass.is_a?(self) -          klass -        else -          super -        end -      end -        attr_reader :args, :block        def initialize(klass, *args, &block) -        @klass = klass - -        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 +        @klass, @args, @block = klass, args, block        end        def klass -        if @klass.respond_to?(:new) -          @klass -        elsif @klass.respond_to?(:call) -          @klass.call -        else -          ActiveSupport::Inflector.constantize(@klass.to_s) -        end -      end - -      def active? -        return false unless klass - -        if @conditional.respond_to?(:call) -          @conditional.call -        else -          @conditional -        end +        return @klass if @klass.respond_to?(:new) +        @klass = ActiveSupport::Inflector.constantize(@klass.to_s)        end        def ==(middleware) @@ -58,7 +24,7 @@ module ActionDispatch            if lazy_compare?(@klass) && lazy_compare?(middleware)              normalize(@klass) == normalize(middleware)            else -            klass.name == middleware.to_s +            klass.name == normalize(middleware.to_s)            end          end        end @@ -68,25 +34,18 @@ module ActionDispatch        end        def build(app) -        if block -          klass.new(app, *build_args, &block) -        else -          klass.new(app, *build_args) -        end +        klass.new(app, *args, &block)        end -      private -        def lazy_compare?(object) -          object.is_a?(String) || object.is_a?(Symbol) -        end +    private -        def normalize(object) -          object.to_s.strip.sub(/^::/, '') -        end +      def lazy_compare?(object) +        object.is_a?(String) || object.is_a?(Symbol) +      end -        def build_args -          Array(args).map { |arg| arg.respond_to?(:call) ? arg.call : arg } -        end +      def normalize(object) +        object.to_s.strip.sub(/^::/, '') +      end      end      def initialize(*args, &block) @@ -119,15 +78,14 @@ module ActionDispatch      end      def active -      find_all { |middleware| middleware.active? } +      ActiveSupport::Deprecation.warn "All middlewares in the chaing are active since the laziness " <<  +        "was removed from the middleware stack", caller      end      def build(app = nil, &blk)        app ||= blk -        raise "MiddlewareStack#build requires an app" unless app - -      active.reverse.inject(app) { |a, e| e.build(a) } +      reverse.inject(app) { |a, e| e.build(a) }      end    end  end  | 
