aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/rails/application.rb21
-rw-r--r--railties/lib/rails/engine.rb7
2 files changed, 22 insertions, 6 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!
diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb
index ababf6a242..aa82a82b19 100644
--- a/railties/lib/rails/engine.rb
+++ b/railties/lib/rails/engine.rb
@@ -399,8 +399,10 @@ module Rails
}
end
- def routes
+ def routes(&block)
@routes ||= ActionDispatch::Routing::RouteSet.new
+ self.routes_draw_block = block if block_given?
+ @routes
end
def initializers
@@ -447,6 +449,7 @@ module Rails
end
initializer :add_routing_paths do |app|
+ app.routes_to_reload[self.routes] = routes_draw_block
paths.config.routes.to_a.each do |route|
app.routes_reloader.paths.unshift(route) if File.exists?(route)
end
@@ -499,6 +502,8 @@ module Rails
end
protected
+ attr_accessor :routes_draw_block
+
def find_root_with_flag(flag, default=nil)
root_path = self.class.called_from