v3: avoid having to repeat the resource type over and over in services, automatically wrap return value in result
This commit is contained in:
parent
171b9c57c7
commit
a9ffd2bef9
|
@ -1,5 +1,11 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Service
|
class Service
|
||||||
|
def self.result_type(type = nil)
|
||||||
|
@result_type = type if type
|
||||||
|
raise 'result type not set' unless defined? @result_type
|
||||||
|
@result_type
|
||||||
|
end
|
||||||
|
|
||||||
attr_accessor :access_control, :params
|
attr_accessor :access_control, :params
|
||||||
|
|
||||||
def initialize(access_control, params)
|
def initialize(access_control, params)
|
||||||
|
@ -8,8 +14,20 @@ module Travis::API::V3
|
||||||
@queries = {}
|
@queries = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
def query(type)
|
def query(type = self.class.result_type)
|
||||||
@queries[type] ||= Queries[type].new(params)
|
@queries[type] ||= Queries[type].new(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def not_found(actually_not_found = false, type = nil)
|
||||||
|
type, actually_not_found = actually_not_found, false if actually_not_found.is_a? Symbol
|
||||||
|
error = actually_not_found ? EntityMissing : NotFound
|
||||||
|
raise(error, type || self.class.result_type)
|
||||||
|
end
|
||||||
|
|
||||||
|
def run
|
||||||
|
not_found unless result = run!
|
||||||
|
result = Result.new(self.class.result_type, result) unless result.is_a? Result
|
||||||
|
result
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Services::FindRepository < Service
|
class Services::FindRepository < Service
|
||||||
def run
|
result_type :repository
|
||||||
raise NotFound, :repository unless repository and access_control.visible? repository
|
|
||||||
Result.new(:repository, repository)
|
def run!
|
||||||
|
repository if repository and access_control.visible? repository
|
||||||
end
|
end
|
||||||
|
|
||||||
def repository
|
def repository
|
||||||
raise EntityMissing, :repository if defined?(@repository) and @repository.nil?
|
not_found(true) if defined?(@repository) and @repository.nil?
|
||||||
@repository ||= find_repository
|
@repository ||= find_repository
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_repository
|
def find_repository
|
||||||
query(:repository).find
|
query.find
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Services::RepositoriesForCurrentUser < Service
|
class Services::RepositoriesForCurrentUser < Service
|
||||||
def run
|
result_type :repositories
|
||||||
raise LoginRequired unless access_control.logged_in?
|
|
||||||
raise NotFound, :repositories unless access_control.user
|
def run!
|
||||||
repositories = query(:repositories).for_member(access_control.user)
|
raise LoginRequired unless access_control.logged_in?
|
||||||
Result.new(:repositories, repositories)
|
query.for_member(access_control.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user