github_api 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +15 -1
- data/features/cassettes/pagination/repos.yml +174 -0
- data/features/cassettes/pagination/repos/commits.yml +181 -0
- data/features/cassettes/pagination/repos/commits/next.yml +175 -0
- data/features/cassettes/pagination/repos/commits/sha.yml +135 -0
- data/features/cassettes/pagination/repos/commits/sha/next.yml +136 -0
- data/features/cassettes/pagination/repos/diff.yml +169 -0
- data/features/cassettes/pagination/repos/diff/next.yml +132 -0
- data/features/cassettes/pagination/repos/next.yml +172 -0
- data/features/cassettes/repos/tags.yml +35 -0
- data/features/pagination.feature +62 -5
- data/features/repos.feature +6 -4
- data/features/step_definitions/common_steps.rb +8 -0
- data/features/step_definitions/github_api_steps.rb +19 -3
- data/lib/github_api/api.rb +2 -2
- data/lib/github_api/constants.rb +10 -0
- data/lib/github_api/page_iterator.rb +28 -9
- data/lib/github_api/page_uri_processor.rb +21 -0
- data/lib/github_api/paged_request.rb +1 -1
- data/lib/github_api/repos/watching.rb +8 -7
- data/lib/github_api/request.rb +2 -2
- data/lib/github_api/result.rb +13 -5
- data/lib/github_api/version.rb +1 -1
- data/spec/github/page_iterator_spec.rb +73 -5
- data/spec/github/repos/watching_spec.rb +2 -2
- data/spec/github/result_spec.rb +31 -7
- metadata +11 -2
@@ -0,0 +1,172 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: https://api.github.com:443/users/wycats/repos?page=2&per_page=45
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept-encoding:
|
9
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
10
|
+
response: !ruby/struct:VCR::Response
|
11
|
+
status: !ruby/struct:VCR::ResponseStatus
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
server:
|
16
|
+
- nginx/1.0.4
|
17
|
+
date:
|
18
|
+
- Sat, 21 Jan 2012 18:12:45 GMT
|
19
|
+
content-type:
|
20
|
+
- application/json; charset=utf-8
|
21
|
+
transfer-encoding:
|
22
|
+
- chunked
|
23
|
+
connection:
|
24
|
+
- keep-alive
|
25
|
+
status:
|
26
|
+
- 200 OK
|
27
|
+
x-ratelimit-limit:
|
28
|
+
- "5000"
|
29
|
+
etag:
|
30
|
+
- "\"df777443e7302dc24a36ad5383451366\""
|
31
|
+
link:
|
32
|
+
- <https://api.github.com/users/wycats/repos?page=3&per_page=45>; rel="next", <https://api.github.com/users/wycats/repos?page=3&per_page=45>; rel="last", <https://api.github.com/users/wycats/repos?page=1&per_page=45>; rel="first", <https://api.github.com/users/wycats/repos?page=1&per_page=45>; rel="prev"
|
33
|
+
x-ratelimit-remaining:
|
34
|
+
- "4997"
|
35
|
+
content-encoding:
|
36
|
+
- gzip
|
37
|
+
body: !binary |
|
38
|
+
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
|
171
|
+
|
172
|
+
http_version: "1.1"
|
@@ -165,3 +165,38 @@
|
|
165
165
|
xsti6tGM4iC6Z7zyFx5dGhXAugUOSdO1V1D1YpWpg1f45z9C6mMuZTkAAA==
|
166
166
|
|
167
167
|
http_version: "1.1"
|
168
|
+
- !ruby/struct:VCR::HTTPInteraction
|
169
|
+
request: !ruby/struct:VCR::Request
|
170
|
+
method: :get
|
171
|
+
uri: https://api.github.com:443/user/repos
|
172
|
+
body:
|
173
|
+
headers:
|
174
|
+
accept-encoding:
|
175
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
176
|
+
response: !ruby/struct:VCR::Response
|
177
|
+
status: !ruby/struct:VCR::ResponseStatus
|
178
|
+
code: 401
|
179
|
+
message: Unauthorized
|
180
|
+
headers:
|
181
|
+
server:
|
182
|
+
- nginx/1.0.4
|
183
|
+
date:
|
184
|
+
- Sat, 21 Jan 2012 17:44:53 GMT
|
185
|
+
content-type:
|
186
|
+
- application/json; charset=utf-8
|
187
|
+
connection:
|
188
|
+
- keep-alive
|
189
|
+
status:
|
190
|
+
- 401 Unauthorized
|
191
|
+
x-ratelimit-limit:
|
192
|
+
- "5000"
|
193
|
+
www-authenticate:
|
194
|
+
- Basic realm="GitHub"
|
195
|
+
etag:
|
196
|
+
- "\"99852aefab6a0988db8f62bf2fb96f49\""
|
197
|
+
x-ratelimit-remaining:
|
198
|
+
- "4999"
|
199
|
+
content-length:
|
200
|
+
- "37"
|
201
|
+
body: "{\"message\":\"Requires authentication\"}"
|
202
|
+
http_version: "1.1"
|
data/features/pagination.feature
CHANGED
@@ -1,10 +1,67 @@
|
|
1
1
|
Feature: Githu API pagination
|
2
2
|
In order to paginate number of received records
|
3
3
|
As a user
|
4
|
-
I want to be able to view them in
|
4
|
+
I want to be able to view them in chunks
|
5
5
|
|
6
|
-
Scenario:
|
6
|
+
Scenario: Passing per_page param
|
7
7
|
Given I have "Github::Repos" instance
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
When I am looking for "repos"
|
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"
|
13
|
+
Then the response should be "200"
|
14
|
+
And the response type should be "JSON"
|
15
|
+
And the response should have 45 items
|
16
|
+
|
17
|
+
When I request "next" page within a cassette named "pagination/repos/next"
|
18
|
+
Then the response should be "200"
|
19
|
+
And the response should have 45 items
|
20
|
+
|
21
|
+
Scenario: Returned paginated resources are different
|
22
|
+
Given I have "Github::Repos" instance
|
23
|
+
When I am looking for "repos"
|
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
|
+
Then the response should be "200"
|
29
|
+
And the response type should be "JSON"
|
30
|
+
And the response should have 30 items
|
31
|
+
|
32
|
+
When I request "next" page within a cassette named "pagination/repos/diff/next"
|
33
|
+
Then the response should be "200"
|
34
|
+
And the response should have 30 items
|
35
|
+
And the response collection of resources is different for "name" attribute
|
36
|
+
|
37
|
+
Scenario: Calling 'commits' for Github::Repos with per_page param
|
38
|
+
Given I have "Github::Repos" instance
|
39
|
+
When I am looking for "commits" with the following params:
|
40
|
+
| user | repo |
|
41
|
+
| peter-murach | github |
|
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"
|
46
|
+
Then the response should be "200"
|
47
|
+
And the response type should be "JSON"
|
48
|
+
And the response should have 45 items
|
49
|
+
|
50
|
+
When I request "next" page within a cassette named "pagination/repos/commits/next"
|
51
|
+
Then the response should be "200"
|
52
|
+
And the response should have 45 items
|
53
|
+
|
54
|
+
Scenario: Calling 'commits' for Github::Repos returns different collections
|
55
|
+
Given I have "Github::Repos" instance
|
56
|
+
When I am looking for "commits" with the following params:
|
57
|
+
| user | repo |
|
58
|
+
| peter-murach | github |
|
59
|
+
And I make request within a cassette named "pagination/repos/commits/sha"
|
60
|
+
Then the response should be "200"
|
61
|
+
And the response should have 30 items
|
62
|
+
|
63
|
+
When I request "next" page within a cassette named "pagination/repos/commits/sha/next"
|
64
|
+
Then the response should be "200"
|
65
|
+
And the response should have 30 items
|
66
|
+
And the response collection of resources is different for "sha" attribute
|
67
|
+
|
data/features/repos.feature
CHANGED
@@ -5,15 +5,16 @@ Feature: Accessing Repos Main API
|
|
5
5
|
|
6
6
|
Scenario: Returning all repository branches
|
7
7
|
Given I have "Github::Repos" instance
|
8
|
-
|
8
|
+
When I am looking for "branches" with the following params:
|
9
9
|
| user | repo |
|
10
10
|
| peter-murach | github |
|
11
11
|
And I make request within a cassette named "repos/branches"
|
12
12
|
Then the response should be "200"
|
13
|
+
And the response type should be "JSON"
|
13
14
|
|
14
15
|
Scenario: Returning all repository tags
|
15
16
|
Given I have "Github::Repos" instance
|
16
|
-
|
17
|
+
When I am looking for "tags" with the following params:
|
17
18
|
| user | repo |
|
18
19
|
| peter-murach | github |
|
19
20
|
And I make request within a cassette named "repos/tags"
|
@@ -21,8 +22,9 @@ Feature: Accessing Repos Main API
|
|
21
22
|
|
22
23
|
Scenario: Returning all repositories for the user
|
23
24
|
Given I have "Github::Repos" instance
|
24
|
-
|
25
|
+
When I am looking for "list_repos"
|
26
|
+
And I pass the following request options:
|
25
27
|
| user |
|
26
28
|
| peter-murach |
|
27
|
-
And I make request
|
29
|
+
And I make request within a cassette named "repos/tags"
|
28
30
|
Then the response should be "200"
|
@@ -9,3 +9,11 @@ end
|
|
9
9
|
Then /^the response should be "([^"]*)"$/ do |expected_response|
|
10
10
|
@response.status.should eql expected_response.to_i
|
11
11
|
end
|
12
|
+
|
13
|
+
Then /^the response type should be "([^"]*)"$/ do |type|
|
14
|
+
@response.content_type.should =~ /application\/#{type.downcase}/
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^the response should have (\d+) items$/ do |size|
|
18
|
+
@response.size.should eql size.to_i
|
19
|
+
end
|
@@ -18,6 +18,16 @@ When /^I will have access to "([^"]*)" API$/ do |api|
|
|
18
18
|
@response.class.to_s.should match api
|
19
19
|
end
|
20
20
|
|
21
|
+
When /^I am looking for "([^"]*)"$/ do |method|
|
22
|
+
@method = method
|
23
|
+
end
|
24
|
+
|
25
|
+
When /^I pass the following request options:$/ do |table|
|
26
|
+
table.hashes.each do |options|
|
27
|
+
@options = options
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
21
31
|
When /^I am looking for "([^"]*)" with the following params:$/ do |method, table|
|
22
32
|
table.hashes.each do |attributes|
|
23
33
|
@method = method.to_sym
|
@@ -26,9 +36,15 @@ When /^I am looking for "([^"]*)" with the following params:$/ do |method, table
|
|
26
36
|
end
|
27
37
|
|
28
38
|
When /^I make request$/ do
|
29
|
-
@
|
39
|
+
@options ||= {}
|
40
|
+
@attributes ||= {}
|
41
|
+
@response = @instance.send @method, *@attributes.values, @options
|
42
|
+
end
|
43
|
+
|
44
|
+
When /^I request "([^"]*)" page$/ do |link|
|
45
|
+
@next_response = @response.send :"#{link}_page"
|
30
46
|
end
|
31
47
|
|
32
|
-
|
33
|
-
@
|
48
|
+
Then /^the response collection of resources is different for "([^"]*)" attribute$/ do |attr|
|
49
|
+
@next_response.first.send(:"#{attr}").should_not eql @response.first.send(:"#{attr}")
|
34
50
|
end
|
data/lib/github_api/api.rb
CHANGED
@@ -174,8 +174,8 @@ module Github
|
|
174
174
|
end
|
175
175
|
|
176
176
|
def _merge_mime_type(resource, params) # :nodoc:
|
177
|
-
|
178
|
-
|
177
|
+
# params['resource'] = resource
|
178
|
+
# params['mime_type'] = params['mime_type'] || :raw
|
179
179
|
end
|
180
180
|
|
181
181
|
# TODO add to core extensions
|
data/lib/github_api/constants.rb
CHANGED
@@ -11,6 +11,12 @@ module Github
|
|
11
11
|
|
12
12
|
CONTENT_LENGTH = 'content-length'.freeze
|
13
13
|
|
14
|
+
ETAG = 'ETag'.freeze
|
15
|
+
|
16
|
+
SERVER = 'Server'.freeze
|
17
|
+
|
18
|
+
DATE = 'Date'.freeze
|
19
|
+
|
14
20
|
# Link headers
|
15
21
|
HEADER_LINK = "Link".freeze
|
16
22
|
|
@@ -34,5 +40,9 @@ module Github
|
|
34
40
|
|
35
41
|
PARAM_START_PAGE = "start_page".freeze
|
36
42
|
|
43
|
+
# URI parsing
|
44
|
+
QUERY_STR_SEP = '?'.freeze
|
45
|
+
|
46
|
+
|
37
47
|
end # Constants
|
38
48
|
end # Github
|
@@ -1,6 +1,4 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'github_api/utils/url'
|
1
|
+
# encoding: utf-8 require 'github_api/utils/url'
|
4
2
|
|
5
3
|
module Github
|
6
4
|
class PageIterator
|
@@ -8,9 +6,6 @@ module Github
|
|
8
6
|
include Github::Utils::Url
|
9
7
|
include Github::PagedRequest
|
10
8
|
|
11
|
-
# Query string separator
|
12
|
-
QUERY_STR_SEP = '?'.freeze
|
13
|
-
|
14
9
|
# Setup attribute accesor for all the link types
|
15
10
|
ATTRIBUTES = [ META_FIRST, META_NEXT, META_PREV, META_LAST ]
|
16
11
|
|
@@ -29,8 +24,21 @@ module Github
|
|
29
24
|
|
30
25
|
def first
|
31
26
|
return nil unless first_page_uri
|
32
|
-
|
33
|
-
|
27
|
+
|
28
|
+
response = if next_page < 1
|
29
|
+
parsed_query = parse_query(first_page_uri.split(QUERY_STR_SEP).last)
|
30
|
+
params = {}
|
31
|
+
if parsed_query.keys.include?('sha')
|
32
|
+
params['sha'] = 'master'
|
33
|
+
end
|
34
|
+
params['per_page'] = parse_per_page_number(first_page_uri)
|
35
|
+
|
36
|
+
page_request first_page_uri.split(QUERY_STR_SEP).first, params
|
37
|
+
else
|
38
|
+
page_request first_page_uri.split(QUERY_STR_SEP)[0],
|
39
|
+
'per_page' => parse_per_page_number(first_page_uri)
|
40
|
+
end
|
41
|
+
|
34
42
|
update_page_links response.links
|
35
43
|
response
|
36
44
|
end
|
@@ -38,9 +46,20 @@ module Github
|
|
38
46
|
def next
|
39
47
|
return nil unless has_next?
|
40
48
|
|
41
|
-
response =
|
49
|
+
response = if next_page < 1
|
50
|
+
parsed_query = parse_query(next_page_uri.split(QUERY_STR_SEP).last)
|
51
|
+
params = {}
|
52
|
+
if parsed_query.keys.include?('last_sha')
|
53
|
+
params['sha'] = parsed_query['last_sha']
|
54
|
+
end
|
55
|
+
params['per_page'] = parse_per_page_number(next_page_uri)
|
56
|
+
|
57
|
+
page_request next_page_uri.split(QUERY_STR_SEP)[0], params
|
58
|
+
else
|
59
|
+
page_request next_page_uri.split(QUERY_STR_SEP)[0],
|
42
60
|
'page' => next_page,
|
43
61
|
'per_page'=> parse_per_page_number(next_page_uri)
|
62
|
+
end
|
44
63
|
update_page_links response.links
|
45
64
|
response
|
46
65
|
end
|