github_api 0.2.1 → 0.2.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.
- 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
|