Commit f9c6d8a4 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge pull request #1142 from NARKOZ/api

API changes
parents 92d98f5a cb32e032
...@@ -10,6 +10,7 @@ GET /issues ...@@ -10,6 +10,7 @@ GET /issues
[ [
{ {
"id": 43, "id": 43,
"project_id": 8,
"title": "4xx/5xx pages", "title": "4xx/5xx pages",
"description": "", "description": "",
"labels": [ ], "labels": [ ],
...@@ -28,6 +29,7 @@ GET /issues ...@@ -28,6 +29,7 @@ GET /issues
}, },
{ {
"id": 42, "id": 42,
"project_id": 8,
"title": "Add user settings", "title": "Add user settings",
"description": "", "description": "",
"labels": [ "labels": [
...@@ -73,7 +75,7 @@ GET /projects/:id/issues ...@@ -73,7 +75,7 @@ GET /projects/:id/issues
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
## Single issue ## Single issue
...@@ -85,12 +87,13 @@ GET /projects/:id/issues/:issue_id ...@@ -85,12 +87,13 @@ GET /projects/:id/issues/:issue_id
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `issue_id` (required) - The ID of a project issue + `issue_id` (required) - The ID of a project issue
```json ```json
{ {
"id": 42, "id": 42,
"project_id": 8,
"title": "Add user settings", "title": "Add user settings",
"description": "", "description": "",
"labels": [ "labels": [
...@@ -135,7 +138,7 @@ POST /projects/:id/issues ...@@ -135,7 +138,7 @@ POST /projects/:id/issues
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `title` (required) - The title of an issue + `title` (required) - The title of an issue
+ `description` (optional) - The description of an issue + `description` (optional) - The description of an issue
+ `assignee_id` (optional) - The ID of a user to assign issue + `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
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `issue_id` (required) - The ID of a project's issue + `issue_id` (required) - The ID of a project's issue
+ `title` (optional) - The title of an issue + `title` (optional) - The title of an issue
+ `description` (optional) - The description of an issue + `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
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `issue_id` (required) - The ID of a project's issue + `issue_id` (required) - The ID of a project's issue
Status code `200` will be returned on success. Status code `200` will be returned on success.
## List projects ## List projects
Get a list of authenticated users' projects. Get a list of authenticated user's projects.
``` ```
GET /projects GET /projects
...@@ -63,7 +63,7 @@ GET /projects/:id ...@@ -63,7 +63,7 @@ GET /projects/:id
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
```json ```json
{ {
...@@ -91,7 +91,7 @@ Parameters: ...@@ -91,7 +91,7 @@ Parameters:
## Project repository branches ## Project repository branches
Get a list of project repository branches. Get a list of project repository branches sorted by name alphabetically.
``` ```
GET /projects/:id/repository/branches GET /projects/:id/repository/branches
...@@ -99,7 +99,7 @@ GET /projects/:id/repository/branches ...@@ -99,7 +99,7 @@ GET /projects/:id/repository/branches
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
```json ```json
[ [
...@@ -131,7 +131,7 @@ Parameters: ...@@ -131,7 +131,7 @@ Parameters:
## Project repository tags ## Project repository tags
Get a list of project repository tags. Get a list of project repository tags sorted by name in reverse alphabetical order.
``` ```
GET /projects/:id/repository/tags GET /projects/:id/repository/tags
...@@ -139,7 +139,7 @@ GET /projects/:id/repository/tags ...@@ -139,7 +139,7 @@ GET /projects/:id/repository/tags
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
```json ```json
[ [
...@@ -183,7 +183,7 @@ GET /projects/:id/snippets/:snippet_id ...@@ -183,7 +183,7 @@ GET /projects/:id/snippets/:snippet_id
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `snippet_id` (required) - The ID of a project's snippet + `snippet_id` (required) - The ID of a project's snippet
```json ```json
...@@ -214,7 +214,7 @@ GET /projects/:id/snippets/:snippet_id/raw ...@@ -214,7 +214,7 @@ GET /projects/:id/snippets/:snippet_id/raw
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `snippet_id` (required) - The ID of a project's snippet + `snippet_id` (required) - The ID of a project's snippet
## New snippet ## New snippet
...@@ -227,7 +227,7 @@ POST /projects/:id/snippets ...@@ -227,7 +227,7 @@ POST /projects/:id/snippets
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `title` (required) - The title of a snippet + `title` (required) - The title of a snippet
+ `file_name` (required) - The name of a snippet file + `file_name` (required) - The name of a snippet file
+ `lifetime` (optional) - The expiration date of a snippet + `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
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `snippet_id` (required) - The ID of a project's snippet + `snippet_id` (required) - The ID of a project's snippet
+ `title` (optional) - The title of a snippet + `title` (optional) - The title of a snippet
+ `file_name` (optional) - The name of a snippet file + `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
Parameters: Parameters:
+ `id` (required) - The code name of a project + `id` (required) - The ID or code name of a project
+ `snippet_id` (required) - The ID of a project's snippet + `snippet_id` (required) - The ID of a project's snippet
Status code `200` will be returned on success. Status code `200` will be returned on success.
...@@ -31,7 +31,9 @@ module Gitlab ...@@ -31,7 +31,9 @@ module Gitlab
end end
class Issue < Grape::Entity class Issue < Grape::Entity
expose :id, :title, :description expose :id
expose (:project_id) {|issue| issue.project.id}
expose :title, :description
expose :label_list, :as => :labels expose :label_list, :as => :labels
expose :milestone, :using => Entities::Milestone expose :milestone, :using => Entities::Milestone
expose :assignee, :author, :using => Entities::UserBasic expose :assignee, :author, :using => Entities::UserBasic
......
...@@ -5,7 +5,13 @@ module Gitlab ...@@ -5,7 +5,13 @@ module Gitlab
end end
def user_project def user_project
@project ||= current_user.projects.find_by_code(params[:id]) if @project ||= current_user.projects.find_by_id(params[:id]) ||
current_user.projects.find_by_code(params[:id])
else
error!({'message' => '404 Not found'}, 404)
end
@project
end end
def authenticate! def authenticate!
......
...@@ -17,7 +17,7 @@ module Gitlab ...@@ -17,7 +17,7 @@ module Gitlab
# Get a list of project issues # Get a list of project issues
# #
# Parameters: # Parameters:
# id (required) - The code name of a project # id (required) - The ID or code name of a project
# Example Request: # Example Request:
# GET /projects/:id/issues # GET /projects/:id/issues
get ":id/issues" do get ":id/issues" do
...@@ -27,7 +27,7 @@ module Gitlab ...@@ -27,7 +27,7 @@ module Gitlab
# Get a single project issue # Get a single project issue
# #
# Parameters: # Parameters:
# id (required) - The code name of a project # id (required) - The ID or code name of a project
# issue_id (required) - The ID of a project issue # issue_id (required) - The ID of a project issue
# Example Request: # Example Request:
# GET /projects/:id/issues/:issue_id # GET /projects/:id/issues/:issue_id
...@@ -39,7 +39,7 @@ module Gitlab ...@@ -39,7 +39,7 @@ module Gitlab
# Create a new project issue # Create a new project issue
# #
# Parameters: # Parameters:
# id (required) - The code name of a project # id (required) - The ID or code name of a project
# title (required) - The title of an issue # title (required) - The title of an issue
# description (optional) - The description of an issue # description (optional) - The description of an issue
# assignee_id (optional) - The ID of a user to assign issue # assignee_id (optional) - The ID of a user to assign issue
...@@ -67,7 +67,7 @@ module Gitlab ...@@ -67,7 +67,7 @@ module Gitlab
# Update an existing issue # Update an existing issue
# #
# Parameters: # Parameters:
# id (required) - The code name of a project # id (required) - The ID or code name of a project
# issue_id (required) - The ID of a project issue # issue_id (required) - The ID of a project issue
# title (optional) - The title of an issue # title (optional) - The title of an issue
# description (optional) - The description of an issue # description (optional) - The description of an issue
...@@ -98,7 +98,7 @@ module Gitlab ...@@ -98,7 +98,7 @@ module Gitlab
# Delete a project issue # Delete a project issue
# #
# Parameters: # Parameters:
# id (required) - The code name of a project # id (required) - The ID or code name of a project
# issue_id (required) - The ID of a project issue # issue_id (required) - The ID of a project issue
# Example Request: # Example Request:
# DELETE /projects/:id/issues/:issue_id # DELETE /projects/:id/issues/:issue_id
......
...@@ -16,7 +16,7 @@ module Gitlab ...@@ -16,7 +16,7 @@ module Gitlab
# Get a single project # Get a single project
# #
# Parameters: # Parameters:
# id (required) - The code of a project # id (required) - The ID or code name of a project
# Example Request: # Example Request:
# GET /projects/:id # GET /projects/:id
get ":id" do get ":id" do
...@@ -26,7 +26,7 @@ module Gitlab ...@@ -26,7 +26,7 @@ module Gitlab
# Get a project repository branches # Get a project repository branches
# #
# Parameters: # Parameters:
# id (required) - The code of a project # id (required) - The ID or code name of a project
# Example Request: # Example Request:
# GET /projects/:id/repository/branches # GET /projects/:id/repository/branches
get ":id/repository/branches" do get ":id/repository/branches" do
...@@ -36,7 +36,7 @@ module Gitlab ...@@ -36,7 +36,7 @@ module Gitlab
# Get a project repository tags # Get a project repository tags
# #
# Parameters: # Parameters:
# id (required) - The code of a project # id (required) - The ID or code name of a project
# Example Request: # Example Request:
# GET /projects/:id/repository/tags # GET /projects/:id/repository/tags
get ":id/repository/tags" do get ":id/repository/tags" do
...@@ -46,7 +46,7 @@ module Gitlab ...@@ -46,7 +46,7 @@ module Gitlab
# Get a project snippet # Get a project snippet
# #
# Parameters: # Parameters:
# id (required) - The code of a project # id (required) - The ID or code name of a project
# snippet_id (required) - The ID of a project snippet # snippet_id (required) - The ID of a project snippet
# Example Request: # Example Request:
# GET /projects/:id/snippets/:snippet_id # GET /projects/:id/snippets/:snippet_id
...@@ -58,7 +58,7 @@ module Gitlab ...@@ -58,7 +58,7 @@ module Gitlab
# Create a new project snippet # Create a new project snippet
# #
# Parameters: # Parameters:
# id (required) - The code name of a project # id (required) - The ID or code name of a project
# title (required) - The title of a snippet # title (required) - The title of a snippet
# file_name (required) - The name of a snippet file # file_name (required) - The name of a snippet file
# lifetime (optional) - The expiration date of a snippet # lifetime (optional) - The expiration date of a snippet
...@@ -84,7 +84,7 @@ module Gitlab ...@@ -84,7 +84,7 @@ module Gitlab
# Update an existing project snippet # Update an existing project snippet
# #
# Parameters: # Parameters:
# id (required) - The code name of a project # id (required) - The ID or code name of a project
# snippet_id (required) - The ID of a project snippet # snippet_id (required) - The ID of a project snippet
# title (optional) - The title of a snippet # title (optional) - The title of a snippet
# file_name (optional) - The name of a snippet file # file_name (optional) - The name of a snippet file
...@@ -111,7 +111,7 @@ module Gitlab ...@@ -111,7 +111,7 @@ module Gitlab
# Delete a project snippet # Delete a project snippet
# #
# Parameters: # Parameters:
# id (required) - The code of a project # id (required) - The ID or code name of a project
# snippet_id (required) - The ID of a project snippet # snippet_id (required) - The ID of a project snippet
# Example Request: # Example Request:
# DELETE /projects/:id/snippets/:snippet_id # DELETE /projects/:id/snippets/:snippet_id
...@@ -123,7 +123,7 @@ module Gitlab ...@@ -123,7 +123,7 @@ module Gitlab
# Get a raw project snippet # Get a raw project snippet
# #
# Parameters: # Parameters:
# id (required) - The code of a project # id (required) - The ID or code name of a project
# snippet_id (required) - The ID of a project snippet # snippet_id (required) - The ID of a project snippet
# Example Request: # Example Request:
# GET /projects/:id/snippets/:snippet_id/raw # GET /projects/:id/snippets/:snippet_id/raw
......
...@@ -25,11 +25,23 @@ describe Gitlab::API do ...@@ -25,11 +25,23 @@ describe Gitlab::API do
describe "GET /projects/:id" do describe "GET /projects/:id" do
it "should return a project by id" do it "should return a project by id" do
get "#{api_prefix}/projects/#{project.code}?private_token=#{user.private_token}" get "#{api_prefix}/projects/#{project.id}?private_token=#{user.private_token}"
response.status.should == 200 response.status.should == 200
json_response['name'].should == project.name json_response['name'].should == project.name
json_response['owner']['email'].should == user.email json_response['owner']['email'].should == user.email
end end
it "should return a project by code name" do
get "#{api_prefix}/projects/#{project.code}?private_token=#{user.private_token}"
response.status.should == 200
json_response['name'].should == project.name
end
it "should return a 404 error if not found" do
get "#{api_prefix}/projects/42?private_token=#{user.private_token}"
response.status.should == 404
json_response['message'].should == '404 Not found'
end
end end
describe "GET /projects/:id/repository/branches" do describe "GET /projects/:id/repository/branches" do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment