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.
@@ -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