diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2015-08-17 13:29:54 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2015-08-17 13:51:38 -0700 |
commit | e9777ef62e95be79fee01fea9e7420726d5ff792 (patch) | |
tree | fb4e98c9fff4978b06f5db11ad48fb9c01caf21e | |
parent | 65d3bf9153d77124eb174c9a81af6257f9c944fe (diff) | |
download | rails-e9777ef62e95be79fee01fea9e7420726d5ff792.tar.gz rails-e9777ef62e95be79fee01fea9e7420726d5ff792.tar.bz2 rails-e9777ef62e95be79fee01fea9e7420726d5ff792.zip |
default pattern to use a joined string
The string we create is almost always the same, so rather than joining
all the time, lets join once, then reuse that string everywhere.
-rw-r--r-- | actionpack/lib/action_dispatch/journey/path/pattern.rb | 4 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/routing/mapper.rb | 4 | ||||
-rw-r--r-- | actionpack/test/journey/path/pattern_test.rb | 26 | ||||
-rw-r--r-- | actionpack/test/journey/route_test.rb | 2 |
4 files changed, 20 insertions, 16 deletions
diff --git a/actionpack/lib/action_dispatch/journey/path/pattern.rb b/actionpack/lib/action_dispatch/journey/path/pattern.rb index 24b90e214d..cb1a65e1f4 100644 --- a/actionpack/lib/action_dispatch/journey/path/pattern.rb +++ b/actionpack/lib/action_dispatch/journey/path/pattern.rb @@ -5,7 +5,7 @@ module ActionDispatch attr_reader :spec, :requirements, :anchored def self.from_string string - build(string, {}, ["/.?"], true) + build(string, {}, "/.?", true) end def self.build(path, requirements, separators, anchored) @@ -17,7 +17,7 @@ module ActionDispatch def initialize(ast, requirements, separators, anchored) @spec = ast @requirements = requirements - @separators = separators.join + @separators = separators @anchored = anchored @names = nil diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index a9dae77e51..2c9cab605f 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -185,8 +185,10 @@ module ActionDispatch end private :build_conditions + JOINED_SEPARATORS = SEPARATORS.join # :nodoc: + def build_path(ast, requirements, anchor) - pattern = Journey::Path::Pattern.new(ast, requirements, SEPARATORS, anchor) + pattern = Journey::Path::Pattern.new(ast, requirements, JOINED_SEPARATORS, anchor) builder = Journey::GTG::Builder.new ast diff --git a/actionpack/test/journey/path/pattern_test.rb b/actionpack/test/journey/path/pattern_test.rb index 7b97379bd5..72858f5eda 100644 --- a/actionpack/test/journey/path/pattern_test.rb +++ b/actionpack/test/journey/path/pattern_test.rb @@ -4,6 +4,8 @@ module ActionDispatch module Journey module Path class TestPattern < ActiveSupport::TestCase + SEPARATORS = ["/", ".", "?"].join + x = /.+/ { '/:controller(/:action)' => %r{\A/(#{x})(?:/([^/.?]+))?\Z}, @@ -22,7 +24,7 @@ module ActionDispatch path = Pattern.build( path, { :controller => /.+/ }, - ["/", ".", "?"], + SEPARATORS, true ) assert_equal(expected, path.to_regexp) @@ -46,7 +48,7 @@ module ActionDispatch path = Pattern.build( path, { :controller => /.+/ }, - ["/", ".", "?"], + SEPARATORS, false ) assert_equal(expected, path.to_regexp) @@ -69,7 +71,7 @@ module ActionDispatch path = Pattern.build( path, { :controller => /.+/ }, - ["/", ".", "?"], + SEPARATORS, true ) assert_equal(expected, path.names) @@ -84,7 +86,7 @@ module ActionDispatch (tender|love #MAO )/x }, - ["/", ".", "?"], + SEPARATORS, true ) assert_match(path, '/page/tender') @@ -107,7 +109,7 @@ module ActionDispatch path = Pattern.build( '/:name', { :name => /\d+/ }, - ["/", ".", "?"], + SEPARATORS, true ) assert_match(path, '/123') @@ -118,7 +120,7 @@ module ActionDispatch path = Pattern.build( '/page/:name', { :name => /(tender|love)/ }, - ["/", ".", "?"], + SEPARATORS, true ) assert_match(path, '/page/tender') @@ -131,7 +133,7 @@ module ActionDispatch path = Pattern.build( '/page/:name/:value', requirements, - ["/", ".", "?"], + SEPARATORS, true ) @@ -146,7 +148,7 @@ module ActionDispatch path = Pattern.build( '/page/:name', { :name => /(tender|love)/ }, - ["/", ".", "?"], + SEPARATORS, true ) match = path.match '/page/tender' @@ -158,7 +160,7 @@ module ActionDispatch path = Pattern.build( '/page/:name/:id', { :name => /t(((ender|love)))()/ }, - ["/", ".", "?"], + SEPARATORS, true ) match = path.match '/page/tender/10' @@ -173,7 +175,7 @@ module ActionDispatch path = Pattern.build( '/page/*foo', { :foo => z }, - ["/", ".", "?"], + SEPARATORS, true ) assert_equal(%r{\A/page/(#{z})\Z}, path.to_regexp) @@ -183,7 +185,7 @@ module ActionDispatch path = Pattern.build( '/page/:name/aaron', { :name => /(tender|love)/i }, - ["/", ".", "?"], + SEPARATORS, true ) assert_match(path, '/page/TENDER/aaron') @@ -192,7 +194,7 @@ module ActionDispatch end def test_to_regexp_with_strexp - path = Pattern.build('/:controller', { }, ["/", ".", "?"], true) + path = Pattern.build('/:controller', { }, SEPARATORS, true) x = %r{\A/([^/.?]+)\Z} assert_equal(x.source, path.source) diff --git a/actionpack/test/journey/route_test.rb b/actionpack/test/journey/route_test.rb index cdd59a3316..75e41193b4 100644 --- a/actionpack/test/journey/route_test.rb +++ b/actionpack/test/journey/route_test.rb @@ -26,7 +26,7 @@ module ActionDispatch end def test_path_requirements_override_defaults - path = Path::Pattern.build(':name', { name: /love/ }, ['/'], true) + path = Path::Pattern.build(':name', { name: /love/ }, '/', true) defaults = { name: 'tender' } route = Route.new('name', nil, path, nil, [], defaults) assert_equal(/love/, route.requirements[:name]) |