summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2018-01-30 10:03:31 +0000
committerRémy Coutable <remy@rymai.me>2018-01-30 10:03:31 +0000
commit51c8d5b2f3517e37b5313fc7f57436c2f6da5e4b (patch)
tree43fa4d49c2250d34496d2714cf47fe806e10f544 /config
parent47ed0a990bda27147b785615e0084f7999b39e12 (diff)
parent233a9861113df678e1f54dfbd13d9ab23fd5d5a0 (diff)
downloadgitlab-ce-51c8d5b2f3517e37b5313fc7f57436c2f6da5e4b.tar.gz
Merge branch 'grape-router-helpers-bugfix' into 'master'
Fix grape-route-helper route shadowing See merge request gitlab-org/gitlab-ce!16781
Diffstat (limited to 'config')
-rw-r--r--config/initializers/grape_route_helpers_fix.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/config/initializers/grape_route_helpers_fix.rb b/config/initializers/grape_route_helpers_fix.rb
index d3cf9e453d0..612cca3dfbd 100644
--- a/config/initializers/grape_route_helpers_fix.rb
+++ b/config/initializers/grape_route_helpers_fix.rb
@@ -1,5 +1,21 @@
if defined?(GrapeRouteHelpers)
module GrapeRouteHelpers
+ module AllRoutes
+ # Bringing in PR https://github.com/reprah/grape-route-helpers/pull/21 due to abandonment.
+ #
+ # Without the following fix, when two helper methods are the same, but have different arguments
+ # (for example: api_v1_cats_owners_path(id: 1) vs api_v1_cats_owners_path(id: 1, owner_id: 2))
+ # if the helper method with the least number of arguments is defined first (because the route was defined first)
+ # then it will shadow the longer route.
+ #
+ # The fix is to sort descending by amount of arguments
+ def decorated_routes
+ @decorated_routes ||= all_routes
+ .map { |r| DecoratedRoute.new(r) }
+ .sort_by { |r| -r.dynamic_path_segments.count }
+ end
+ end
+
class DecoratedRoute
# GrapeRouteHelpers gem tries to parse the versions
# from a string, not supporting Grape `version` array definition.