github_api 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/github_api/api.rb +1 -0
- data/lib/github_api/compatibility.rb +23 -0
- data/lib/github_api/connection.rb +6 -6
- data/lib/github_api/orgs.rb +6 -1
- data/lib/github_api/orgs/members.rb +14 -4
- data/lib/github_api/orgs/teams.rb +16 -7
- data/lib/github_api/repos/downloads.rb +110 -32
- data/lib/github_api/repos/hooks.rb +5 -0
- data/lib/github_api/version.rb +1 -1
- data/spec/fixtures/orgs/members.json +9 -0
- data/spec/fixtures/orgs/org.json +18 -0
- data/spec/fixtures/orgs/orgs.json +8 -0
- data/spec/fixtures/orgs/team.json +8 -0
- data/spec/fixtures/orgs/team_repos.json +29 -0
- data/spec/fixtures/orgs/teams.json +7 -0
- data/spec/fixtures/repos/download.json +10 -0
- data/spec/fixtures/repos/download_s3.json +21 -0
- data/spec/fixtures/repos/downloads.json +12 -0
- data/spec/github/orgs/members_spec.rb +272 -2
- data/spec/github/orgs/teams_spec.rb +560 -2
- data/spec/github/orgs_spec.rb +157 -2
- data/spec/github/repos/downloads_spec.rb +233 -2
- data/spec/github/repos/hooks_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -0
- metadata +13 -3
data/lib/github_api/api.rb
CHANGED
@@ -37,12 +37,12 @@ module Github
|
|
37
37
|
|
38
38
|
# parse(options['resource'], options['mime_type'] || mime_type) if options['mime_type']
|
39
39
|
debugger
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
# merged_options = if connection_options.empty?
|
41
|
+
# header_options.merge(options)
|
42
|
+
# else
|
43
|
+
# connection_options.merge(header_options)
|
44
|
+
# end
|
45
|
+
merged_options = header_options.merge(options)
|
46
46
|
|
47
47
|
clear_cache unless options.empty?
|
48
48
|
|
data/lib/github_api/orgs.rb
CHANGED
@@ -17,7 +17,7 @@ module Github
|
|
17
17
|
email
|
18
18
|
location
|
19
19
|
name
|
20
|
-
]
|
20
|
+
].freeze
|
21
21
|
|
22
22
|
# Creates new Orgs API
|
23
23
|
def initialize(options = {})
|
@@ -47,6 +47,8 @@ module Github
|
|
47
47
|
return response unless block_given?
|
48
48
|
response.each { |el| yield el }
|
49
49
|
end
|
50
|
+
alias :list_orgs :orgs
|
51
|
+
alias :list_organizations :orgs
|
50
52
|
|
51
53
|
# Get properties for a single organization
|
52
54
|
#
|
@@ -58,6 +60,8 @@ module Github
|
|
58
60
|
_validate_presence_of org_name
|
59
61
|
get("/orgs/#{org_name}")
|
60
62
|
end
|
63
|
+
alias :get_org :org
|
64
|
+
alias :organisation :org
|
61
65
|
|
62
66
|
# Edit organization
|
63
67
|
#
|
@@ -85,6 +89,7 @@ module Github
|
|
85
89
|
|
86
90
|
patch("/orgs/#{org_name}", params)
|
87
91
|
end
|
92
|
+
alias :edit_organization :edit_org
|
88
93
|
|
89
94
|
end # Orgs
|
90
95
|
end # Github
|
@@ -6,15 +6,16 @@ module Github
|
|
6
6
|
|
7
7
|
# List members
|
8
8
|
#
|
9
|
-
# List all users who are members of an organization. A member is a user
|
10
|
-
# that belongs to at least 1 team in the organization.
|
11
|
-
# If the authenticated user is also a member of this organization then
|
12
|
-
# both concealed and public members will be returned.
|
9
|
+
# List all users who are members of an organization. A member is a user
|
10
|
+
# that belongs to at least 1 team in the organization.
|
11
|
+
# If the authenticated user is also a member of this organization then
|
12
|
+
# both concealed and public members will be returned.
|
13
13
|
# Otherwise only public members are returned.
|
14
14
|
#
|
15
15
|
# = Examples
|
16
16
|
# @github = Github.new
|
17
17
|
# @github.orgs.members 'org-name'
|
18
|
+
# @github.orgs.members 'org-name' { |memb| ... }
|
18
19
|
#
|
19
20
|
def members(org_name, params={})
|
20
21
|
_validate_presence_of org_name
|
@@ -23,6 +24,7 @@ module Github
|
|
23
24
|
return response unless block_given?
|
24
25
|
response.each { |el| yield el }
|
25
26
|
end
|
27
|
+
alias :list_members :members
|
26
28
|
|
27
29
|
# Check if user is a member of an organization
|
28
30
|
#
|
@@ -38,6 +40,7 @@ module Github
|
|
38
40
|
rescue Github::ResourceNotFound
|
39
41
|
false
|
40
42
|
end
|
43
|
+
alias :is_member? :member?
|
41
44
|
|
42
45
|
# Remove a member
|
43
46
|
# Removing a user from this list will remove them from all teams and
|
@@ -52,12 +55,14 @@ module Github
|
|
52
55
|
_normalize_params_keys(params)
|
53
56
|
delete("/orgs/#{org_name}/members/#{member_name}", params)
|
54
57
|
end
|
58
|
+
alias :remove_member :delete_member
|
55
59
|
|
56
60
|
# List public members
|
57
61
|
# Members of an organization can choose to have their membership publicized or not.
|
58
62
|
# = Examples
|
59
63
|
# @github = Github.new
|
60
64
|
# @github.orgs.public_members 'org-name'
|
65
|
+
# @github.orgs.public_members 'org-name' { |memb| ... }
|
61
66
|
#
|
62
67
|
def public_members(org_name, params={})
|
63
68
|
_validate_presence_of org_name
|
@@ -66,6 +71,8 @@ module Github
|
|
66
71
|
return response unless block_given?
|
67
72
|
response.each { |el| yield el }
|
68
73
|
end
|
74
|
+
alias :list_public_members :public_members
|
75
|
+
|
69
76
|
# Get if a user is a public member of an organization
|
70
77
|
#
|
71
78
|
# = Examples
|
@@ -92,6 +99,8 @@ module Github
|
|
92
99
|
_normalize_params_keys(params)
|
93
100
|
put("/orgs/#{org_name}/public_members/#{member_name}", params)
|
94
101
|
end
|
102
|
+
alias :make_public :publicize
|
103
|
+
alias :publicize_membership :publicize
|
95
104
|
|
96
105
|
# Conceal a user’s membership
|
97
106
|
#
|
@@ -104,6 +113,7 @@ module Github
|
|
104
113
|
_normalize_params_keys(params)
|
105
114
|
delete("/orgs/#{org_name}/public_members/#{member_name}", params)
|
106
115
|
end
|
116
|
+
alias :conceal_membership :conceal
|
107
117
|
|
108
118
|
end # Members
|
109
119
|
end # Orgs
|
@@ -7,9 +7,9 @@ module Github
|
|
7
7
|
# Api calls that require explicit permissions are noted.
|
8
8
|
module Teams
|
9
9
|
|
10
|
-
VALID_TEAM_PARAM_NAMES = %w[ name repo_names permission ]
|
10
|
+
VALID_TEAM_PARAM_NAMES = %w[ name repo_names permission ].freeze
|
11
11
|
VALID_TEAM_PARAM_VALUES = {
|
12
|
-
'permission' => %w[ pull push admin ]
|
12
|
+
'permission' => %w[ pull push admin ].freeze
|
13
13
|
}
|
14
14
|
|
15
15
|
# List teams
|
@@ -22,10 +22,11 @@ module Github
|
|
22
22
|
_validate_presence_of org_name
|
23
23
|
_normalize_params_keys(params)
|
24
24
|
|
25
|
-
get("/orgs/#{org_name}/teams", params)
|
25
|
+
response = get("/orgs/#{org_name}/teams", params)
|
26
26
|
return response unless block_given?
|
27
27
|
response.each { |el| yield el }
|
28
28
|
end
|
29
|
+
alias :list_teams :teams
|
29
30
|
|
30
31
|
# Get a team
|
31
32
|
#
|
@@ -39,6 +40,7 @@ module Github
|
|
39
40
|
|
40
41
|
get("/teams/#{team_name}", params)
|
41
42
|
end
|
43
|
+
alias :get_team :team
|
42
44
|
|
43
45
|
# Create a team
|
44
46
|
#
|
@@ -71,7 +73,7 @@ module Github
|
|
71
73
|
post("/orgs/#{org_name}/teams", params)
|
72
74
|
end
|
73
75
|
|
74
|
-
#
|
76
|
+
# Edit a team
|
75
77
|
# In order to edit a team, the authenticated user must be an owner of the org that the team is associated with.
|
76
78
|
#
|
77
79
|
# = Inputs
|
@@ -123,10 +125,11 @@ module Github
|
|
123
125
|
_validate_presence_of team_name
|
124
126
|
_normalize_params_keys(params)
|
125
127
|
|
126
|
-
response = get("/teams
|
128
|
+
response = get("/teams/#{team_name}/members", params)
|
127
129
|
return response unless block_given?
|
128
130
|
response.each { |el| yield el }
|
129
131
|
end
|
132
|
+
alias :list_team_members :team_members
|
130
133
|
|
131
134
|
# Check if a user is a member of a team
|
132
135
|
#
|
@@ -155,6 +158,7 @@ module Github
|
|
155
158
|
_normalize_params_keys(params)
|
156
159
|
put("/teams/#{team_name}/members/#{member_name}", params)
|
157
160
|
end
|
161
|
+
alias :add_member :add_team_member
|
158
162
|
|
159
163
|
# Remove a team member
|
160
164
|
# In order to remove a user from a team, the authenticated user must
|
@@ -171,6 +175,7 @@ module Github
|
|
171
175
|
_normalize_params_keys(params)
|
172
176
|
delete("/teams/#{team_name}/members/#{member_name}", params)
|
173
177
|
end
|
178
|
+
alias :remove_member :remove_team_member
|
174
179
|
|
175
180
|
# List team repositories
|
176
181
|
#
|
@@ -179,19 +184,20 @@ module Github
|
|
179
184
|
# @github.orgs.team_repos 'team-name'
|
180
185
|
#
|
181
186
|
def team_repos(team_name, params={})
|
182
|
-
_validate_presence_of team_name
|
187
|
+
_validate_presence_of team_name
|
183
188
|
_normalize_params_keys(params)
|
184
189
|
|
185
190
|
response = get("/teams/#{team_name}/repos", params)
|
186
191
|
return response unless block_given?
|
187
192
|
response.each { |el| yield el }
|
188
193
|
end
|
194
|
+
alias :team_repositories :team_repos
|
189
195
|
|
190
196
|
# Check if a repository belongs to a team
|
191
197
|
#
|
192
198
|
# = Examples
|
193
199
|
# @github = Github.new :oauth_token => '...'
|
194
|
-
# @github.orgs.team_repo? 'team-name'
|
200
|
+
# @github.orgs.team_repo? 'team-name', 'user-name', 'repo-name'
|
195
201
|
#
|
196
202
|
def team_repo?(team_name, user_name, repo_name, params={})
|
197
203
|
_validate_presence_of team_name, user_name, repo_name
|
@@ -201,6 +207,7 @@ module Github
|
|
201
207
|
rescue Github::ResourceNotFound
|
202
208
|
false
|
203
209
|
end
|
210
|
+
alias :team_repository? :team_repo?
|
204
211
|
|
205
212
|
# Add a team repository
|
206
213
|
# In order to add a repo to a team, the authenticated user must be
|
@@ -215,6 +222,7 @@ module Github
|
|
215
222
|
_normalize_params_keys(params)
|
216
223
|
put("/teams/#{team_name}/repos/#{user_name}/#{repo_name}", params)
|
217
224
|
end
|
225
|
+
alias :add_team_repository :add_team_repo
|
218
226
|
|
219
227
|
# Remove a team repository
|
220
228
|
# In order to add a repo to a team, the authenticated user must be
|
@@ -230,6 +238,7 @@ module Github
|
|
230
238
|
_normalize_params_keys(params)
|
231
239
|
delete("/teams/#{team_name}/repos/#{user_name}/#{repo_name}", params)
|
232
240
|
end
|
241
|
+
alias :remove_team_repository :remove_team_repo
|
233
242
|
|
234
243
|
end # Teams
|
235
244
|
end # Orgs
|
@@ -3,73 +3,151 @@
|
|
3
3
|
module Github
|
4
4
|
class Repos
|
5
5
|
module Downloads
|
6
|
-
|
6
|
+
|
7
7
|
REQUIRED_PARAMS = %w[ name size ]
|
8
|
-
VALID_PARAMS = %w[ name size description content_type ]
|
9
8
|
|
10
|
-
|
9
|
+
VALID_DOWNLOAD_PARAM_NAMES = %w[
|
10
|
+
name
|
11
|
+
size
|
12
|
+
description
|
13
|
+
content_type
|
14
|
+
].freeze
|
15
|
+
|
16
|
+
REQUIRED_S3_PARAMS = %w[
|
17
|
+
path
|
18
|
+
acl
|
19
|
+
name
|
20
|
+
accesskeyid
|
21
|
+
policy
|
22
|
+
signature
|
23
|
+
mime_type
|
24
|
+
].freeze
|
25
|
+
|
26
|
+
# Status code for successful upload to Amazon S3 service
|
27
|
+
SUCCESS_STATUS = 201
|
11
28
|
|
12
29
|
# List downloads for a repository
|
13
30
|
#
|
14
|
-
#
|
31
|
+
# = Examples
|
32
|
+
# @github = Github.new
|
33
|
+
# @github.repos.downloads 'user-name', 'repo-name'
|
34
|
+
# @github.repos.downloads 'user-name', 'repo-name' { |downl| ... }
|
15
35
|
#
|
16
|
-
def downloads(
|
17
|
-
|
36
|
+
def downloads(user_name=nil, repo_name=nil, params={})
|
37
|
+
_update_user_repo_params(user_name, repo_name)
|
38
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
39
|
+
_normalize_params_keys(params)
|
40
|
+
|
41
|
+
response = get("/repos/#{user}/#{repo}/downloads")
|
42
|
+
return response unless block_given?
|
43
|
+
response.each { |el| yield el }
|
18
44
|
end
|
45
|
+
alias :list_downloads :downloads
|
46
|
+
alias :get_downloads :downloads
|
19
47
|
|
20
48
|
# Get a single download
|
21
49
|
#
|
22
|
-
#
|
50
|
+
# = Examples
|
51
|
+
# @github = Github.new
|
52
|
+
# @github.repos.download 'user-name', 'repo-name'
|
23
53
|
#
|
24
|
-
def
|
54
|
+
def download(user_name, repo_name, download_id, params={})
|
55
|
+
_update_user_repo_params(user_name, repo_name)
|
56
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
57
|
+
_validate_presence_of download_id
|
58
|
+
_normalize_params_keys(params)
|
59
|
+
|
25
60
|
get("/repos/#{user}/#{repo}/downloads/#{download_id}")
|
26
61
|
end
|
62
|
+
alias :get_download :download
|
27
63
|
|
28
64
|
# Delete download from a repository
|
29
65
|
#
|
30
|
-
#
|
66
|
+
# = Examples
|
67
|
+
# @github = Github.new
|
68
|
+
# @github.repos.delete_download 'user-name', 'repo-name', 'download-id'
|
31
69
|
#
|
32
|
-
def delete_download(
|
70
|
+
def delete_download(user_name, repo_name, download_id, params={})
|
71
|
+
_update_user_repo_params(user_name, repo_name)
|
72
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
73
|
+
_validate_presence_of download_id
|
74
|
+
_normalize_params_keys(params)
|
75
|
+
|
33
76
|
delete("/repos/#{user}/#{repo}/downloads/#{download_id}")
|
34
77
|
end
|
35
78
|
|
36
|
-
# Creating a new download is a two step process.
|
79
|
+
# Creating a new download is a two step process.
|
37
80
|
# You must first create a new download resource using this method.
|
38
81
|
# Response from this method is to be used in #upload method.
|
39
82
|
#
|
40
|
-
#
|
83
|
+
# = Inputs
|
84
|
+
# * <tt>:name</tt> - Required string - name of the file that is being created.
|
85
|
+
# * <tt>:size</tt> - Required number - size of file in bytes.
|
86
|
+
# * <tt>:description</tt> - Optional string
|
87
|
+
# * <tt>:content_type</tt> - Optional string
|
41
88
|
#
|
42
|
-
|
89
|
+
# = Examples
|
90
|
+
# @github = Github.new
|
91
|
+
# @github.repos.create_download 'user-name', 'repo-name',
|
92
|
+
# "name" => "new_file.jpg",
|
93
|
+
# "size" => 114034,
|
94
|
+
# "description" => "Latest release",
|
95
|
+
# "content_type" => "text/plain"
|
96
|
+
#
|
97
|
+
def create_download(user_name=nil, repo_name=nil, params={})
|
98
|
+
_update_user_repo_params(user_name, repo_name)
|
99
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
100
|
+
|
43
101
|
_normalize_params_keys(params)
|
44
|
-
|
45
|
-
|
102
|
+
_filter_params_keys(VALID_DOWNLOAD_PARAM_NAMES, params)
|
103
|
+
|
104
|
+
raise ArgumentError, "Required parameters are: #{REQUIRED_PARAMS.join(', ')}" unless _validate_inputs(REQUIRED_PARAMS, params)
|
46
105
|
|
47
106
|
post("/repos/#{user}/#{repo}/downloads", params)
|
48
107
|
end
|
49
|
-
|
50
|
-
# Upload a file to Amazon, using the reponse instance from
|
51
|
-
# Github::Repos::Downloads#
|
108
|
+
|
109
|
+
# Upload a file to Amazon, using the reponse instance from
|
110
|
+
# Github::Repos::Downloads#create_download. This can be done by passing
|
52
111
|
# the response object as an argument to upload method.
|
53
112
|
#
|
54
|
-
|
113
|
+
# = Parameters
|
114
|
+
# * <tt>resource</tt> - Required Hashie::Mash -resource of the create_download call
|
115
|
+
# * <tt>:size</tt> - Required number - size of file in bytes.
|
116
|
+
#
|
117
|
+
def upload(resource, filename)
|
118
|
+
_validate_presence_of resource, filename
|
119
|
+
raise ArgumentError, 'Need to provied resource of Github::Repose::Downloads#create_download call' unless resource.is_a? Hashie::Mash
|
120
|
+
|
55
121
|
REQUIRED_S3_PARAMS.each do |key|
|
56
|
-
raise ArgumentError, "
|
122
|
+
raise ArgumentError, "Expected following key: #{key}" unless resource.respond_to?(key)
|
57
123
|
end
|
58
|
-
|
124
|
+
|
59
125
|
# TODO use ordered hash if Ruby < 1.9
|
126
|
+
hash = ruby_18 {
|
127
|
+
require 'active_support'
|
128
|
+
ActiveSupport::OrderedHash.new } || ruby_19 { Hash.new }
|
129
|
+
|
60
130
|
mapped_params = {
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
131
|
+
'key' => resource.path,
|
132
|
+
'acl' => resource.acl,
|
133
|
+
'success_action_status' => SUCCESS_STATUS,
|
134
|
+
'Filename' => resource.name,
|
135
|
+
'AWSAccessKeyId' => resource.accesskeyid,
|
136
|
+
'Policy' => resource.policy,
|
137
|
+
'Signature' => resource.signature,
|
138
|
+
'Content-Type' => resource.mime_type,
|
139
|
+
'file' => prepend_at_for(filename.to_s)
|
70
140
|
}
|
71
|
-
|
72
|
-
post(
|
141
|
+
|
142
|
+
post('', mapped_params, { :url => resource.s3_url })
|
143
|
+
end
|
144
|
+
alias :upload_to_s3 :upload
|
145
|
+
alias :upload_to_amazon :upload
|
146
|
+
|
147
|
+
private
|
148
|
+
|
149
|
+
def prepend_at_for(file)
|
150
|
+
/^@.*/ =~ file ? '@' + file : file
|
73
151
|
end
|
74
152
|
|
75
153
|
end # Downloads
|