aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/application
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-01-23 15:05:13 +0100
committerJosé Valim <jose.valim@gmail.com>2010-01-23 16:06:33 +0100
commit80130d1201c3bf9dc17b0e1fcd81c6b22e893b0a (patch)
tree993d70e97ada23d2860969b24befbde64bd82e4b /railties/lib/rails/application
parent4eab3aad8d256b868390b739b075bd38661339b2 (diff)
downloadrails-80130d1201c3bf9dc17b0e1fcd81c6b22e893b0a.tar.gz
rails-80130d1201c3bf9dc17b0e1fcd81c6b22e893b0a.tar.bz2
rails-80130d1201c3bf9dc17b0e1fcd81c6b22e893b0a.zip
Extract routes reloading responsibilities from application and load them just upon a request.
Diffstat (limited to 'railties/lib/rails/application')
-rw-r--r--railties/lib/rails/application/routes_reloader.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/railties/lib/rails/application/routes_reloader.rb b/railties/lib/rails/application/routes_reloader.rb
new file mode 100644
index 0000000000..621bb1ccbd
--- /dev/null
+++ b/railties/lib/rails/application/routes_reloader.rb
@@ -0,0 +1,46 @@
+module Rails
+ class Application
+ class RoutesReloader
+ attr_reader :config
+
+ def initialize(config)
+ @config, @last_change_at = config, nil
+ end
+
+ def changed_at
+ routes_changed_at = nil
+
+ config.action_dispatch.route_files.each do |config|
+ config_changed_at = File.stat(config).mtime
+
+ if routes_changed_at.nil? || config_changed_at > routes_changed_at
+ routes_changed_at = config_changed_at
+ end
+ end
+
+ routes_changed_at
+ end
+
+ def reload!
+ routes = Rails::Application.routes
+ routes.disable_clear_and_finalize = true
+
+ routes.clear!
+ config.action_dispatch.route_files.each { |config| load(config) }
+ routes.finalize!
+
+ nil
+ ensure
+ routes.disable_clear_and_finalize = false
+ end
+
+ def reload_if_changed
+ current_change_at = changed_at
+ if @last_change_at != current_change_at
+ @last_change_at = current_change_at
+ reload!
+ end
+ end
+ end
+ end
+end \ No newline at end of file