diff --git a/lib/travis/api/v3/access_control/generic.rb b/lib/travis/api/v3/access_control/generic.rb index 8578491e..8c49dce9 100644 --- a/lib/travis/api/v3/access_control/generic.rb +++ b/lib/travis/api/v3/access_control/generic.rb @@ -20,6 +20,10 @@ module Travis::API::V3 protected + def build_visible?(build) + visible? build.repository + end + def organization_visible?(organization) unrestricted_api? end diff --git a/lib/travis/api/v3/constant_resolver.rb b/lib/travis/api/v3/constant_resolver.rb index f4431780..5c5bb74c 100644 --- a/lib/travis/api/v3/constant_resolver.rb +++ b/lib/travis/api/v3/constant_resolver.rb @@ -11,7 +11,7 @@ module Travis::API::V3 def [](key) return key unless key.is_a? Symbol - resolver_cache[key] ||= const_get(key.to_s.camelize) + resolver_cache[key] ||= const_get(key.to_s.camelize, false) end def extended(base) diff --git a/lib/travis/api/v3/renderer/repository.rb b/lib/travis/api/v3/renderer/repository.rb index 1eb7ef3a..2c806965 100644 --- a/lib/travis/api/v3/renderer/repository.rb +++ b/lib/travis/api/v3/renderer/repository.rb @@ -25,6 +25,7 @@ module Travis::API::V3 return nil unless model.last_build_id { :@type => 'build'.freeze, + :@href => Renderer.href(:build, script_name: script_name, id: model.last_build_id), :id => model.last_build_id, :number => model.last_build_number, :state => model.last_build_state.to_s, diff --git a/lib/travis/api/v3/routes.rb b/lib/travis/api/v3/routes.rb index 6c78a64f..e911ac78 100644 --- a/lib/travis/api/v3/routes.rb +++ b/lib/travis/api/v3/routes.rb @@ -19,6 +19,11 @@ module Travis::API::V3 get :for_current_user end + resource :build do + route '/build/{build.id}' + get :find + end + resource :organization do route '/org/{organization.id}' get :find diff --git a/lib/travis/api/v3/services.rb b/lib/travis/api/v3/services.rb index 3148f9d8..5e543412 100644 --- a/lib/travis/api/v3/services.rb +++ b/lib/travis/api/v3/services.rb @@ -2,6 +2,7 @@ module Travis::API::V3 module Services extend ConstantResolver + Build = Module.new { extend Services } Organization = Module.new { extend Services } Organizations = Module.new { extend Services } Repositories = Module.new { extend Services } diff --git a/spec/v3/service_index_spec.rb b/spec/v3/service_index_spec.rb index 6143d8a3..ce53c2e4 100644 --- a/spec/v3/service_index_spec.rb +++ b/spec/v3/service_index_spec.rb @@ -12,6 +12,8 @@ describe Travis::API::V3::ServiceIndex do "find" => [{"request-method"=>"GET", "uri-template"=>"#{path}repo/{repository.id}"}] }, "repositories" => { "for_current_user" => [{"request-method"=>"GET", "uri-template"=>"#{path}repos"}] }, + "build" => { + "find" => [{"request-method"=>"GET", "uri-template"=>"#{path}build/{build.id}"}] }, "organizations" => { "for_current_user" => [{"request-method"=>"GET", "uri-template"=>"#{path}orgs"}] }, "organization" => { diff --git a/spec/v3/services/repositories/for_current_user_spec.rb b/spec/v3/services/repositories/for_current_user_spec.rb index 13e2ac3d..8cffba25 100644 --- a/spec/v3/services/repositories/for_current_user_spec.rb +++ b/spec/v3/services/repositories/for_current_user_spec.rb @@ -32,6 +32,7 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do "login" => "svenfuchs" }, "last_build" => { "@type" => "build", + "@href" => "/v3/build/#{repo.last_build_id}", "id" => repo.last_build_id, "number" => "2", "state" => "passed", diff --git a/spec/v3/services/repository/find_spec.rb b/spec/v3/services/repository/find_spec.rb index af7c9028..f3033502 100644 --- a/spec/v3/services/repository/find_spec.rb +++ b/spec/v3/services/repository/find_spec.rb @@ -23,6 +23,7 @@ describe Travis::API::V3::Services::Repository::Find do "login" => "svenfuchs" }, "last_build" => { "@type" => "build", + "@href" => "/v3/build/#{repo.last_build_id}", "id" => repo.last_build_id, "number" => "2", "state" => "passed", @@ -94,6 +95,7 @@ describe Travis::API::V3::Services::Repository::Find do "login" => "svenfuchs" }, "last_build" => { "@type" => "build", + "@href" => "/v3/build/#{repo.last_build_id}", "id" => repo.last_build_id, "number" => "2", "state" => "passed", @@ -150,6 +152,7 @@ describe Travis::API::V3::Services::Repository::Find do "login" => "svenfuchs" }, "last_build" => { "@type" => "build", + "@href" => "/v3/build/#{repo.last_build_id}", "id" => repo.last_build_id, "number" => "2", "state" => "passed", @@ -212,6 +215,7 @@ describe Travis::API::V3::Services::Repository::Find do "login" => "svenfuchs" }, "last_build" => { "@type" => "build", + "@href" => "/v3/build/#{repo.last_build_id}", "id" => repo.last_build_id, "number" => "2", "state" => "passed",