From c1173e27071b83399cd92406b229be7f0eca59f1 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:15:37 +0300 Subject: API on Projects creation implemented --- lib/api/projects.rb | 21 +++++++++++++++++++++ spec/requests/api/projects_spec.rb | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index eb23641c605..7ac2fd4a249 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -23,6 +23,27 @@ module Gitlab present user_project, with: Entities::Project end + # Create new project + # + # Parameters: + # name (required) - name for new project + # code (optional) - code for new project, if not set used name + # path (optional) - oath for new project, if not set used name + # Example Request + # POST /projects + post do + project = {} + project[:name] = params[:name] + project[:code] = params[:code] || project[:name] + project[:path] = params[:path] || project[:name] + @project = Project.create_by_user(project, current_user) + if @project.saved? + present @project, with: Entities::Project + else + error!({'message' => '404 Not found'}, 404) + end + end + # Get a project repository branches # # Parameters: diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 0cbc12af53b..cc6843ccb66 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -25,6 +25,43 @@ describe Gitlab::API do end end + describe "POST /projects" do + it "should create new project without code and path" do + lambda { + name = "foo" + post api("/projects", user), { + name: name + } + response.status.should == 201 + json_response["name"].should == name + json_response["code"].should == name + json_response["path"].should == name + }.should change{Project.count}.by(1) + end + it "should create new project" do + lambda { + name = "foo" + path = "bar" + code = "bazz" + post api("/projects", user), { + code: code, + path: path, + name: name + } + response.status.should == 201 + json_response["name"].should == name + json_response["path"].should == path + json_response["code"].should == code + }.should change{Project.count}.by(1) + end + it "should not create project without name" do + lambda { + post api("/projects", user) + response.status.should == 404 + }.should_not change{Project.count} + end + end + describe "GET /projects/:id" do it "should return a project by id" do get api("/projects/#{project.id}", user) -- cgit v1.2.1 From 985ecf0f045ce0d8a6fd0524935f12152bfe3918 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:25:36 +0300 Subject: Docs added for Create Project API --- doc/api/projects.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index d680b5d8597..f015b2f534a 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -89,6 +89,44 @@ Parameters: } ``` +## Create project + +Create new project owned by user + +``` +POST /projects +``` + +Parameters: + ++ `name` (required) - new project name ++ `code` (optional) - new project code, used project name if not set ++ `path` (optional) - new project path, user project name if not set + +```json +{ + "id": 5, + "code": "gitlab", + "name": "gitlab", + "description": null, + "path": "gitlab", + "default_branch": "api", + "owner": { + "id": 1, + "email": "john@example.com", + "name": "John Smith", + "blocked": false, + "created_at": "2012-05-23T08:00:58Z" + }, + "private": true, + "issues_enabled": true, + "merge_requests_enabled": true, + "wall_enabled": true, + "wiki_enabled": true, + "created_at": "2012-05-30T12:49:20Z" +} +``` + ## Project repository branches Get a list of project repository branches sorted by name alphabetically. -- cgit v1.2.1 From b6a0407e7a3ba5bc77f332dbacb9cae3acb11cce Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:27:45 +0300 Subject: Docs changed for Create Project API --- doc/api/projects.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index f015b2f534a..8c34f4d0612 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -103,6 +103,9 @@ Parameters: + `code` (optional) - new project code, used project name if not set + `path` (optional) - new project path, user project name if not set +Will return created project with status `201 Created` on success, or `404 Not +found` on fail. + ```json { "id": 5, -- cgit v1.2.1 From acac1547a06e120a05010fbe556e5836f35248d0 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 10:28:38 +0300 Subject: JSON for new project removed from API docs --- doc/api/projects.md | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 8c34f4d0612..97a316969d8 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -106,29 +106,6 @@ Parameters: Will return created project with status `201 Created` on success, or `404 Not found` on fail. -```json -{ - "id": 5, - "code": "gitlab", - "name": "gitlab", - "description": null, - "path": "gitlab", - "default_branch": "api", - "owner": { - "id": 1, - "email": "john@example.com", - "name": "John Smith", - "blocked": false, - "created_at": "2012-05-23T08:00:58Z" - }, - "private": true, - "issues_enabled": true, - "merge_requests_enabled": true, - "wall_enabled": true, - "wiki_enabled": true, - "created_at": "2012-05-30T12:49:20Z" -} -``` ## Project repository branches -- cgit v1.2.1 From 9811e64d71d050554c952221c4fdaf48ce1f06a6 Mon Sep 17 00:00:00 2001 From: Alex Denisov <1101.debian@gmail.com> Date: Fri, 31 Aug 2012 11:11:12 +0300 Subject: Typo and mistakes fixed --- doc/api/projects.md | 4 ++-- lib/api/projects.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/api/projects.md b/doc/api/projects.md index 97a316969d8..b0c1e65709c 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -100,8 +100,8 @@ POST /projects Parameters: + `name` (required) - new project name -+ `code` (optional) - new project code, used project name if not set -+ `path` (optional) - new project path, user project name if not set ++ `code` (optional) - new project code, uses project name if not set ++ `path` (optional) - new project path, uses project name if not set Will return created project with status `201 Created` on success, or `404 Not found` on fail. diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 7ac2fd4a249..f42849cd2f2 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -27,8 +27,8 @@ module Gitlab # # Parameters: # name (required) - name for new project - # code (optional) - code for new project, if not set used name - # path (optional) - oath for new project, if not set used name + # code (optional) - code for new project, uses project name if not set + # path (optional) - path for new project, uses project name if not set # Example Request # POST /projects post do -- cgit v1.2.1