github_api_v3 0.0.2 → 0.0.3

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/README.md +3 -1
  4. data/github_api_v3.gemspec +2 -0
  5. data/lib/github_api_v3.rb +1 -1
  6. data/lib/github_api_v3/client.rb +22 -82
  7. data/lib/github_api_v3/client/repos.rb +160 -0
  8. data/lib/github_api_v3/client/users.rb +178 -0
  9. data/lib/github_api_v3/{configuration.rb → default.rb} +2 -4
  10. data/lib/github_api_v3/version.rb +1 -1
  11. data/spec/cassettes/GitHub_Client_Repos/_all_repos/returns_an_array_of_repositories.json +1 -0
  12. data/spec/cassettes/GitHub_Client_Repos/_branch/returns_a_hash_of_branch_info.json +1 -0
  13. data/spec/cassettes/GitHub_Client_Repos/_branches/returns_an_array_of_branches.json +1 -0
  14. data/spec/cassettes/GitHub_Client_Repos/_contributors/returns_an_array_of_contributors.json +1 -0
  15. data/spec/cassettes/GitHub_Client_Repos/_create_repo/creates_the_repo.json +1 -0
  16. data/spec/cassettes/GitHub_Client_Repos/_create_repo/returns_a_hash.json +1 -0
  17. data/spec/cassettes/GitHub_Client_Repos/_delete_repo/deletes_a_repo.json +1 -0
  18. data/spec/cassettes/GitHub_Client_Repos/_languages/returns_a_hash_of_languages.json +1 -0
  19. data/spec/cassettes/GitHub_Client_Repos/_languages/returns_an_array_of_languages.json +1 -0
  20. data/spec/cassettes/GitHub_Client_Repos/_org_repos/returns_an_array_of_repos.json +1 -0
  21. data/spec/cassettes/GitHub_Client_Repos/_repo/returns_a_repo_as_a_hash.json +1 -0
  22. data/spec/cassettes/GitHub_Client_Repos/_repos/returns_an_array_of_repositories.json +1 -0
  23. data/spec/cassettes/GitHub_Client_Repos/_repos/returns_an_array_of_repositories_for_authenticated_user.json +1 -0
  24. data/spec/cassettes/GitHub_Client_Repos/_tags/returns_an_array_of_tags.json +1 -0
  25. data/spec/cassettes/GitHub_Client_Users/_emails/returns_an_array_of_emails.json +1 -0
  26. data/spec/cassettes/GitHub_Client_Users/_events/returns_an_array_of_events.json +1 -0
  27. data/spec/cassettes/GitHub_Client_Users/_follow/follows_a_user.json +1 -0
  28. data/spec/cassettes/GitHub_Client_Users/_followers/returns_authenticated_users_followers_as_an_array.json +1 -0
  29. data/spec/cassettes/GitHub_Client_Users/_followers/returns_unauthenticated_users_followers_as_an_array.json +1 -0
  30. data/spec/cassettes/GitHub_Client_Users/_following/returns_an_array_of_followees.json +1 -0
  31. data/spec/cassettes/GitHub_Client_Users/_following_/returns_true_or_false.json +1 -0
  32. data/spec/cassettes/GitHub_Client_Users/_follows_/returns_a_boolean.json +1 -0
  33. data/spec/cassettes/GitHub_Client_Users/_unfollow/unfollows_a_user.json +1 -0
  34. data/spec/cassettes/GitHub_Client_Users/_user/gets_the_correct_user_info.json +1 -0
  35. data/spec/cassettes/GitHub_Client_Users/_user/returns_a_hash.json +1 -0
  36. data/spec/cassettes/GitHub_Client_Users/_users/returns_an_array.json +1 -0
  37. data/spec/cassettes/GitHub_Client_Users/_users/returns_an_array_of_hashes.json +1 -0
  38. data/spec/cassettes/GitHub_Client_Users/keys/returns_an_array_of_keys.json +1 -0
  39. data/spec/cassettes/GitHub_Client_Users/keys/returns_an_array_of_keys_for_authenticated_user.json +1 -0
  40. data/spec/config.sample.yml +3 -0
  41. data/spec/github_api_v3/client/repos_spec.rb +85 -0
  42. data/spec/github_api_v3/client/users_spec.rb +91 -0
  43. data/spec/github_api_v3/client_spec.rb +1 -39
  44. data/spec/spec_helper.rb +32 -0
  45. metadata +97 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9169cd9f387218e0671168e9eb4a2f1d1f18e509
4
- data.tar.gz: 3d0068723c6ced874e5ffb071a7484268c1b0fba
3
+ metadata.gz: 3ae00133104efbad81d712e9a61b52de37acce7e
4
+ data.tar.gz: 07808ae90ba4cd395dc489fc6abf803ad69288bd
5
5
  SHA512:
6
- metadata.gz: 167c034acff48603440160992bafe2bb2dfbff57c8aafc54c716167bad2a31c6dc8ea9d5e80a098a981fec3ceff0b2e47d21dbdc6238006122f873c6457d0e3a
7
- data.tar.gz: 873d6d203131801d3c45b646031cc2373997c5ac1bb069579be2af3d3e2c146493b0dbce75b537ea1f6722df8c270e78f40db5f0c79f9d6781381d3322455626
6
+ metadata.gz: 2b27ea74d7310ccbae210186b9cd811aa3aad2eb2144a2677384f573f424a5327dac504acfe1430acf6ae5de80700794f3322d9fa5fa76e6d091bf4ec37d750c
7
+ data.tar.gz: 9c118dcad30804554236432f8a80a9e6349de7aac7d89ee2db12384642c6068ba436b402f1080096ef7a1fe3cae91f9dbd06975778215bf9f4c5d5d8897ed424
data/.gitignore CHANGED
@@ -15,3 +15,6 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ /versions
19
+ .DS_Store
20
+ /spec/config.yml
data/README.md CHANGED
@@ -69,6 +69,9 @@ Some methods, such as retrieving private repos or emails, require authentication
69
69
  ```ruby
70
70
  client = GitHub::Client.new(login: 'username', access_token: 'abcdefghijklmnopqrstuvwxyz12345')
71
71
  client.emails # => ["email@example.com", "email2@example.com"]
72
+ client.repos # => #<Array:0x007fb8aa0d1a00>
73
+ client.follow('matz') # => true
74
+ client.user # => #<Hash:0x007fb8a9109d70>
72
75
  ```
73
76
 
74
77
  More functionality to come.
@@ -77,7 +80,6 @@ More functionality to come.
77
80
 
78
81
  The better question is... What's not to do? Any functionality of the API listed at [developer.github.com](http://developer.github.com/) that isn't currently in effect.
79
82
 
80
-
81
83
  ## Contributing
82
84
 
83
85
  1. Fork it
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency 'bundler', '~> 1.3'
22
22
  spec.add_development_dependency 'rake'
23
23
  spec.add_development_dependency 'rspec'
24
+ spec.add_development_dependency 'webmock', '1.11.0'
25
+ spec.add_development_dependency 'vcr'
24
26
 
25
27
  spec.add_dependency 'httparty', '0.11.0'
26
28
  end
data/lib/github_api_v3.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'httparty'
2
2
  require 'github_api_v3/version'
3
3
  require 'github_api_v3/error'
4
- require 'github_api_v3/configuration'
4
+ require 'github_api_v3/default'
5
5
  require 'github_api_v3/client'
6
6
 
7
7
  module GitHub
@@ -1,87 +1,22 @@
1
+ require 'json'
2
+ require 'github_api_v3/client/users'
3
+ require 'github_api_v3/client/repos'
4
+
1
5
  module GitHub
2
6
  class Client
3
7
 
4
8
  include HTTParty
5
- base_uri Configuration::DEFAULT_ENDPOINT
9
+ base_uri Default::API_ENDPOINT
10
+
11
+ include GitHub::Client::Users
12
+ include GitHub::Client::Repos
6
13
 
7
14
  attr_reader :login, :access_token
8
15
 
9
16
  def initialize(options={})
10
17
  @login = options[:login]
11
- @access_token = options[:access_token]
12
- end
13
-
14
- # Users
15
-
16
- def user(username=nil)
17
- if username
18
- get "/users/#{username}"
19
- else
20
- get '/user', auth_params
21
- end
22
- end
23
-
24
- def users
25
- get '/users'
26
- end
27
-
28
- # Get emails for authenticated user
29
- def emails
30
- get '/user/emails', auth_params
31
- end
32
-
33
- def follow(username)
34
- put "/user/following/#{username}", auth_params
35
- end
36
-
37
- def follows?(username, target_username)
38
- response = self.class.get "/users/#{username}/following/#{target_username}"
39
- response.code == 204
40
- end
41
-
42
- def followers(username=nil)
43
- if username
44
- get "/users/#{username}/followers"
45
- else
46
- get '/user/followers', auth_params
47
- end
48
- end
49
-
50
- def following(username)
51
- get "/users/#{username}/following"
52
- end
53
-
54
- def following?(username)
55
- response = self.class.get "/user/following/#{username}", query: auth_params
56
- response.code == 204
57
- end
58
-
59
- def unfollow(username)
60
- delete "/user/following/#{username}", auth_params
61
- end
62
-
63
- def keys(username=nil)
64
- if username
65
- get "/users/#{username}/keys"
66
- else
67
- get '/user/keys', auth_params
68
- end
69
- end
70
-
71
- def key(id)
72
- get "/user/keys/#{id}", auth_params
73
- end
74
-
75
- def delete_key(id)
76
- delete "/user/keys/#{id}", auth_params
77
- end
78
-
79
- def events(username)
80
- get "/users/#{username}/events"
81
- end
82
-
83
- def repos(username)
84
- get "/users/#{username}/repos"
18
+ @access_token = options[:access_token] if options[:access_token]
19
+ @password = options[:password] if options[:password]
85
20
  end
86
21
 
87
22
  private
@@ -92,21 +27,26 @@ module GitHub
92
27
  response.parsed_response
93
28
  end
94
29
 
95
- def put(url, params={})
30
+ def put(url, params={}, boolean=false)
96
31
  response = self.class.put url, query: params
97
32
  handle_response(response)
98
- response.parsed_response
33
+ boolean ? response.code == 204 : response.parsed_response
99
34
  end
100
35
 
101
- def post(url, params={})
102
- response = self.class.post url, query: params
103
- response.code
36
+ def post(url, params={}, body={}, boolean=false)
37
+ response = self.class.post url, query: params, body: body.to_json
38
+ handle_response(response)
39
+ boolean ? response.code == 204 : response.parsed_response
104
40
  end
105
41
 
106
- def delete(url, params={})
42
+ def delete(url, params={}, boolean=false)
107
43
  response = self.class.delete url, query: params
108
44
  handle_response(response)
109
- response.parsed_response
45
+ boolean ? response.code == 204 : response.parsed_response
46
+ end
47
+
48
+ def basic_params
49
+ @password.nil? ? {} : { login: @login, password: @password }
110
50
  end
111
51
 
112
52
  def auth_params
@@ -0,0 +1,160 @@
1
+ module GitHub
2
+ class Client
3
+
4
+ module Repos
5
+
6
+ # List all repositories
7
+ #
8
+ # Get a list of all repositories.
9
+ #
10
+ # @return [Array]
11
+ # @see http://developer.github.com/v3/repos/#list-all-public-repositories
12
+ def all_repos
13
+ get '/repositories'
14
+ end
15
+
16
+ # Get one repository.
17
+ #
18
+ # @param owner [String] Username of repository owner.
19
+ # @param repo [String] Name of repository.
20
+ # @return [Hash] Repository information.
21
+ # @see http://developer.github.com/v3/repos/#get
22
+ # @example
23
+ # GitHub.repo('caseyscarborough','github')
24
+ def repo(owner, repo)
25
+ get "/repos/#{owner}/#{repo}"
26
+ end
27
+
28
+ # Get all repositories for a user.
29
+ #
30
+ # If authenticated, returns all repos for authenticated user.
31
+ #
32
+ # @param username [String] Username for repos owner.
33
+ # @return [Array] List of repositories.
34
+ # @see http://developer.github.com/v3/repos/#list-user-repositories
35
+ # @example
36
+ # GitHub.repos('caseyscarborough')
37
+ # @example
38
+ # client.repos
39
+ def repos(username=nil)
40
+ if username
41
+ get "/users/#{username}/repos"
42
+ else
43
+ get '/user/repos', auth_params
44
+ end
45
+ end
46
+
47
+ # Create a repository.
48
+ #
49
+ # Requires authentication.
50
+ #
51
+ # @param name [String] Repository name.
52
+ # @param options [Hash] Repository information.
53
+ # @option options [String] :description Repository description.
54
+ # @option options [String] :homepage Repository homepage.
55
+ # @option options [Boolean] :private
56
+ # @option options [Boolean] :has_issues
57
+ # @option options [Boolean] :has_wiki
58
+ # @option options [Boolean] :has_downloads
59
+ # @option options [Integer] :team_id ID of team
60
+ # @option options [Boolean] :auto_init Create README.md automatically.
61
+ # @option options [String] :gitignore_template Desired .gitignore template to apply.
62
+ # @return [Hash] Repository information.
63
+ # @see http://developer.github.com/v3/repos/#create
64
+ # @example
65
+ # client.create_repo('new-repo', description: 'New repository.', private: true)
66
+ def create_repo(name, options={})
67
+ post "/user/repos", auth_params, options.merge(name: name)
68
+ end
69
+
70
+ # Delete a repository.
71
+ #
72
+ # Requires authentication.
73
+ #
74
+ # @param repo [String] Name of repository to delete.
75
+ # @return [Boolean] True if successful, false if not.
76
+ # @see http://developer.github.com/v3/repos/#delete-a-repository
77
+ # @example
78
+ # client.delete_repo('repo-name')
79
+ def delete_repo(repo)
80
+ delete "/repos/#{login}/#{repo}", auth_params, true
81
+ end
82
+
83
+ # Get organization repositories.
84
+ #
85
+ # @param org [String] Organization name.
86
+ # @return [Array] List of all repositories for org.
87
+ # @see http://developer.github.com/v3/repos/#list-organization-repositories
88
+ # @example
89
+ # GitHub.org_repos('rails')
90
+ def org_repos(org)
91
+ get "/orgs/#{org}/repos"
92
+ end
93
+
94
+ # List contributors for a repository.
95
+ #
96
+ # @param owner [String] Owner of repository.
97
+ # @param repo [String] Repository name.
98
+ # @return [Array] List of contributors.
99
+ # @see http://developer.github.com/v3/repos/#list-contributors
100
+ # @example
101
+ # GitHub.contributors('caseyscarborough','github')
102
+ def contributors(owner, repo)
103
+ get "/repos/#{owner}/#{repo}/contributors"
104
+ end
105
+
106
+ # List languages for a repository.
107
+ #
108
+ # @param owner [String] Owner of repository.
109
+ # @param repo [String] Repository name.
110
+ # @return [Hash] Language information.
111
+ # @see http://developer.github.com/v3/repos/#list-languages
112
+ # @example
113
+ # GitHub.languages('caseyscarborough','github')
114
+ def languages(owner, repo)
115
+ get "/repos/#{owner}/#{repo}/languages"
116
+ end
117
+
118
+ # def teams(owner, repo)
119
+ # get "/repos/#{owner}/#{repo}/teams"
120
+ # end
121
+
122
+ # List tags for a repository.
123
+ #
124
+ # @param owner [String] Owner of repository.
125
+ # @param repo [String] Repository name.
126
+ # @return [Array] List of tags and their information.
127
+ # @see http://developer.github.com/v3/repos/#list-tags
128
+ # @example
129
+ # GitHub.tags('caseyscarborough','github')
130
+ def tags(owner, repo)
131
+ get "/repos/#{owner}/#{repo}/tags"
132
+ end
133
+
134
+ # List branches for a repository.
135
+ #
136
+ # @param owner [String] Owner of repository.
137
+ # @param repo [String] Repository name.
138
+ # @return [Array] List of brances and their information.
139
+ # @see http://developer.github.com/v3/repos/#list-branches
140
+ # @example
141
+ # GitHub.branches('caseyscarborough','github')
142
+ def branches(owner, repo)
143
+ get "/repos/#{owner}/#{repo}/branches"
144
+ end
145
+
146
+ # Get information about a branch.
147
+ #
148
+ # @param owner [String] Owner of repository.
149
+ # @param repo [String] Repository name.
150
+ # @param branch [String] Branch name.
151
+ # @see http://developer.github.com/v3/repos/#get-branch
152
+ # @example
153
+ # GitHub.branch('caseyscarborough','github','master')
154
+ def branch(owner, repo, branch)
155
+ get "/repos/#{owner}/#{repo}/branches/#{branch}"
156
+ end
157
+
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,178 @@
1
+ module GitHub
2
+ class Client
3
+
4
+ # Contains methods for the Users API.
5
+ #
6
+ # @see http://developer.github.com/v3/users/
7
+ module Users
8
+
9
+ # Returns a single user.
10
+ #
11
+ # If called without the username parameter, it will return the
12
+ # currently authenticated user.
13
+ #
14
+ # @param username [String] A GitHub username.
15
+ # @return [Hash]
16
+ # @see http://developer.github.com/v3/users/#get-a-single-user
17
+ # @see http://developer.github.com/v3/users/#get-the-authenticated-user
18
+ # @example
19
+ # GitHub.user('caseyscarborough')
20
+ def user(username=nil)
21
+ if username
22
+ get "/users/#{username}"
23
+ else
24
+ get '/user', auth_params
25
+ end
26
+ end
27
+
28
+ # Returns a list of all GitHub users.
29
+ #
30
+ # @return [Array]
31
+ # @see http://developer.github.com/v3/users/#get-all-users
32
+ def users
33
+ get '/users'
34
+ end
35
+
36
+ # Get all emails for an authenticated user.
37
+ #
38
+ # @return [Array]
39
+ # @see http://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user
40
+ # @example
41
+ # client = GitHub::Client.new(login: 'username', access_token: 'abcdefghijklmnopqrstuvwxyz12345')
42
+ # client.emails # => ["email@example.com", "email2@example.com"]
43
+ def emails
44
+ get '/user/emails', auth_params
45
+ end
46
+
47
+ # Follow a user.
48
+ #
49
+ # Requires authentication.
50
+ #
51
+ # @param username [String] Username of the user to follow.
52
+ # @return [Boolean] True on success.
53
+ # @see http://developer.github.com/v3/users/followers/#follow-a-user
54
+ # @example
55
+ # client.follow('caseyscarborough')
56
+ def follow(username)
57
+ put "/user/following/#{username}", auth_params, true
58
+ end
59
+
60
+ # Checks to see if a user is following another user.
61
+ #
62
+ # @param username [String] The user following.
63
+ # @param target_username [String] The target user.
64
+ # @return [Boolean] True if user does follow target user.
65
+ # @see http://developer.github.com/v3/users/followers/#check-if-one-user-follows-another
66
+ # @example
67
+ # GitHub.follows?('caseyscarborough', 'matz')
68
+ def follows?(username, target_username)
69
+ response = self.class.get "/users/#{username}/following/#{target_username}"
70
+ response.code == 204
71
+ end
72
+
73
+ # List a user's followers.
74
+ #
75
+ # If username is left blank, returns the currently authenticated user's
76
+ # list of followers.
77
+ #
78
+ # @param username [String] The username to get a list of followers for.
79
+ # @return [Array] Array of hashes of each user.
80
+ # @see http://developer.github.com/v3/users/followers/#list-followers-of-a-user
81
+ # @example
82
+ # GitHub.followers('caseyscarborough')
83
+ # @example
84
+ # # Get authenticated user's followers
85
+ # client.followers
86
+ def followers(username=nil)
87
+ if username
88
+ get "/users/#{username}/followers"
89
+ else
90
+ get '/user/followers', auth_params
91
+ end
92
+ end
93
+
94
+ # List users who a specific user is following.
95
+ #
96
+ # @param username [String] The username of the user to get the list of users they arefollowing.
97
+ # @return [Array] Array of hashes of each user.
98
+ # @see http://developer.github.com/v3/users/followers/#list-users-followed-by-another-user
99
+ # @example
100
+ # GitHub.following('caseyscarborough')
101
+ def following(username)
102
+ get "/users/#{username}/following"
103
+ end
104
+
105
+ # Check if an authenticated user is following another user.
106
+ #
107
+ # Requires the user to be authenticated.
108
+ #
109
+ # @param username [String] The username of the user to check against.
110
+ # @return [Boolean] True if user does follow the target user, false if not.
111
+ # @example
112
+ # client.following?('caseyscarborough')
113
+ def following?(username)
114
+ response = self.class.get "/user/following/#{username}", query: auth_params
115
+ response.code == 204
116
+ end
117
+
118
+ # Unfollow a user.
119
+ #
120
+ # Requires authentication.
121
+ #
122
+ # @param username [String] The username of the user to unfollow.
123
+ # @return [Boolean] True if successful, false otherwise.
124
+ # @example
125
+ # client.unfollow('matz')
126
+ def unfollow(username)
127
+ delete "/user/following/#{username}", auth_params, true
128
+ end
129
+
130
+ # Get a list of public keys for a user.
131
+ #
132
+ # If username left blank, get currently authenticated user's keys.
133
+ #
134
+ # @param username [String] The username to get public keys for.
135
+ # @return [Array] Array of hashes of public keys.
136
+ # @example
137
+ # GitHub.keys('username')
138
+ # @example
139
+ # client.keys
140
+ def keys(username=nil)
141
+ if username
142
+ get "/users/#{username}/keys"
143
+ else
144
+ get '/user/keys', auth_params
145
+ end
146
+ end
147
+
148
+ # Get a public key.
149
+ #
150
+ # Requires authentication.
151
+ #
152
+ # @param id [Integer] The id of the key to retrieve.
153
+ # @return [Hash]
154
+ # @example
155
+ # client.key(123)
156
+ def key(id)
157
+ get "/user/keys/#{id}", auth_params
158
+ end
159
+
160
+ # Remove a public key from a user's account.
161
+ #
162
+ # Requires authentication.
163
+ #
164
+ # @param id [Integer] The id of the integer to delete.
165
+ # @return [Boolean] True if success, false if not.
166
+ # @example
167
+ # client.delete_key(123)
168
+ def delete_key(id)
169
+ delete "/user/keys/#{id}", auth_params, true
170
+ end
171
+
172
+ def events(username)
173
+ get "/users/#{username}/events"
174
+ end
175
+ end
176
+
177
+ end
178
+ end