summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2018-10-17 21:29:39 +0800
committerLin Jen-Shin <godfat@godfat.org>2018-10-26 14:27:05 +0800
commitf1701c0fec096184a5908df65187573209dd6254 (patch)
treea0e868088b9a8b70fbe25fcb4ed799c2c350f799
parent1581f75fb511fed171e8105c1a0811561a2f2dcc (diff)
downloadgitlab-ce-f1701c0fec096184a5908df65187573209dd6254.tar.gz
Make it possible to add EE only route
And if it cannot find any routes, raise an error
-rw-r--r--doc/development/ee_features.md15
-rw-r--r--lib/gitlab/patch/draw_route.rb20
2 files changed, 26 insertions, 9 deletions
diff --git a/doc/development/ee_features.md b/doc/development/ee_features.md
index 2415373f2d1..bad9909ed43 100644
--- a/doc/development/ee_features.md
+++ b/doc/development/ee_features.md
@@ -334,12 +334,17 @@ full implementation details.
### Code in `config/routes`
-When we add `draw :admin` in `config/routes.rb`, the application will also
-load the file located in `config/routes/admin.rb`, and also
-`ee/config/routes/admin.rb` if the file exists.
+When we add `draw :admin` in `config/routes.rb`, the application will try to
+load the file located in `config/routes/admin.rb`, and also try to load the
+file located in `ee/config/routes/admin.rb`.
-So if we want to extend a particular route file, just add the same file
-located in `ee/config/routes`.
+It should at least load one file, at most two files. If it cannot find any
+files, an error will be raised.
+
+This means if we want to extend a particular CE route file, just add the same
+file located in `ee/config/routes`. If we want to add an EE only route, we
+could still use `draw :ee_only` and add `ee/config/routes/ee_only.rb` without
+adding `config/routes/ee_only.rb`.
### Code in `app/controllers/`
diff --git a/lib/gitlab/patch/draw_route.rb b/lib/gitlab/patch/draw_route.rb
index 4396e811a8c..f8ae6f7afc0 100644
--- a/lib/gitlab/patch/draw_route.rb
+++ b/lib/gitlab/patch/draw_route.rb
@@ -5,16 +5,28 @@
module Gitlab
module Patch
module DrawRoute
+ RoutesNotFound = Class.new(StandardError)
+
def draw(routes_name)
- instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
+ draw_ce(routes_name) | draw_ee(routes_name) ||
+ raise(RoutesNotFound.new("Cannot find #{routes_name}"))
+ end
- draw_ee(routes_name)
+ def draw_ce(routes_name)
+ draw_route(Rails.root.join("config/routes/#{routes_name}.rb"))
end
def draw_ee(routes_name)
- path = Rails.root.join("ee/config/routes/#{routes_name}.rb")
+ draw_route(Rails.root.join("ee/config/routes/#{routes_name}.rb"))
+ end
- instance_eval(File.read(path)) if File.exist?(path)
+ def draw_route(path)
+ if File.exist?(path)
+ instance_eval(File.read(path))
+ true
+ else
+ false
+ end
end
end
end