diff options
author | Piotr Sarnacki <drogus@gmail.com> | 2010-09-26 00:17:06 +0200 |
---|---|---|
committer | Piotr Sarnacki <drogus@gmail.com> | 2010-09-30 09:47:05 +0200 |
commit | ec5d846ac6137e60d81257041e4fde82c0480b32 (patch) | |
tree | 4a0fb0b3eb176c908c68b8f01e3b3697a6522133 /railties/lib/rails/application.rb | |
parent | 22b11a41cc764bc0f7b0c0f518a5289230428597 (diff) | |
download | rails-ec5d846ac6137e60d81257041e4fde82c0480b32.tar.gz rails-ec5d846ac6137e60d81257041e4fde82c0480b32.tar.bz2 rails-ec5d846ac6137e60d81257041e4fde82c0480b32.zip |
Properly reload routes defined in class definition
Sometimes it's easier to define routes inside Engine or
Application class definition (e.g. one file applications). The
problem with such case is that if there is a plugin that
has config/routes.rb file, it will trigger routes reload on application.
Since routes definition for application is not in config/routes.rb
file routes_reloader will fail to reload application's routes
properly. With this commit you can pass routes definition as a block
to routes method, which will allow to properly reload it:
class MyApp::Application < Rails::Application
routes do
resources :users
end
end
Diffstat (limited to 'railties/lib/rails/application.rb')
-rw-r--r-- | railties/lib/rails/application.rb | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index 0e85e6d1d5..2db131261c 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -85,13 +85,24 @@ module Rails end def reload_routes! - _routes = self.routes - _routes.disable_clear_and_finalize = true - _routes.clear! + routes_to_reload.each do |_routes, draw_block| + _routes = self.routes + _routes.disable_clear_and_finalize = true + _routes.clear! + _routes.draw(&draw_block) if draw_block + end routes_reloader.paths.each { |path| load(path) } - ActiveSupport.on_load(:action_controller) { _routes.finalize! } + routes_to_reload.each do |_routes, draw_block| + ActiveSupport.on_load(:action_controller) { _routes.finalize! } + end ensure - _routes.disable_clear_and_finalize = false + routes_to_reload.each do |_routes, draw_block| + _routes.disable_clear_and_finalize = false + end + end + + def routes_to_reload + @routes_to_reload ||= {} end def initialize! |