diff options
author | José Valim <jose.valim@gmail.com> | 2010-09-30 10:30:58 +0200 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-09-30 10:30:58 +0200 |
commit | 1ba22bcde1d5ee1e16e14d4d2dd23cbeb01cd59f (patch) | |
tree | 0c74273f34c20e56975a6b7845a034fa3df8c469 /railties/lib/rails/application/routes_reloader.rb | |
parent | 69f97f469747777ed1c457715f5361f6b8a0ab7b (diff) | |
parent | 9f569c60adb3505cd7ca1723481199bf26619038 (diff) | |
download | rails-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.rb | 55 |
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 |