Skip to content

Commit abc8d53

Browse files
authored
Implement API for user build permissions (#1145)
1 parent d83e1d5 commit abc8d53

27 files changed

+383
-24
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
language: ruby
22

33
import:
4-
- travis-ci/build-configs:db-setup.yml
4+
- travis-ci/build-configs:db-setup.yml@epic-pricing
55

66
rvm: 2.6.5
77

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Travis::API::V3
2+
class Models::BuildPermission
3+
attr_accessor :user, :permission, :role
4+
5+
def initialize(attrs = {})
6+
@user = attrs.fetch(:user)
7+
@role = attrs.fetch(:role)
8+
@permission = attrs.fetch(:permission)
9+
end
10+
end
11+
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module Travis::API::V3
2+
class Queries::BuildPermissions < Query
3+
def find_for_repo(repository)
4+
Models::Repository.find(repository.id).permissions.includes(:user)
5+
end
6+
7+
def find_for_organization(organization)
8+
Models::Membership.where(organization_id: organization.id).includes(:user)
9+
end
10+
11+
def update_for_organization(organization, user_ids, permission)
12+
Models::Membership.where(organization_id: organization.id, user_id: user_ids).update_all(build_permission: bool(permission))
13+
end
14+
15+
def update_for_repo(repository, user_ids, permission)
16+
Models::Permission.where(repository_id: repository.id, user_id: user_ids).update_all(build: bool(permission))
17+
end
18+
end
19+
end
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module Travis::API::V3
2+
class Renderer::BuildPermission < ModelRenderer
3+
representation(:minimal, :user, :permission, :role)
4+
representation(:standard, :user, :permission, :role)
5+
6+
def user
7+
Renderer.render_model(model.user, mode: :minimal)
8+
end
9+
10+
def permission
11+
value = model.respond_to?(:build_permission) ? model.build_permission : model.build
12+
value.nil? ? true : value
13+
end
14+
15+
def role
16+
model.respond_to?(:role) ? model.role : nil
17+
end
18+
end
19+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Travis::API::V3
2+
class Renderer::BuildPermissions < CollectionRenderer
3+
type :build_permissions
4+
collection_key :build_permissions
5+
6+
def render_entry(entry, **options)
7+
options[:type] = :build_permission
8+
super
9+
end
10+
end
11+
end

lib/travis/api/v3/renderer/owner.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module Travis::API::V3
44
class Renderer::Owner < ModelRenderer
55
include Renderer::AvatarURL
66

7-
representation(:minimal, :id, :login, :vcs_type)
7+
representation(:minimal, :id, :login, :name, :vcs_type)
88
representation(:standard, :id, :login, :name, :github_id, :vcs_id, :vcs_type, :avatar_url, :education,
99
:allow_migration, :allowance)
1010
representation(:additional, :repositories, :installation)

lib/travis/api/v3/routes.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ module Routes
9595
get :for_organization
9696
patch :update
9797
end
98+
99+
resource :build_permissions do
100+
route '/build_permissions'
101+
get :find_for_organization
102+
patch :update_for_organization
103+
end
98104
end
99105

100106
resource :organizations do
@@ -150,6 +156,12 @@ module Routes
150156
end
151157
end
152158

159+
resource :build_permissions do
160+
route '/build_permissions'
161+
get :find_for_repo
162+
patch :update_for_repo
163+
end
164+
153165
resource :branches do
154166
route '/branches'
155167
get :find

lib/travis/api/v3/services.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module Services
1515
Broadcasts = Module.new { extend Services }
1616
Build = Module.new { extend Services }
1717
Builds = Module.new { extend Services }
18+
BuildPermissions = Module.new { extend Services }
1819
Caches = Module.new { extend Services }
1920
Coupons = Module.new { extend Services }
2021
Cron = Module.new { extend Services }
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module Travis::API::V3
2+
class Services::BuildPermissions::FindForOrganization < Service
3+
paginate
4+
result_type :build_permissions
5+
6+
def run!
7+
result query.find_for_organization(check_login_and_find(:organization))
8+
end
9+
end
10+
end
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module Travis::API::V3
2+
class Services::BuildPermissions::FindForRepo < Service
3+
paginate
4+
result_type :build_permissions
5+
6+
def run!
7+
result query.find_for_repo(check_login_and_find(:repository))
8+
end
9+
end
10+
end

0 commit comments

Comments
 (0)