diff --git a/lib/travis/api/v3/service.rb b/lib/travis/api/v3/service.rb index f5b22b82..d436eeea 100644 --- a/lib/travis/api/v3/service.rb +++ b/lib/travis/api/v3/service.rb @@ -1,5 +1,11 @@ module Travis::API::V3 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 def initialize(access_control, params) @@ -8,8 +14,20 @@ module Travis::API::V3 @queries = {} end - def query(type) + def query(type = self.class.result_type) @queries[type] ||= Queries[type].new(params) 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 diff --git a/lib/travis/api/v3/services/find_repository.rb b/lib/travis/api/v3/services/find_repository.rb index 31466cd1..481d706e 100644 --- a/lib/travis/api/v3/services/find_repository.rb +++ b/lib/travis/api/v3/services/find_repository.rb @@ -1,17 +1,18 @@ module Travis::API::V3 class Services::FindRepository < Service - def run - raise NotFound, :repository unless repository and access_control.visible? repository - Result.new(:repository, repository) + result_type :repository + + def run! + repository if repository and access_control.visible? repository end def repository - raise EntityMissing, :repository if defined?(@repository) and @repository.nil? + not_found(true) if defined?(@repository) and @repository.nil? @repository ||= find_repository end def find_repository - query(:repository).find + query.find end end end diff --git a/lib/travis/api/v3/services/repositories_for_current_user.rb b/lib/travis/api/v3/services/repositories_for_current_user.rb index 1f69de4f..369422c1 100644 --- a/lib/travis/api/v3/services/repositories_for_current_user.rb +++ b/lib/travis/api/v3/services/repositories_for_current_user.rb @@ -1,10 +1,10 @@ module Travis::API::V3 class Services::RepositoriesForCurrentUser < Service - def run - raise LoginRequired unless access_control.logged_in? - raise NotFound, :repositories unless access_control.user - repositories = query(:repositories).for_member(access_control.user) - Result.new(:repositories, repositories) + result_type :repositories + + def run! + raise LoginRequired unless access_control.logged_in? + query.for_member(access_control.user) end end end