Merge pull request #259 from travis-ci/ps-current-build2
Add current_build to repositories payload
This commit is contained in:
commit
5cade805e0
|
@ -73,7 +73,7 @@ GIT
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/travis-ci/travis-migrations.git
|
remote: git://github.com/travis-ci/travis-migrations.git
|
||||||
revision: 3f6bb84800b0222ceba95a4b1368969eb5ede8e0
|
revision: bf360857ef7830f7e3ff12de181ab58c33fb29f1
|
||||||
specs:
|
specs:
|
||||||
travis-migrations (0.0.1)
|
travis-migrations (0.0.1)
|
||||||
|
|
||||||
|
@ -426,3 +426,6 @@ DEPENDENCIES
|
||||||
travis-yaml!
|
travis-yaml!
|
||||||
unicorn
|
unicorn
|
||||||
yard-sinatra!
|
yard-sinatra!
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.11.2
|
||||||
|
|
|
@ -10,6 +10,7 @@ module Travis::API::V3
|
||||||
|
|
||||||
belongs_to :owner, polymorphic: true
|
belongs_to :owner, polymorphic: true
|
||||||
belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze
|
belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze
|
||||||
|
belongs_to :current_build, class_name: 'Travis::API::V3::Models::Build'.freeze
|
||||||
|
|
||||||
has_one :default_branch,
|
has_one :default_branch,
|
||||||
foreign_key: [:repository_id, :name],
|
foreign_key: [:repository_id, :name],
|
||||||
|
|
|
@ -2,6 +2,9 @@ module Travis::API::V3
|
||||||
class Queries::Repositories < Query
|
class Queries::Repositories < Query
|
||||||
params :active, :private, :starred, prefix: :repository
|
params :active, :private, :starred, prefix: :repository
|
||||||
sortable_by :id, :github_id, :owner_name, :name, active: sort_condition(:active), :'default_branch.last_build' => 'builds.started_at'
|
sortable_by :id, :github_id, :owner_name, :name, active: sort_condition(:active), :'default_branch.last_build' => 'builds.started_at'
|
||||||
|
sortable_by :id, :github_id, :owner_name, :name, active: sort_condition(:active),
|
||||||
|
:'default_branch.last_build' => 'builds.started_at',
|
||||||
|
:current_build => "current_build_id %{order} NULLS LAST"
|
||||||
|
|
||||||
def for_member(user, **options)
|
def for_member(user, **options)
|
||||||
all(user: user, **options).joins(:users).where(users: user_condition(user), invalidated_at: nil)
|
all(user: user, **options).joins(:users).where(users: user_condition(user), invalidated_at: nil)
|
||||||
|
@ -35,6 +38,7 @@ module Travis::API::V3
|
||||||
end
|
end
|
||||||
|
|
||||||
list = list.includes(default_branch: :last_build)
|
list = list.includes(default_branch: :last_build)
|
||||||
|
list = list.includes(:current_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
|
||||||
sort list
|
sort list
|
||||||
end
|
end
|
||||||
|
|
|
@ -150,7 +150,7 @@ module Travis::API::V3
|
||||||
def sort_by(collection, field, order: nil, first: false, sql: nil, **)
|
def sort_by(collection, field, order: nil, first: false, sql: nil, **)
|
||||||
raise ArgumentError, 'cannot sort by that' unless sort_by?(field, order)
|
raise ArgumentError, 'cannot sort by that' unless sort_by?(field, order)
|
||||||
actual = sql || self.class.sort_by.fetch(field)
|
actual = sql || self.class.sort_by.fetch(field)
|
||||||
line = "#{actual} #{order.upcase}"
|
line = add_order(actual, order)
|
||||||
|
|
||||||
if sort_join?(collection, actual)
|
if sort_join?(collection, actual)
|
||||||
collection = collection.joins(actual.to_sym)
|
collection = collection.joins(actual.to_sym)
|
||||||
|
@ -181,5 +181,14 @@ module Travis::API::V3
|
||||||
else raise WrongParams
|
else raise WrongParams
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_order(field, order)
|
||||||
|
order = order.upcase
|
||||||
|
if field =~ /%{order}/
|
||||||
|
field % { order: order }
|
||||||
|
else
|
||||||
|
"#{field} #{order}"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'travis/api/v3/renderer/model_renderer'
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Renderer::Repository < Renderer::ModelRenderer
|
class Renderer::Repository < Renderer::ModelRenderer
|
||||||
representation(:minimal, :id, :name, :slug)
|
representation(:minimal, :id, :name, :slug)
|
||||||
representation(:standard, :id, :name, :slug, :description, :github_language, :active, :private, :owner, :default_branch, :starred)
|
representation(:standard, :id, :name, :slug, :description, :github_language, :active, :private, :owner, :default_branch, :starred, :current_build)
|
||||||
|
|
||||||
def active
|
def active
|
||||||
!!model.active
|
!!model.active
|
||||||
|
|
|
@ -81,7 +81,8 @@ describe Travis::API::V3::Services::Owner::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => nil
|
||||||
}]
|
}]
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
@ -129,7 +130,8 @@ describe Travis::API::V3::Services::Owner::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation"=> "minimal",
|
"@representation"=> "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => nil
|
||||||
}]
|
}]
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,7 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
|
||||||
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
let(:repo) { Travis::API::V3::Models::Repository.where(owner_name: 'svenfuchs', name: 'minimal').first }
|
||||||
let(:build) { repo.builds.first }
|
let(:build) { repo.builds.first }
|
||||||
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
let(:jobs) { Travis::API::V3::Models::Build.find(build.id).jobs }
|
||||||
|
let(:current_build) { repo.builds.first }
|
||||||
|
|
||||||
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
|
||||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||||
|
@ -12,6 +13,7 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
|
||||||
after { repo.update_attribute(:private, false) }
|
after { repo.update_attribute(:private, false) }
|
||||||
|
|
||||||
describe "private repository, private API, authenticated as user with access" do
|
describe "private repository, private API, authenticated as user with access" do
|
||||||
|
before { repo.update_attribute(:current_build_id, current_build.id) }
|
||||||
before { get("/v3/repos", {}, headers) }
|
before { get("/v3/repos", {}, headers) }
|
||||||
example { expect(last_response).to be_ok }
|
example { expect(last_response).to be_ok }
|
||||||
example { expect(JSON.load(body)).to be == {
|
example { expect(JSON.load(body)).to be == {
|
||||||
|
@ -63,7 +65,19 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => {
|
||||||
|
"@type" => "build",
|
||||||
|
"@href" => "/v3/build/#{current_build.id}",
|
||||||
|
"@representation" => "minimal",
|
||||||
|
"id" => current_build.id.to_i,
|
||||||
|
"number" => current_build.number,
|
||||||
|
"state" => current_build.state,
|
||||||
|
"duration" => current_build.duration,
|
||||||
|
"event_type" => current_build.event_type,
|
||||||
|
"previous_state" => current_build.previous_state,
|
||||||
|
"started_at" => current_build.started_at.strftime("%Y-%m-%dT%H:%M:%SZ"),
|
||||||
|
"finished_at" => nil},
|
||||||
}]
|
}]
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
|
@ -64,7 +64,8 @@ describe Travis::API::V3::Services::Repositories::ForOwner do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => nil
|
||||||
}]}}
|
}]}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -141,7 +142,8 @@ describe Travis::API::V3::Services::Repositories::ForOwner do
|
||||||
"@href" => "/v3/repo/1/branch/master",
|
"@href" => "/v3/repo/1/branch/master",
|
||||||
"@representation"=>"minimal",
|
"@representation"=>"minimal",
|
||||||
"name" => "master" },
|
"name" => "master" },
|
||||||
"starred" => false }, {
|
"starred" => false,
|
||||||
|
"current_build" => nil }, {
|
||||||
"@type" => "repository",
|
"@type" => "repository",
|
||||||
"@href" => "/v3/repo/#{repo2.id}",
|
"@href" => "/v3/repo/#{repo2.id}",
|
||||||
"@representation" => "standard",
|
"@representation" => "standard",
|
||||||
|
@ -170,6 +172,7 @@ describe Travis::API::V3::Services::Repositories::ForOwner do
|
||||||
"@href" => "/v3/repo/#{repo2.id}/branch/master",
|
"@href" => "/v3/repo/#{repo2.id}/branch/master",
|
||||||
"@representation"=>"minimal",
|
"@representation"=>"minimal",
|
||||||
"name" =>"master" },
|
"name" =>"master" },
|
||||||
"starred"=>false}]}
|
"starred" => false,
|
||||||
|
"current_build" => nil}]}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -55,7 +55,8 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => nil
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -133,7 +134,8 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => nil
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -196,7 +198,8 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => nil
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -265,7 +268,8 @@ describe Travis::API::V3::Services::Repository::Find do
|
||||||
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
"@href" => "/v3/repo/#{repo.id}/branch/master",
|
||||||
"@representation" => "minimal",
|
"@representation" => "minimal",
|
||||||
"name" => "master"},
|
"name" => "master"},
|
||||||
"starred" => false
|
"starred" => false,
|
||||||
|
"current_build" => nil
|
||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user