aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/application/routes_reloader.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-09-30 10:30:58 +0200
committerJosé Valim <jose.valim@gmail.com>2010-09-30 10:30:58 +0200
commit1ba22bcde1d5ee1e16e14d4d2dd23cbeb01cd59f (patch)
tree0c74273f34c20e56975a6b7845a034fa3df8c469 /railties/lib/rails/application/routes_reloader.rb
parent69f97f469747777ed1c457715f5361f6b8a0ab7b (diff)
parent9f569c60adb3505cd7ca1723481199bf26619038 (diff)
downloadrails-1ba22bcde1d5ee1e16e14d4d2dd23cbeb01cd59f.tar.gz
rails-1ba22bcde1d5ee1e16e14d4d2dd23cbeb01cd59f.tar.bz2
rails-1ba22bcde1d5ee1e16e14d4d2dd23cbeb01cd59f.zip
Merge remote branch 'drogus/engines'
Diffstat (limited to 'railties/lib/rails/application/routes_reloader.rb')
-rw-r--r--railties/lib/rails/application/routes_reloader.rb55
1 files changed, 55 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..23b72a0ec6
--- /dev/null
+++ b/railties/lib/rails/application/routes_reloader.rb
@@ -0,0 +1,55 @@
+module Rails
+ class Application
+ class RoutesReloader < ::ActiveSupport::FileUpdateChecker
+ def initialize
+ super([]) { reload! }
+ end
+
+ def blocks
+ @blocks ||= {}
+ end
+ private
+ def reload!
+ clear!
+ load_blocks
+ load_paths
+ finalize!
+ ensure
+ revert
+ end
+
+ def clear!
+ routers.each do |routes|
+ routes.disable_clear_and_finalize = true
+ routes.clear!
+ end
+ end
+
+ def load_blocks
+ blocks.each do |routes, block|
+ routes.draw(&block) if block
+ end
+ end
+
+ def load_paths
+ paths.each { |path| load(path) }
+ end
+
+ def finalize!
+ routers.each do |routes|
+ ActiveSupport.on_load(:action_controller) { routes.finalize! }
+ end
+ end
+
+ def revert
+ routers.each do |routes|
+ routes.disable_clear_and_finalize = false
+ end
+ end
+
+ def routers
+ blocks.keys
+ end
+ end
+ end
+end