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
21666dbe
Commit
21666dbe
authored
Oct 24, 2016
by
Robert Schilling
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Grapify the labels API
parent
9af0dd5e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
56 deletions
+41
-56
lib/api/labels.rb
lib/api/labels.rb
+38
-53
spec/requests/api/labels_spec.rb
spec/requests/api/labels_spec.rb
+3
-3
No files found.
lib/api/labels.rb
View file @
21666dbe
...
@@ -3,37 +3,32 @@ module API
...
@@ -3,37 +3,32 @@ module API
class
Labels
<
Grape
::
API
class
Labels
<
Grape
::
API
before
{
authenticate!
}
before
{
authenticate!
}
params
do
requires
:id
,
type:
String
,
desc:
'The ID of a project'
end
resource
:projects
do
resource
:projects
do
# Get all labels of the project
desc
'Get all labels of the project'
do
#
success
Entities
::
Label
# Parameters:
end
# id (required) - The ID of a project
# Example Request:
# GET /projects/:id/labels
get
':id/labels'
do
get
':id/labels'
do
present
available_labels
,
with:
Entities
::
Label
,
current_user:
current_user
present
available_labels
,
with:
Entities
::
Label
,
current_user:
current_user
end
end
# Creates a new label
desc
'Create a new label'
do
#
success
Entities
::
Label
# Parameters:
end
# id (required) - The ID of a project
params
do
# name (required) - The name of the label to be created
requires
:name
,
type:
String
,
desc:
'The name of the label to be created'
# color (required) - Color of the label given in 6-digit hex
requires
:color
,
type:
String
,
desc:
"The color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB)"
# notation with leading '#' sign (e.g. #FFAABB)
optional
:description
,
type:
String
,
desc:
'The description of label to be created'
# description (optional) - The description of label to be created
end
# Example Request:
# POST /projects/:id/labels
post
':id/labels'
do
post
':id/labels'
do
authorize!
:admin_label
,
user_project
authorize!
:admin_label
,
user_project
required_attributes!
[
:name
,
:color
]
attrs
=
attributes_for_keys
[
:name
,
:color
,
:description
]
label
=
user_project
.
find_label
(
attrs
[
:name
])
label
=
user_project
.
find_label
(
params
[
:name
])
conflict!
(
'Label already exists'
)
if
label
conflict!
(
'Label already exists'
)
if
label
label
=
user_project
.
labels
.
create
(
attrs
)
label
=
user_project
.
labels
.
create
(
declared
(
params
,
include_parent_namespaces:
false
).
to_h
)
if
label
.
valid?
if
label
.
valid?
present
label
,
with:
Entities
::
Label
,
current_user:
current_user
present
label
,
with:
Entities
::
Label
,
current_user:
current_user
...
@@ -42,54 +37,44 @@ module API
...
@@ -42,54 +37,44 @@ module API
end
end
end
end
# Deletes an existing label
desc
'Delete an existing label'
do
#
success
Entities
::
Label
# Parameters:
end
# id (required) - The ID of a project
params
do
# name (required) - The name of the label to be deleted
requires
:name
,
type:
String
,
desc:
'The name of the label to be deleted'
#
end
# Example Request:
# DELETE /projects/:id/labels
delete
':id/labels'
do
delete
':id/labels'
do
authorize!
:admin_label
,
user_project
authorize!
:admin_label
,
user_project
required_attributes!
[
:name
]
label
=
user_project
.
find_label
(
params
[
:name
])
label
=
user_project
.
find_label
(
params
[
:name
])
not_found!
(
'Label'
)
unless
label
not_found!
(
'Label'
)
unless
label
label
.
destroy
present
label
.
destroy
,
with:
Entities
::
Label
,
current_user:
current_user
end
end
# Updates an existing label. At least one optional parameter is required.
desc
'Update an existing label. At least one optional parameter is required.'
do
#
success
Entities
::
Label
# Parameters:
end
# id (required) - The ID of a project
params
do
# name (required) - The name of the label to be deleted
requires
:name
,
type:
String
,
desc:
'The name of the label to be updated'
# new_name (optional) - The new name of the label
optional
:new_name
,
type:
String
,
desc:
'The new name of the label'
# color (optional) - Color of the label given in 6-digit hex
optional
:color
,
type:
String
,
desc:
"The new color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB)"
# notation with leading '#' sign (e.g. #FFAABB)
optional
:description
,
type:
String
,
desc:
'The new description of label'
# description (optional) - The description of label to be created
at_least_one_of
:new_name
,
:color
,
:description
# Example Request:
end
# PUT /projects/:id/labels
put
':id/labels'
do
put
':id/labels'
do
authorize!
:admin_label
,
user_project
authorize!
:admin_label
,
user_project
required_attributes!
[
:name
]
label
=
user_project
.
find_label
(
params
[
:name
])
label
=
user_project
.
find_label
(
params
[
:name
])
not_found!
(
'Label not found'
)
unless
label
not_found!
(
'Label not found'
)
unless
label
attrs
=
attributes_for_keys
[
:new_name
,
:color
,
:description
]
update_params
=
declared
(
params
,
include_parent_namespaces:
false
,
if
attrs
.
empty?
include_missing:
false
).
to_h
render_api_error!
(
'Required parameters "new_name" or "color" '
\
'missing'
,
400
)
end
# Rename new name to the actual label attribute name
# Rename new name to the actual label attribute name
attrs
[
:name
]
=
attrs
.
delete
(
:new_name
)
if
attrs
.
key?
(
:new_name
)
update_params
[
'name'
]
=
update_params
.
delete
(
'new_name'
)
if
update_params
.
key?
(
'new_name'
)
if
label
.
update
(
attr
s
)
if
label
.
update
(
update_param
s
)
present
label
,
with:
Entities
::
Label
,
current_user:
current_user
present
label
,
with:
Entities
::
Label
,
current_user:
current_user
else
else
render_validation_error!
(
label
)
render_validation_error!
(
label
)
...
...
spec/requests/api/labels_spec.rb
View file @
21666dbe
...
@@ -159,14 +159,14 @@ describe API::API, api: true do
...
@@ -159,14 +159,14 @@ describe API::API, api: true do
it
'returns 400 if no label name given'
do
it
'returns 400 if no label name given'
do
put
api
(
"/projects/
#{
project
.
id
}
/labels"
,
user
),
new_name:
'label2'
put
api
(
"/projects/
#{
project
.
id
}
/labels"
,
user
),
new_name:
'label2'
expect
(
response
).
to
have_http_status
(
400
)
expect
(
response
).
to
have_http_status
(
400
)
expect
(
json_response
[
'
message'
]).
to
eq
(
'400 (Bad request) "name" not given
'
)
expect
(
json_response
[
'
error'
]).
to
eq
(
'name is missing
'
)
end
end
it
'returns 400 if no new parameters given'
do
it
'returns 400 if no new parameters given'
do
put
api
(
"/projects/
#{
project
.
id
}
/labels"
,
user
),
name:
'label1'
put
api
(
"/projects/
#{
project
.
id
}
/labels"
,
user
),
name:
'label1'
expect
(
response
).
to
have_http_status
(
400
)
expect
(
response
).
to
have_http_status
(
400
)
expect
(
json_response
[
'
message'
]).
to
eq
(
'Required parameters
'
\
expect
(
json_response
[
'
error'
]).
to
eq
(
'new_name, color, description are missing,
'
\
'"new_name" or "color" missing
'
)
'at least one parameter must be provided
'
)
end
end
it
'returns 400 for invalid name'
do
it
'returns 400 for invalid name'
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