github_api 0.5.2 → 0.5.3

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.
@@ -1,9 +1,9 @@
1
1
  Feature: Githu API pagination
2
- In order to paginate number of received records
3
- As a user
4
- I want to be able to view them in chunks
2
+
3
+ The gem permits to paginate resources.
5
4
 
6
5
  Scenario: Passing per_page param
6
+
7
7
  Given I have "Github::Repos" instance
8
8
  When I want to list resources
9
9
  And I pass the following request options:
@@ -14,11 +14,12 @@ Feature: Githu API pagination
14
14
  And the response type should be JSON
15
15
  And the response should have 45 items
16
16
 
17
- When I request "next" page within a cassette named "pagination/repos/list/next"
17
+ When I request next page within a cassette named "pagination/repos/list/next"
18
18
  Then the response status should be 200
19
19
  And the response should have 45 items
20
20
 
21
21
  Scenario: Returned paginated resources are different
22
+
22
23
  Given I have "Github::Repos" instance
23
24
  When I want to list resources
24
25
  And I pass the following request options:
@@ -29,12 +30,13 @@ Feature: Githu API pagination
29
30
  And the response type should be JSON
30
31
  And the response should have 30 items
31
32
 
32
- When I request "next" page within a cassette named "pagination/repos/diff/next"
33
+ When I request next page within a cassette named "pagination/repos/diff/next"
33
34
  Then the response status should be 200
34
35
  And the response should have 30 items
35
36
  And the response collection of resources is different for "name" attribute
36
37
 
37
38
  Scenario: Calling 'commits' for Github::Repos with per_page param
39
+
38
40
  Given I have "Github::Repos::Commits" instance
39
41
  When I am looking for "list" with the following params:
40
42
  | user | repo |
@@ -47,11 +49,12 @@ Feature: Githu API pagination
47
49
  And the response type should be JSON
48
50
  And the response should have 45 items
49
51
 
50
- When I request "next" page within a cassette named "pagination/repos/commits/next"
52
+ When I request next page within a cassette named "pagination/repos/commits/next"
51
53
  Then the response status should be 200
52
54
  And the response should have 45 items
53
55
 
54
56
  Scenario: Calling 'list' for Github::Repos::Commits returns different collections
57
+
55
58
  Given I have "Github::Repos::Commits" instance
56
59
  When I am looking for "list" with the following params:
57
60
  | user | repo |
@@ -60,19 +63,105 @@ Feature: Githu API pagination
60
63
  Then the response status should be 200
61
64
  And the response should have 30 items
62
65
 
63
- When I request "next" page within a cassette named "pagination/repos/commits/sha/next"
66
+ When I request next page within a cassette named "pagination/repos/commits/sha/next"
64
67
  Then the response status should be 200
65
68
  And the response should have 30 items
66
69
  And the response collection of resources is different for "sha" attribute
67
70
 
68
71
  Scenario: Requesting resources with per_page helper
72
+
69
73
  Given I have "Github::Repos" instance
70
- When I want to list resources
74
+ And I want to list resources
71
75
  And I pass the following request options:
72
76
  | user |
73
77
  | wycats |
74
- And I make request within a cassette named "pagination/repos/per_page/first"
78
+ When I make request within a cassette named "pagination/repos/per_page/first"
75
79
  Then the response status should be 200
76
80
  When I iterate through collection pages within a cassette named "pagination/repos/per_page/each_page"
77
81
  Then this collection should include first page
78
82
 
83
+ Scenario: Navigating resource links with query parameters
84
+
85
+ Given I have "Github::Issues" instance
86
+ And I want to list_repo resources with the following params:
87
+ | user | repo |
88
+ | wycats | thor |
89
+ And I pass the following request options:
90
+ | state | per_page |
91
+ | closed | 50 |
92
+ When I make request within a cassette named "pagination/issues/list/first"
93
+ Then the response status should be 200
94
+ And the response next link should contain:
95
+ | page | per_page | state |
96
+ | 2 | 50 | closed |
97
+ And the response last link should contain:
98
+ | page | per_page | state |
99
+ | 4 | 50 | closed |
100
+
101
+ Scenario: Navigate to Next page
102
+ Given I have "Github::Issues" instance
103
+ And I want to list_repo resources with the following params:
104
+ | user | repo |
105
+ | wycats | thor |
106
+ And I pass the following request options:
107
+ | state | per_page |
108
+ | closed | 50 |
109
+ When I make request within a cassette named "pagination/issues/list/first"
110
+ And I request next page within a cassette named "pagination/issues/list/next"
111
+ Then the response status should be 200
112
+ And the response first link should contain:
113
+ | page | per_page | state |
114
+ | 1 | 50 | closed |
115
+ And the response next link should contain:
116
+ | page | per_page | state |
117
+ | 3 | 50 | closed |
118
+ And the response prev link should contain:
119
+ | page | per_page | state |
120
+ | 1 | 50 | closed |
121
+ And the response last link should contain:
122
+ | page | per_page | state |
123
+ | 4 | 50 | closed |
124
+
125
+ Scenario: Navigate to Last page
126
+
127
+ Given I have "Github::Issues" instance
128
+ And I want to list_repo resources with the following params:
129
+ | user | repo |
130
+ | wycats | thor |
131
+ And I pass the following request options:
132
+ | state | per_page |
133
+ | closed | 50 |
134
+ When I make request within a cassette named "pagination/issues/list/first"
135
+ And I request last page within a cassette named "pagination/issues/list/last"
136
+ Then the response status should be 200
137
+ And the response prev link should contain:
138
+ | page | per_page | state |
139
+ | 3 | 50 | closed |
140
+ And the response first link should contain:
141
+ | page | per_page | state |
142
+ | 1 | 50 | closed |
143
+
144
+ Scenario: Navigate to Previous page
145
+
146
+ Given I have "Github::Issues" instance
147
+ And I want to list_repo resources with the following params:
148
+ | user | repo |
149
+ | wycats | thor |
150
+ And I pass the following request options:
151
+ | state | per_page | page |
152
+ | closed | 50 | 4 |
153
+ When I make request within a cassette named "pagination/issues/list/last"
154
+ And I request prev page within a cassette named "pagination/issues/list/prev"
155
+ Then the response status should be 200
156
+ And the response prev link should contain:
157
+ | page | per_page | state |
158
+ | 2 | 50 | closed |
159
+ And the response next link should contain:
160
+ | page | per_page | state |
161
+ | 4 | 50 | closed |
162
+ And the response first link should contain:
163
+ | page | per_page | state |
164
+ | 1 | 50 | closed |
165
+ And the response last link should contain:
166
+ | page | per_page | state |
167
+ | 4 | 50 | closed |
@@ -40,3 +40,11 @@ Then /^the response should contain (.*)$/ do |item|
40
40
  @response.body.should include item
41
41
  end
42
42
  end
43
+
44
+ Then /^the response (.*) link should contain:$/ do |type, table|
45
+ table.hashes.each do |attributes|
46
+ attributes.each do |key, val|
47
+ @response.links.send(:"#{type}").should match /#{key}=#{val}/
48
+ end
49
+ end
50
+ end
@@ -60,7 +60,7 @@ When /^I make request$/ do
60
60
  @response = @instance.send @method, *@attributes.values, @options
61
61
  end
62
62
 
63
- When /^I request "([^"]*)" page$/ do |link|
63
+ When /^I request (.*) page$/ do |link|
64
64
  @next_response = @response.send :"#{link}_page"
65
65
  end
66
66
 
@@ -8,6 +8,7 @@ Feature: Accessing Users Emails API
8
8
  Given I have "Github::Users::Emails" instance
9
9
 
10
10
  Scenario: Lists all emails for the authenticated user
11
+
11
12
  Given I want to list resources
12
13
  When I make request within a cassette named "users/emails/all"
13
14
  Then the response status should be 200
@@ -15,6 +16,7 @@ Feature: Accessing Users Emails API
15
16
  And the response should not be empty
16
17
 
17
18
  Scenario: Add email addresses for the authenticated user
19
+
18
20
  Given I want to add resource with the following params:
19
21
  | email1 | email2 |
20
22
  | octocat@example.com | terry@example.com |
@@ -26,6 +28,7 @@ Feature: Accessing Users Emails API
26
28
  And the response should contain terry@example.com
27
29
 
28
30
  Scenario: Remove email addresses for the authenticated user
31
+
29
32
  Given I want to add resource with the following params:
30
33
  | email1 | email2 |
31
34
  | octocat@example.com | terry@example.com |
@@ -33,7 +33,7 @@ module Github
33
33
  # github.events.repository 'user-name', 'repo-name'
34
34
  # github.events.repository 'user-name', 'repo-name' { |event| ... }
35
35
  #
36
- def repository(user_name=nil, repo_name=nil, params={})
36
+ def repository(user_name, repo_name, params={})
37
37
  _update_user_repo_params(user_name, repo_name)
38
38
  _validate_user_repo_params(user, repo) unless user? && repo?
39
39
  _normalize_params_keys(params)
@@ -54,7 +54,7 @@ module Github
54
54
  # github.events.issue 'user-name', 'repo-name'
55
55
  # github.events.issue 'user-name', 'repo-name' { |event| ... }
56
56
  #
57
- def issue(user_name=nil, repo_name=nil, params={})
57
+ def issue(user_name, repo_name, params={})
58
58
  _update_user_repo_params(user_name, repo_name)
59
59
  _validate_user_repo_params(user, repo) unless user? && repo?
60
60
  _normalize_params_keys(params)
@@ -74,7 +74,7 @@ module Github
74
74
  # github.events.network 'user-name', 'repo-name'
75
75
  # github.events.network 'user-name', 'repo-name' { |event| ... }
76
76
  #
77
- def network(user_name=nil, repo_name=nil, params={})
77
+ def network(user_name, repo_name, params={})
78
78
  _update_user_repo_params(user_name, repo_name)
79
79
  _validate_user_repo_params(user, repo) unless user? && repo?
80
80
  _normalize_params_keys(params)
@@ -35,7 +35,7 @@ module Github
35
35
 
36
36
  page_request first_page_uri.split(QUERY_STR_SEP).first, params
37
37
  else
38
- page_request first_page_uri.split(QUERY_STR_SEP)[0],
38
+ page_request first_page_uri.split(QUERY_STR_SEP).first,
39
39
  'per_page' => parse_per_page_number(first_page_uri)
40
40
  end
41
41
 
@@ -54,11 +54,12 @@ module Github
54
54
  end
55
55
  params['per_page'] = parse_per_page_number(next_page_uri)
56
56
 
57
- page_request next_page_uri.split(QUERY_STR_SEP)[0], params
57
+ page_request next_page_uri.split(QUERY_STR_SEP).first, params
58
58
  else
59
- page_request next_page_uri.split(QUERY_STR_SEP)[0],
60
- 'page' => next_page,
61
- 'per_page'=> parse_per_page_number(next_page_uri)
59
+ params = parse_query next_page_uri.split(QUERY_STR_SEP).last
60
+ params['page'] = parse_page_number(next_page_uri)
61
+ params['per_page'] = parse_per_page_number(next_page_uri)
62
+ page_request next_page_uri.split(QUERY_STR_SEP).first, params
62
63
  end
63
64
  update_page_links response.links
64
65
  response
@@ -66,18 +67,22 @@ module Github
66
67
 
67
68
  def prev
68
69
  return nil unless prev_page_uri
69
- response = page_request prev_page_uri.split(QUERY_STR_SEP)[0],
70
- 'page' => prev_page,
71
- 'per_page'=> parse_per_page_number(prev_page_uri)
70
+ params = parse_query prev_page_uri.split(QUERY_STR_SEP).last
71
+ params['page'] = parse_page_number(prev_page_uri)
72
+ params['per_page'] = parse_per_page_number(prev_page_uri)
73
+ response = page_request prev_page_uri.split(QUERY_STR_SEP).first, params
74
+
72
75
  update_page_links response.links
73
76
  response
74
77
  end
75
78
 
76
79
  def last
77
80
  return nil unless last_page_uri
78
- response = page_request last_page_uri.split(QUERY_STR_SEP)[0],
79
- 'page' => last_page,
80
- 'per_page' => parse_per_page_number(last_page_uri)
81
+ params = parse_query last_page_uri.split(QUERY_STR_SEP).last
82
+ params['page'] = parse_page_number(last_page_uri)
83
+ params['per_page'] = parse_per_page_number(last_page_uri)
84
+ response = page_request last_page_uri.split(QUERY_STR_SEP).first, params
85
+
81
86
  update_page_links response.links
82
87
  response
83
88
  end
@@ -89,14 +94,13 @@ module Github
89
94
  page_uri = first_page_uri || last_page_uri
90
95
  return nil unless page_uri
91
96
 
92
- response = page_request page_uri.split(QUERY_STR_SEP)[0],
97
+ response = page_request page_uri.split(QUERY_STR_SEP).first,
93
98
  'page' => page_number,
94
99
  'per_page' => parse_per_page_number(page_uri)
95
100
  update_page_links response.links
96
101
  response
97
102
  end
98
103
 
99
-
100
104
  private
101
105
 
102
106
  def parse_per_page_number(uri) # :nodoc:
@@ -4,7 +4,7 @@ module Github
4
4
  module VERSION
5
5
  MAJOR = 0
6
6
  MINOR = 5
7
- PATCH = 2
7
+ PATCH = 3
8
8
  BUILD = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.');
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-20 00:00:00.000000000Z
12
+ date: 2012-06-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie
16
- requirement: &2153991400 !ruby/object:Gem::Requirement
16
+ requirement: &2154417660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153991400
24
+ version_requirements: *2154417660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: faraday
27
- requirement: &2153990900 !ruby/object:Gem::Requirement
27
+ requirement: &2154417160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.8.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2153990900
35
+ version_requirements: *2154417160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: multi_json
38
- requirement: &2153990440 !ruby/object:Gem::Requirement
38
+ requirement: &2154416700 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.3'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2153990440
46
+ version_requirements: *2154416700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: oauth2
49
- requirement: &2153989980 !ruby/object:Gem::Requirement
49
+ requirement: &2154416240 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0.7'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2153989980
57
+ version_requirements: *2154416240
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: nokogiri
60
- requirement: &2153989520 !ruby/object:Gem::Requirement
60
+ requirement: &2154415780 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.5.2
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2153989520
68
+ version_requirements: *2154415780
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &2153989060 !ruby/object:Gem::Requirement
71
+ requirement: &2154435800 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2153989060
79
+ version_requirements: *2154435800
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: cucumber
82
- requirement: &2153988600 !ruby/object:Gem::Requirement
82
+ requirement: &2154435340 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2153988600
90
+ version_requirements: *2154435340
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: yajl-ruby
93
- requirement: &2153988140 !ruby/object:Gem::Requirement
93
+ requirement: &2154434880 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.1.0
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2153988140
101
+ version_requirements: *2154434880
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: webmock
104
- requirement: &2153987680 !ruby/object:Gem::Requirement
104
+ requirement: &2154434420 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,21 +109,21 @@ dependencies:
109
109
  version: 1.8.0
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *2153987680
112
+ version_requirements: *2154434420
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: vcr
115
- requirement: &2153987220 !ruby/object:Gem::Requirement
115
+ requirement: &2154433960 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
119
119
  - !ruby/object:Gem::Version
120
- version: 2.1.0
120
+ version: 2.2.0
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *2153987220
123
+ version_requirements: *2154433960
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: simplecov
126
- requirement: &2154003140 !ruby/object:Gem::Requirement
126
+ requirement: &2154433500 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 0.6.1
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *2154003140
134
+ version_requirements: *2154433500
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: guard
137
- requirement: &2154002760 !ruby/object:Gem::Requirement
137
+ requirement: &2154433120 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *2154002760
145
+ version_requirements: *2154433120
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: guard-rspec
148
- requirement: &2154002300 !ruby/object:Gem::Requirement
148
+ requirement: &2154432660 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *2154002300
156
+ version_requirements: *2154432660
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: guard-cucumber
159
- requirement: &2154001880 !ruby/object:Gem::Requirement
159
+ requirement: &2154432240 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: '0'
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *2154001880
167
+ version_requirements: *2154432240
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: rake
170
- requirement: &2154001460 !ruby/object:Gem::Requirement
170
+ requirement: &2154431820 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ! '>='
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *2154001460
178
+ version_requirements: *2154431820
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: bundler
181
- requirement: &2154001040 !ruby/object:Gem::Requirement
181
+ requirement: &2154431400 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ! '>='
@@ -186,7 +186,7 @@ dependencies:
186
186
  version: '0'
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *2154001040
189
+ version_requirements: *2154431400
190
190
  description: ! ' Ruby wrapper that supports all of the GitHub API v3 methods(nearly
191
191
  200). It''s build in a modular way, that is, you can either instantiate the whole
192
192
  api wrapper Github.new or use parts of it e.i. Github::Repos.new if working solely
@@ -207,6 +207,10 @@ files:
207
207
  - features/cassettes/git_data/references/all.yml
208
208
  - features/cassettes/git_data/references/all_tags.yml
209
209
  - features/cassettes/git_data/references/one.yml
210
+ - features/cassettes/pagination/issues/list/first.yml
211
+ - features/cassettes/pagination/issues/list/last.yml
212
+ - features/cassettes/pagination/issues/list/next.yml
213
+ - features/cassettes/pagination/issues/list/prev.yml
210
214
  - features/cassettes/pagination/repos/commits/list.yml
211
215
  - features/cassettes/pagination/repos/commits/next.yml
212
216
  - features/cassettes/pagination/repos/commits/sha/next.yml
@@ -471,7 +475,7 @@ files:
471
475
  homepage: https://github.com/peter-murach/github
472
476
  licenses: []
473
477
  post_install_message: ! "\n--------------------------------------------------------------------------------\nThank
474
- you for installing github_api-0.5.2.\n\n*NOTE*: Version 0.5.0 introduces breaking
478
+ you for installing github_api-0.5.3.\n\n*NOTE*: Version 0.5.0 introduces breaking
475
479
  changes to the way github api is queried.\nThe interface has been rewritten to be
476
480
  more consistent with REST verbs that\ninteract with GitHub hypermedia resources.
477
481
  Thus, to list resources 'list' or 'all'\nverbs are used, to retrieve individual