octokit 3.1.2 → 3.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.
@@ -8,7 +8,7 @@ module Octokit
8
8
 
9
9
  # Get contributors list with additions, deletions, and commit counts
10
10
  #
11
- # @param repo [String, Hash, Repository] A GitHub repository
11
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
12
12
  # @return [Array<Sawyer::Resource>] Array of contributor stats
13
13
  # @see https://developer.github.com/v3/repos/statistics/#contributors
14
14
  # @example Get contributor stats for octokit
@@ -20,7 +20,7 @@ module Octokit
20
20
 
21
21
  # Get the last year of commit activity data
22
22
  #
23
- # @param repo [String, Hash, Repository] A GitHub repository
23
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
24
24
  # @return [Array<Sawyer::Resource>] The last year of commit activity grouped by
25
25
  # week. The days array is a group of commits per day, starting on Sunday.
26
26
  # @see https://developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity-data
@@ -32,7 +32,7 @@ module Octokit
32
32
 
33
33
  # Get the number of additions and deletions per week
34
34
  #
35
- # @param repo [String, Hash, Repository] A GitHub repository
35
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
36
36
  # @return [Array<Sawyer::Resource>] Weekly aggregate of the number of additions
37
37
  # and deletions pushed to a repository.
38
38
  # @see https://developer.github.com/v3/repos/statistics/#code-frequency
@@ -44,7 +44,7 @@ module Octokit
44
44
 
45
45
  # Get the weekly commit count for the repo owner and everyone else
46
46
  #
47
- # @param repo [String, Hash, Repository] A GitHub repository
47
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
48
48
  # @return [Sawyer::Resource] Total commit counts for the owner and total commit
49
49
  # counts in all. all is everyone combined, including the owner in the last
50
50
  # 52 weeks. If you’d like to get the commit counts for non-owners, you can
@@ -58,7 +58,7 @@ module Octokit
58
58
 
59
59
  # Get the number of commits per hour in each day
60
60
  #
61
- # @param repo [String, Hash, Repository] A GitHub repository
61
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
62
62
  # @return [Array<Array>] Arrays containing the day number, hour number, and
63
63
  # number of commits
64
64
  # @see https://developer.github.com/v3/repos/statistics/#punch-card
@@ -73,11 +73,11 @@ module Octokit
73
73
 
74
74
  # @private Get stats for a repository
75
75
  #
76
- # @param repo [String, Hash, Repository] A GitHub repository
76
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository
77
77
  # @param metric [String] The metrics you are looking for
78
78
  # @return [Array<Sawyer::Resource>] Magical unicorn stats
79
79
  def get_stats(repo, metric, options = {})
80
- data = get("repos/#{Repository.new(repo)}/stats/#{metric}", options)
80
+ data = get("#{Repository.path repo}/stats/#{metric}", options)
81
81
 
82
82
  last_response.status == 202 ? nil : data
83
83
  end
@@ -9,30 +9,30 @@ module Octokit
9
9
 
10
10
  # List all statuses for a given commit
11
11
  #
12
- # @param repo [String, Repository, Hash] A GitHub repository
12
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
13
13
  # @param sha [String] The SHA1 for the commit
14
14
  # @return [Array<Sawyer::Resource>] A list of statuses
15
15
  # @see https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref
16
16
  def statuses(repo, sha, options = {})
17
- get "repos/#{Repository.new(repo)}/statuses/#{sha}", options
17
+ get "#{Repository.path repo}/statuses/#{sha}", options
18
18
  end
19
19
  alias :list_statuses :statuses
20
20
 
21
21
  # Get the combined status for a ref
22
22
  #
23
- # @param repo [String, Repository, Hash] a GitHub repository
23
+ # @param repo [Integer, String, Repository, Hash] a GitHub repository
24
24
  # @param ref [String] A Sha or Ref to fetch the status of
25
25
  # @return [Sawyer::Resource] The combined status for the commit
26
26
  # @see https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
27
27
  def combined_status(repo, ref, options = {})
28
28
  ensure_combined_status_api_media_type(options)
29
- get "repos/#{Repository.new(repo)}/commits/#{ref}/status", options
29
+ get "#{Repository.path repo}/commits/#{ref}/status", options
30
30
  end
31
31
  alias :status :combined_status
32
32
 
33
33
  # Create status for a commit
34
34
  #
35
- # @param repo [String, Repository, Hash] A GitHub repository
35
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
36
36
  # @param sha [String] The SHA1 for the commit
37
37
  # @param state [String] The state: pending, success, failure, error
38
38
  # @option options [String] :context A context to differentiate this status from others
@@ -42,7 +42,7 @@ module Octokit
42
42
  # @see https://developer.github.com/v3/repos/statuses/#create-a-status
43
43
  def create_status(repo, sha, state, options = {})
44
44
  options.merge!(:state => state)
45
- post "repos/#{Repository.new(repo)}/statuses/#{sha}", options
45
+ post "#{Repository.path repo}/statuses/#{sha}", options
46
46
  end
47
47
 
48
48
  private
@@ -24,18 +24,14 @@ module Octokit
24
24
 
25
25
  # Get a single user
26
26
  #
27
- # @param user [String] A GitHub user name.
27
+ # @param user [Integer, String] GitHub user login or id.
28
28
  # @return [Sawyer::Resource]
29
29
  # @see https://developer.github.com/v3/users/#get-a-single-user
30
30
  # @see https://developer.github.com/v3/users/#get-the-authenticated-user
31
31
  # @example
32
32
  # Octokit.user("sferik")
33
33
  def user(user=nil, options = {})
34
- if user
35
- get "users/#{user}", options
36
- else
37
- get 'user', options
38
- end
34
+ get User.path(user), options
39
35
  end
40
36
 
41
37
  # Retrieve the access_token.
@@ -92,24 +88,28 @@ module Octokit
92
88
 
93
89
  # Get a user's followers.
94
90
  #
95
- # @param user [String] Username of the user whose list of followers you are getting.
96
- # @return [Array<Sawyer::Resource>] Array of hashes representing users followers.
91
+ # @param user [Integer, String] GitHub user login or id of the user whose
92
+ # list of followers you are getting.
93
+ # @return [Array<Sawyer::Resource>] Array of hashes representing users
94
+ # followers.
97
95
  # @see https://developer.github.com/v3/users/followers/#list-followers-of-a-user
98
96
  # @example
99
97
  # Octokit.followers('pengwynn')
100
98
  def followers(user=login, options = {})
101
- paginate "users/#{user}/followers", options
99
+ paginate "#{User.path user}/followers", options
102
100
  end
103
101
 
104
102
  # Get list of users a user is following.
105
103
  #
106
- # @param user [String] Username of the user who you are getting the list of the people they follow.
107
- # @return [Array<Sawyer::Resource>] Array of hashes representing users a user is following.
104
+ # @param user [Intger, String] GitHub user login or id of the user who you
105
+ # are getting the list of the people they follow.
106
+ # @return [Array<Sawyer::Resource>] Array of hashes representing users a
107
+ # user is following.
108
108
  # @see https://developer.github.com/v3/users/followers/#list-users-followed-by-another-user
109
109
  # @example
110
110
  # Octokit.following('pengwynn')
111
111
  def following(user=login, options = {})
112
- paginate "users/#{user}/following", options
112
+ paginate "#{User.path user}/following", options
113
113
  end
114
114
 
115
115
  # Check if you are following a user. Alternatively, check if a given user
@@ -118,10 +118,11 @@ module Octokit
118
118
  # Requries an authenticated client.
119
119
  #
120
120
  # @overload follows?(target)
121
- # @param target [String] Username of the user that you want to check if you are following.
121
+ # @param target [String] GitHub login of the user that you want to
122
+ # check if you are following.
122
123
  # @overload follows?(user, target)
123
- # @param user [String] Username of first user
124
- # @param target [String] Username of the target user
124
+ # @param user [Integer, String] GitHub user login or id of first user
125
+ # @param target [String] GitHub login of the target user
125
126
  # @return [Boolean] True following target user, false otherwise.
126
127
  # @see https://developer.github.com/v3/users/followers/#check-if-you-are-following-a-user
127
128
  # @see https://developer.github.com/v3/users/followers/#check-if-one-user-follows-another
@@ -132,12 +133,7 @@ module Octokit
132
133
  def follows?(*args)
133
134
  target = args.pop
134
135
  user = args.first
135
- if user.nil?
136
- url = "user/following/#{target}"
137
- else
138
- url = "users/#{user}/following/#{target}"
139
- end
140
- boolean_from_response :get, url
136
+ boolean_from_response :get, "#{User.path user}/following/#{target}"
141
137
  end
142
138
 
143
139
  # Follow a user.
@@ -168,7 +164,8 @@ module Octokit
168
164
 
169
165
  # Get list of repos starred by a user.
170
166
  #
171
- # @param user [String] Username of the user to get the list of their starred repositories.
167
+ # @param user [Integer, String] GitHub user login of the user to get the
168
+ # list of their starred repositories.
172
169
  # @param options [Hash] Optional options
173
170
  # @option options [String] :sort (created) Sort: <tt>created</tt> or <tt>updated</tt>.
174
171
  # @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
@@ -234,13 +231,14 @@ module Octokit
234
231
 
235
232
  # Get list of public keys for user.
236
233
  #
234
+ # @param user [Integer, String] GitHub user login or id.
237
235
  # @return [Array<Sawyer::Resource>] Array of hashes representing public keys.
238
236
  # @see https://developer.github.com/v3/users/keys/#list-public-keys-for-a-user
239
237
  # @example
240
238
  # @client.user_keys('pengwynn')
241
239
  def user_keys(user, options = {})
242
240
  # TODO: Roll this into .keys
243
- paginate "users/#{user}/keys", options
241
+ paginate "#{User.path user}/keys", options
244
242
  end
245
243
 
246
244
  # Add public key to user account.
@@ -266,7 +264,10 @@ module Octokit
266
264
  # @option options [String] :title
267
265
  # @option options [String] :key
268
266
  # @return [Sawyer::Resource] Hash representing the updated public key.
267
+ #
268
+ # @deprecated This method is no longer supported in the API
269
269
  # @see https://developer.github.com/v3/users/keys/#update-a-public-key
270
+ # @see https://developer.github.com/changes/2014-02-24-finer-grained-scopes-for-ssh-keys/
270
271
  # @example
271
272
  # @client.update_key(1, :title => 'new title', :key => "ssh-rsa BBB")
272
273
  def update_key(key_id, options = {})
@@ -328,12 +329,9 @@ module Octokit
328
329
 
329
330
  # List repositories being watched by a user.
330
331
  #
331
- # @param user [String] User's GitHub username.
332
- #
332
+ # @param user [Integer, String] GitHub user login or id.
333
333
  # @return [Array<Sawyer::Resource>] Array of repositories.
334
- #
335
334
  # @see https://developer.github.com/v3/activity/watching/#list-repositories-being-watched
336
- #
337
335
  # @example
338
336
  # @client.subscriptions("pengwynn")
339
337
  def subscriptions(user=login, options = {})
@@ -349,7 +347,7 @@ module Octokit
349
347
  if user == login && user_authenticated?
350
348
  "user/#{path}"
351
349
  else
352
- "users/#{user}/#{path}"
350
+ "#{User.path user}/#{path}"
353
351
  end
354
352
  end
355
353
  end
@@ -17,6 +17,7 @@ module Octokit
17
17
  when 401 then error_for_401(headers)
18
18
  when 403 then error_for_403(body)
19
19
  when 404 then Octokit::NotFound
20
+ when 405 then Octokit::MethodNotAllowed
20
21
  when 406 then Octokit::NotAcceptable
21
22
  when 409 then Octokit::Conflict
22
23
  when 415 then Octokit::UnsupportedMediaType
@@ -189,6 +190,9 @@ module Octokit
189
190
  # Raised when GitHub returns a 404 HTTP status code
190
191
  class NotFound < ClientError; end
191
192
 
193
+ # Raised when GitHub returns a 405 HTTP status code
194
+ class MethodNotAllowed < ClientError; end
195
+
192
196
  # Raised when GitHub returns a 406 HTTP status code
193
197
  class NotAcceptable < ClientError; end
194
198
 
@@ -0,0 +1,17 @@
1
+ module Octokit
2
+ # GitHub organization class to generate API path urls
3
+ class Organization
4
+ # Get the api path for an organization
5
+ #
6
+ # @param org [String, Integer] GitHub organization login or id
7
+ # @return [String] Organization Api path
8
+ def self.path org
9
+ case org
10
+ when String
11
+ "orgs/#{org}"
12
+ when Integer
13
+ "organizations/#{org}"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,7 +3,7 @@ module Octokit
3
3
  # Class to parse GitHub repository owner and name from
4
4
  # URLs and to generate URLs
5
5
  class Repository
6
- attr_accessor :owner, :name
6
+ attr_accessor :owner, :name, :id
7
7
 
8
8
  # Instantiate from a GitHub repository URL
9
9
  #
@@ -14,6 +14,8 @@ module Octokit
14
14
 
15
15
  def initialize(repo)
16
16
  case repo
17
+ when Integer
18
+ @id = repo
17
19
  when String
18
20
  @owner, @name = repo.split('/')
19
21
  when Repository
@@ -32,6 +34,29 @@ module Octokit
32
34
  end
33
35
  alias :to_s :slug
34
36
 
37
+ # @return [String] Repository API path
38
+ def path
39
+ return named_api_path if @owner && @name
40
+ return id_api_path if @id
41
+ end
42
+
43
+ # Get the api path for a repo
44
+ # @param repo [Integer, String, Hash, Repository] A GitHub repository.
45
+ # @return [String] Api path.
46
+ def self.path repo
47
+ new(repo).path
48
+ end
49
+
50
+ # @return [String] Api path for owner/name identified repos
51
+ def named_api_path
52
+ "repos/#{slug}"
53
+ end
54
+
55
+ # @return [String] Api path for id identified repos
56
+ def id_api_path
57
+ "repositories/#{@id}"
58
+ end
59
+
35
60
  # Repository URL based on {Octokit::Client#web_endpoint}
36
61
  # @return [String]
37
62
  def url
@@ -0,0 +1,19 @@
1
+ module Octokit
2
+ # GitHub user class to generate API path urls
3
+ class User
4
+ # Get the api path for a user
5
+ #
6
+ # @param user [String, Integer] GitHub user login or id
7
+ # @return [String] User Api path
8
+ def self.path user
9
+ case user
10
+ when String
11
+ "users/#{user}"
12
+ when Integer
13
+ "user/#{user}"
14
+ else
15
+ "user"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -2,6 +2,6 @@ module Octokit
2
2
 
3
3
  # Current version
4
4
  # @return [String]
5
- VERSION = "3.1.2".freeze
5
+ VERSION = "3.2.0".freeze
6
6
 
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octokit
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wynn Netherland
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-06-11 00:00:00.000000000 Z
13
+ date: 2014-06-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -97,11 +97,13 @@ files:
97
97
  - lib/octokit/default.rb
98
98
  - lib/octokit/error.rb
99
99
  - lib/octokit/gist.rb
100
+ - lib/octokit/organization.rb
100
101
  - lib/octokit/rate_limit.rb
101
102
  - lib/octokit/repo_arguments.rb
102
103
  - lib/octokit/repository.rb
103
104
  - lib/octokit/response/feed_parser.rb
104
105
  - lib/octokit/response/raise_error.rb
106
+ - lib/octokit/user.rb
105
107
  - lib/octokit/version.rb
106
108
  - lib/octokit.rb
107
109
  homepage: https://github.com/octokit/octokit.rb