start working on repos by owner endpoint

This commit is contained in:
Konstantin Haase 2015-04-27 17:01:06 +02:00
parent 2485de7d44
commit d8f1075491
6 changed files with 40 additions and 9 deletions

View File

@ -9,6 +9,11 @@ module Travis::API::V3
new new
end end
def visible_repositories(list)
return [] unless unrestricted_api?
list.where(private: false)
end
def admin_for(repository) def admin_for(repository)
raise LoginRequired raise LoginRequired
end end

View File

@ -30,6 +30,12 @@ module Travis::API::V3
false false
end end
def visible_repositories(list)
# naïve implementation, replaced with smart implementation in specific subclasses
return list if full_access?
list.select { |r| visible?(r) }
end
protected protected
def build_visible?(build) def build_visible?(build)

View File

@ -19,6 +19,10 @@ module Travis::API::V3
permission?(:admin, repository) ? user : super permission?(:admin, repository) ? user : super
end end
def visible_repositories(list)
list.where('repositories.private = false OR repositories.id IN ?'.freeze, permissions.map(&:repository_id))
end
protected protected
def repository_writable?(repository) def repository_writable?(repository)

View File

@ -6,16 +6,21 @@ module Travis::API::V3
all.joins(:users).where(users: user_condition(user)) all.joins(:users).where(users: user_condition(user))
end end
def for_owner(owner)
filter(owner.repositories)
end
def all def all
@all ||= begin @all ||= filter(Models::Repository)
all = Models::Repository end
all = all.where(active: bool(active)) unless active.nil?
all = all.where(private: bool(private)) unless private.nil? def filter(list)
all = all.includes(:owner) if includes? 'repository.owner'.freeze list = list.where(active: bool(active)) unless active.nil?
all = all.includes(:last_build) if includes? 'repository.last_build'.freeze list = list.where(private: bool(private)) unless private.nil?
all = all.includes(:default_branch) list = list.includes(:owner) if includes? 'repository.owner'.freeze
all list = list.includes(:last_build) if includes? 'repository.last_build'.freeze
end list = list.includes(:default_branch)
list
end end
end end
end end

View File

@ -11,6 +11,7 @@ module Travis::API::V3
resource :owner do resource :owner do
route '/owner/({owner.login}|{user.login}|{organization.login})' route '/owner/({owner.login}|{user.login}|{organization.login})'
get :find get :find
get :repositories, '/repos'
end end
resource :repository do resource :repository do

View File

@ -0,0 +1,10 @@
module Travis::API::V3
class Services::Owner::Repositories < Service
result_type :repositories
def run!
unfiltered = query(:repositories).for_owner(find)
access_control.visible_repositories(unfiltered)
end
end
end