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.
This commit is contained in:
Aaron Patterson 2015-08-17 13:29:54 -07:00
parent 65d3bf9153
commit e9777ef62e
4 changed files with 20 additions and 16 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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])