github_api 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/features/cassettes/{repos → issues}/assignees/ckeck.yml +0 -0
- data/features/cassettes/{repos → issues}/assignees/ckeck_not.yml +0 -0
- data/features/cassettes/{repos → issues}/assignees/list.yml +0 -0
- data/features/cassettes/repos/starring/list.yml +98 -0
- data/features/cassettes/repos/starring/star.yml +48 -0
- data/features/cassettes/repos/starring/starred.yml +195 -0
- data/features/cassettes/repos/starring/starring.yml +56 -0
- data/features/cassettes/repos/starring/unstar.yml +46 -0
- data/features/cassettes/repos/statuses/create.yml +52 -0
- data/features/cassettes/repos/statuses/list.yml +64 -0
- data/features/cassettes/repos/watching/list.yml +76 -0
- data/features/cassettes/repos/watching/unwatch.yml +46 -0
- data/features/cassettes/repos/watching/watch.yml +48 -0
- data/features/cassettes/repos/watching/watched.yml +166 -0
- data/features/cassettes/repos/watching/watching.yml +56 -0
- data/features/{repos → issues}/assignees.feature +5 -5
- data/features/repos/starring.feature +50 -0
- data/features/repos/statuses.feature +27 -0
- data/features/repos/watching.feature +50 -0
- data/lib/github_api/error/service_error.rb +5 -2
- data/lib/github_api/issues.rb +6 -0
- data/lib/github_api/{repos → issues}/assignees.rb +2 -2
- data/lib/github_api/jsonable.rb +17 -0
- data/lib/github_api/orgs/teams.rb +45 -45
- data/lib/github_api/repos.rb +23 -11
- data/lib/github_api/repos/commits.rb +4 -3
- data/lib/github_api/repos/merging.rb +40 -0
- data/lib/github_api/repos/starring.rb +97 -0
- data/lib/github_api/repos/statuses.rb +64 -0
- data/lib/github_api/repos/watching.rb +16 -13
- data/lib/github_api/response.rb +1 -0
- data/lib/github_api/response/jsonize.rb +4 -5
- data/lib/github_api/version.rb +2 -2
- data/spec/fixtures/repos/merge.json +48 -0
- data/spec/fixtures/repos/stargazers.json +9 -0
- data/spec/fixtures/repos/starred.json +34 -0
- data/spec/fixtures/repos/status.json +16 -0
- data/spec/fixtures/repos/statuses.json +18 -0
- data/spec/github/{repos → issues}/assignees_spec.rb +2 -2
- data/spec/github/repos/merging_spec.rb +71 -0
- data/spec/github/repos/starring_spec.rb +203 -0
- data/spec/github/repos/statuses_spec.rb +124 -0
- data/spec/github/repos/watching_spec.rb +37 -35
- metadata +66 -39
@@ -0,0 +1,56 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://<BASIC_AUTH>@api.github.com/user/subscriptions/peter-murach/github?access_token=<TOKEN>
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ""
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/jsonapplication/vnd.github+json;q=0.7application/vnd.github.v3.raw+json;q=0.5application/vnd.github.beta.raw+json;q=0.1
|
12
|
+
Accept-Charset:
|
13
|
+
- utf-8
|
14
|
+
User-Agent:
|
15
|
+
- Github Ruby Gem 0.6.5
|
16
|
+
Content-Type:
|
17
|
+
- application/json
|
18
|
+
Accept-Encoding:
|
19
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 404
|
23
|
+
message: Not Found
|
24
|
+
headers:
|
25
|
+
Server:
|
26
|
+
- nginx
|
27
|
+
Date:
|
28
|
+
- Sun, 09 Sep 2012 16:42:42 GMT
|
29
|
+
Content-Type:
|
30
|
+
- application/json; charset=utf-8
|
31
|
+
Transfer-Encoding:
|
32
|
+
- chunked
|
33
|
+
Connection:
|
34
|
+
- keep-alive
|
35
|
+
Status:
|
36
|
+
- 404 Not Found
|
37
|
+
X-Github-Media-Type:
|
38
|
+
- github.beta
|
39
|
+
X-Content-Type-Options:
|
40
|
+
- nosniff
|
41
|
+
X-Ratelimit-Limit:
|
42
|
+
- "5000"
|
43
|
+
X-Ratelimit-Remaining:
|
44
|
+
- "4997"
|
45
|
+
Cache-Control:
|
46
|
+
- ""
|
47
|
+
Content-Encoding:
|
48
|
+
- gzip
|
49
|
+
body:
|
50
|
+
encoding: ASCII-8BIT
|
51
|
+
string: !binary |
|
52
|
+
H4sIAAAAAAAAA6tWyk0tLk5MT1WyUvLLL1Fwyy/NS1GqBQB8+Ys1FwAAAA==
|
53
|
+
|
54
|
+
http_version:
|
55
|
+
recorded_at: Sun, 09 Sep 2012 16:42:42 GMT
|
56
|
+
recorded_with: VCR 2.2.0
|
@@ -1,14 +1,14 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: Assignees API
|
2
2
|
|
3
3
|
Background:
|
4
|
-
Given I have "Github::
|
4
|
+
Given I have "Github::Issues::Assignees" instance
|
5
5
|
|
6
6
|
Scenario: List
|
7
7
|
|
8
8
|
Given I want to list resources with the following params:
|
9
9
|
| user | repo |
|
10
10
|
| peter-murach | github |
|
11
|
-
When I make request within a cassette named "
|
11
|
+
When I make request within a cassette named "issues/assignees/list"
|
12
12
|
Then the response status should be 200
|
13
13
|
And the response type should be JSON
|
14
14
|
And the response should not be empty
|
@@ -18,7 +18,7 @@ Feature: Contents API
|
|
18
18
|
Given I want to check resource with the following params:
|
19
19
|
| user | repo | assignee |
|
20
20
|
| peter-murach | github | wycats |
|
21
|
-
When I make request within a cassette named "
|
21
|
+
When I make request within a cassette named "issues/assignees/ckeck_not"
|
22
22
|
Then the response should be false
|
23
23
|
|
24
24
|
Scenario: Check assignee belongs to repository
|
@@ -26,5 +26,5 @@ Feature: Contents API
|
|
26
26
|
Given I want to check resource with the following params:
|
27
27
|
| user | repo | assignee |
|
28
28
|
| peter-murach | github | peter-murach |
|
29
|
-
When I make request within a cassette named "
|
29
|
+
When I make request within a cassette named "issues/assignees/ckeck"
|
30
30
|
Then the response should be true
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Feature: Starring API
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have "Github::Repos::Starring" instance
|
5
|
+
|
6
|
+
Scenario: List
|
7
|
+
|
8
|
+
Given I want to list resources with the following params:
|
9
|
+
| user | repo |
|
10
|
+
| peter-murach | github |
|
11
|
+
When I make request within a cassette named "repos/starring/list"
|
12
|
+
Then the response status should be 200
|
13
|
+
And the response type should be JSON
|
14
|
+
And the response should not be empty
|
15
|
+
|
16
|
+
Scenario: Starred
|
17
|
+
|
18
|
+
Given I want to starred resources
|
19
|
+
And I pass the following request options:
|
20
|
+
| user |
|
21
|
+
| wycats |
|
22
|
+
When I make request within a cassette named "repos/starring/starred"
|
23
|
+
Then the response status should be 200
|
24
|
+
And the response type should be JSON
|
25
|
+
And the response should not be empty
|
26
|
+
|
27
|
+
Scenario: Starring
|
28
|
+
|
29
|
+
Given I want to starring? resource with the following params:
|
30
|
+
| user | repo |
|
31
|
+
| peter-murach | github |
|
32
|
+
When I make request within a cassette named "repos/starring/starring"
|
33
|
+
Then the response should be false
|
34
|
+
|
35
|
+
Scenario: Star
|
36
|
+
|
37
|
+
Given I want to star resource with the following params:
|
38
|
+
| user | repo |
|
39
|
+
| peter-murach | github |
|
40
|
+
When I make request within a cassette named "repos/starring/star"
|
41
|
+
Then the response status should be 204
|
42
|
+
|
43
|
+
Scenario: Unstar
|
44
|
+
|
45
|
+
Given I want to unstar resource with the following params:
|
46
|
+
| user | repo |
|
47
|
+
| peter-murach | github |
|
48
|
+
When I make request within a cassette named "repos/starring/unstar"
|
49
|
+
Then the response status should be 204
|
50
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Feature: Statuses API
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have "Github::Repos::Statuses" instance
|
5
|
+
|
6
|
+
Scenario: List
|
7
|
+
|
8
|
+
Given I want to list resources with the following params:
|
9
|
+
| user | repo | sha |
|
10
|
+
| peter-murach | github | cbdc6a5b133bf460d9c18292dda8fc54adf7e1b1 |
|
11
|
+
When I make request within a cassette named "repos/statuses/list"
|
12
|
+
Then the response status should be 200
|
13
|
+
And the response type should be JSON
|
14
|
+
And the response should not be empty
|
15
|
+
|
16
|
+
Scenario: Create
|
17
|
+
|
18
|
+
Given I want to create resource with the following params:
|
19
|
+
| user | repo | sha |
|
20
|
+
| murek | github_api_test | 0106b45311ab15bf837c2830391b01cd17b33b61 |
|
21
|
+
And I pass the following request options:
|
22
|
+
| state | target_url | description |
|
23
|
+
| success | http://ci.example.com/peter-murach | Test by github_api |
|
24
|
+
When I make request within a cassette named "repos/statuses/create"
|
25
|
+
Then the response status should be 201
|
26
|
+
And the response type should be JSON
|
27
|
+
And the response should not be empty
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Feature: Watching API
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have "Github::Repos::Watching" instance
|
5
|
+
|
6
|
+
Scenario: List
|
7
|
+
|
8
|
+
Given I want to list resources with the following params:
|
9
|
+
| user | repo |
|
10
|
+
| peter-murach | github |
|
11
|
+
When I make request within a cassette named "repos/watching/list"
|
12
|
+
Then the response status should be 200
|
13
|
+
And the response type should be JSON
|
14
|
+
And the response should not be empty
|
15
|
+
|
16
|
+
Scenario: Watched
|
17
|
+
|
18
|
+
Given I want to watched resources
|
19
|
+
And I pass the following request options:
|
20
|
+
| user |
|
21
|
+
| wycats |
|
22
|
+
When I make request within a cassette named "repos/watching/watched"
|
23
|
+
Then the response status should be 200
|
24
|
+
And the response type should be JSON
|
25
|
+
And the response should not be empty
|
26
|
+
|
27
|
+
Scenario: Watching
|
28
|
+
|
29
|
+
Given I want to watching? resource with the following params:
|
30
|
+
| user | repo |
|
31
|
+
| peter-murach | github |
|
32
|
+
When I make request within a cassette named "repos/watching/watching"
|
33
|
+
Then the response should be false
|
34
|
+
|
35
|
+
Scenario: Watch
|
36
|
+
|
37
|
+
Given I want to watch resource with the following params:
|
38
|
+
| user | repo |
|
39
|
+
| peter-murach | github |
|
40
|
+
When I make request within a cassette named "repos/watching/watch"
|
41
|
+
Then the response status should be 204
|
42
|
+
|
43
|
+
Scenario: Unwatch
|
44
|
+
|
45
|
+
Given I want to unwatch resource with the following params:
|
46
|
+
| user | repo |
|
47
|
+
| peter-murach | github |
|
48
|
+
When I make request within a cassette named "repos/watching/unwatch"
|
49
|
+
Then the response status should be 204
|
50
|
+
|
@@ -1,10 +1,13 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require 'multi_json'
|
2
|
+
# require 'multi_json'
|
3
|
+
require 'github_api/jsonable'
|
3
4
|
|
4
5
|
module Github
|
5
6
|
# Raised when GitHub returns any of the HTTP status codes
|
6
7
|
module Error
|
7
8
|
class ServiceError < GithubError
|
9
|
+
include ::Github::Jsonable
|
10
|
+
|
8
11
|
attr_reader :http_headers
|
9
12
|
|
10
13
|
def initialize(response)
|
@@ -20,7 +23,7 @@ module Github
|
|
20
23
|
|
21
24
|
def decode_body(body)
|
22
25
|
if body.respond_to?(:to_str) && body.length >= 2
|
23
|
-
|
26
|
+
decode body, :symbolize_keys => true
|
24
27
|
else
|
25
28
|
body
|
26
29
|
end
|
data/lib/github_api/issues.rb
CHANGED
@@ -5,6 +5,7 @@ module Github
|
|
5
5
|
extend AutoloadHelper
|
6
6
|
|
7
7
|
autoload_all 'github_api/issues',
|
8
|
+
:Assignees => 'assignees',
|
8
9
|
:Comments => 'comments',
|
9
10
|
:Events => 'events',
|
10
11
|
:Labels => 'labels',
|
@@ -39,6 +40,11 @@ module Github
|
|
39
40
|
super(options)
|
40
41
|
end
|
41
42
|
|
43
|
+
# Access to Issues::Assignees API
|
44
|
+
def assignees
|
45
|
+
@assignees ||= ApiFactory.new 'Issues::Assignees'
|
46
|
+
end
|
47
|
+
|
42
48
|
# Access to Issues::Comments API
|
43
49
|
def comments
|
44
50
|
@comments ||= ApiFactory.new 'Issues::Comments'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module Github
|
4
|
-
class
|
4
|
+
class Issues::Assignees < API
|
5
5
|
|
6
6
|
# lists all the available assignees (owner + collaborators)
|
7
7
|
# to which issues may be assigned.
|
@@ -35,5 +35,5 @@ module Github
|
|
35
35
|
false
|
36
36
|
end
|
37
37
|
|
38
|
-
end #
|
38
|
+
end # Issues::Assignees
|
39
39
|
end # Github
|
@@ -31,13 +31,13 @@ module Github
|
|
31
31
|
#
|
32
32
|
# = Examples
|
33
33
|
# github = Github.new :oauth_token => '...'
|
34
|
-
# github.orgs.teams.get 'team-
|
34
|
+
# github.orgs.teams.get 'team-id'
|
35
35
|
#
|
36
|
-
def get(
|
37
|
-
_validate_presence_of
|
36
|
+
def get(team_id, params={})
|
37
|
+
_validate_presence_of team_id
|
38
38
|
normalize! params
|
39
39
|
|
40
|
-
get_request("/teams/#{
|
40
|
+
get_request("/teams/#{team_id}", params)
|
41
41
|
end
|
42
42
|
alias :find :get
|
43
43
|
|
@@ -83,18 +83,18 @@ module Github
|
|
83
83
|
#
|
84
84
|
# = Examples
|
85
85
|
# github = Github.new :oauth_token => '...'
|
86
|
-
# github.orgs.teams.edit 'team-
|
86
|
+
# github.orgs.teams.edit 'team-id',
|
87
87
|
# "name" => "new team name",
|
88
88
|
# "permission" => "push"
|
89
89
|
#
|
90
|
-
def edit(
|
91
|
-
_validate_presence_of
|
90
|
+
def edit(team_id, params={})
|
91
|
+
_validate_presence_of team_id
|
92
92
|
normalize! params
|
93
93
|
filter! VALID_TEAM_PARAM_NAMES, params
|
94
94
|
assert_valid_values(VALID_TEAM_PARAM_VALUES, params)
|
95
95
|
assert_required_keys(%w[ name ], params)
|
96
96
|
|
97
|
-
patch_request("/teams/#{
|
97
|
+
patch_request("/teams/#{team_id}", params)
|
98
98
|
end
|
99
99
|
|
100
100
|
# Delete a team
|
@@ -102,12 +102,12 @@ module Github
|
|
102
102
|
#
|
103
103
|
# = Examples
|
104
104
|
# github = Github.new :oauth_token => '...'
|
105
|
-
# github.orgs.teams.delete 'team-
|
105
|
+
# github.orgs.teams.delete 'team-id'
|
106
106
|
#
|
107
|
-
def delete(
|
108
|
-
_validate_presence_of
|
107
|
+
def delete(team_id, params={})
|
108
|
+
_validate_presence_of team_id
|
109
109
|
normalize! params
|
110
|
-
delete_request("/teams/#{
|
110
|
+
delete_request("/teams/#{team_id}", params)
|
111
111
|
end
|
112
112
|
alias :remove :delete
|
113
113
|
|
@@ -116,14 +116,14 @@ module Github
|
|
116
116
|
#
|
117
117
|
# = Examples
|
118
118
|
# github = Github.new :oauth_token => '...'
|
119
|
-
# github.orgs.teams.list_members 'team-
|
120
|
-
# github.orgs.teams.list_members 'team-
|
119
|
+
# github.orgs.teams.list_members 'team-id'
|
120
|
+
# github.orgs.teams.list_members 'team-id' { |member| ... }
|
121
121
|
#
|
122
|
-
def list_members(
|
123
|
-
_validate_presence_of
|
122
|
+
def list_members(team_id, params={})
|
123
|
+
_validate_presence_of team_id
|
124
124
|
normalize! params
|
125
125
|
|
126
|
-
response = get_request("/teams/#{
|
126
|
+
response = get_request("/teams/#{team_id}/members", params)
|
127
127
|
return response unless block_given?
|
128
128
|
response.each { |el| yield el }
|
129
129
|
end
|
@@ -133,12 +133,12 @@ module Github
|
|
133
133
|
#
|
134
134
|
# = Examples
|
135
135
|
# github = Github.new :oauth_token => '...'
|
136
|
-
# github.orgs.teams.team_member? 'team-
|
136
|
+
# github.orgs.teams.team_member? 'team-id', 'user-name'
|
137
137
|
#
|
138
|
-
def team_member?(
|
139
|
-
_validate_presence_of
|
138
|
+
def team_member?(team_id, member_name, params={})
|
139
|
+
_validate_presence_of team_id, member_name
|
140
140
|
normalize! params
|
141
|
-
get_request("/teams/#{
|
141
|
+
get_request("/teams/#{team_id}/members/#{member_name}", params)
|
142
142
|
true
|
143
143
|
rescue Github::Error::NotFound
|
144
144
|
false
|
@@ -149,12 +149,12 @@ module Github
|
|
149
149
|
#
|
150
150
|
# = Examples
|
151
151
|
# github = Github.new :oauth_token => '...'
|
152
|
-
# github.orgs.teams.add_member 'team-
|
152
|
+
# github.orgs.teams.add_member 'team-id', 'user-name'
|
153
153
|
#
|
154
|
-
def add_member(
|
155
|
-
_validate_presence_of
|
154
|
+
def add_member(team_id, member_name, params={})
|
155
|
+
_validate_presence_of team_id, member_name
|
156
156
|
normalize! params
|
157
|
-
put_request("/teams/#{
|
157
|
+
put_request("/teams/#{team_id}/members/#{member_name}", params)
|
158
158
|
end
|
159
159
|
alias :add_team_member :add_member
|
160
160
|
|
@@ -166,12 +166,12 @@ module Github
|
|
166
166
|
#
|
167
167
|
# = Examples
|
168
168
|
# github = Github.new :oauth_token => '...'
|
169
|
-
# github.orgs.teams.remove_member 'team-
|
169
|
+
# github.orgs.teams.remove_member 'team-id', 'member-name'
|
170
170
|
#
|
171
|
-
def remove_member(
|
172
|
-
_validate_presence_of
|
171
|
+
def remove_member(team_id, member_name, params={})
|
172
|
+
_validate_presence_of team_id, member_name
|
173
173
|
normalize! params
|
174
|
-
delete_request("/teams/#{
|
174
|
+
delete_request("/teams/#{team_id}/members/#{member_name}", params)
|
175
175
|
end
|
176
176
|
alias :remove_team_member :remove_member
|
177
177
|
|
@@ -179,13 +179,13 @@ module Github
|
|
179
179
|
#
|
180
180
|
# = Examples
|
181
181
|
# github = Github.new :oauth_token => '...'
|
182
|
-
# github.orgs.teams.list_repos 'team-
|
182
|
+
# github.orgs.teams.list_repos 'team-id'
|
183
183
|
#
|
184
|
-
def list_repos(
|
185
|
-
_validate_presence_of
|
184
|
+
def list_repos(team_id, params={})
|
185
|
+
_validate_presence_of team_id
|
186
186
|
normalize! params
|
187
187
|
|
188
|
-
response = get_request("/teams/#{
|
188
|
+
response = get_request("/teams/#{team_id}/repos", params)
|
189
189
|
return response unless block_given?
|
190
190
|
response.each { |el| yield el }
|
191
191
|
end
|
@@ -195,12 +195,12 @@ module Github
|
|
195
195
|
#
|
196
196
|
# = Examples
|
197
197
|
# github = Github.new :oauth_token => '...'
|
198
|
-
# github.orgs.teams.team_repo? 'team-
|
198
|
+
# github.orgs.teams.team_repo? 'team-id', 'user-name', 'repo-name'
|
199
199
|
#
|
200
|
-
def team_repo?(
|
201
|
-
_validate_presence_of
|
200
|
+
def team_repo?(team_id, user_name, repo_name, params={})
|
201
|
+
_validate_presence_of team_id, user_name, repo_name
|
202
202
|
normalize! params
|
203
|
-
get_request("/teams/#{
|
203
|
+
get_request("/teams/#{team_id}/repos/#{user_name}/#{repo_name}", params)
|
204
204
|
true
|
205
205
|
rescue Github::Error::NotFound
|
206
206
|
false
|
@@ -216,12 +216,12 @@ module Github
|
|
216
216
|
#
|
217
217
|
# = Examples
|
218
218
|
# github = Github.new :oauth_token => '...'
|
219
|
-
# github.orgs.teams.add_repo 'team-
|
219
|
+
# github.orgs.teams.add_repo 'team-id', 'user-name', 'repo-name'
|
220
220
|
#
|
221
|
-
def add_repo(
|
222
|
-
_validate_presence_of
|
221
|
+
def add_repo(team_id, user_name, repo_name, params={})
|
222
|
+
_validate_presence_of team_id, user_name, repo_name
|
223
223
|
normalize! params
|
224
|
-
put_request("/teams/#{
|
224
|
+
put_request("/teams/#{team_id}/repos/#{user_name}/#{repo_name}", params)
|
225
225
|
end
|
226
226
|
alias :add_repository :add_repo
|
227
227
|
|
@@ -233,12 +233,12 @@ module Github
|
|
233
233
|
#
|
234
234
|
# = Examples
|
235
235
|
# github = Github.new :oauth_token => '...'
|
236
|
-
# github.orgs.teams.remove_repo 'team-
|
236
|
+
# github.orgs.teams.remove_repo 'team-id', 'user-name', 'repo-name'
|
237
237
|
#
|
238
|
-
def remove_repo(
|
239
|
-
_validate_presence_of
|
238
|
+
def remove_repo(team_id, user_name, repo_name, params={})
|
239
|
+
_validate_presence_of team_id, user_name, repo_name
|
240
240
|
normalize! params
|
241
|
-
delete_request("/teams/#{
|
241
|
+
delete_request("/teams/#{team_id}/repos/#{user_name}/#{repo_name}", params)
|
242
242
|
end
|
243
243
|
alias :remove_repository :remove_repo
|
244
244
|
|