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 CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "github-v3-api"
8
- s.version = "0.1.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-10-18"
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"]
@@ -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
@@ -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.1.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-10-18 00:00:00.000000000Z
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: &2159155400 !ruby/object:Gem::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: *2159155400
24
+ version_requirements: *2168649880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &2159154920 !ruby/object:Gem::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: *2159154920
35
+ version_requirements: *2168649400
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &2159154440 !ruby/object:Gem::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: *2159154440
46
+ version_requirements: *2168648920
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &2159153960 !ruby/object:Gem::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: *2159153960
57
+ version_requirements: *2168648440
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &2159153480 !ruby/object:Gem::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: *2159153480
68
+ version_requirements: *2168647960
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &2159153000 !ruby/object:Gem::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: *2159153000
79
+ version_requirements: *2168663860
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: reek
82
- requirement: &2159152520 !ruby/object:Gem::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: *2159152520
90
+ version_requirements: *2168663380
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: roodi
93
- requirement: &2159152040 !ruby/object:Gem::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: *2159152040
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: 3092793002911622780
157
+ hash: -423517937058714579
154
158
  required_rubygems_version: !ruby/object:Gem::Requirement
155
159
  none: false
156
160
  requirements: