summary refs log tree commit
diff options
context:
space:
mode:
authorSantiago Pastorino <santiago@wyeworks.com>2014-09-01 16:17:19 -0300
committerSantiago Pastorino <santiago@wyeworks.com>2014-09-01 16:17:19 -0300
commitd79e9eefc88f28dab8ec620094ea2f7c29b93c18 (patch)
treed51a7a29fbd8e2c5963112502f9ab26ae22d0636
parent366c1242a227475eb74edfe39e7083569532ea15 (diff)
parentdc881c96f4d649c8c16d35d4d728159f985b7ef6 (diff)
downloadrack-d79e9eefc88f28dab8ec620094ea2f7c29b93c18.tar.gz
Merge pull request #729 from jeremy/fixes/default-middleware-override-regression
Restore Rack::Server#middleware backward compatibility
-rw-r--r--lib/rack/server.rb15
-rw-r--r--test/spec_server.rb35
2 files changed, 28 insertions, 22 deletions
diff --git a/lib/rack/server.rb b/lib/rack/server.rb
index 42afb742..d9f971d7 100644
--- a/lib/rack/server.rb
+++ b/lib/rack/server.rb
@@ -235,17 +235,15 @@ module Rack
         m
       end
 
-      # Aliased for backwards-compatibility
-      alias :middleware :default_middleware_by_environment
+      def middleware
+        default_middleware_by_environment
+      end
     end
 
-    def default_middleware_by_environment
-      self.class.default_middleware_by_environment
+    def middleware
+      self.class.middleware
     end
 
-    # Aliased for backwards-compatibility
-    alias :middleware :default_middleware_by_environment
-
     def start &blk
       if options[:warn]
         $-w = true
@@ -325,8 +323,7 @@ module Rack
       end
 
       def build_app(app)
-        middlewares = default_middleware_by_environment[options[:environment]]
-        middlewares.reverse_each do |middleware|
+        middleware[options[:environment]].reverse_each do |middleware|
           middleware = middleware.call(self) if middleware.respond_to?(:call)
           next unless middleware
           klass, *args = middleware
diff --git a/test/spec_server.rb b/test/spec_server.rb
index 6692c99e..b2728505 100644
--- a/test/spec_server.rb
+++ b/test/spec_server.rb
@@ -28,21 +28,35 @@ describe Rack::Server do
     Rack::MockRequest.new(server.app).get("/").body.to_s.should.equal 'success'
   end
 
-  should "not include Rack::Lint in deployment or none environments" do
+  should "allow subclasses to override middleware" do
+    server = Class.new(Rack::Server).class_eval { def middleware; Hash.new [] end; self }
+    server.middleware['deployment'].should.not.equal []
+    server.new(:app => 'foo').middleware['deployment'].should.equal []
+  end
+
+  should "allow subclasses to override default middleware" do
+    server = Class.new(Rack::Server).instance_eval { def default_middleware_by_environment; Hash.new [] end; self }
+    server.middleware['deployment'].should.equal []
+    server.new(:app => 'foo').middleware['deployment'].should.equal []
+  end
+
+  should "only provide default middleware for development and deployment environments" do
+    Rack::Server.default_middleware_by_environment.keys.sort.should.equal %w(deployment development)
+  end
+
+  should "always return an empty array for unknown environments" do
     server = Rack::Server.new(:app => 'foo')
-    server.default_middleware_by_environment['deployment'].flatten.should.not.include(Rack::Lint)
-    server.default_middleware_by_environment['none'].flatten.should.not.include(Rack::Lint)
+    server.middleware['production'].should.equal []
   end
 
-  should "not include Rack::ShowExceptions in deployment or none environments" do
+  should "not include Rack::Lint in deployment environment" do
     server = Rack::Server.new(:app => 'foo')
-    server.default_middleware_by_environment['deployment'].flatten.should.not.include(Rack::ShowExceptions)
-    server.default_middleware_by_environment['none'].flatten.should.not.include(Rack::ShowExceptions)
+    server.middleware['deployment'].flatten.should.not.include(Rack::Lint)
   end
 
-  should "always return an empty array for unknown environments" do
+  should "not include Rack::ShowExceptions in deployment environment" do
     server = Rack::Server.new(:app => 'foo')
-    server.default_middleware_by_environment['production'].should.equal []
+    server.middleware['deployment'].flatten.should.not.include(Rack::ShowExceptions)
   end
 
   should "include Rack::TempfileReaper in deployment environment" do
@@ -66,11 +80,6 @@ describe Rack::Server do
     Rack::Server.logging_middleware.call(server).should.eql(nil)
   end
 
-  should "not force any middleware under the none configuration" do
-    server = Rack::Server.new(:app => 'foo')
-    server.default_middleware_by_environment['none'].should.be.empty
-  end
-
   should "use a full path to the pidfile" do
     # avoids issues with daemonize chdir
     opts = Rack::Server.new.send(:parse_options, %w[--pid testing.pid])