Commit f9c6d8a45b080d6a0bc69221e570d6c102525670

Authored by Dmitriy Zaporozhets
2 parents 92d98f5a cb32e032

Merge pull request #1142 from NARKOZ/api

API changes
doc/api/issues.md
@@ -10,6 +10,7 @@ GET /issues @@ -10,6 +10,7 @@ GET /issues
10 [ 10 [
11 { 11 {
12 "id": 43, 12 "id": 43,
  13 + "project_id": 8,
13 "title": "4xx/5xx pages", 14 "title": "4xx/5xx pages",
14 "description": "", 15 "description": "",
15 "labels": [ ], 16 "labels": [ ],
@@ -28,6 +29,7 @@ GET /issues @@ -28,6 +29,7 @@ GET /issues
28 }, 29 },
29 { 30 {
30 "id": 42, 31 "id": 42,
  32 + "project_id": 8,
31 "title": "Add user settings", 33 "title": "Add user settings",
32 "description": "", 34 "description": "",
33 "labels": [ 35 "labels": [
@@ -73,7 +75,7 @@ GET /projects/:id/issues @@ -73,7 +75,7 @@ GET /projects/:id/issues
73 75
74 Parameters: 76 Parameters:
75 77
76 -+ `id` (required) - The code name of a project 78 ++ `id` (required) - The ID or code name of a project
77 79
78 ## Single issue 80 ## Single issue
79 81
@@ -85,12 +87,13 @@ GET /projects/:id/issues/:issue_id @@ -85,12 +87,13 @@ GET /projects/:id/issues/:issue_id
85 87
86 Parameters: 88 Parameters:
87 89
88 -+ `id` (required) - The code name of a project 90 ++ `id` (required) - The ID or code name of a project
89 + `issue_id` (required) - The ID of a project issue 91 + `issue_id` (required) - The ID of a project issue
90 92
91 ```json 93 ```json
92 { 94 {
93 "id": 42, 95 "id": 42,
  96 + "project_id": 8,
94 "title": "Add user settings", 97 "title": "Add user settings",
95 "description": "", 98 "description": "",
96 "labels": [ 99 "labels": [
@@ -135,7 +138,7 @@ POST /projects/:id/issues @@ -135,7 +138,7 @@ POST /projects/:id/issues
135 138
136 Parameters: 139 Parameters:
137 140
138 -+ `id` (required) - The code name of a project 141 ++ `id` (required) - The ID or code name of a project
139 + `title` (required) - The title of an issue 142 + `title` (required) - The title of an issue
140 + `description` (optional) - The description of an issue 143 + `description` (optional) - The description of an issue
141 + `assignee_id` (optional) - The ID of a user to assign issue 144 + `assignee_id` (optional) - The ID of a user to assign issue
@@ -154,7 +157,7 @@ PUT /projects/:id/issues/:issue_id @@ -154,7 +157,7 @@ PUT /projects/:id/issues/:issue_id
154 157
155 Parameters: 158 Parameters:
156 159
157 -+ `id` (required) - The code name of a project 160 ++ `id` (required) - The ID or code name of a project
158 + `issue_id` (required) - The ID of a project's issue 161 + `issue_id` (required) - The ID of a project's issue
159 + `title` (optional) - The title of an issue 162 + `title` (optional) - The title of an issue
160 + `description` (optional) - The description of an issue 163 + `description` (optional) - The description of an issue
@@ -175,7 +178,7 @@ DELETE /projects/:id/issues/:issue_id @@ -175,7 +178,7 @@ DELETE /projects/:id/issues/:issue_id
175 178
176 Parameters: 179 Parameters:
177 180
178 -+ `id` (required) - The code name of a project 181 ++ `id` (required) - The ID or code name of a project
179 + `issue_id` (required) - The ID of a project's issue 182 + `issue_id` (required) - The ID of a project's issue
180 183
181 Status code `200` will be returned on success. 184 Status code `200` will be returned on success.
doc/api/projects.md
1 ## List projects 1 ## List projects
2 2
3 -Get a list of authenticated users' projects. 3 +Get a list of authenticated user's projects.
4 4
5 ``` 5 ```
6 GET /projects 6 GET /projects
@@ -63,7 +63,7 @@ GET /projects/:id @@ -63,7 +63,7 @@ GET /projects/:id
63 63
64 Parameters: 64 Parameters:
65 65
66 -+ `id` (required) - The code name of a project 66 ++ `id` (required) - The ID or code name of a project
67 67
68 ```json 68 ```json
69 { 69 {
@@ -91,7 +91,7 @@ Parameters: @@ -91,7 +91,7 @@ Parameters:
91 91
92 ## Project repository branches 92 ## Project repository branches
93 93
94 -Get a list of project repository branches. 94 +Get a list of project repository branches sorted by name alphabetically.
95 95
96 ``` 96 ```
97 GET /projects/:id/repository/branches 97 GET /projects/:id/repository/branches
@@ -99,7 +99,7 @@ GET /projects/:id/repository/branches @@ -99,7 +99,7 @@ GET /projects/:id/repository/branches
99 99
100 Parameters: 100 Parameters:
101 101
102 -+ `id` (required) - The code name of a project 102 ++ `id` (required) - The ID or code name of a project
103 103
104 ```json 104 ```json
105 [ 105 [
@@ -131,7 +131,7 @@ Parameters: @@ -131,7 +131,7 @@ Parameters:
131 131
132 ## Project repository tags 132 ## Project repository tags
133 133
134 -Get a list of project repository tags. 134 +Get a list of project repository tags sorted by name in reverse alphabetical order.
135 135
136 ``` 136 ```
137 GET /projects/:id/repository/tags 137 GET /projects/:id/repository/tags
@@ -139,7 +139,7 @@ GET /projects/:id/repository/tags @@ -139,7 +139,7 @@ GET /projects/:id/repository/tags
139 139
140 Parameters: 140 Parameters:
141 141
142 -+ `id` (required) - The code name of a project 142 ++ `id` (required) - The ID or code name of a project
143 143
144 ```json 144 ```json
145 [ 145 [
@@ -183,7 +183,7 @@ GET /projects/:id/snippets/:snippet_id @@ -183,7 +183,7 @@ GET /projects/:id/snippets/:snippet_id
183 183
184 Parameters: 184 Parameters:
185 185
186 -+ `id` (required) - The code name of a project 186 ++ `id` (required) - The ID or code name of a project
187 + `snippet_id` (required) - The ID of a project's snippet 187 + `snippet_id` (required) - The ID of a project's snippet
188 188
189 ```json 189 ```json
@@ -214,7 +214,7 @@ GET /projects/:id/snippets/:snippet_id/raw @@ -214,7 +214,7 @@ GET /projects/:id/snippets/:snippet_id/raw
214 214
215 Parameters: 215 Parameters:
216 216
217 -+ `id` (required) - The code name of a project 217 ++ `id` (required) - The ID or code name of a project
218 + `snippet_id` (required) - The ID of a project's snippet 218 + `snippet_id` (required) - The ID of a project's snippet
219 219
220 ## New snippet 220 ## New snippet
@@ -227,7 +227,7 @@ POST /projects/:id/snippets @@ -227,7 +227,7 @@ POST /projects/:id/snippets
227 227
228 Parameters: 228 Parameters:
229 229
230 -+ `id` (required) - The code name of a project 230 ++ `id` (required) - The ID or code name of a project
231 + `title` (required) - The title of a snippet 231 + `title` (required) - The title of a snippet
232 + `file_name` (required) - The name of a snippet file 232 + `file_name` (required) - The name of a snippet file
233 + `lifetime` (optional) - The expiration date of a snippet 233 + `lifetime` (optional) - The expiration date of a snippet
@@ -245,7 +245,7 @@ PUT /projects/:id/snippets/:snippet_id @@ -245,7 +245,7 @@ PUT /projects/:id/snippets/:snippet_id
245 245
246 Parameters: 246 Parameters:
247 247
248 -+ `id` (required) - The code name of a project 248 ++ `id` (required) - The ID or code name of a project
249 + `snippet_id` (required) - The ID of a project's snippet 249 + `snippet_id` (required) - The ID of a project's snippet
250 + `title` (optional) - The title of a snippet 250 + `title` (optional) - The title of a snippet
251 + `file_name` (optional) - The name of a snippet file 251 + `file_name` (optional) - The name of a snippet file
@@ -264,7 +264,7 @@ DELETE /projects/:id/snippets/:snippet_id @@ -264,7 +264,7 @@ DELETE /projects/:id/snippets/:snippet_id
264 264
265 Parameters: 265 Parameters:
266 266
267 -+ `id` (required) - The code name of a project 267 ++ `id` (required) - The ID or code name of a project
268 + `snippet_id` (required) - The ID of a project's snippet 268 + `snippet_id` (required) - The ID of a project's snippet
269 269
270 Status code `200` will be returned on success. 270 Status code `200` will be returned on success.
lib/api/entities.rb
@@ -31,7 +31,9 @@ module Gitlab @@ -31,7 +31,9 @@ module Gitlab
31 end 31 end
32 32
33 class Issue < Grape::Entity 33 class Issue < Grape::Entity
34 - expose :id, :title, :description 34 + expose :id
  35 + expose (:project_id) {|issue| issue.project.id}
  36 + expose :title, :description
35 expose :label_list, :as => :labels 37 expose :label_list, :as => :labels
36 expose :milestone, :using => Entities::Milestone 38 expose :milestone, :using => Entities::Milestone
37 expose :assignee, :author, :using => Entities::UserBasic 39 expose :assignee, :author, :using => Entities::UserBasic
lib/api/helpers.rb
@@ -5,7 +5,13 @@ module Gitlab @@ -5,7 +5,13 @@ module Gitlab
5 end 5 end
6 6
7 def user_project 7 def user_project
8 - @project ||= current_user.projects.find_by_code(params[:id]) 8 + if @project ||= current_user.projects.find_by_id(params[:id]) ||
  9 + current_user.projects.find_by_code(params[:id])
  10 + else
  11 + error!({'message' => '404 Not found'}, 404)
  12 + end
  13 +
  14 + @project
9 end 15 end
10 16
11 def authenticate! 17 def authenticate!
lib/api/issues.rb
@@ -17,7 +17,7 @@ module Gitlab @@ -17,7 +17,7 @@ module Gitlab
17 # Get a list of project issues 17 # Get a list of project issues
18 # 18 #
19 # Parameters: 19 # Parameters:
20 - # id (required) - The code name of a project 20 + # id (required) - The ID or code name of a project
21 # Example Request: 21 # Example Request:
22 # GET /projects/:id/issues 22 # GET /projects/:id/issues
23 get ":id/issues" do 23 get ":id/issues" do
@@ -27,7 +27,7 @@ module Gitlab @@ -27,7 +27,7 @@ module Gitlab
27 # Get a single project issue 27 # Get a single project issue
28 # 28 #
29 # Parameters: 29 # Parameters:
30 - # id (required) - The code name of a project 30 + # id (required) - The ID or code name of a project
31 # issue_id (required) - The ID of a project issue 31 # issue_id (required) - The ID of a project issue
32 # Example Request: 32 # Example Request:
33 # GET /projects/:id/issues/:issue_id 33 # GET /projects/:id/issues/:issue_id
@@ -39,7 +39,7 @@ module Gitlab @@ -39,7 +39,7 @@ module Gitlab
39 # Create a new project issue 39 # Create a new project issue
40 # 40 #
41 # Parameters: 41 # Parameters:
42 - # id (required) - The code name of a project 42 + # id (required) - The ID or code name of a project
43 # title (required) - The title of an issue 43 # title (required) - The title of an issue
44 # description (optional) - The description of an issue 44 # description (optional) - The description of an issue
45 # assignee_id (optional) - The ID of a user to assign issue 45 # assignee_id (optional) - The ID of a user to assign issue
@@ -67,7 +67,7 @@ module Gitlab @@ -67,7 +67,7 @@ module Gitlab
67 # Update an existing issue 67 # Update an existing issue
68 # 68 #
69 # Parameters: 69 # Parameters:
70 - # id (required) - The code name of a project 70 + # id (required) - The ID or code name of a project
71 # issue_id (required) - The ID of a project issue 71 # issue_id (required) - The ID of a project issue
72 # title (optional) - The title of an issue 72 # title (optional) - The title of an issue
73 # description (optional) - The description of an issue 73 # description (optional) - The description of an issue
@@ -98,7 +98,7 @@ module Gitlab @@ -98,7 +98,7 @@ module Gitlab
98 # Delete a project issue 98 # Delete a project issue
99 # 99 #
100 # Parameters: 100 # Parameters:
101 - # id (required) - The code name of a project 101 + # id (required) - The ID or code name of a project
102 # issue_id (required) - The ID of a project issue 102 # issue_id (required) - The ID of a project issue
103 # Example Request: 103 # Example Request:
104 # DELETE /projects/:id/issues/:issue_id 104 # DELETE /projects/:id/issues/:issue_id
lib/api/projects.rb
@@ -16,7 +16,7 @@ module Gitlab @@ -16,7 +16,7 @@ module Gitlab
16 # Get a single project 16 # Get a single project
17 # 17 #
18 # Parameters: 18 # Parameters:
19 - # id (required) - The code of a project 19 + # id (required) - The ID or code name of a project
20 # Example Request: 20 # Example Request:
21 # GET /projects/:id 21 # GET /projects/:id
22 get ":id" do 22 get ":id" do
@@ -26,7 +26,7 @@ module Gitlab @@ -26,7 +26,7 @@ module Gitlab
26 # Get a project repository branches 26 # Get a project repository branches
27 # 27 #
28 # Parameters: 28 # Parameters:
29 - # id (required) - The code of a project 29 + # id (required) - The ID or code name of a project
30 # Example Request: 30 # Example Request:
31 # GET /projects/:id/repository/branches 31 # GET /projects/:id/repository/branches
32 get ":id/repository/branches" do 32 get ":id/repository/branches" do
@@ -36,7 +36,7 @@ module Gitlab @@ -36,7 +36,7 @@ module Gitlab
36 # Get a project repository tags 36 # Get a project repository tags
37 # 37 #
38 # Parameters: 38 # Parameters:
39 - # id (required) - The code of a project 39 + # id (required) - The ID or code name of a project
40 # Example Request: 40 # Example Request:
41 # GET /projects/:id/repository/tags 41 # GET /projects/:id/repository/tags
42 get ":id/repository/tags" do 42 get ":id/repository/tags" do
@@ -46,7 +46,7 @@ module Gitlab @@ -46,7 +46,7 @@ module Gitlab
46 # Get a project snippet 46 # Get a project snippet
47 # 47 #
48 # Parameters: 48 # Parameters:
49 - # id (required) - The code of a project 49 + # id (required) - The ID or code name of a project
50 # snippet_id (required) - The ID of a project snippet 50 # snippet_id (required) - The ID of a project snippet
51 # Example Request: 51 # Example Request:
52 # GET /projects/:id/snippets/:snippet_id 52 # GET /projects/:id/snippets/:snippet_id
@@ -58,7 +58,7 @@ module Gitlab @@ -58,7 +58,7 @@ module Gitlab
58 # Create a new project snippet 58 # Create a new project snippet
59 # 59 #
60 # Parameters: 60 # Parameters:
61 - # id (required) - The code name of a project 61 + # id (required) - The ID or code name of a project
62 # title (required) - The title of a snippet 62 # title (required) - The title of a snippet
63 # file_name (required) - The name of a snippet file 63 # file_name (required) - The name of a snippet file
64 # lifetime (optional) - The expiration date of a snippet 64 # lifetime (optional) - The expiration date of a snippet
@@ -84,7 +84,7 @@ module Gitlab @@ -84,7 +84,7 @@ module Gitlab
84 # Update an existing project snippet 84 # Update an existing project snippet
85 # 85 #
86 # Parameters: 86 # Parameters:
87 - # id (required) - The code name of a project 87 + # id (required) - The ID or code name of a project
88 # snippet_id (required) - The ID of a project snippet 88 # snippet_id (required) - The ID of a project snippet
89 # title (optional) - The title of a snippet 89 # title (optional) - The title of a snippet
90 # file_name (optional) - The name of a snippet file 90 # file_name (optional) - The name of a snippet file
@@ -111,7 +111,7 @@ module Gitlab @@ -111,7 +111,7 @@ module Gitlab
111 # Delete a project snippet 111 # Delete a project snippet
112 # 112 #
113 # Parameters: 113 # Parameters:
114 - # id (required) - The code of a project 114 + # id (required) - The ID or code name of a project
115 # snippet_id (required) - The ID of a project snippet 115 # snippet_id (required) - The ID of a project snippet
116 # Example Request: 116 # Example Request:
117 # DELETE /projects/:id/snippets/:snippet_id 117 # DELETE /projects/:id/snippets/:snippet_id
@@ -123,7 +123,7 @@ module Gitlab @@ -123,7 +123,7 @@ module Gitlab
123 # Get a raw project snippet 123 # Get a raw project snippet
124 # 124 #
125 # Parameters: 125 # Parameters:
126 - # id (required) - The code of a project 126 + # id (required) - The ID or code name of a project
127 # snippet_id (required) - The ID of a project snippet 127 # snippet_id (required) - The ID of a project snippet
128 # Example Request: 128 # Example Request:
129 # GET /projects/:id/snippets/:snippet_id/raw 129 # GET /projects/:id/snippets/:snippet_id/raw
spec/api/projects_spec.rb
@@ -25,11 +25,23 @@ describe Gitlab::API do @@ -25,11 +25,23 @@ describe Gitlab::API do
25 25
26 describe "GET /projects/:id" do 26 describe "GET /projects/:id" do
27 it "should return a project by id" do 27 it "should return a project by id" do
28 - get "#{api_prefix}/projects/#{project.code}?private_token=#{user.private_token}" 28 + get "#{api_prefix}/projects/#{project.id}?private_token=#{user.private_token}"
29 response.status.should == 200 29 response.status.should == 200
30 json_response['name'].should == project.name 30 json_response['name'].should == project.name
31 json_response['owner']['email'].should == user.email 31 json_response['owner']['email'].should == user.email
32 end 32 end
  33 +
  34 + it "should return a project by code name" do
  35 + get "#{api_prefix}/projects/#{project.code}?private_token=#{user.private_token}"
  36 + response.status.should == 200
  37 + json_response['name'].should == project.name
  38 + end
  39 +
  40 + it "should return a 404 error if not found" do
  41 + get "#{api_prefix}/projects/42?private_token=#{user.private_token}"
  42 + response.status.should == 404
  43 + json_response['message'].should == '404 Not found'
  44 + end
33 end 45 end
34 46
35 describe "GET /projects/:id/repository/branches" do 47 describe "GET /projects/:id/repository/branches" do