Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
c05432e6
Commit
c05432e6
authored
Aug 30, 2019
by
GitLab Bot
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge of gitlab-org/gitlab-ce master
parents
884e8f3a
e668b1e2
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
3 deletions
+41
-3
app/models/concerns/routable.rb
app/models/concerns/routable.rb
+22
-2
spec/models/concerns/routable_spec.rb
spec/models/concerns/routable_spec.rb
+19
-1
No files found.
app/models/concerns/routable.rb
View file @
c05432e6
...
...
@@ -33,8 +33,17 @@ module Routable
#
# Returns a single object, or nil.
def
find_by_full_path
(
path
,
follow_redirects:
false
)
order_sql
=
Arel
.
sql
(
"(CASE WHEN routes.path =
#{
connection
.
quote
(
path
)
}
THEN 0 ELSE 1 END)"
)
found
=
where_full_path_in
([
path
]).
reorder
(
order_sql
).
take
increment_counter
(
:routable_find_by_full_path
,
'Number of calls to Routable.find_by_full_path'
)
if
Feature
.
enabled?
(
:routable_two_step_lookup
)
# Case sensitive match first (it's cheaper and the usual case)
# If we didn't have an exact match, we perform a case insensitive search
found
=
joins
(
:route
).
find_by
(
routes:
{
path:
path
})
||
where_full_path_in
([
path
]).
take
else
order_sql
=
Arel
.
sql
(
"(CASE WHEN routes.path =
#{
connection
.
quote
(
path
)
}
THEN 0 ELSE 1 END)"
)
found
=
where_full_path_in
([
path
]).
reorder
(
order_sql
).
take
end
return
found
if
found
if
follow_redirects
...
...
@@ -52,12 +61,23 @@ module Routable
def
where_full_path_in
(
paths
)
return
none
if
paths
.
empty?
increment_counter
(
:routable_where_full_path_in
,
'Number of calls to Routable.where_full_path_in'
)
wheres
=
paths
.
map
do
|
path
|
"(LOWER(routes.path) = LOWER(
#{
connection
.
quote
(
path
)
}
))"
end
joins
(
:route
).
where
(
wheres
.
join
(
' OR '
))
end
# Temporary instrumentation of method calls
def
increment_counter
(
counter
,
description
)
@counters
[
counter
]
||=
Gitlab
::
Metrics
.
counter
(
counter
,
description
)
@counters
[
counter
].
increment
rescue
# ignore the error
end
end
def
full_name
...
...
spec/models/concerns/routable_spec.rb
View file @
c05432e6
...
...
@@ -58,7 +58,7 @@ describe Group, 'Routable' do
end
end
describe
'.find_by_full_path'
do
shared_examples_for
'.find_by_full_path'
do
let!
(
:nested_group
)
{
create
(
:group
,
parent:
group
)
}
context
'without any redirect routes'
do
...
...
@@ -110,6 +110,24 @@ describe Group, 'Routable' do
end
end
describe
'.find_by_full_path'
do
context
'with routable_two_step_lookup feature'
do
before
do
stub_feature_flags
(
routable_two_step_lookup:
true
)
end
it_behaves_like
'.find_by_full_path'
end
context
'without routable_two_step_lookup feature'
do
before
do
stub_feature_flags
(
routable_two_step_lookup:
false
)
end
it_behaves_like
'.find_by_full_path'
end
end
describe
'.where_full_path_in'
do
context
'without any paths'
do
it
'returns an empty relation'
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment