github_api 0.8.11 → 0.9.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/README.md +21 -14
- data/features/activity/notifications.feature +15 -0
- data/features/cassettes/activity/notifications/list_user.yml +54 -0
- data/features/step_definitions/common_steps.rb +8 -9
- data/lib/github_api.rb +3 -4
- data/lib/github_api/activity.rb +8 -13
- data/lib/github_api/activity/events.rb +0 -5
- data/lib/github_api/activity/notifications.rb +0 -5
- data/lib/github_api/api.rb +27 -22
- data/lib/github_api/api_factory.rb +13 -12
- data/lib/github_api/authorizations.rb +0 -5
- data/lib/github_api/client.rb +33 -33
- data/lib/github_api/configuration.rb +10 -2
- data/lib/github_api/connection.rb +2 -3
- data/lib/github_api/constants.rb +0 -3
- data/lib/github_api/gists.rb +2 -7
- data/lib/github_api/git_data.rb +10 -15
- data/lib/github_api/git_data/blobs.rb +0 -5
- data/lib/github_api/git_data/commits.rb +0 -5
- data/lib/github_api/git_data/references.rb +3 -7
- data/lib/github_api/git_data/tags.rb +0 -5
- data/lib/github_api/git_data/trees.rb +0 -5
- data/lib/github_api/gitignore.rb +0 -5
- data/lib/github_api/issues.rb +10 -15
- data/lib/github_api/issues/comments.rb +0 -5
- data/lib/github_api/issues/events.rb +0 -5
- data/lib/github_api/issues/labels.rb +0 -5
- data/lib/github_api/issues/milestones.rb +0 -5
- data/lib/github_api/markdown.rb +0 -5
- data/lib/github_api/meta.rb +0 -5
- data/lib/github_api/orgs.rb +4 -9
- data/lib/github_api/page_iterator.rb +44 -29
- data/lib/github_api/paged_request.rb +12 -12
- data/lib/github_api/{result.rb → pagination.rb} +19 -86
- data/lib/github_api/params_hash.rb +1 -1
- data/lib/github_api/pull_requests.rb +2 -7
- data/lib/github_api/repos.rb +22 -27
- data/lib/github_api/request.rb +7 -4
- data/lib/github_api/response/header.rb +76 -0
- data/lib/github_api/response_wrapper.rb +126 -0
- data/lib/github_api/scopes.rb +1 -1
- data/lib/github_api/search.rb +0 -5
- data/lib/github_api/users.rb +6 -11
- data/lib/github_api/version.rb +2 -2
- data/spec/github/activity/notifications/get_spec.rb +1 -1
- data/spec/github/activity/starring/starred_spec.rb +1 -1
- data/spec/github/activity/watching/watched_spec.rb +1 -1
- data/spec/github/api_factory_spec.rb +7 -8
- data/spec/github/api_spec.rb +0 -7
- data/spec/github/authorization_spec.rb +22 -32
- data/spec/github/authorizations/create_spec.rb +49 -0
- data/spec/github/authorizations/delete_spec.rb +39 -0
- data/spec/github/authorizations/get_spec.rb +49 -0
- data/spec/github/authorizations/list_spec.rb +55 -0
- data/spec/github/authorizations/update_spec.rb +50 -0
- data/spec/github/authorizations_spec.rb +2 -236
- data/spec/github/gists/comments/create_spec.rb +1 -1
- data/spec/github/gists/comments/edit_spec.rb +1 -1
- data/spec/github/gists/comments/get_spec.rb +1 -1
- data/spec/github/gists/create_spec.rb +1 -1
- data/spec/github/gists/edit_spec.rb +1 -1
- data/spec/github/gists/fork_spec.rb +1 -1
- data/spec/github/gists/get_spec.rb +1 -1
- data/spec/github/git_data/blobs/create_spec.rb +1 -1
- data/spec/github/git_data/blobs/get_spec.rb +1 -1
- data/spec/github/git_data/commits/create_spec.rb +1 -1
- data/spec/github/git_data/commits/get_spec.rb +1 -1
- data/spec/github/git_data/references/create_spec.rb +2 -2
- data/spec/github/git_data/references/get_spec.rb +1 -1
- data/spec/github/git_data/references/list_spec.rb +16 -6
- data/spec/github/git_data/tags/create_spec.rb +1 -1
- data/spec/github/git_data/tags/get_spec.rb +1 -1
- data/spec/github/git_data/trees/create_spec.rb +1 -1
- data/spec/github/git_data/trees/get_spec.rb +4 -4
- data/spec/github/issues/comments/create_spec.rb +1 -1
- data/spec/github/issues/comments/edit_spec.rb +1 -1
- data/spec/github/issues/comments/get_spec.rb +1 -1
- data/spec/github/issues/create_spec.rb +1 -1
- data/spec/github/issues/edit_spec.rb +1 -1
- data/spec/github/issues/events/get_spec.rb +1 -1
- data/spec/github/issues/get_spec.rb +1 -1
- data/spec/github/issues/labels/create_spec.rb +1 -1
- data/spec/github/issues/labels/get_spec.rb +1 -1
- data/spec/github/issues/labels/update_spec.rb +1 -1
- data/spec/github/issues/milestones/create_spec.rb +1 -1
- data/spec/github/issues/milestones/delete_spec.rb +1 -1
- data/spec/github/issues/milestones/get_spec.rb +1 -1
- data/spec/github/issues/milestones/update_spec.rb +1 -1
- data/spec/github/orgs/edit_spec.rb +1 -1
- data/spec/github/orgs/get_spec.rb +1 -1
- data/spec/github/orgs/teams/create_spec.rb +1 -1
- data/spec/github/orgs/teams/edit_spec.rb +1 -1
- data/spec/github/orgs/teams/get_spec.rb +1 -1
- data/spec/github/paged_request_spec.rb +34 -29
- data/spec/github/pagination/iterator/number_spec.rb +118 -0
- data/spec/github/pagination/iterator/sha_spec.rb +67 -0
- data/spec/github/pull_requests/comments/create_spec.rb +1 -1
- data/spec/github/pull_requests/comments/edit_spec.rb +1 -1
- data/spec/github/pull_requests/comments/get_spec.rb +1 -1
- data/spec/github/pull_requests/create_spec.rb +1 -1
- data/spec/github/pull_requests/get_spec.rb +1 -1
- data/spec/github/pull_requests/update_spec.rb +1 -1
- data/spec/github/repos/branch_spec.rb +1 -1
- data/spec/github/repos/comments/create_spec.rb +1 -1
- data/spec/github/repos/comments/get_spec.rb +1 -1
- data/spec/github/repos/comments/update_spec.rb +1 -1
- data/spec/github/repos/commits/get_spec.rb +1 -1
- data/spec/github/repos/create_spec.rb +1 -1
- data/spec/github/repos/downloads/create_spec.rb +1 -1
- data/spec/github/repos/downloads/get_spec.rb +1 -1
- data/spec/github/repos/edit_spec.rb +1 -1
- data/spec/github/repos/forks/create_spec.rb +1 -1
- data/spec/github/repos/get_spec.rb +1 -1
- data/spec/github/repos/hooks/create_spec.rb +1 -1
- data/spec/github/repos/hooks/edit_spec.rb +1 -1
- data/spec/github/repos/hooks/get_spec.rb +1 -1
- data/spec/github/repos/languages_spec.rb +1 -1
- data/spec/github/repos/merging/merge_spec.rb +1 -1
- data/spec/github/repos/statuses/create_spec.rb +1 -1
- data/spec/github/repos/tags_spec.rb +1 -1
- data/spec/github/repos/teams_spec.rb +1 -1
- data/spec/github/request/endpoint_spec.rb +24 -0
- data/spec/github/request/request_spec.rb +38 -0
- data/spec/github/{result_spec.rb → response_wrapper_spec.rb} +14 -13
- data/spec/github/users/emails/list_spec.rb +1 -1
- data/spec/github/users/get_spec.rb +2 -7
- data/spec/github/users/keys/create_spec.rb +1 -1
- data/spec/github/users/keys/get_spec.rb +1 -1
- data/spec/github/users/keys/update_spec.rb +1 -1
- data/spec/github/users/update_spec.rb +1 -1
- data/spec/github_spec.rb +1 -6
- data/spec/{github/activity → integration}/activity_spec.rb +0 -0
- data/spec/{github/gists → integration}/gists_spec.rb +2 -0
- data/spec/{github/git_data → integration}/git_data_spec.rb +0 -0
- data/spec/{github/issues → integration}/issues_spec.rb +2 -0
- data/spec/integration/options_spec.rb +103 -23
- data/spec/{github/orgs → integration}/orgs_spec.rb +0 -0
- data/spec/{github/pull_requests → integration}/pull_requests_spec.rb +0 -0
- data/spec/{github → integration}/repos_spec.rb +2 -0
- data/spec/{github/users → integration}/users_spec.rb +0 -0
- data/spec/shared/array_of_resources_behaviour.rb +1 -1
- metadata +55 -46
- data/lib/github_api/page_uri_processor.rb +0 -25
- data/lib/github_api/response/helpers.rb +0 -21
- data/spec/github/page_iterator_spec.rb +0 -260
- data/spec/github/response/helpers_spec.rb +0 -16
data/README.md
CHANGED
|
@@ -18,12 +18,13 @@ Supports all the API methods(nearly 200). It's build in a modular way, that is,
|
|
|
18
18
|
* Modular design allows for working with parts of API.
|
|
19
19
|
* Fully customizable including advanced middleware stack construction.
|
|
20
20
|
* Its comprehensive, you can request all GitHub API resources.
|
|
21
|
-
* Requests pagination.
|
|
22
|
-
* Easy error handling.
|
|
21
|
+
* Requests pagination with convenient DSL.
|
|
22
|
+
* Easy error handling split for client and server type errors.
|
|
23
|
+
* Supports multithreaded environment.
|
|
23
24
|
* Custom mime types specification (Status: TODO)
|
|
24
25
|
* Flexible arguments parsing (Status: In progress).
|
|
25
26
|
* Request results caching (Status: TODO)
|
|
26
|
-
* Fully tested with test coverage above 90% with over 1,
|
|
27
|
+
* Fully tested with test coverage above 90% with over 1,400 specs and 700 features.
|
|
27
28
|
|
|
28
29
|
## Installation
|
|
29
30
|
|
|
@@ -59,7 +60,7 @@ At this stage you can also supply various configuration parameters, such as `:us
|
|
|
59
60
|
github = Github.new oauth_token: 'token'
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
Alternatively, you can configure the Github settings by passing a block, for instance, with custom
|
|
63
|
+
Alternatively, you can configure the Github settings by passing a block, for instance, with custom enterprise endpoint like
|
|
63
64
|
|
|
64
65
|
```ruby
|
|
65
66
|
github = Github.new do |config|
|
|
@@ -254,7 +255,7 @@ To list the scopes that the particular Github API action checks for do:
|
|
|
254
255
|
```ruby
|
|
255
256
|
repos = Github::Repos.new
|
|
256
257
|
res = repos.list :user => 'peter-murach'
|
|
257
|
-
res.accepted_oauth_scopes # => ['delete_repo', 'repo', 'public_repo', 'repo:status']
|
|
258
|
+
res.header.accepted_oauth_scopes # => ['delete_repo', 'repo', 'public_repo', 'repo:status']
|
|
258
259
|
```
|
|
259
260
|
|
|
260
261
|
To understand what each scope means refer to [documentation](http://developer.github.com/v3/oauth/#scopes)
|
|
@@ -278,6 +279,9 @@ If your client fails to find CA certs you can pass other SSL options to specify
|
|
|
278
279
|
}
|
|
279
280
|
```
|
|
280
281
|
|
|
282
|
+
For instance, download CA root certificates from Mozilla [cacert](http://curl.haxx.se/ca/cacert.pem) and point ca_file at your certificate bundle location.
|
|
283
|
+
This will allow the client to verify the github.com ssl certificate as authentic.
|
|
284
|
+
|
|
281
285
|
## MIME Types
|
|
282
286
|
|
|
283
287
|
Issues, PullRequests and few other API leverage custom mime types which are <tt>:json</tt>, <tt>:blob</tt>, <tt>:raw</tt>, <tt>:text</tt>, <tt>:html</tt>, <tt>:full</tt>. By default <tt>:raw</tt> is used.
|
|
@@ -354,11 +358,12 @@ end
|
|
|
354
358
|
One can also navigate straight to specific page by:
|
|
355
359
|
|
|
356
360
|
```ruby
|
|
357
|
-
res.
|
|
358
|
-
res.
|
|
359
|
-
res.
|
|
360
|
-
res.next_page
|
|
361
|
-
res.
|
|
361
|
+
res.count_pages # Number of pages
|
|
362
|
+
res.page 5 # Requests given page if it exists, nil otherwise
|
|
363
|
+
res.first_page # Get first page
|
|
364
|
+
res.next_page # Get next page
|
|
365
|
+
res.prev_page # Get previous page
|
|
366
|
+
res.last_page # Get last page
|
|
362
367
|
```
|
|
363
368
|
|
|
364
369
|
## Error Handling
|
|
@@ -385,10 +390,12 @@ Each response comes packaged with methods allowing for inspection of HTTP start
|
|
|
385
390
|
|
|
386
391
|
```ruby
|
|
387
392
|
res = Github::Repos.new.branches 'peter-murach', 'github'
|
|
388
|
-
res.ratelimit_limit # "5000"
|
|
389
|
-
res.ratelimit_remainig # "4999"
|
|
390
|
-
res.status # "200"
|
|
391
|
-
res.content_type # "application/json; charset=utf-8"
|
|
393
|
+
res.headers.ratelimit_limit # "5000"
|
|
394
|
+
res.headers.ratelimit_remainig # "4999"
|
|
395
|
+
res.headers.status # "200"
|
|
396
|
+
res.headers.content_type # "application/json; charset=utf-8"
|
|
397
|
+
res.headers.etag # "\"2c5dfc54b3fe498779ef3a9ada9a0af9\""
|
|
398
|
+
res.headers.cache_control # "public, max-age=60, s-maxage=60"
|
|
392
399
|
```
|
|
393
400
|
|
|
394
401
|
## Examples
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Feature: Notifications API
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I have "Github::Activity::Notifications" instance
|
|
5
|
+
|
|
6
|
+
Scenario: List
|
|
7
|
+
|
|
8
|
+
Given I want to list resources
|
|
9
|
+
And I pass the following request options:
|
|
10
|
+
| user | repo |
|
|
11
|
+
| wycats | handlebars.js |
|
|
12
|
+
When I make request within a cassette named "activity/notifications/list_user"
|
|
13
|
+
Then the response status should be 200
|
|
14
|
+
And the response type should be JSON
|
|
15
|
+
And the response should be empty
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
http_interactions:
|
|
3
|
+
- request:
|
|
4
|
+
method: get
|
|
5
|
+
uri: https://<BASIC_AUTH>@api.github.com/repos/wycats/handlebars.js/notifications?access_token=<TOKEN>
|
|
6
|
+
body:
|
|
7
|
+
encoding: US-ASCII
|
|
8
|
+
string: ''
|
|
9
|
+
headers:
|
|
10
|
+
Accept:
|
|
11
|
+
- application/vnd.github.v3.full+json,application/vnd.github.beta.full+json;q=0.7,application/vnd.github+json;q=0.5,application/json;q=0.1
|
|
12
|
+
Accept-Charset:
|
|
13
|
+
- utf-8
|
|
14
|
+
User-Agent:
|
|
15
|
+
- Github Ruby Gem 0.8.11
|
|
16
|
+
Content-Type:
|
|
17
|
+
- application/json
|
|
18
|
+
Accept-Encoding:
|
|
19
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
20
|
+
response:
|
|
21
|
+
status:
|
|
22
|
+
code: 200
|
|
23
|
+
message: OK
|
|
24
|
+
headers:
|
|
25
|
+
Server:
|
|
26
|
+
- GitHub.com
|
|
27
|
+
Date:
|
|
28
|
+
- Mon, 18 Feb 2013 22:03:48 GMT
|
|
29
|
+
Content-Type:
|
|
30
|
+
- application/json; charset=utf-8
|
|
31
|
+
Connection:
|
|
32
|
+
- keep-alive
|
|
33
|
+
Status:
|
|
34
|
+
- 200 OK
|
|
35
|
+
X-Ratelimit-Limit:
|
|
36
|
+
- '5000'
|
|
37
|
+
X-Ratelimit-Remaining:
|
|
38
|
+
- '4999'
|
|
39
|
+
X-Github-Media-Type:
|
|
40
|
+
- github.v3; param=full; format=json
|
|
41
|
+
X-Content-Type-Options:
|
|
42
|
+
- nosniff
|
|
43
|
+
Content-Length:
|
|
44
|
+
- '2'
|
|
45
|
+
Etag:
|
|
46
|
+
- ! '"d751713988987e9331980363e24189ce"'
|
|
47
|
+
Cache-Control:
|
|
48
|
+
- max-age=0, private, must-revalidate
|
|
49
|
+
body:
|
|
50
|
+
encoding: US-ASCII
|
|
51
|
+
string: ! '[]'
|
|
52
|
+
http_version: !!null
|
|
53
|
+
recorded_at: Mon, 18 Feb 2013 22:03:48 GMT
|
|
54
|
+
recorded_with: VCR 2.4.0
|
|
@@ -30,27 +30,26 @@ end
|
|
|
30
30
|
Then /^the response should be (.*)$/ do |expected_response|
|
|
31
31
|
expected_response = case expected_response
|
|
32
32
|
when /false/
|
|
33
|
-
|
|
33
|
+
@response.should be_false
|
|
34
34
|
when /true/
|
|
35
|
-
|
|
35
|
+
@response.should be_true
|
|
36
36
|
when /\d+/
|
|
37
|
-
expected_response.to_i
|
|
37
|
+
@response.should eql expected_response.to_i
|
|
38
38
|
when /empty/
|
|
39
|
-
|
|
39
|
+
@response.should be_empty
|
|
40
40
|
else
|
|
41
|
-
expected_response
|
|
41
|
+
@response.should eql expected_response
|
|
42
42
|
end
|
|
43
|
-
@response.should eql expected_response
|
|
44
43
|
end
|
|
45
44
|
|
|
46
45
|
Then /^the response type should be (.*)$/ do |type|
|
|
47
46
|
case type.downcase
|
|
48
47
|
when 'json'
|
|
49
|
-
@response.content_type.should =~ /application\/json/
|
|
48
|
+
@response.headers.content_type.should =~ /application\/json/
|
|
50
49
|
when 'html'
|
|
51
|
-
@response.content_type.should =~ /text\/html/
|
|
50
|
+
@response.headers.content_type.should =~ /text\/html/
|
|
52
51
|
when 'raw'
|
|
53
|
-
@response.content_type.should =~ /raw/
|
|
52
|
+
@response.headers.content_type.should =~ /raw/
|
|
54
53
|
end
|
|
55
54
|
end
|
|
56
55
|
|
data/lib/github_api.rb
CHANGED
|
@@ -13,14 +13,11 @@ module Github
|
|
|
13
13
|
|
|
14
14
|
class << self
|
|
15
15
|
|
|
16
|
-
# Handle for the client instance
|
|
17
|
-
attr_accessor :api_client
|
|
18
|
-
|
|
19
16
|
# Alias for Github::Client.new
|
|
20
17
|
#
|
|
21
18
|
# @return [Github::Client]
|
|
22
19
|
def new(options = {}, &block)
|
|
23
|
-
|
|
20
|
+
Github::Client.new(options, &block)
|
|
24
21
|
end
|
|
25
22
|
|
|
26
23
|
# Delegate to Github::Client
|
|
@@ -66,6 +63,7 @@ module Github
|
|
|
66
63
|
:Repos => 'repos',
|
|
67
64
|
:Request => 'request',
|
|
68
65
|
:Response => 'response',
|
|
66
|
+
:ResponseWrapper => 'response_wrapper',
|
|
69
67
|
:Result => 'result',
|
|
70
68
|
:Error => 'error',
|
|
71
69
|
:Issues => 'issues',
|
|
@@ -85,6 +83,7 @@ module Github
|
|
|
85
83
|
:MimeType => 'mime_type',
|
|
86
84
|
:Authorization => 'authorization',
|
|
87
85
|
:Authorizations => 'authorizations',
|
|
86
|
+
:Pagination => 'pagination',
|
|
88
87
|
:PageLinks => 'page_links',
|
|
89
88
|
:PageIterator => 'page_iterator',
|
|
90
89
|
:PagedRequest => 'paged_request',
|
data/lib/github_api/activity.rb
CHANGED
|
@@ -10,29 +10,24 @@ module Github
|
|
|
10
10
|
:Starring => 'starring',
|
|
11
11
|
:Watching => 'watching'
|
|
12
12
|
|
|
13
|
-
# Create new Activity API
|
|
14
|
-
def initialize(options = {})
|
|
15
|
-
super(options)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
13
|
# Access to Activity::Events API
|
|
19
|
-
def events(options
|
|
20
|
-
@events ||= ApiFactory.new
|
|
14
|
+
def events(options={}, &block)
|
|
15
|
+
@events ||= ApiFactory.new('Activity::Events', current_options.merge(options), &block)
|
|
21
16
|
end
|
|
22
17
|
|
|
23
18
|
# Access to Activity::Notifications API
|
|
24
|
-
def notifications
|
|
25
|
-
@notifications ||= ApiFactory.new
|
|
19
|
+
def notifications(options={}, &block)
|
|
20
|
+
@notifications ||= ApiFactory.new('Activity::Notifications', current_options.merge(options), &block)
|
|
26
21
|
end
|
|
27
22
|
|
|
28
23
|
# Access to Activity::Starring API
|
|
29
|
-
def starring
|
|
30
|
-
@starring ||= ApiFactory.new
|
|
24
|
+
def starring(options={}, &block)
|
|
25
|
+
@starring ||= ApiFactory.new('Activity::Starring', current_options.merge(options), &block)
|
|
31
26
|
end
|
|
32
27
|
|
|
33
28
|
# Access to Activity::Watching API
|
|
34
|
-
def watching
|
|
35
|
-
@watching ||= ApiFactory.new
|
|
29
|
+
def watching(options={}, &block)
|
|
30
|
+
@watching ||= ApiFactory.new('Activity::Watching', current_options.merge(options), &block)
|
|
36
31
|
end
|
|
37
32
|
|
|
38
33
|
end # Activity
|
|
@@ -3,11 +3,6 @@
|
|
|
3
3
|
module Github
|
|
4
4
|
class Activity::Notifications < API
|
|
5
5
|
|
|
6
|
-
# Creates new Activity::Notifications API
|
|
7
|
-
def initialize(options = {})
|
|
8
|
-
super(options)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
6
|
# List your notifications
|
|
12
7
|
#
|
|
13
8
|
# List all notifications for the current user, grouped by repository.
|
data/lib/github_api/api.rb
CHANGED
|
@@ -21,45 +21,55 @@ module Github
|
|
|
21
21
|
include Connection
|
|
22
22
|
include Request
|
|
23
23
|
include RateLimit
|
|
24
|
+
# include Configuration
|
|
24
25
|
|
|
25
26
|
# TODO consider these optional in a stack
|
|
26
27
|
include Validations
|
|
27
28
|
include ParameterFilter
|
|
28
29
|
include Normalizer
|
|
29
30
|
|
|
30
|
-
attr_reader *Configuration
|
|
31
|
+
attr_reader *Configuration.keys
|
|
31
32
|
|
|
32
33
|
attr_accessor *VALID_API_KEYS
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
attr_accessor :current_options
|
|
36
|
+
|
|
37
|
+
# Callback to update current configuration options
|
|
38
|
+
class_eval do
|
|
39
|
+
Configuration.keys.each do |key|
|
|
40
|
+
define_method "#{key}=" do |arg|
|
|
41
|
+
self.instance_variable_set("@#{key}", arg)
|
|
42
|
+
self.current_options.merge!({:"#{key}" => arg})
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
43
46
|
|
|
44
|
-
#
|
|
47
|
+
# Create new API
|
|
48
|
+
#
|
|
45
49
|
def initialize(options={}, &block)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
setup(options)
|
|
51
|
+
client(options) if client_id? && client_secret?
|
|
52
|
+
yield_or_eval(&block) if block_given?
|
|
53
|
+
end
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
def yield_or_eval(&block)
|
|
56
|
+
return unless block
|
|
57
|
+
block.arity > 0 ? yield(self) : self.instance_eval(&block)
|
|
52
58
|
end
|
|
53
59
|
|
|
60
|
+
# Configure options and process basic authorization
|
|
61
|
+
#
|
|
54
62
|
def setup(options={})
|
|
55
63
|
options = Github.options.merge(options)
|
|
56
|
-
|
|
64
|
+
self.current_options = options
|
|
65
|
+
Configuration.keys.each do |key|
|
|
57
66
|
send("#{key}=", options[key])
|
|
58
67
|
end
|
|
59
68
|
process_basic_auth(options[:basic_auth])
|
|
60
69
|
end
|
|
61
70
|
|
|
62
71
|
# Extract login and password from basic_auth parameter
|
|
72
|
+
#
|
|
63
73
|
def process_basic_auth(auth)
|
|
64
74
|
case auth
|
|
65
75
|
when String
|
|
@@ -70,11 +80,6 @@ module Github
|
|
|
70
80
|
end
|
|
71
81
|
end
|
|
72
82
|
|
|
73
|
-
# Assigns current api class
|
|
74
|
-
def set_api_client
|
|
75
|
-
Github.api_client = self
|
|
76
|
-
end
|
|
77
|
-
|
|
78
83
|
# Responds to attribute query or attribute clear
|
|
79
84
|
def method_missing(method, *args, &block) # :nodoc:
|
|
80
85
|
case method.to_s
|
|
@@ -6,25 +6,26 @@ module Github
|
|
|
6
6
|
class ApiFactory
|
|
7
7
|
|
|
8
8
|
# Instantiates a new github api object
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
#
|
|
10
|
+
def self.new(klass, options={}, &block)
|
|
11
|
+
return create_instance(klass, options, &block) if klass
|
|
12
|
+
raise ArgumentError, 'must provide API class to be instantiated'
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
# Passes configuration options to instantiated class
|
|
15
|
-
|
|
16
|
+
#
|
|
17
|
+
def self.create_instance(klass, options, &block)
|
|
16
18
|
options.symbolize_keys!
|
|
17
|
-
|
|
18
|
-
Github.api_client = instance
|
|
19
|
-
instance
|
|
19
|
+
convert_to_constant(klass.to_s).new options, &block
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# Convert name to constant
|
|
23
|
+
#
|
|
22
24
|
def self.convert_to_constant(classes)
|
|
23
|
-
constant
|
|
24
|
-
|
|
25
|
-
constant = constant.const_get klass
|
|
25
|
+
classes.split('::').inject(Github) do |constant, klass|
|
|
26
|
+
constant.const_get klass
|
|
26
27
|
end
|
|
27
|
-
return constant
|
|
28
28
|
end
|
|
29
|
-
|
|
29
|
+
|
|
30
|
+
end # ApiFactory
|
|
30
31
|
end # Github
|
data/lib/github_api/client.rb
CHANGED
|
@@ -6,82 +6,82 @@ module Github
|
|
|
6
6
|
# Serving up the ‘social’ in Social Coding™, the Activity APIs
|
|
7
7
|
# provide access to notifications, subscriptions, and timelines.
|
|
8
8
|
#
|
|
9
|
-
def activity(options
|
|
10
|
-
@activity ||= ApiFactory.new
|
|
9
|
+
def activity(options={}, &block)
|
|
10
|
+
@activity ||= ApiFactory.new('Activity', current_options.merge(options), &block)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def emojis(options
|
|
14
|
-
@emojis ||= ApiFactory.new
|
|
13
|
+
def emojis(options={}, &block)
|
|
14
|
+
@emojis ||= ApiFactory.new('Emojis', current_options.merge(options), &block)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def gists(options
|
|
18
|
-
@gists ||= ApiFactory.new
|
|
17
|
+
def gists(options={}, &block)
|
|
18
|
+
@gists ||= ApiFactory.new('Gists', current_options.merge(options), &block)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def gitignore(options
|
|
22
|
-
@gitignore ||= ApiFactory.new
|
|
21
|
+
def gitignore(options={}, &block)
|
|
22
|
+
@gitignore ||= ApiFactory.new('Gitignore', current_options.merge(options), &block)
|
|
23
23
|
end
|
|
24
24
|
alias :git_ignore :gitignore
|
|
25
25
|
|
|
26
26
|
# The Git Database API gives you access to read and write raw Git objects
|
|
27
27
|
# to your Git database on GitHub and to list and update your references
|
|
28
28
|
# (branch heads and tags).
|
|
29
|
-
def git_data(options
|
|
30
|
-
@git_data ||= ApiFactory.new
|
|
29
|
+
def git_data(options={}, &block)
|
|
30
|
+
@git_data ||= ApiFactory.new('GitData', current_options.merge(options), &block)
|
|
31
31
|
end
|
|
32
32
|
alias :git :git_data
|
|
33
33
|
|
|
34
|
-
def issues(options
|
|
35
|
-
@issues ||= ApiFactory.new
|
|
34
|
+
def issues(options={}, &block)
|
|
35
|
+
@issues ||= ApiFactory.new('Issues', current_options.merge(options), &block)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def markdown(options
|
|
39
|
-
@markdown ||= ApiFactory.new
|
|
38
|
+
def markdown(options={}, &block)
|
|
39
|
+
@markdown ||= ApiFactory.new('Markdown', current_options.merge(options), &block)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
def meta(options
|
|
43
|
-
@meta ||= ApiFactory.
|
|
42
|
+
def meta(options={}, &block)
|
|
43
|
+
@meta ||= ApiFactory.new('Meta', current_options.merge(options), &block)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
# An API for users to manage their own tokens. You can only access your own
|
|
47
47
|
# tokens, and only through Basic Authentication.
|
|
48
|
-
def oauth(options
|
|
49
|
-
@oauth ||= ApiFactory.new
|
|
48
|
+
def oauth(options={}, &block)
|
|
49
|
+
@oauth ||= ApiFactory.new('Authorizations', current_options.merge(options), &block)
|
|
50
50
|
end
|
|
51
51
|
alias :authorizations :oauth
|
|
52
52
|
|
|
53
|
-
def orgs(options
|
|
54
|
-
@orgs ||= ApiFactory.new
|
|
53
|
+
def orgs(options={}, &block)
|
|
54
|
+
@orgs ||= ApiFactory.new('Orgs', current_options.merge(options), &block)
|
|
55
55
|
end
|
|
56
56
|
alias :organizations :orgs
|
|
57
57
|
|
|
58
|
-
def pull_requests(options
|
|
59
|
-
@pull_requests ||= ApiFactory.new
|
|
58
|
+
def pull_requests(options={}, &block)
|
|
59
|
+
@pull_requests ||= ApiFactory.new('PullRequests', current_options.merge(options), &block)
|
|
60
60
|
end
|
|
61
61
|
alias :pulls :pull_requests
|
|
62
62
|
|
|
63
|
-
def repos(options
|
|
64
|
-
@repos ||= ApiFactory.new
|
|
63
|
+
def repos(options={}, &block)
|
|
64
|
+
@repos ||= ApiFactory.new('Repos', current_options.merge(options), &block)
|
|
65
65
|
end
|
|
66
66
|
alias :repositories :repos
|
|
67
67
|
|
|
68
|
-
def octocat(options
|
|
69
|
-
@octocat ||= ApiFactory.new
|
|
68
|
+
def octocat(options={}, &block)
|
|
69
|
+
@octocat ||= ApiFactory.new('Say', current_options.merge(options), &block)
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
def scopes(options
|
|
73
|
-
@scopes ||= ApiFactory.new
|
|
72
|
+
def scopes(options={}, &block)
|
|
73
|
+
@scopes ||= ApiFactory.new('Scopes', current_options.merge(options), &block)
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
def search(options
|
|
77
|
-
@search ||= ApiFactory.new
|
|
76
|
+
def search(options={}, &block)
|
|
77
|
+
@search ||= ApiFactory.new('Search', current_options.merge(options), &block)
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
-
# Many of the resources on the users API provide a shortcut for getting
|
|
80
|
+
# Many of the resources on the users API provide a shortcut for getting
|
|
81
81
|
# information about the currently authenticated user.
|
|
82
82
|
#
|
|
83
|
-
def users(options
|
|
84
|
-
@users ||= ApiFactory.new
|
|
83
|
+
def users(options={}, &block)
|
|
84
|
+
@users ||= ApiFactory.new('Users', current_options.merge(options), &block)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
end # Client
|