aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-01-27 17:39:35 +0100
committerCarl Lerche <carllerche@mac.com>2010-01-28 10:28:40 -0800
commit226d8e745a0d47efa50633661a2b7fe1859609bc (patch)
tree3acf231ae9a3dc29bb44e59d34161abfc2eb9f5c
parent252911e37897e1fd6f353f8e2002de3031275612 (diff)
downloadrails-226d8e745a0d47efa50633661a2b7fe1859609bc.tar.gz
rails-226d8e745a0d47efa50633661a2b7fe1859609bc.tar.bz2
rails-226d8e745a0d47efa50633661a2b7fe1859609bc.zip
Refactor MetalLoader and RoutesReloader to rely less on class configuration.
Signed-off-by: Carl Lerche <carllerche@mac.com>
-rw-r--r--railties/lib/rails/application.rb8
-rw-r--r--railties/lib/rails/application/finisher.rb4
-rw-r--r--railties/lib/rails/application/metal_loader.rb (renamed from railties/lib/rails/application/metal.rb)40
-rw-r--r--railties/lib/rails/application/routes_reloader.rb13
-rw-r--r--railties/lib/rails/configuration.rb2
-rw-r--r--railties/lib/rails/engine.rb8
6 files changed, 40 insertions, 35 deletions
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb
index 9e41210119..3ed34f21a6 100644
--- a/railties/lib/rails/application.rb
+++ b/railties/lib/rails/application.rb
@@ -9,7 +9,7 @@ module Rails
autoload :Configurable, 'rails/application/configurable'
autoload :Configuration, 'rails/application/configuration'
autoload :Finisher, 'rails/application/finisher'
- autoload :Metal, 'rails/application/metal'
+ autoload :MetalLoader, 'rails/application/metal_loader'
autoload :Railties, 'rails/application/railties'
autoload :RoutesReloader, 'rails/application/routes_reloader'
@@ -51,8 +51,12 @@ module Rails
@railties ||= Railties.new(config)
end
+ def metal_loader
+ @metal_laoder ||= MetalLoader.new
+ end
+
def routes_reloader
- @routes_reloader ||= RoutesReloader.new(config)
+ @routes_reloader ||= RoutesReloader.new
end
def reload_routes!
diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb
index d67420938a..c0b16a0090 100644
--- a/railties/lib/rails/application/finisher.rb
+++ b/railties/lib/rails/application/finisher.rb
@@ -15,9 +15,9 @@ module Rails
end
end
- initializer :add_builtin_route do
+ initializer :add_builtin_route do |app|
if Rails.env.development?
- Rails::Application::RoutesReloader.paths << File.join(RAILTIES_PATH, 'builtin', 'routes.rb')
+ app.routes_reloader.paths << File.join(RAILTIES_PATH, 'builtin', 'routes.rb')
end
end
diff --git a/railties/lib/rails/application/metal.rb b/railties/lib/rails/application/metal_loader.rb
index 17786dd4ba..c0f2e4f948 100644
--- a/railties/lib/rails/application/metal.rb
+++ b/railties/lib/rails/application/metal_loader.rb
@@ -2,20 +2,34 @@ require 'action_dispatch'
module Rails
class Application
- class Metal
- def self.paths
- @paths ||= []
+ class MetalLoader
+ attr_reader :paths, :metals
+
+ def initialize
+ @paths, @metals = [], []
+ end
+
+ def build_middleware(list=nil)
+ load_metals!(list)
+ self
end
- def self.metals
- @metals ||= []
+ def new(app)
+ ActionDispatch::Cascade.new(@metals, app)
+ end
+
+ def name
+ ActionDispatch::Cascade.name
end
+ alias :to_s :name
- def initialize(list=nil)
+ protected
+
+ def load_metals!(list)
metals = []
- list = Array(list || :all).map(&:to_sym)
+ list = Array(list || :all).map(&:to_sym)
- self.class.paths.each do |path|
+ paths.each do |path|
matcher = /\A#{Regexp.escape(path)}\/(.*)\.rb\Z/
Dir.glob("#{path}/**/*.rb").sort.each do |metal_path|
metal = metal_path.sub(matcher, '\1').to_sym
@@ -30,17 +44,7 @@ module Rails
end
@metals = metals.map { |m| m.to_s.camelize.constantize }
- self.class.metals.concat(@metals)
- end
-
- def new(app)
- ActionDispatch::Cascade.new(@metals, app)
- end
-
- def name
- ActionDispatch::Cascade.name
end
- alias_method :to_s, :name
end
end
end
diff --git a/railties/lib/rails/application/routes_reloader.rb b/railties/lib/rails/application/routes_reloader.rb
index fe0cfb7801..fde6211c5d 100644
--- a/railties/lib/rails/application/routes_reloader.rb
+++ b/railties/lib/rails/application/routes_reloader.rb
@@ -1,19 +1,16 @@
module Rails
class Application
- # TODO Write tests for this behavior extracted from Application
class RoutesReloader
- def self.paths
- @paths ||= []
- end
+ attr_reader :paths
- def initialize(config)
- @config, @last_change_at = config, nil
+ def initialize
+ @paths, @last_change_at = [], nil
end
def changed_at
routes_changed_at = nil
- self.class.paths.each do |path|
+ paths.each do |path|
config_changed_at = File.stat(path).mtime
if routes_changed_at.nil? || config_changed_at > routes_changed_at
@@ -29,7 +26,7 @@ module Rails
routes.disable_clear_and_finalize = true
routes.clear!
- self.class.paths.each { |path| load(path) }
+ paths.each { |path| load(path) }
routes.finalize!
nil
diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
index 0cf39636ac..6d5fa87439 100644
--- a/railties/lib/rails/configuration.rb
+++ b/railties/lib/rails/configuration.rb
@@ -16,7 +16,7 @@ module Rails
middleware.use('::ActionDispatch::Cookies')
middleware.use(lambda { ActionController::Base.session_store }, lambda { ActionController::Base.session_options })
middleware.use('::ActionDispatch::Flash', :if => lambda { ActionController::Base.session_store })
- middleware.use(lambda { Rails::Application::Metal.new(Rails.application.config.metals) }, :if => lambda { Rails::Application::Metal.metals.any? })
+ middleware.use(lambda { Rails.application.metal_loader.build_middleware(Rails.application.config.metals) }, :if => lambda { Rails.application.metal_loader.metals.any? })
middleware.use('ActionDispatch::ParamsParser')
middleware.use('::Rack::MethodOverride')
middleware.use('::ActionDispatch::Head')
diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb
index ebbee67cf4..b98393c01a 100644
--- a/railties/lib/rails/engine.rb
+++ b/railties/lib/rails/engine.rb
@@ -70,9 +70,9 @@ module Rails
config.load_once_paths.freeze
end
- initializer :add_routing_paths do
+ initializer :add_routing_paths do |app|
paths.config.routes.to_a.each do |route|
- Rails::Application::RoutesReloader.paths.unshift(route) if File.exists?(route)
+ app.routes_reloader.paths.unshift(route) if File.exists?(route)
end
end
@@ -98,8 +98,8 @@ module Rails
ActionMailer::Base.view_paths.unshift(*views) if defined?(ActionMailer)
end
- initializer :add_metals do
- Rails::Application::Metal.paths.unshift(*paths.app.metals.to_a)
+ initializer :add_metals do |app|
+ app.metal_loader.paths.unshift(*paths.app.metals.to_a)
end
initializer :load_application_initializers do