diff options
author | Santiago Pastorino <santiago@wyeworks.com> | 2014-09-01 16:17:19 -0300 |
---|---|---|
committer | Santiago Pastorino <santiago@wyeworks.com> | 2014-09-01 16:17:19 -0300 |
commit | d79e9eefc88f28dab8ec620094ea2f7c29b93c18 (patch) | |
tree | d51a7a29fbd8e2c5963112502f9ab26ae22d0636 | |
parent | 366c1242a227475eb74edfe39e7083569532ea15 (diff) | |
parent | dc881c96f4d649c8c16d35d4d728159f985b7ef6 (diff) | |
download | rack-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.rb | 15 | ||||
-rw-r--r-- | test/spec_server.rb | 35 |
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]) |