github_api 0.4.11 → 0.5.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +76 -72
- data/features/cassettes/gists/starred.yml +48 -0
- data/features/cassettes/pagination/repos/commits/list.yml +193 -0
- data/features/cassettes/pagination/repos/commits/next.yml +183 -0
- data/features/cassettes/pagination/repos/diff/next.yml +45 -0
- data/features/cassettes/pagination/repos/list.yml +176 -0
- data/features/cassettes/pagination/repos/list/next.yml +222 -0
- data/features/cassettes/pagination/repos/per_page/each_page.yml +45 -0
- data/features/cassettes/repos/list.yml +92 -0
- data/features/error_codes.feature +1 -1
- data/features/gists.feature +12 -3
- data/features/gists/comments.feature +3 -3
- data/features/github_api.feature +13 -2
- data/features/pagination.feature +40 -39
- data/features/repos.feature +2 -2
- data/features/step_definitions/common_steps.rb +12 -0
- data/features/step_definitions/github_api_steps.rb +12 -1
- data/lib/github_api.rb +1 -1
- data/lib/github_api/api.rb +4 -2
- data/lib/github_api/api_factory.rb +11 -5
- data/lib/github_api/authorizations.rb +23 -32
- data/lib/github_api/client.rb +1 -0
- data/lib/github_api/events.rb +38 -38
- data/lib/github_api/filter.rb +1 -1
- data/lib/github_api/gists.rb +47 -42
- data/lib/github_api/gists/comments.rb +77 -84
- data/lib/github_api/git_data.rb +25 -6
- data/lib/github_api/git_data/blobs.rb +48 -45
- data/lib/github_api/git_data/commits.rb +76 -73
- data/lib/github_api/git_data/references.rb +137 -118
- data/lib/github_api/git_data/tags.rb +74 -70
- data/lib/github_api/git_data/trees.rb +88 -85
- data/lib/github_api/issues.rb +43 -31
- data/lib/github_api/issues/comments.rb +116 -119
- data/lib/github_api/issues/events.rb +20 -19
- data/lib/github_api/issues/labels.rb +200 -197
- data/lib/github_api/issues/milestones.rb +137 -134
- data/lib/github_api/orgs.rb +27 -23
- data/lib/github_api/orgs/members.rb +105 -108
- data/lib/github_api/orgs/teams.rb +236 -237
- data/lib/github_api/paged_request.rb +1 -1
- data/lib/github_api/pull_requests.rb +40 -42
- data/lib/github_api/pull_requests/comments.rb +140 -143
- data/lib/github_api/repos.rb +101 -67
- data/lib/github_api/repos/collaborators.rb +64 -68
- data/lib/github_api/repos/commits.rb +50 -39
- data/lib/github_api/repos/downloads.rb +107 -110
- data/lib/github_api/repos/forks.rb +38 -39
- data/lib/github_api/repos/hooks.rb +161 -167
- data/lib/github_api/repos/keys.rb +86 -86
- data/lib/github_api/repos/pub_sub_hubbub.rb +99 -87
- data/lib/github_api/repos/watching.rb +80 -82
- data/lib/github_api/request.rb +5 -9
- data/lib/github_api/users.rb +26 -16
- data/lib/github_api/users/emails.rb +47 -47
- data/lib/github_api/users/followers.rb +85 -86
- data/lib/github_api/users/keys.rb +73 -75
- data/lib/github_api/validations.rb +25 -0
- data/lib/github_api/validations/format.rb +23 -0
- data/lib/github_api/validations/presence.rb +25 -0
- data/lib/github_api/validations/required.rb +21 -0
- data/lib/github_api/validations/token.rb +41 -0
- data/lib/github_api/version.rb +3 -3
- data/spec/fixtures/repos/commit_comparison.json +112 -0
- data/spec/github/api_factory_spec.rb +17 -1
- data/spec/github/authorizations_spec.rb +36 -34
- data/spec/github/gists/comments_spec.rb +39 -45
- data/spec/github/gists_spec.rb +50 -53
- data/spec/github/git_data/blobs_spec.rb +27 -20
- data/spec/github/git_data/commits_spec.rb +20 -19
- data/spec/github/git_data/references_spec.rb +83 -46
- data/spec/github/git_data/tags_spec.rb +16 -15
- data/spec/github/git_data/trees_spec.rb +20 -19
- data/spec/github/git_data_spec.rb +10 -1
- data/spec/github/issues/comments_spec.rb +78 -68
- data/spec/github/issues/events_spec.rb +42 -34
- data/spec/github/issues/labels_spec.rb +89 -101
- data/spec/github/issues/milestones_spec.rb +76 -54
- data/spec/github/issues_spec.rb +53 -57
- data/spec/github/orgs/members_spec.rb +64 -49
- data/spec/github/orgs/teams_spec.rb +112 -101
- data/spec/github/orgs_spec.rb +41 -31
- data/spec/github/paged_request_spec.rb +6 -5
- data/spec/github/pull_requests/comments_spec.rb +39 -44
- data/spec/github/pull_requests_spec.rb +32 -48
- data/spec/github/repos/collaborators_spec.rb +40 -29
- data/spec/github/repos/commits_spec.rb +108 -64
- data/spec/github/repos/downloads_spec.rb +46 -45
- data/spec/github/repos/forks_spec.rb +23 -24
- data/spec/github/repos/hooks_spec.rb +69 -71
- data/spec/github/repos/keys_spec.rb +39 -34
- data/spec/github/repos/pub_sub_hubbub_spec.rb +4 -4
- data/spec/github/repos/watching_spec.rb +31 -33
- data/spec/github/repos_spec.rb +74 -83
- data/spec/github/request_spec.rb +31 -2
- data/spec/github/users/emails_spec.rb +19 -17
- data/spec/github/users/followers_spec.rb +30 -28
- data/spec/github/users/keys_spec.rb +37 -33
- data/spec/github/users_spec.rb +124 -125
- data/spec/github/validations/format_spec.rb +42 -0
- data/spec/github/validations/presence_spec.rb +18 -0
- data/spec/github/validations/required_spec.rb +28 -0
- data/spec/github/validations/token_spec.rb +19 -0
- data/spec/github/validations_spec.rb +23 -0
- metadata +33 -10
- data/features/cassettes/pagination/repos.yml +0 -177
- data/features/cassettes/pagination/repos/next.yml +0 -177
- data/lib/github_api/validation.rb +0 -53
- data/spec/github/validation_spec.rb +0 -62
@@ -410,4 +410,49 @@ http_interactions:
|
|
410
410
|
|
411
411
|
http_version:
|
412
412
|
recorded_at: Sat, 10 Mar 2012 23:14:13 GMT
|
413
|
+
- request:
|
414
|
+
method: get
|
415
|
+
uri: https://api.github.com/repos/https://api.github.com/users/wycats/repos/%7B%22page%22=%3E2,%20%22per_page%22=%3E30%7D
|
416
|
+
body:
|
417
|
+
encoding: US-ASCII
|
418
|
+
string: ""
|
419
|
+
headers:
|
420
|
+
Accept-Encoding:
|
421
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
422
|
+
Accept:
|
423
|
+
- "*/*"
|
424
|
+
User-Agent:
|
425
|
+
- Ruby
|
426
|
+
response:
|
427
|
+
status:
|
428
|
+
code: 404
|
429
|
+
message: Not Found
|
430
|
+
headers:
|
431
|
+
Server:
|
432
|
+
- nginx/1.0.13
|
433
|
+
Date:
|
434
|
+
- Mon, 09 Apr 2012 15:18:37 GMT
|
435
|
+
Content-Type:
|
436
|
+
- application/json; charset=utf-8
|
437
|
+
Transfer-Encoding:
|
438
|
+
- chunked
|
439
|
+
Connection:
|
440
|
+
- keep-alive
|
441
|
+
Status:
|
442
|
+
- 404 Not Found
|
443
|
+
X-Ratelimit-Limit:
|
444
|
+
- "5000"
|
445
|
+
Etag:
|
446
|
+
- "\"e66a7a6c91e2c26803f3f49feb7a883f\""
|
447
|
+
X-Ratelimit-Remaining:
|
448
|
+
- "4998"
|
449
|
+
Content-Encoding:
|
450
|
+
- gzip
|
451
|
+
body:
|
452
|
+
encoding: ASCII-8BIT
|
453
|
+
string: !binary |
|
454
|
+
H4sIAAAAAAAAA6tWyk0tLk5MT1WyUvLLL1Fwyy/NS1GqBQB8+Ys1FwAAAA==
|
455
|
+
|
456
|
+
http_version:
|
457
|
+
recorded_at: Mon, 09 Apr 2012 15:18:37 GMT
|
413
458
|
recorded_with: VCR 2.0.0
|
@@ -0,0 +1,92 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.github.com/users/peter-murach/repos
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ""
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx/1.0.13
|
23
|
+
Date:
|
24
|
+
- Mon, 09 Apr 2012 17:55:27 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Status:
|
32
|
+
- 200 OK
|
33
|
+
X-Ratelimit-Limit:
|
34
|
+
- "5000"
|
35
|
+
Etag:
|
36
|
+
- "\"8fdb914bd8bb00728968cb0942542ec8\""
|
37
|
+
X-Ratelimit-Remaining:
|
38
|
+
- "4998"
|
39
|
+
Content-Encoding:
|
40
|
+
- gzip
|
41
|
+
body:
|
42
|
+
encoding: ASCII-8BIT
|
43
|
+
string: !binary |
|
44
|
+
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
|
89
|
+
|
90
|
+
http_version:
|
91
|
+
recorded_at: Mon, 09 Apr 2012 17:55:27 GMT
|
92
|
+
recorded_with: VCR 2.0.0
|
@@ -6,7 +6,7 @@ Feature: Handles HTTP error codes
|
|
6
6
|
|
7
7
|
Scenario: A response of '401 - Unauthorised access'
|
8
8
|
Given I have "Github::Repos" instance
|
9
|
-
When I
|
9
|
+
When I want to create resource
|
10
10
|
And I pass the following request options:
|
11
11
|
| name |
|
12
12
|
| basic_auth |
|
data/features/gists.feature
CHANGED
@@ -7,7 +7,7 @@ Feature: Accessing Gists Main API
|
|
7
7
|
Given I have "Github::Gists" instance
|
8
8
|
|
9
9
|
Scenario: Lists all user's gists
|
10
|
-
When I
|
10
|
+
When I want to list resources with the following params:
|
11
11
|
| user |
|
12
12
|
| peter-murach |
|
13
13
|
And I make request within a cassette named "gists/gists/user_all"
|
@@ -15,7 +15,7 @@ Feature: Accessing Gists Main API
|
|
15
15
|
And the response type should be "JSON"
|
16
16
|
|
17
17
|
Scenario: Lists all public gists
|
18
|
-
When I
|
18
|
+
When I want to list resources with the following params:
|
19
19
|
| user |
|
20
20
|
| nil |
|
21
21
|
And I make request within a cassette named "gists/gists/public_all"
|
@@ -23,9 +23,18 @@ Feature: Accessing Gists Main API
|
|
23
23
|
And the response type should be "JSON"
|
24
24
|
|
25
25
|
Scenario: Gets a single gist
|
26
|
-
When I
|
26
|
+
When I want to get resource with the following params:
|
27
27
|
| gist_id |
|
28
28
|
| 1738161 |
|
29
29
|
And I make request within a cassette named "gists/gist"
|
30
30
|
Then the response should be "200"
|
31
31
|
And the response type should be "JSON"
|
32
|
+
|
33
|
+
Scenario: Check if gist is starred
|
34
|
+
When I want to starred? resource with the following params:
|
35
|
+
| gist_id |
|
36
|
+
| 1738161 |
|
37
|
+
And I make request within a cassette named "gists/starred"
|
38
|
+
Then the response should equal false
|
39
|
+
|
40
|
+
|
@@ -4,10 +4,10 @@ Feature: Accessing Gists Comments API
|
|
4
4
|
Should return the expected results depending on passed parameters
|
5
5
|
|
6
6
|
Background:
|
7
|
-
Given I have "Github::Gists" instance
|
7
|
+
Given I have "Github::Gists::Comments" instance
|
8
8
|
|
9
9
|
Scenario: Lists comments on a gist
|
10
|
-
When I
|
10
|
+
When I want to list resources with the following params:
|
11
11
|
| gist_id |
|
12
12
|
| 999390 |
|
13
13
|
And I make request within a cassette named "gists/comments/all"
|
@@ -16,7 +16,7 @@ Feature: Accessing Gists Comments API
|
|
16
16
|
And the response should have 18 items
|
17
17
|
|
18
18
|
Scenario: Gets a single gist's comment
|
19
|
-
When I
|
19
|
+
When I want to get resource with the following params:
|
20
20
|
| comment_id |
|
21
21
|
| 33469 |
|
22
22
|
And I make request within a cassette named "gists/comments/first"
|
data/features/github_api.feature
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
Feature: Github API components
|
2
2
|
|
3
|
-
In order to
|
4
|
-
A user
|
3
|
+
In order to navigate within Github API hierachy
|
4
|
+
A user
|
5
|
+
I want to be able to with a given Github API instance
|
5
6
|
|
6
7
|
Scenario: Accessing repositories API
|
7
8
|
Given I have github instance
|
@@ -13,6 +14,16 @@ Feature: Github API components
|
|
13
14
|
When I fetch "orgs"
|
14
15
|
Then I will have access to "Github::Orgs" API
|
15
16
|
|
17
|
+
Scenario: Accessing members API
|
18
|
+
Given I have "Github::Orgs" instance
|
19
|
+
When I call members
|
20
|
+
Then I will have access to "Github::Orgs::Members" API
|
21
|
+
|
22
|
+
Scenario: Accessing teams API
|
23
|
+
Given I have "Github::Orgs" instance
|
24
|
+
When I call teams
|
25
|
+
Then I will have access to "Github::Orgs::Teams" API
|
26
|
+
|
16
27
|
Scenario: Accessing gists API
|
17
28
|
Given I have github instance
|
18
29
|
When I fetch "gists"
|
data/features/pagination.feature
CHANGED
@@ -5,73 +5,74 @@ Feature: Githu API pagination
|
|
5
5
|
|
6
6
|
Scenario: Passing per_page param
|
7
7
|
Given I have "Github::Repos" instance
|
8
|
-
When I
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
When I want to list resources
|
9
|
+
And I pass the following request options:
|
10
|
+
| user | per_page |
|
11
|
+
| wycats | 45 |
|
12
|
+
And I make request within a cassette named "pagination/repos/list"
|
13
13
|
Then the response should be "200"
|
14
|
-
|
15
|
-
|
14
|
+
And the response type should be "JSON"
|
15
|
+
And the response should have 45 items
|
16
16
|
|
17
|
-
When I request "next" page within a cassette named "pagination/repos/next"
|
17
|
+
When I request "next" page within a cassette named "pagination/repos/list/next"
|
18
18
|
Then the response should be "200"
|
19
|
-
|
19
|
+
And the response should have 45 items
|
20
20
|
|
21
21
|
Scenario: Returned paginated resources are different
|
22
22
|
Given I have "Github::Repos" instance
|
23
|
-
When I
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
When I want to list resources
|
24
|
+
And I pass the following request options:
|
25
|
+
| user |
|
26
|
+
| wycats |
|
27
|
+
And I make request within a cassette named "pagination/repos/diff"
|
28
28
|
Then the response should be "200"
|
29
|
-
|
30
|
-
|
29
|
+
And the response type should be "JSON"
|
30
|
+
And the response should have 30 items
|
31
31
|
|
32
32
|
When I request "next" page within a cassette named "pagination/repos/diff/next"
|
33
33
|
Then the response should be "200"
|
34
|
-
|
35
|
-
|
34
|
+
And the response should have 30 items
|
35
|
+
And the response collection of resources is different for "name" attribute
|
36
36
|
|
37
37
|
Scenario: Calling 'commits' for Github::Repos with per_page param
|
38
|
-
Given I have "Github::Repos" instance
|
39
|
-
When I am looking for "
|
38
|
+
Given I have "Github::Repos::Commits" instance
|
39
|
+
When I am looking for "list" with the following params:
|
40
40
|
| user | repo |
|
41
41
|
| peter-murach | github |
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
And I pass the following request options:
|
43
|
+
| per_page |
|
44
|
+
| 45 |
|
45
|
+
And I make request within a cassette named "pagination/repos/commits/list"
|
46
46
|
Then the response should be "200"
|
47
|
-
|
48
|
-
|
47
|
+
And the response type should be "JSON"
|
48
|
+
And the response should have 45 items
|
49
49
|
|
50
50
|
When I request "next" page within a cassette named "pagination/repos/commits/next"
|
51
51
|
Then the response should be "200"
|
52
|
-
|
52
|
+
And the response should have 45 items
|
53
53
|
|
54
|
-
Scenario: Calling '
|
55
|
-
Given I have "Github::Repos" instance
|
56
|
-
When I am looking for "
|
54
|
+
Scenario: Calling 'list' for Github::Repos::Commits returns different collections
|
55
|
+
Given I have "Github::Repos::Commits" instance
|
56
|
+
When I am looking for "list" with the following params:
|
57
57
|
| user | repo |
|
58
58
|
| peter-murach | github |
|
59
|
-
|
59
|
+
And I make request within a cassette named "pagination/repos/commits/sha"
|
60
60
|
Then the response should be "200"
|
61
|
-
|
61
|
+
And the response should have 30 items
|
62
62
|
|
63
63
|
When I request "next" page within a cassette named "pagination/repos/commits/sha/next"
|
64
64
|
Then the response should be "200"
|
65
|
-
|
66
|
-
|
65
|
+
And the response should have 30 items
|
66
|
+
And the response collection of resources is different for "sha" attribute
|
67
67
|
|
68
68
|
Scenario: Requesting resources with per_page helper
|
69
69
|
Given I have "Github::Repos" instance
|
70
|
-
When I
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
When I want to list resources
|
71
|
+
And I pass the following request options:
|
72
|
+
| user |
|
73
|
+
| wycats |
|
74
|
+
And I make request within a cassette named "pagination/repos/per_page/first"
|
75
75
|
Then the response should be "200"
|
76
76
|
When I iterate through collection pages within a cassette named "pagination/repos/per_page/each_page"
|
77
77
|
Then this collection should include first page
|
78
|
+
|
data/features/repos.feature
CHANGED
@@ -23,10 +23,10 @@ Feature: Accessing Repos Main API
|
|
23
23
|
And the response type should be "JSON"
|
24
24
|
|
25
25
|
Scenario: Returning all repositories for the user
|
26
|
-
When I
|
26
|
+
When I want to list resources
|
27
27
|
And I pass the following request options:
|
28
28
|
| user |
|
29
29
|
| peter-murach |
|
30
|
-
And I make request within a cassette named "repos/
|
30
|
+
And I make request within a cassette named "repos/list"
|
31
31
|
Then the response should be "200"
|
32
32
|
And the response type should be "JSON"
|
@@ -10,6 +10,18 @@ Then /^the response should be "([^"]*)"$/ do |expected_response|
|
|
10
10
|
@response.status.should eql expected_response.to_i
|
11
11
|
end
|
12
12
|
|
13
|
+
Then /^the response should equal (.*)$/ do |expected_response|
|
14
|
+
expected = case expected_response
|
15
|
+
when /t/
|
16
|
+
true
|
17
|
+
when /f/
|
18
|
+
false
|
19
|
+
else
|
20
|
+
raise ArgumentError 'Expected boolean type!'
|
21
|
+
end
|
22
|
+
@response.should == expected
|
23
|
+
end
|
24
|
+
|
13
25
|
Then /^the response type should be "([^"]*)"$/ do |type|
|
14
26
|
@response.content_type.should =~ /application\/#{type.downcase}/
|
15
27
|
end
|
@@ -10,14 +10,25 @@ When /^I fetch "([^"]*)"$/ do |method|
|
|
10
10
|
@response = @github.send(method.to_sym)
|
11
11
|
end
|
12
12
|
|
13
|
+
When /^I call (.*)$/ do |api_part|
|
14
|
+
@response = @instance.send(api_part.to_sym)
|
15
|
+
end
|
16
|
+
|
13
17
|
When /^I will have access to "([^"]*)" API$/ do |api|
|
14
18
|
@response.class.to_s.should match api
|
15
19
|
end
|
16
20
|
|
17
|
-
When /^I
|
21
|
+
When /^I want to (.*) (?:resource|resources)$/ do |method|
|
18
22
|
@method = method
|
19
23
|
end
|
20
24
|
|
25
|
+
When /^I want to (.*) (?:resource|resources) with the following params:$/ do |method, table|
|
26
|
+
table.hashes.each do |attributes|
|
27
|
+
@method = method.to_sym
|
28
|
+
@attributes = attributes
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
21
32
|
When /^I pass the following request options:$/ do |table|
|
22
33
|
table.hashes.each do |options|
|
23
34
|
@options = options
|
data/lib/github_api.rb
CHANGED
data/lib/github_api/api.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'github_api/configuration'
|
4
4
|
require 'github_api/connection'
|
5
|
-
require 'github_api/
|
5
|
+
require 'github_api/validations'
|
6
6
|
require 'github_api/request'
|
7
7
|
require 'github_api/mime_type'
|
8
8
|
require 'github_api/core_ext/hash'
|
@@ -19,9 +19,11 @@ module Github
|
|
19
19
|
include MimeType
|
20
20
|
include Connection
|
21
21
|
include Request
|
22
|
-
|
22
|
+
# TODO Validation & Filter will be optional
|
23
|
+
include Validations
|
23
24
|
include Filter
|
24
25
|
|
26
|
+
|
25
27
|
attr_reader *Configuration::VALID_OPTIONS_KEYS
|
26
28
|
attr_accessor *VALID_API_KEYS
|
27
29
|
|