diff options
author | Ruben Davila <rdavila84@gmail.com> | 2017-05-19 23:21:34 -0500 |
---|---|---|
committer | Ruben Davila <rdavila84@gmail.com> | 2017-05-19 23:21:34 -0500 |
commit | 9983cd726807cdffb0d717f74a16e88f1d875903 (patch) | |
tree | bc34ad2f6026f8cf8d3c2afb8a47e1e9575f4e06 | |
parent | bdf62a19d2cdbdfe554eb73500fd5fe4744161b1 (diff) | |
download | gitlab-ce-include-members-count-in-groups-api.tar.gz |
Add members_count attribute to payload for groups APIinclude-members-count-in-groups-api
-rw-r--r-- | app/models/group.rb | 2 | ||||
-rw-r--r-- | changelogs/unreleased/add-members-count-to-groups-api.yml | 4 | ||||
-rw-r--r-- | doc/api/groups.md | 3 | ||||
-rw-r--r-- | lib/api/entities.rb | 11 | ||||
-rw-r--r-- | lib/api/groups.rb | 2 | ||||
-rw-r--r-- | spec/requests/api/groups_spec.rb | 1 |
6 files changed, 19 insertions, 4 deletions
diff --git a/app/models/group.rb b/app/models/group.rb index 6aab477f431..95935642cf9 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -33,6 +33,8 @@ class Group < Namespace mount_uploader :avatar, AvatarUploader has_many :uploads, as: :model, dependent: :destroy + scope :with_members, -> { includes(:group_members) } + after_create :post_create_hook after_destroy :post_destroy_hook after_save :update_two_factor_requirement diff --git a/changelogs/unreleased/add-members-count-to-groups-api.yml b/changelogs/unreleased/add-members-count-to-groups-api.yml new file mode 100644 index 00000000000..ee4fa02615b --- /dev/null +++ b/changelogs/unreleased/add-members-count-to-groups-api.yml @@ -0,0 +1,4 @@ +--- +title: Add members_count attribute to payload for groups API +merge_request: +author: diff --git a/doc/api/groups.md b/doc/api/groups.md index 2b3d8e125c8..1d152f0414f 100644 --- a/doc/api/groups.md +++ b/doc/api/groups.md @@ -29,6 +29,7 @@ GET /groups "description": "An interesting group", "visibility": "public", "lfs_enabled": true, + "members_count": 1, "avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg", "web_url": "http://localhost:3000/groups/foo-bar", "request_access_enabled": false, @@ -130,6 +131,8 @@ Example response: ```json { "id": 4, + "lfs_enabled": true, + "members_count": 1, "name": "Twitter", "path": "twitter", "description": "Aliquid qui quis dignissimos distinctio ut commodi voluptas est.", diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 01cc8e8e1ca..6bc76ce6cef 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -146,14 +146,19 @@ module API class Group < Grape::Entity expose :id, :name, :path, :description, :visibility expose :lfs_enabled?, as: :lfs_enabled - expose :avatar_url do |user, options| - user.avatar_url(only_path: false) - end expose :web_url expose :request_access_enabled expose :full_name, :full_path expose :parent_id + expose :members_count do |group, options| + group.members.size + end + + expose :avatar_url do |group, options| + group.avatar_url(only_path: false) + end + expose :statistics, if: :statistics do with_options format_with: -> (value) { value.to_i } do expose :storage_size diff --git a/lib/api/groups.rb b/lib/api/groups.rb index 3da7d735da8..51a2df9bf6b 100644 --- a/lib/api/groups.rb +++ b/lib/api/groups.rb @@ -61,7 +61,7 @@ module API groups = groups.where.not(id: params[:skip_groups]) if params[:skip_groups].present? groups = groups.reorder(params[:order_by] => params[:sort]) - present_groups groups, statistics: params[:statistics] && current_user.admin? + present_groups groups.with_members, statistics: params[:statistics] && current_user.admin? end desc 'Create a group. Available only for users who can create groups.' do diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb index 90b36374ded..40cb9b1c5b4 100644 --- a/spec/requests/api/groups_spec.rb +++ b/spec/requests/api/groups_spec.rb @@ -186,6 +186,7 @@ describe API::Groups do expect(json_response['parent_id']).to eq(group1.parent_id) expect(json_response['projects']).to be_an Array expect(json_response['projects'].length).to eq(2) + expect(json_response['members_count']).to eq(1) expect(json_response['shared_projects']).to be_an Array expect(json_response['shared_projects'].length).to eq(1) expect(json_response['shared_projects'][0]['id']).to eq(project.id) |