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:
parent
65d3bf9153
commit
e9777ef62e
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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])
|
||||
|
|
Loading…
Reference in New Issue