Merge branch '7864-ee-routes' into 'master'
CE: Put EE routes in EE files under EE directories See merge request gitlab-org/gitlab-ce!22376
This commit is contained in:
commit
359474a29e
9 changed files with 99 additions and 13 deletions
|
@ -76,6 +76,7 @@ Naming/FileName:
|
||||||
- 'qa/qa/specs/**/*'
|
- 'qa/qa/specs/**/*'
|
||||||
- 'qa/bin/*'
|
- 'qa/bin/*'
|
||||||
- 'config/**/*'
|
- 'config/**/*'
|
||||||
|
- 'ee/config/**/*'
|
||||||
- 'lib/generators/**/*'
|
- 'lib/generators/**/*'
|
||||||
- 'locale/unfound_translations.rb'
|
- 'locale/unfound_translations.rb'
|
||||||
- 'ee/locale/unfound_translations.rb'
|
- 'ee/locale/unfound_translations.rb'
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
# Adds draw method into Rails routing
|
# Adds draw method into Rails routing
|
||||||
# It allows us to keep routing splitted into files
|
# It allows us to keep routing split into files
|
||||||
class ActionDispatch::Routing::Mapper
|
ActionDispatch::Routing::Mapper.prepend Gitlab::Patch::DrawRoute
|
||||||
def draw(routes_name)
|
|
||||||
instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -34,6 +34,8 @@ Rails.application.routes.draw do
|
||||||
match '*all', via: [:get, :post], to: proc { [404, {}, ['']] }
|
match '*all', via: [:get, :post], to: proc { [404, {}, ['']] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
draw :oauth
|
||||||
|
|
||||||
use_doorkeeper_openid_connect
|
use_doorkeeper_openid_connect
|
||||||
|
|
||||||
# Autocomplete
|
# Autocomplete
|
||||||
|
|
|
@ -71,6 +71,7 @@ namespace :admin do
|
||||||
resource :logs, only: [:show]
|
resource :logs, only: [:show]
|
||||||
resource :health_check, controller: 'health_check', only: [:show]
|
resource :health_check, controller: 'health_check', only: [:show]
|
||||||
resource :background_jobs, controller: 'background_jobs', only: [:show]
|
resource :background_jobs, controller: 'background_jobs', only: [:show]
|
||||||
|
|
||||||
resource :system_info, controller: 'system_info', only: [:show]
|
resource :system_info, controller: 'system_info', only: [:show]
|
||||||
resources :requests_profiles, only: [:index, :show], param: :name, constraints: { name: /.+\.html/ }
|
resources :requests_profiles, only: [:index, :show], param: :name, constraints: { name: /.+\.html/ }
|
||||||
|
|
||||||
|
@ -104,6 +105,7 @@ namespace :admin do
|
||||||
|
|
||||||
resource :application_settings, only: [:show, :update] do
|
resource :application_settings, only: [:show, :update] do
|
||||||
resources :services, only: [:index, :edit, :update]
|
resources :services, only: [:index, :edit, :update]
|
||||||
|
|
||||||
get :usage_data
|
get :usage_data
|
||||||
put :reset_registration_token
|
put :reset_registration_token
|
||||||
put :reset_health_check_token
|
put :reset_health_check_token
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
resources :groups, only: [:index, :new, :create] do
|
resources :groups, only: [:index, :new, :create] do
|
||||||
post :preview_markdown
|
post :preview_markdown
|
||||||
end
|
end
|
||||||
|
@ -63,7 +65,6 @@ constraints(::Constraints::GroupUrlConstrainer.new) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# On CE only index and show actions are needed
|
|
||||||
resources :boards, only: [:index, :show]
|
resources :boards, only: [:index, :show]
|
||||||
|
|
||||||
resources :runners, only: [:index, :edit, :update, :destroy, :show] do
|
resources :runners, only: [:index, :edit, :update, :destroy, :show] do
|
||||||
|
|
|
@ -171,7 +171,7 @@ There are a few gotchas with it:
|
||||||
class Base
|
class Base
|
||||||
def execute
|
def execute
|
||||||
return unless enabled?
|
return unless enabled?
|
||||||
|
|
||||||
# ...
|
# ...
|
||||||
# ...
|
# ...
|
||||||
end
|
end
|
||||||
|
@ -185,12 +185,12 @@ There are a few gotchas with it:
|
||||||
class Base
|
class Base
|
||||||
def execute
|
def execute
|
||||||
return unless enabled?
|
return unless enabled?
|
||||||
|
|
||||||
do_something
|
do_something
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def do_something
|
def do_something
|
||||||
# ...
|
# ...
|
||||||
# ...
|
# ...
|
||||||
|
@ -204,14 +204,14 @@ There are a few gotchas with it:
|
||||||
```ruby
|
```ruby
|
||||||
module EE::Base
|
module EE::Base
|
||||||
extend ::Gitlab::Utils::Override
|
extend ::Gitlab::Utils::Override
|
||||||
|
|
||||||
override :do_something
|
override :do_something
|
||||||
def do_something
|
def do_something
|
||||||
# Follow the above pattern to call super and extend it
|
# Follow the above pattern to call super and extend it
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
This would require updating CE first, or make sure this is back ported to CE.
|
This would require updating CE first, or make sure this is back ported to CE.
|
||||||
|
|
||||||
When prepending, place them in the `ee/` specific sub-directory, and
|
When prepending, place them in the `ee/` specific sub-directory, and
|
||||||
|
@ -332,6 +332,21 @@ full implementation details.
|
||||||
[ce-mr-full-private]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12373
|
[ce-mr-full-private]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12373
|
||||||
[ee-mr-full-private]: https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2199
|
[ee-mr-full-private]: https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2199
|
||||||
|
|
||||||
|
### Code in `config/routes`
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
In EE, it should at least load one file, at most two files. If it cannot find
|
||||||
|
any files, an error will be raised. In CE, since we don't know if there will
|
||||||
|
be an EE route, it will not raise any errors even if it cannot find anything.
|
||||||
|
|
||||||
|
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 put `draw :ee_only` in both CE and EE, and add
|
||||||
|
`ee/config/routes/ee_only.rb` in EE, similar to `render_if_exists`.
|
||||||
|
|
||||||
### Code in `app/controllers/`
|
### Code in `app/controllers/`
|
||||||
|
|
||||||
In controllers, the most common type of conflict is with `before_action` that
|
In controllers, the most common type of conflict is with `before_action` that
|
||||||
|
|
38
lib/gitlab/patch/draw_route.rb
Normal file
38
lib/gitlab/patch/draw_route.rb
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# We're patching `ActionDispatch::Routing::Mapper` in
|
||||||
|
# config/initializers/routing_draw.rb
|
||||||
|
module Gitlab
|
||||||
|
module Patch
|
||||||
|
module DrawRoute
|
||||||
|
RoutesNotFound = Class.new(StandardError)
|
||||||
|
|
||||||
|
def draw(routes_name)
|
||||||
|
drawn_any = draw_ce(routes_name) | draw_ee(routes_name)
|
||||||
|
|
||||||
|
drawn_any || raise(RoutesNotFound.new("Cannot find #{routes_name}"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw_ce(routes_name)
|
||||||
|
draw_route(route_path("config/routes/#{routes_name}.rb"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw_ee(_)
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def route_path(routes_name)
|
||||||
|
Rails.root.join(routes_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw_route(path)
|
||||||
|
if File.exist?(path)
|
||||||
|
instance_eval(File.read(path))
|
||||||
|
true
|
||||||
|
else
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -8,3 +8,4 @@ require_relative 'support/rspec'
|
||||||
require 'active_support/all'
|
require 'active_support/all'
|
||||||
|
|
||||||
ActiveSupport::Dependencies.autoload_paths << 'lib'
|
ActiveSupport::Dependencies.autoload_paths << 'lib'
|
||||||
|
ActiveSupport::Dependencies.autoload_paths << 'ee/lib'
|
||||||
|
|
30
spec/lib/gitlab/patch/draw_route_spec.rb
Normal file
30
spec/lib/gitlab/patch/draw_route_spec.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'fast_spec_helper'
|
||||||
|
|
||||||
|
describe Gitlab::Patch::DrawRoute do
|
||||||
|
subject do
|
||||||
|
Class.new do
|
||||||
|
include Gitlab::Patch::DrawRoute
|
||||||
|
|
||||||
|
def route_path(route_name)
|
||||||
|
File.expand_path("../../../../#{route_name}", __dir__)
|
||||||
|
end
|
||||||
|
end.new
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(subject).to receive(:instance_eval)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'evaluates CE only route' do
|
||||||
|
subject.draw(:help)
|
||||||
|
|
||||||
|
expect(subject).to have_received(:instance_eval)
|
||||||
|
.with(File.read(subject.route_path('config/routes/help.rb')))
|
||||||
|
.once
|
||||||
|
|
||||||
|
expect(subject).to have_received(:instance_eval)
|
||||||
|
.once
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue