github-v3-api 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/github-v3-api.gemspec +7 -3
- data/lib/github_v3_api.rb +10 -0
- data/lib/github_v3_api/user.rb +15 -0
- data/lib/github_v3_api/users_api.rb +40 -0
- data/spec/user_api_spec.rb +25 -0
- data/spec/user_spec.rb +38 -0
- metadata +23 -19
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/github-v3-api.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "github-v3-api"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["John Wilger"]
|
12
|
-
s.date = "2011-
|
12
|
+
s.date = "2011-12-05"
|
13
13
|
s.description = "Ponies"
|
14
14
|
s.email = "johnwilger@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -37,6 +37,8 @@ Gem::Specification.new do |s|
|
|
37
37
|
"lib/github_v3_api/orgs_api.rb",
|
38
38
|
"lib/github_v3_api/repo.rb",
|
39
39
|
"lib/github_v3_api/repos_api.rb",
|
40
|
+
"lib/github_v3_api/user.rb",
|
41
|
+
"lib/github_v3_api/users_api.rb",
|
40
42
|
"spec/github_v3_api_spec.rb",
|
41
43
|
"spec/issue_spec.rb",
|
42
44
|
"spec/issues_api_spec.rb",
|
@@ -44,7 +46,9 @@ Gem::Specification.new do |s|
|
|
44
46
|
"spec/orgs_api_spec.rb",
|
45
47
|
"spec/repo_spec.rb",
|
46
48
|
"spec/repos_api_spec.rb",
|
47
|
-
"spec/spec_helper.rb"
|
49
|
+
"spec/spec_helper.rb",
|
50
|
+
"spec/user_api_spec.rb",
|
51
|
+
"spec/user_spec.rb"
|
48
52
|
]
|
49
53
|
s.homepage = "http://github.com/jwilger/github-v3-api"
|
50
54
|
s.licenses = ["MIT"]
|
data/lib/github_v3_api.rb
CHANGED
@@ -3,6 +3,8 @@ require 'json'
|
|
3
3
|
require 'github_v3_api/entity'
|
4
4
|
require 'github_v3_api/issues_api'
|
5
5
|
require 'github_v3_api/issue'
|
6
|
+
require 'github_v3_api/users_api'
|
7
|
+
require 'github_v3_api/user'
|
6
8
|
require 'github_v3_api/orgs_api'
|
7
9
|
require 'github_v3_api/org'
|
8
10
|
require 'github_v3_api/repos_api'
|
@@ -36,6 +38,14 @@ class GitHubV3API
|
|
36
38
|
@access_token = access_token
|
37
39
|
end
|
38
40
|
|
41
|
+
# Entry-point for access to the GitHub Users API
|
42
|
+
#
|
43
|
+
# Returns an instance of GitHubV3API::UserAPI that will use the access_token
|
44
|
+
# associated with this instance.
|
45
|
+
def users
|
46
|
+
UsersAPI.new(self)
|
47
|
+
end
|
48
|
+
|
39
49
|
# Entry-point for access to the GitHub Orgs API
|
40
50
|
#
|
41
51
|
# Returns an instance of GitHubV3API::OrgsAPI that will use the access_token
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# See GitHubV3API documentation in lib/github_v3_api.rb
|
2
|
+
class GitHubV3API
|
3
|
+
# Represents a single GitHub User and provides access to its data attributes.
|
4
|
+
class User < Entity
|
5
|
+
attr_reader :login, :id, :avatar_url, :gravatar_id, :url, :name, :company,
|
6
|
+
:blog, :location, :email, :hireable, :bio, :public_repos, :public_gists,
|
7
|
+
:followers, :following, :html_url, :created_at, :type, :total_private_repos,
|
8
|
+
:owned_private_repos, :private_gists, :disk_usage, :collaborators
|
9
|
+
private
|
10
|
+
|
11
|
+
def natural_key
|
12
|
+
[data['login']]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# See GitHubV3API documentation in lib/github_v3_api.rb
|
2
|
+
class GitHubV3API
|
3
|
+
# Provides access to the GitHub Users API (http://developer.github.com/v3/users/)
|
4
|
+
#
|
5
|
+
# example:
|
6
|
+
#
|
7
|
+
# api = GitHubV3API.new(ACCESS_TOKEN)
|
8
|
+
#
|
9
|
+
# # get list of logged-in user
|
10
|
+
# a_user = api.current
|
11
|
+
# #=> returns an instance of GitHubV3API::User
|
12
|
+
#
|
13
|
+
# a_user.login
|
14
|
+
# #=> 'jwilger'
|
15
|
+
#
|
16
|
+
class UsersAPI
|
17
|
+
# Typically not used directly. Use GitHubV3API#users instead.
|
18
|
+
#
|
19
|
+
# +connection+:: an instance of GitHubV3API
|
20
|
+
def initialize(connection)
|
21
|
+
@connection = connection
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns a single GitHubV3API::User instance representing the
|
25
|
+
# currently logged in user
|
26
|
+
def current
|
27
|
+
user_data = @connection.get("/user")
|
28
|
+
GitHubV3API::User.new(self, user_data)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns a GitHubV3API::User instance for the specified +username+.
|
32
|
+
#
|
33
|
+
# +username+:: the string login of the user, e.g. "octocat"
|
34
|
+
def get(username)
|
35
|
+
user_data = @connection.get("/users/#{username}")
|
36
|
+
GitHubV3API::User.new_with_all_data(self, user_data)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GitHubV3API::UsersAPI do
|
4
|
+
describe '#current' do
|
5
|
+
it 'returns the user data for the authenticated user' do
|
6
|
+
connection = mock(GitHubV3API)
|
7
|
+
connection.should_receive(:get).with('/user').and_return(:user_hash1)
|
8
|
+
api = GitHubV3API::UsersAPI.new(connection)
|
9
|
+
GitHubV3API::User.should_receive(:new).with(api, :user_hash1).and_return(:user1)
|
10
|
+
user = api.current
|
11
|
+
user.should == :user1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#get' do
|
16
|
+
it 'returns a fully-hydrated User object for the specified user login' do
|
17
|
+
connection = mock(GitHubV3API)
|
18
|
+
connection.should_receive(:get).with('/users/octocat').and_return(:user_hash)
|
19
|
+
api = GitHubV3API::UsersAPI.new(connection)
|
20
|
+
GitHubV3API::User.should_receive(:new_with_all_data).with(api, :user_hash).and_return(:user)
|
21
|
+
api.get('octocat').should == :user
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/spec/user_spec.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GitHubV3API::User do
|
4
|
+
describe 'attr_readers' do
|
5
|
+
it 'should define attr_readers that pull values from the user data' do
|
6
|
+
fields = %w(login id avatar_url gravatar_id url name company blog location
|
7
|
+
email hireable bio public_repos public_gists followers following
|
8
|
+
html_url created_at type total_private_repos owned_private_repos
|
9
|
+
private_gists disk_usage collaborators)
|
10
|
+
fields.each do |f|
|
11
|
+
user = GitHubV3API::User.new_with_all_data(stub('api'), {f.to_s => 'foo'})
|
12
|
+
user.methods.should include(f.to_sym)
|
13
|
+
user.send(f).should == 'foo'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#[]' do
|
19
|
+
it 'returns the user data for the specified key' do
|
20
|
+
api = mock(GitHubV3API::UsersAPI)
|
21
|
+
api.should_receive(:get).with('github') \
|
22
|
+
.and_return(GitHubV3API::User.new(api, 'login' => 'github', 'name' => 'GitHub'))
|
23
|
+
user = GitHubV3API::User.new(api, 'login' => 'github')
|
24
|
+
user['name'].should == 'GitHub'
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'only fetches the data once' do
|
28
|
+
api = mock(GitHubV3API::UsersAPI)
|
29
|
+
api.should_receive(:get).once.with('github') \
|
30
|
+
.and_return(GitHubV3API::User.new(api, 'login' => 'github', 'name' => 'GitHub'))
|
31
|
+
user = GitHubV3API::User.new(api, 'login' => 'github')
|
32
|
+
user['login'].should == 'github'
|
33
|
+
user['name'].should == 'GitHub'
|
34
|
+
user['foo'].should be_nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: github-v3-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-05 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &2168649880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.6.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2168649880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &2168649400 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.5.3
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2168649400
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &2168648920 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.3.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2168648920
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &2168648440 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2168648440
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &2168647960 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2168647960
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &2168663860 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2168663860
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: reek
|
82
|
-
requirement: &
|
82
|
+
requirement: &2168663380 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.2.8
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2168663380
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: roodi
|
93
|
-
requirement: &
|
93
|
+
requirement: &2168662900 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: 2.1.0
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2168662900
|
102
102
|
description: Ponies
|
103
103
|
email: johnwilger@gmail.com
|
104
104
|
executables: []
|
@@ -127,6 +127,8 @@ files:
|
|
127
127
|
- lib/github_v3_api/orgs_api.rb
|
128
128
|
- lib/github_v3_api/repo.rb
|
129
129
|
- lib/github_v3_api/repos_api.rb
|
130
|
+
- lib/github_v3_api/user.rb
|
131
|
+
- lib/github_v3_api/users_api.rb
|
130
132
|
- spec/github_v3_api_spec.rb
|
131
133
|
- spec/issue_spec.rb
|
132
134
|
- spec/issues_api_spec.rb
|
@@ -135,6 +137,8 @@ files:
|
|
135
137
|
- spec/repo_spec.rb
|
136
138
|
- spec/repos_api_spec.rb
|
137
139
|
- spec/spec_helper.rb
|
140
|
+
- spec/user_api_spec.rb
|
141
|
+
- spec/user_spec.rb
|
138
142
|
homepage: http://github.com/jwilger/github-v3-api
|
139
143
|
licenses:
|
140
144
|
- MIT
|
@@ -150,7 +154,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
150
154
|
version: '0'
|
151
155
|
segments:
|
152
156
|
- 0
|
153
|
-
hash:
|
157
|
+
hash: -423517937058714579
|
154
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
159
|
none: false
|
156
160
|
requirements:
|