Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions lib/travis/api/v3/models/custom_image.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module Travis::API::V3
class Models::CustomImage < Model
after_initialize :readonly!
belongs_to :owner, polymorphic: true
has_many :custom_image_logs

scope :available, -> { where(state: 'available') }

def created_by
user_id = custom_image_logs.where(action: 'created').first&.sender_id
return unless user_id

User.find(user_id)
end

def private
true
end
end
end
6 changes: 6 additions & 0 deletions lib/travis/api/v3/models/custom_image_log.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Travis::API::V3
class Models::CustomImageLog < Model
after_initialize :readonly!
belongs_to :custom_image
end
end
13 changes: 13 additions & 0 deletions lib/travis/api/v3/queries/custom_images.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Travis::API::V3
class Queries::CustomImages < Query
def for_owner(owner)
Models::CustomImage.where(owner_id: owner.id, owner_type: owner_type(owner))
end

private

def owner_type(owner)
owner.vcs_type =~ /User/ ? 'User' : 'Organization'
end
end
end
20 changes: 20 additions & 0 deletions lib/travis/api/v3/renderer/custom_image.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module Travis::API::V3
class Renderer::CustomImage < ModelRenderer
representation :minimal, :id, :owner_id, :owner_type, :name, :usage, :created_at, :updated_at, :os_version,
:created_by, :private, :size_bytes
representation :standard, *representations[:minimal]

def created_by
return nil unless user = model.created_by
{
'@type' => 'user',
'@href' => "/v3/user/#{user.id}",
'@representation' => 'minimal'.freeze,
'id' => user.id,
'login' => user.login,
'name' => user.name,
'avatar_url' => user.avatar_url
}
end
end
end
6 changes: 6 additions & 0 deletions lib/travis/api/v3/renderer/custom_images.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Travis::API::V3
class Renderer::CustomImages < CollectionRenderer
type :custom_images
collection_key :custom_images
end
end
5 changes: 5 additions & 0 deletions lib/travis/api/v3/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,11 @@ module Routes
route '/executions_per_sender'
get :for_owner_per_sender
end

resource :custom_images do
route '/custom_images'
get :for_owner
end
end

resource :credits_calculator do
Expand Down
1 change: 1 addition & 0 deletions lib/travis/api/v3/services.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ module Services
Crons = Module.new { extend Services }
CustomKey = Module.new { extend Services }
CustomKeys = Module.new { extend Services }
CustomImages = Module.new { extend Services }
EmailSubscription = Module.new { extend Services }
EnvVar = Module.new { extend Services }
EnvVars = Module.new { extend Services }
Expand Down
20 changes: 20 additions & 0 deletions lib/travis/api/v3/services/custom_images/for_owner.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module Travis::API::V3
class Services::CustomImages::ForOwner < Service
result_type :custom_images

def run!
raise MethodNotAllowed if Travis.config.org?
raise LoginRequired unless access_control.logged_in?

owner = query(:owner).find

raise NotFound unless owner
repo = owner.repositories.first
raise InsufficientAccess unless repo
access_control.permissions(repo).build_create!

results = query(:custom_images).for_owner(owner)
result results
end
end
end