v3: add /user and /user/:id
This commit is contained in:
parent
4ae3f5e171
commit
3a058339be
|
@ -44,6 +44,10 @@ module Travis::API::V3
|
|||
unrestricted_api?
|
||||
end
|
||||
|
||||
def user_visible?(user)
|
||||
unrestricted_api?
|
||||
end
|
||||
|
||||
def repository_visible?(repository)
|
||||
return true if unrestricted_api? and not repository.private?
|
||||
private_repository_visible?(repository)
|
||||
|
|
|
@ -18,7 +18,9 @@ module Travis::API::V3
|
|||
|
||||
expander = EXPANDER_CACHE[[type, script_name, args.keys]] ||= begin
|
||||
resource = Routes.resources.detect { |r| r.identifier == type }
|
||||
route = resource.route if resource
|
||||
verb, sub = resource.services.key(:find) if resource
|
||||
route = resource.route if verb
|
||||
route += sub if sub
|
||||
route &&= Mustermann.new(script_name, type: :identity) + route if script_name and not script_name.empty?
|
||||
key_mapping = {}
|
||||
args.keys.each do |key|
|
||||
|
|
|
@ -32,6 +32,12 @@ module Travis::API::V3
|
|||
get :find
|
||||
end
|
||||
|
||||
resource :user do
|
||||
route '/user'
|
||||
get :current
|
||||
get :find, '/{user.id}'
|
||||
end
|
||||
|
||||
resource :organization do
|
||||
route '/org/{organization.id}'
|
||||
get :find
|
||||
|
|
|
@ -9,6 +9,7 @@ module Travis::API::V3
|
|||
Repositories = Module.new { extend Services }
|
||||
Repository = Module.new { extend Services }
|
||||
Requests = Module.new { extend Services }
|
||||
User = Module.new { extend Services }
|
||||
|
||||
def result_type
|
||||
@resul_type ||= name[/[^:]+$/].underscore.to_sym
|
||||
|
|
0
lib/travis/api/v3/services/organization/sync.rb
Normal file
0
lib/travis/api/v3/services/organization/sync.rb
Normal file
8
lib/travis/api/v3/services/user/current.rb
Normal file
8
lib/travis/api/v3/services/user/current.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
module Travis::API::V3
|
||||
class Services::User::Current < Service
|
||||
def run!
|
||||
raise LoginRequired unless access_control.logged_in?
|
||||
access_control.user || not_found(false)
|
||||
end
|
||||
end
|
||||
end
|
7
lib/travis/api/v3/services/user/find.rb
Normal file
7
lib/travis/api/v3/services/user/find.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
module Travis::API::V3
|
||||
class Services::User::Find < Service
|
||||
def run!
|
||||
find
|
||||
end
|
||||
end
|
||||
end
|
|
@ -93,7 +93,19 @@ describe Travis::API::V3::ServiceIndex do
|
|||
[{"@type"=>"template",
|
||||
"request_method"=>"GET",
|
||||
"uri_template"=>"#{path}orgs"}]},
|
||||
"attributes"=>["organizations"]}}
|
||||
"attributes"=>["organizations"]},
|
||||
"user"=>
|
||||
{"@type"=>"resource",
|
||||
"actions"=>
|
||||
{"current"=>
|
||||
[{"@type"=>"template",
|
||||
"request_method"=>"GET",
|
||||
"uri_template"=>"#{path}user"}],
|
||||
"find"=>
|
||||
[{"@type"=>"template",
|
||||
"request_method"=>"GET",
|
||||
"uri_template"=>"#{path}user/{user.id}"}]},
|
||||
"attributes"=>["id", "login", "name", "github_id", "is_syncing", "synced_at"]}}
|
||||
}
|
||||
|
||||
describe 'with /v3 prefix' do
|
||||
|
|
23
spec/v3/services/user/current_spec.rb
Normal file
23
spec/v3/services/user/current_spec.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Travis::API::V3::Services::User::Current do
|
||||
let(:user) { User.find_by_login('svenfuchs') }
|
||||
|
||||
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
|
||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||
|
||||
describe "authenticated as user with access" do
|
||||
before { get("/v3/user", {}, headers) }
|
||||
example { expect(last_response).to be_ok }
|
||||
example { expect(JSON.load(body)).to be == {
|
||||
"@type" => "user",
|
||||
"@href" => "/v3/user/#{user.id}",
|
||||
"id" => user.id,
|
||||
"login" => "svenfuchs",
|
||||
"name" =>"Sven Fuchs",
|
||||
"github_id" => user.github_id,
|
||||
"is_syncing" => user.is_syncing,
|
||||
"synced_at" => user.synced_at
|
||||
}}
|
||||
end
|
||||
end
|
23
spec/v3/services/user/find_spec.rb
Normal file
23
spec/v3/services/user/find_spec.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Travis::API::V3::Services::User::Find do
|
||||
let(:user) { User.find_by_login('svenfuchs') }
|
||||
|
||||
let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: 1) }
|
||||
let(:headers) {{ 'HTTP_AUTHORIZATION' => "token #{token}" }}
|
||||
|
||||
describe "authenticated as user with access" do
|
||||
before { get("/v3/user/#{user.id}", {}, headers) }
|
||||
example { expect(last_response).to be_ok }
|
||||
example { expect(JSON.load(body)).to be == {
|
||||
"@type" => "user",
|
||||
"@href" => "/v3/user/#{user.id}",
|
||||
"id" => user.id,
|
||||
"login" => "svenfuchs",
|
||||
"name" =>"Sven Fuchs",
|
||||
"github_id" => user.github_id,
|
||||
"is_syncing" => user.is_syncing,
|
||||
"synced_at" => user.synced_at
|
||||
}}
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user