Merge branch 'if-doc-ee_specific_api-params' into 'master'

Update development doc on EE specific API params

See merge request gitlab-org/gitlab-ce!28608
This commit is contained in:
Lin Jen-Shin 2019-05-27 15:53:20 +00:00
commit 450f684474
1 changed files with 33 additions and 20 deletions

View File

@ -557,40 +557,56 @@ due to `prepend`, but Grape is complex internally and we couldn't easily do
that, so we'll follow regular object-oriented practices that we define the that, so we'll follow regular object-oriented practices that we define the
interface first here. interface first here.
For example, suppose we have a few more optional params for EE, given this CE For example, suppose we have a few more optional params for EE. We can move the
API code: params out of the `Grape::API` class to a helper module, so we can `prepend` it
before it would be used in the class.
```ruby ```ruby
module API module API
class MergeRequests < Grape::API class Projects < Grape::API
# EE::API::MergeRequests would override the following helpers helpers Helpers::ProjectsHelpers
helpers do end
params :optional_params_ee do end
```
Given this CE API `params`:
```ruby
module API
module Helpers
module ProjectsHelpers
extend ActiveSupport::Concern
extend Grape::API::Helpers
params :optional_project_params_ce do
# CE specific params go here...
end end
end
params :optional_params do params :optional_project_params_ee do
# CE specific params go here... end
use :optional_params_ee params :optional_project_params do
use :optional_project_params_ce
use :optional_project_params_ee
end
end end
end end
end end
API::MergeRequests.prepend(EE::API::MergeRequests) API::Helpers::ProjectsHelpers.prepend(EE::API::Helpers::ProjectsHelpers)
``` ```
And then we could override it in EE module: We could override it in EE module:
```ruby ```ruby
module EE module EE
module API module API
module MergeRequests module Helpers
extend ActiveSupport::Concern module ProjectsHelpers
extend ActiveSupport::Concern
prepended do prepended do
helpers do params :optional_project_params_ee do
params :optional_params_ee do
# EE specific params go here... # EE specific params go here...
end end
end end
@ -600,9 +616,6 @@ module EE
end end
``` ```
This way, the only difference between CE and EE for that API file would be
`prepend EE::API::MergeRequests`.
#### EE helpers #### EE helpers
To make it easy for an EE module to override the CE helpers, we need to define To make it easy for an EE module to override the CE helpers, we need to define