Merge pull request #204 from travis-ci/rkh-more-pagination
v3: More pagination and sorting
This commit is contained in:
commit
099d10f466
|
@ -3,8 +3,10 @@ module Travis::API::V3
|
||||||
params :state, :event_type, :previous_state, prefix: :build
|
params :state, :event_type, :previous_state, prefix: :build
|
||||||
params :name, prefix: :branch, method_name: :branch_name
|
params :name, prefix: :branch, method_name: :branch_name
|
||||||
|
|
||||||
|
sortable_by :id, :started_at, :finished_at
|
||||||
|
|
||||||
def find(repository)
|
def find(repository)
|
||||||
filter(repository.builds)
|
sort filter(repository.builds)
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter(list)
|
def filter(list)
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Queries::Organizations < Query
|
class Queries::Organizations < Query
|
||||||
|
sortable_by :id, :login, :name, :github_id
|
||||||
|
|
||||||
def for_member(user)
|
def for_member(user)
|
||||||
Models::Organization.joins(:users).where(users: user_condition(user))
|
sort Models::Organization.joins(:users).where(users: user_condition(user))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Queries::Repositories < Query
|
class Queries::Repositories < Query
|
||||||
params :active, :private, prefix: :repository
|
params :active, :private, prefix: :repository
|
||||||
|
sortable_by :id, :github_id, :owner_name, :name, active: sort_condition(:active)
|
||||||
|
|
||||||
def for_member(user)
|
def for_member(user)
|
||||||
all.joins(:users).where(users: user_condition(user), invalidated_at: nil)
|
all.joins(:users).where(users: user_condition(user), invalidated_at: nil)
|
||||||
|
@ -27,7 +28,7 @@ module Travis::API::V3
|
||||||
|
|
||||||
list = list.includes(default_branch: :last_build)
|
list = list.includes(default_branch: :last_build)
|
||||||
list = list.includes(default_branch: { last_build: :commit }) if includes? 'build.commit'.freeze
|
list = list.includes(default_branch: { last_build: :commit }) if includes? 'build.commit'.freeze
|
||||||
list
|
sort list
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -96,6 +96,13 @@ module Travis::API::V3
|
||||||
pattern = sub_route ? resource.route + sub_route : resource.route
|
pattern = sub_route ? resource.route + sub_route : resource.route
|
||||||
factory = Services[resource.identifier][service]
|
factory = Services[resource.identifier][service]
|
||||||
|
|
||||||
|
if factory.params and factory.params.include? "sort_by".freeze
|
||||||
|
query = Queries[resource.identifier]
|
||||||
|
if query and query.sortable?
|
||||||
|
resources[resource.identifier][:sortable_by] = query.sort_by.keys
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
pattern.to_templates.each do |template|
|
pattern.to_templates.each do |template|
|
||||||
params = factory.params if request_method == 'GET'.freeze
|
params = factory.params if request_method == 'GET'.freeze
|
||||||
params &&= params.reject { |p| p.start_with? ?@.freeze }
|
params &&= params.reject { |p| p.start_with? ?@.freeze }
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Services::Organizations::ForCurrentUser < Service
|
class Services::Organizations::ForCurrentUser < Service
|
||||||
|
paginate(default_limit: 100)
|
||||||
|
|
||||||
def run!
|
def run!
|
||||||
raise LoginRequired unless access_control.logged_in?
|
raise LoginRequired unless access_control.logged_in?
|
||||||
query.for_member(access_control.user)
|
query.for_member(access_control.user)
|
||||||
|
|
|
@ -2,6 +2,7 @@ module Travis::API::V3
|
||||||
class Services::Owner::Repositories < Service
|
class Services::Owner::Repositories < Service
|
||||||
params :active, :private, prefix: :repository
|
params :active, :private, prefix: :repository
|
||||||
result_type :repositories
|
result_type :repositories
|
||||||
|
paginate(default_limit: 100)
|
||||||
|
|
||||||
def run!
|
def run!
|
||||||
unfiltered = query(:repositories).for_owner(find(:owner))
|
unfiltered = query(:repositories).for_owner(find(:owner))
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Services::Repositories::ForCurrentUser < Service
|
class Services::Repositories::ForCurrentUser < Service
|
||||||
params :active, :private, prefix: :repository
|
params :active, :private, prefix: :repository
|
||||||
|
paginate(default_limit: 100)
|
||||||
|
|
||||||
def run!
|
def run!
|
||||||
raise LoginRequired unless access_control.logged_in?
|
raise LoginRequired unless access_control.logged_in?
|
||||||
|
|
|
@ -64,7 +64,7 @@ describe Travis::API::V3::ServiceIndex do
|
||||||
|
|
||||||
describe "for_current_user action" do
|
describe "for_current_user action" do
|
||||||
let(:action) { resource.fetch("actions").fetch("for_current_user") }
|
let(:action) { resource.fetch("actions").fetch("for_current_user") }
|
||||||
specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}repos{?active,include,private,repository.active,repository.private}") }
|
specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}repos{?active,include,limit,offset,private,repository.active,repository.private,sort_by}") }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ describe Travis::API::V3::ServiceIndex do
|
||||||
|
|
||||||
describe "for_current_user action" do
|
describe "for_current_user action" do
|
||||||
let(:action) { resource.fetch("actions").fetch("for_current_user") }
|
let(:action) { resource.fetch("actions").fetch("for_current_user") }
|
||||||
specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}orgs{?include}") }
|
specify { expect(action).to include("@type"=>"template", "request_method"=>"GET", "uri_template"=>"#{path}orgs{?include,limit,offset,sort_by}") }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,23 @@ describe Travis::API::V3::Services::Organizations::ForCurrentUser do
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body)).to be == {
|
||||||
"@type" => "organizations",
|
"@type" => "organizations",
|
||||||
"@href" => "/v3/orgs",
|
"@href" => "/v3/orgs",
|
||||||
"@representation" => "standard",
|
"@representation" => "standard",
|
||||||
|
"@pagination" => {
|
||||||
|
"limit" => 100,
|
||||||
|
"offset" => 0,
|
||||||
|
"count" => 1,
|
||||||
|
"is_first" => true,
|
||||||
|
"is_last" => true,
|
||||||
|
"next" => nil,
|
||||||
|
"prev" => nil,
|
||||||
|
"first" => {
|
||||||
|
"@href" => "/v3/orgs",
|
||||||
|
"offset" => 0,
|
||||||
|
"limit" => 100},
|
||||||
|
"last" => {
|
||||||
|
"@href" => "/v3/orgs",
|
||||||
|
"offset" => 0,
|
||||||
|
"limit" => 100}},
|
||||||
"organizations" => [{
|
"organizations" => [{
|
||||||
"@type" => "organization",
|
"@type" => "organization",
|
||||||
"@href" => "/v3/org/#{org.id}",
|
"@href" => "/v3/org/#{org.id}",
|
||||||
|
|
|
@ -18,6 +18,22 @@ describe Travis::API::V3::Services::Owner::Repositories do
|
||||||
"@type" => "repositories",
|
"@type" => "repositories",
|
||||||
"@href" => "/v3/owner/svenfuchs/repos",
|
"@href" => "/v3/owner/svenfuchs/repos",
|
||||||
"@representation" => "standard",
|
"@representation" => "standard",
|
||||||
|
"@pagination" => {
|
||||||
|
"limit" => 100,
|
||||||
|
"offset" => 0,
|
||||||
|
"count" => 1,
|
||||||
|
"is_first" => true,
|
||||||
|
"is_last" => true,
|
||||||
|
"next" => nil,
|
||||||
|
"prev" => nil,
|
||||||
|
"first" => {
|
||||||
|
"@href" => "/v3/owner/svenfuchs/repos",
|
||||||
|
"offset" => 0,
|
||||||
|
"limit" => 100},
|
||||||
|
"last" => {
|
||||||
|
"@href" => "/v3/owner/svenfuchs/repos",
|
||||||
|
"offset" => 0,
|
||||||
|
"limit" => 100}},
|
||||||
"repositories" => [{
|
"repositories" => [{
|
||||||
"@type" => "repository",
|
"@type" => "repository",
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
|
|
@ -17,7 +17,23 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body)).to be == {
|
||||||
"@type" => "repositories",
|
"@type" => "repositories",
|
||||||
"@href" => "/v3/repos",
|
"@href" => "/v3/repos",
|
||||||
"@representation" => "standard",
|
"@representation" => "standard",
|
||||||
|
"@pagination" => {
|
||||||
|
"limit" => 100,
|
||||||
|
"offset" => 0,
|
||||||
|
"count" => 1,
|
||||||
|
"is_first" => true,
|
||||||
|
"is_last" => true,
|
||||||
|
"next" => nil,
|
||||||
|
"prev" => nil,
|
||||||
|
"first" => {
|
||||||
|
"@href" => "/v3/repos",
|
||||||
|
"offset" => 0,
|
||||||
|
"limit" => 100},
|
||||||
|
"last" => {
|
||||||
|
"@href" => "/v3/repos",
|
||||||
|
"offset" => 0,
|
||||||
|
"limit" => 100}},
|
||||||
"repositories" => [{
|
"repositories" => [{
|
||||||
"@type" => "repository",
|
"@type" => "repository",
|
||||||
"@href" => "/v3/repo/#{repo.id}",
|
"@href" => "/v3/repo/#{repo.id}",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user