Commit f9c6d8a45b080d6a0bc69221e570d6c102525670
Exists in
master
and in
4 other branches
Merge pull request #1142 from NARKOZ/api
API changes
Showing
7 changed files
with
55 additions
and
32 deletions
Show diff stats
doc/api/issues.md
| ... | ... | @@ -10,6 +10,7 @@ GET /issues |
| 10 | 10 | [ |
| 11 | 11 | { |
| 12 | 12 | "id": 43, |
| 13 | + "project_id": 8, | |
| 13 | 14 | "title": "4xx/5xx pages", |
| 14 | 15 | "description": "", |
| 15 | 16 | "labels": [ ], |
| ... | ... | @@ -28,6 +29,7 @@ GET /issues |
| 28 | 29 | }, |
| 29 | 30 | { |
| 30 | 31 | "id": 42, |
| 32 | + "project_id": 8, | |
| 31 | 33 | "title": "Add user settings", |
| 32 | 34 | "description": "", |
| 33 | 35 | "labels": [ |
| ... | ... | @@ -73,7 +75,7 @@ GET /projects/:id/issues |
| 73 | 75 | |
| 74 | 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 | 80 | ## Single issue |
| 79 | 81 | |
| ... | ... | @@ -85,12 +87,13 @@ GET /projects/:id/issues/:issue_id |
| 85 | 87 | |
| 86 | 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 | 91 | + `issue_id` (required) - The ID of a project issue |
| 90 | 92 | |
| 91 | 93 | ```json |
| 92 | 94 | { |
| 93 | 95 | "id": 42, |
| 96 | + "project_id": 8, | |
| 94 | 97 | "title": "Add user settings", |
| 95 | 98 | "description": "", |
| 96 | 99 | "labels": [ |
| ... | ... | @@ -135,7 +138,7 @@ POST /projects/:id/issues |
| 135 | 138 | |
| 136 | 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 | 142 | + `title` (required) - The title of an issue |
| 140 | 143 | + `description` (optional) - The description of an issue |
| 141 | 144 | + `assignee_id` (optional) - The ID of a user to assign issue |
| ... | ... | @@ -154,7 +157,7 @@ PUT /projects/:id/issues/:issue_id |
| 154 | 157 | |
| 155 | 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 | 161 | + `issue_id` (required) - The ID of a project's issue |
| 159 | 162 | + `title` (optional) - The title of an issue |
| 160 | 163 | + `description` (optional) - The description of an issue |
| ... | ... | @@ -175,7 +178,7 @@ DELETE /projects/:id/issues/:issue_id |
| 175 | 178 | |
| 176 | 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 | 182 | + `issue_id` (required) - The ID of a project's issue |
| 180 | 183 | |
| 181 | 184 | Status code `200` will be returned on success. | ... | ... |
doc/api/projects.md
| 1 | 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 | 6 | GET /projects |
| ... | ... | @@ -63,7 +63,7 @@ GET /projects/:id |
| 63 | 63 | |
| 64 | 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 | 68 | ```json |
| 69 | 69 | { |
| ... | ... | @@ -91,7 +91,7 @@ Parameters: |
| 91 | 91 | |
| 92 | 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 | 97 | GET /projects/:id/repository/branches |
| ... | ... | @@ -99,7 +99,7 @@ GET /projects/:id/repository/branches |
| 99 | 99 | |
| 100 | 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 | 104 | ```json |
| 105 | 105 | [ |
| ... | ... | @@ -131,7 +131,7 @@ Parameters: |
| 131 | 131 | |
| 132 | 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 | 137 | GET /projects/:id/repository/tags |
| ... | ... | @@ -139,7 +139,7 @@ GET /projects/:id/repository/tags |
| 139 | 139 | |
| 140 | 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 | 144 | ```json |
| 145 | 145 | [ |
| ... | ... | @@ -183,7 +183,7 @@ GET /projects/:id/snippets/:snippet_id |
| 183 | 183 | |
| 184 | 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 | 187 | + `snippet_id` (required) - The ID of a project's snippet |
| 188 | 188 | |
| 189 | 189 | ```json |
| ... | ... | @@ -214,7 +214,7 @@ GET /projects/:id/snippets/:snippet_id/raw |
| 214 | 214 | |
| 215 | 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 | 218 | + `snippet_id` (required) - The ID of a project's snippet |
| 219 | 219 | |
| 220 | 220 | ## New snippet |
| ... | ... | @@ -227,7 +227,7 @@ POST /projects/:id/snippets |
| 227 | 227 | |
| 228 | 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 | 231 | + `title` (required) - The title of a snippet |
| 232 | 232 | + `file_name` (required) - The name of a snippet file |
| 233 | 233 | + `lifetime` (optional) - The expiration date of a snippet |
| ... | ... | @@ -245,7 +245,7 @@ PUT /projects/:id/snippets/:snippet_id |
| 245 | 245 | |
| 246 | 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 | 249 | + `snippet_id` (required) - The ID of a project's snippet |
| 250 | 250 | + `title` (optional) - The title of a snippet |
| 251 | 251 | + `file_name` (optional) - The name of a snippet file |
| ... | ... | @@ -264,7 +264,7 @@ DELETE /projects/:id/snippets/:snippet_id |
| 264 | 264 | |
| 265 | 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 | 268 | + `snippet_id` (required) - The ID of a project's snippet |
| 269 | 269 | |
| 270 | 270 | Status code `200` will be returned on success. | ... | ... |
lib/api/entities.rb
| ... | ... | @@ -31,7 +31,9 @@ module Gitlab |
| 31 | 31 | end |
| 32 | 32 | |
| 33 | 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 | 37 | expose :label_list, :as => :labels |
| 36 | 38 | expose :milestone, :using => Entities::Milestone |
| 37 | 39 | expose :assignee, :author, :using => Entities::UserBasic | ... | ... |
lib/api/helpers.rb
| ... | ... | @@ -5,7 +5,13 @@ module Gitlab |
| 5 | 5 | end |
| 6 | 6 | |
| 7 | 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 | 15 | end |
| 10 | 16 | |
| 11 | 17 | def authenticate! | ... | ... |
lib/api/issues.rb
| ... | ... | @@ -17,7 +17,7 @@ module Gitlab |
| 17 | 17 | # Get a list of project issues |
| 18 | 18 | # |
| 19 | 19 | # Parameters: |
| 20 | - # id (required) - The code name of a project | |
| 20 | + # id (required) - The ID or code name of a project | |
| 21 | 21 | # Example Request: |
| 22 | 22 | # GET /projects/:id/issues |
| 23 | 23 | get ":id/issues" do |
| ... | ... | @@ -27,7 +27,7 @@ module Gitlab |
| 27 | 27 | # Get a single project issue |
| 28 | 28 | # |
| 29 | 29 | # Parameters: |
| 30 | - # id (required) - The code name of a project | |
| 30 | + # id (required) - The ID or code name of a project | |
| 31 | 31 | # issue_id (required) - The ID of a project issue |
| 32 | 32 | # Example Request: |
| 33 | 33 | # GET /projects/:id/issues/:issue_id |
| ... | ... | @@ -39,7 +39,7 @@ module Gitlab |
| 39 | 39 | # Create a new project issue |
| 40 | 40 | # |
| 41 | 41 | # Parameters: |
| 42 | - # id (required) - The code name of a project | |
| 42 | + # id (required) - The ID or code name of a project | |
| 43 | 43 | # title (required) - The title of an issue |
| 44 | 44 | # description (optional) - The description of an issue |
| 45 | 45 | # assignee_id (optional) - The ID of a user to assign issue |
| ... | ... | @@ -67,7 +67,7 @@ module Gitlab |
| 67 | 67 | # Update an existing issue |
| 68 | 68 | # |
| 69 | 69 | # Parameters: |
| 70 | - # id (required) - The code name of a project | |
| 70 | + # id (required) - The ID or code name of a project | |
| 71 | 71 | # issue_id (required) - The ID of a project issue |
| 72 | 72 | # title (optional) - The title of an issue |
| 73 | 73 | # description (optional) - The description of an issue |
| ... | ... | @@ -98,7 +98,7 @@ module Gitlab |
| 98 | 98 | # Delete a project issue |
| 99 | 99 | # |
| 100 | 100 | # Parameters: |
| 101 | - # id (required) - The code name of a project | |
| 101 | + # id (required) - The ID or code name of a project | |
| 102 | 102 | # issue_id (required) - The ID of a project issue |
| 103 | 103 | # Example Request: |
| 104 | 104 | # DELETE /projects/:id/issues/:issue_id | ... | ... |
lib/api/projects.rb
| ... | ... | @@ -16,7 +16,7 @@ module Gitlab |
| 16 | 16 | # Get a single project |
| 17 | 17 | # |
| 18 | 18 | # Parameters: |
| 19 | - # id (required) - The code of a project | |
| 19 | + # id (required) - The ID or code name of a project | |
| 20 | 20 | # Example Request: |
| 21 | 21 | # GET /projects/:id |
| 22 | 22 | get ":id" do |
| ... | ... | @@ -26,7 +26,7 @@ module Gitlab |
| 26 | 26 | # Get a project repository branches |
| 27 | 27 | # |
| 28 | 28 | # Parameters: |
| 29 | - # id (required) - The code of a project | |
| 29 | + # id (required) - The ID or code name of a project | |
| 30 | 30 | # Example Request: |
| 31 | 31 | # GET /projects/:id/repository/branches |
| 32 | 32 | get ":id/repository/branches" do |
| ... | ... | @@ -36,7 +36,7 @@ module Gitlab |
| 36 | 36 | # Get a project repository tags |
| 37 | 37 | # |
| 38 | 38 | # Parameters: |
| 39 | - # id (required) - The code of a project | |
| 39 | + # id (required) - The ID or code name of a project | |
| 40 | 40 | # Example Request: |
| 41 | 41 | # GET /projects/:id/repository/tags |
| 42 | 42 | get ":id/repository/tags" do |
| ... | ... | @@ -46,7 +46,7 @@ module Gitlab |
| 46 | 46 | # Get a project snippet |
| 47 | 47 | # |
| 48 | 48 | # Parameters: |
| 49 | - # id (required) - The code of a project | |
| 49 | + # id (required) - The ID or code name of a project | |
| 50 | 50 | # snippet_id (required) - The ID of a project snippet |
| 51 | 51 | # Example Request: |
| 52 | 52 | # GET /projects/:id/snippets/:snippet_id |
| ... | ... | @@ -58,7 +58,7 @@ module Gitlab |
| 58 | 58 | # Create a new project snippet |
| 59 | 59 | # |
| 60 | 60 | # Parameters: |
| 61 | - # id (required) - The code name of a project | |
| 61 | + # id (required) - The ID or code name of a project | |
| 62 | 62 | # title (required) - The title of a snippet |
| 63 | 63 | # file_name (required) - The name of a snippet file |
| 64 | 64 | # lifetime (optional) - The expiration date of a snippet |
| ... | ... | @@ -84,7 +84,7 @@ module Gitlab |
| 84 | 84 | # Update an existing project snippet |
| 85 | 85 | # |
| 86 | 86 | # Parameters: |
| 87 | - # id (required) - The code name of a project | |
| 87 | + # id (required) - The ID or code name of a project | |
| 88 | 88 | # snippet_id (required) - The ID of a project snippet |
| 89 | 89 | # title (optional) - The title of a snippet |
| 90 | 90 | # file_name (optional) - The name of a snippet file |
| ... | ... | @@ -111,7 +111,7 @@ module Gitlab |
| 111 | 111 | # Delete a project snippet |
| 112 | 112 | # |
| 113 | 113 | # Parameters: |
| 114 | - # id (required) - The code of a project | |
| 114 | + # id (required) - The ID or code name of a project | |
| 115 | 115 | # snippet_id (required) - The ID of a project snippet |
| 116 | 116 | # Example Request: |
| 117 | 117 | # DELETE /projects/:id/snippets/:snippet_id |
| ... | ... | @@ -123,7 +123,7 @@ module Gitlab |
| 123 | 123 | # Get a raw project snippet |
| 124 | 124 | # |
| 125 | 125 | # Parameters: |
| 126 | - # id (required) - The code of a project | |
| 126 | + # id (required) - The ID or code name of a project | |
| 127 | 127 | # snippet_id (required) - The ID of a project snippet |
| 128 | 128 | # Example Request: |
| 129 | 129 | # GET /projects/:id/snippets/:snippet_id/raw | ... | ... |
spec/api/projects_spec.rb
| ... | ... | @@ -25,11 +25,23 @@ describe Gitlab::API do |
| 25 | 25 | |
| 26 | 26 | describe "GET /projects/:id" do |
| 27 | 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 | 29 | response.status.should == 200 |
| 30 | 30 | json_response['name'].should == project.name |
| 31 | 31 | json_response['owner']['email'].should == user.email |
| 32 | 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 | 45 | end |
| 34 | 46 | |
| 35 | 47 | describe "GET /projects/:id/repository/branches" do | ... | ... |