diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2017-01-30 21:51:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-30 21:51:09 -0500 |
commit | ce97c79445f9ac4b056e34deaaaaf25cadc08b72 (patch) | |
tree | 03ef116200ec06a867fd6ca9b144483d769e2a0d /actionpack/lib/action_dispatch | |
parent | 543f19626b80e72c543306b6ca67421df3a42d6c (diff) | |
parent | 5b1332bb4d3c3aa5215b43004d1e7f6a8d376dd0 (diff) | |
download | rails-ce97c79445f9ac4b056e34deaaaaf25cadc08b72.tar.gz rails-ce97c79445f9ac4b056e34deaaaaf25cadc08b72.tar.bz2 rails-ce97c79445f9ac4b056e34deaaaaf25cadc08b72.zip |
Merge pull request #27647 from Shopify/fully-eagerload-journey
Fully initialize routes before the first request is handled
Diffstat (limited to 'actionpack/lib/action_dispatch')
4 files changed, 28 insertions, 0 deletions
diff --git a/actionpack/lib/action_dispatch/journey/path/pattern.rb b/actionpack/lib/action_dispatch/journey/path/pattern.rb index 0902b9233e..cf0108ec32 100644 --- a/actionpack/lib/action_dispatch/journey/path/pattern.rb +++ b/actionpack/lib/action_dispatch/journey/path/pattern.rb @@ -31,6 +31,13 @@ module ActionDispatch Visitors::FormatBuilder.new.accept(spec) end + def eager_load! + required_names + offsets + to_regexp + nil + end + def ast @spec.find_all(&:symbol?).each do |node| re = @requirements[node.to_sym] diff --git a/actionpack/lib/action_dispatch/journey/route.rb b/actionpack/lib/action_dispatch/journey/route.rb index f2ac4818d8..927fd369c4 100644 --- a/actionpack/lib/action_dispatch/journey/route.rb +++ b/actionpack/lib/action_dispatch/journey/route.rb @@ -73,6 +73,14 @@ module ActionDispatch @internal = internal end + def eager_load! + path.eager_load! + ast + parts + required_defaults + nil + end + def ast @decorated_ast ||= begin decorated_ast = path.ast diff --git a/actionpack/lib/action_dispatch/journey/router.rb b/actionpack/lib/action_dispatch/journey/router.rb index 084ae9325e..d55e1399e4 100644 --- a/actionpack/lib/action_dispatch/journey/router.rb +++ b/actionpack/lib/action_dispatch/journey/router.rb @@ -22,6 +22,13 @@ module ActionDispatch @routes = routes end + def eager_load! + # Eagerly trigger the simulator's initialization so + # it doesn't happen during a request cycle. + simulator + nil + end + def serve(req) find_routes(req).each do |match, parameters, route| set_params = req.path_parameters diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index 5853adb110..5b873aeab7 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -349,6 +349,12 @@ module ActionDispatch @formatter = Journey::Formatter.new self end + def eager_load! + router.eager_load! + routes.each(&:eager_load!) + nil + end + def relative_url_root @config.relative_url_root end |