Move Rails::Rack::Metal to Rails::Application::Metal and just add cascade if any metal was declared.

This commit is contained in:
José Valim 2010-01-26 15:27:40 +01:00
parent 517b35a2bb
commit edb8131535
6 changed files with 15 additions and 5 deletions

View File

@ -9,6 +9,7 @@ module Rails
autoload :Configurable, 'rails/application/configurable' autoload :Configurable, 'rails/application/configurable'
autoload :Configuration, 'rails/application/configuration' autoload :Configuration, 'rails/application/configuration'
autoload :Finisher, 'rails/application/finisher' autoload :Finisher, 'rails/application/finisher'
autoload :Metal, 'rails/application/metal'
autoload :Railties, 'rails/application/railties' autoload :Railties, 'rails/application/railties'
autoload :RoutesReloader, 'rails/application/routes_reloader' autoload :RoutesReloader, 'rails/application/routes_reloader'

View File

@ -1,12 +1,16 @@
require 'action_dispatch' require 'action_dispatch'
module Rails module Rails
module Rack class Application
class Metal class Metal
def self.paths def self.paths
@paths ||= [] @paths ||= []
end end
def self.metals
@metals ||= []
end
def initialize(list=nil) def initialize(list=nil)
metals = [] metals = []
list = Array(list || :all).map(&:to_sym) list = Array(list || :all).map(&:to_sym)
@ -26,6 +30,7 @@ module Rails
end end
@metals = metals.map { |m| m.to_s.camelize.constantize } @metals = metals.map { |m| m.to_s.camelize.constantize }
self.class.metals.concat(@metals)
end end
def new(app) def new(app)

View File

@ -16,7 +16,7 @@ module Rails
middleware.use('::ActionDispatch::Cookies') middleware.use('::ActionDispatch::Cookies')
middleware.use(lambda { ActionController::Base.session_store }, lambda { ActionController::Base.session_options }) middleware.use(lambda { ActionController::Base.session_store }, lambda { ActionController::Base.session_options })
middleware.use('::ActionDispatch::Flash', :if => lambda { ActionController::Base.session_store }) middleware.use('::ActionDispatch::Flash', :if => lambda { ActionController::Base.session_store })
middleware.use(lambda { Rails::Rack::Metal.new(Rails.application.config.metals) }) middleware.use(lambda { Rails::Application::Metal.new(Rails.application.config.metals) }, :if => lambda { Rails::Application::Metal.metals.any? })
middleware.use('ActionDispatch::ParamsParser') middleware.use('ActionDispatch::ParamsParser')
middleware.use('::Rack::MethodOverride') middleware.use('::Rack::MethodOverride')
middleware.use('::ActionDispatch::Head') middleware.use('::ActionDispatch::Head')

View File

@ -99,7 +99,7 @@ module Rails
end end
initializer :add_metals do initializer :add_metals do
Rails::Rack::Metal.paths.unshift(*paths.app.metals.to_a) Rails::Application::Metal.paths.unshift(*paths.app.metals.to_a)
end end
initializer :load_application_initializers do initializer :load_application_initializers do

View File

@ -3,7 +3,6 @@ module Rails
autoload :Debugger, "rails/rack/debugger" autoload :Debugger, "rails/rack/debugger"
autoload :Logger, "rails/rack/logger" autoload :Logger, "rails/rack/logger"
autoload :LogTailer, "rails/rack/log_tailer" autoload :LogTailer, "rails/rack/log_tailer"
autoload :Metal, "rails/rack/metal"
autoload :Static, "rails/rack/static" autoload :Static, "rails/rack/static"
end end
end end

View File

@ -23,7 +23,6 @@ module ApplicationTests
"ActionDispatch::Cookies", "ActionDispatch::Cookies",
"ActionDispatch::Session::CookieStore", "ActionDispatch::Session::CookieStore",
"ActionDispatch::Flash", "ActionDispatch::Flash",
"ActionDispatch::Cascade",
"ActionDispatch::ParamsParser", "ActionDispatch::ParamsParser",
"Rack::MethodOverride", "Rack::MethodOverride",
"ActionDispatch::Head", "ActionDispatch::Head",
@ -70,6 +69,12 @@ module ApplicationTests
assert_equal "Rack::Config", middleware.first assert_equal "Rack::Config", middleware.first
end end
test "shows cascade if any metal exists" do
app_file "app/metal/foo.rb", "class Foo; end"
boot!
assert middleware.include?("ActionDispatch::Cascade")
end
private private
def boot! def boot!
require "#{app_path}/config/environment" require "#{app_path}/config/environment"