Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-06 15:19:29 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-02-06 15:19:29 +0400
commit4bfb98ddc90bcc6076e2819619fec7607e74358b (patch)
tree0b5a3028f6d10847d46d163413c5fbdb8fdc6d62 /lib
parent0a20f7e75e6aed0e52d5bf747f4b2bf17ec61b0b (diff)
parent33c48ecd35f4a2d5b2596882e36e722f700aff2f (diff)
Merge pull request #2877 from former03/feature_groups_api
Add groups api
Diffstat (limited to 'lib')
-rw-r--r--lib/api.rb3
-rw-r--r--lib/api/entities.rb9
-rw-r--r--lib/api/groups.rb56
3 files changed, 67 insertions, 1 deletions
diff --git a/lib/api.rb b/lib/api.rb
index f58b82ff98e..81a5919f1d3 100644
--- a/lib/api.rb
+++ b/lib/api.rb
@@ -11,7 +11,8 @@ module Gitlab
format :json
error_format :json
helpers APIHelpers
-
+
+ mount Groups
mount Users
mount Projects
mount Issues
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 5cbb1118a89..c1873d87b55 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -32,6 +32,15 @@ module Gitlab
end
end
+ class Group < Grape::Entity
+ expose :id, :name, :path, :owner_id
+ end
+
+ class GroupDetail < Group
+ expose :projects, using: Entities::Project
+ end
+
+
class RepoObject < Grape::Entity
expose :name, :commit
expose :protected do |repo, options|
diff --git a/lib/api/groups.rb b/lib/api/groups.rb
new file mode 100644
index 00000000000..a67caef0bc5
--- /dev/null
+++ b/lib/api/groups.rb
@@ -0,0 +1,56 @@
+module Gitlab
+ # groups API
+ class Groups < Grape::API
+ before { authenticate! }
+
+ resource :groups do
+ # Get a groups list
+ #
+ # Example Request:
+ # GET /groups
+ get do
+ if current_user.admin
+ @groups = paginate Group
+ else
+ @groups = paginate current_user.groups
+ end
+ present @groups, with: Entities::Group
+ end
+
+ # Create group. Available only for admin
+ #
+ # Parameters:
+ # name (required) - Name
+ # path (required) - Path
+ # Example Request:
+ # POST /groups
+ post do
+ authenticated_as_admin!
+ attrs = attributes_for_keys [:name, :path]
+ @group = Group.new(attrs)
+ @group.owner = current_user
+
+ if @group.save
+ present @group, with: Entities::Group
+ else
+ not_found!
+ end
+ end
+
+ # Get a single group, with containing projects
+ #
+ # Parameters:
+ # id (required) - The ID of a group
+ # Example Request:
+ # GET /groups/:id
+ get ":id" do
+ @group = Group.find(params[:id])
+ if current_user.admin or current_user.groups.include? @group
+ present @group, with: Entities::GroupDetail
+ else
+ not_found!
+ end
+ end
+ end
+ end
+end