github_api 0.4.1 → 0.4.2

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.
@@ -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"
@@ -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 butches
4
+ I want to be able to view them in chunks
5
5
 
6
- Scenario: Re
6
+ Scenario: Passing per_page param
7
7
  Given I have "Github::Repos" instance
8
- And I am looking for "repos" with the following params:
9
- | page | per_page |
10
- And I make request within a cassette named "repos"
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
+
@@ -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
- And I am looking for "branches" with the following params:
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
- And I am looking for "tags" with the following params:
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
- And I am looking for "list_repos" with the following params:
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 with hash params within a cassette named "repos/tags"
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
- @response = @instance.send @method, *@attributes.values
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
- When /^I make request with hash params$/ do
33
- @response = @instance.send @method, @attributes
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
@@ -174,8 +174,8 @@ module Github
174
174
  end
175
175
 
176
176
  def _merge_mime_type(resource, params) # :nodoc:
177
- params['resource'] = resource
178
- params['mime_type'] = params['mime_type'] || :raw
177
+ # params['resource'] = resource
178
+ # params['mime_type'] = params['mime_type'] || :raw
179
179
  end
180
180
 
181
181
  # TODO add to core extensions
@@ -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
- response = page_request first_page_uri.split(QUERY_STR_SEP)[0],
33
- 'per_page' => parse_per_page_number(first_page_uri)
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 = page_request next_page_uri.split(QUERY_STR_SEP)[0],
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