octodoggy 4.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/CONTRIBUTING.md +22 -0
- data/LICENSE.md +20 -0
- data/README.md +714 -0
- data/Rakefile +22 -0
- data/lib/ext/sawyer/relation.rb +10 -0
- data/lib/octokit.rb +59 -0
- data/lib/octokit/arguments.rb +14 -0
- data/lib/octokit/authentication.rb +82 -0
- data/lib/octokit/client.rb +238 -0
- data/lib/octokit/client/authorizations.rb +244 -0
- data/lib/octokit/client/commit_comments.rb +95 -0
- data/lib/octokit/client/commits.rb +239 -0
- data/lib/octokit/client/contents.rb +162 -0
- data/lib/octokit/client/deployments.rb +62 -0
- data/lib/octokit/client/downloads.rb +50 -0
- data/lib/octokit/client/emojis.rb +18 -0
- data/lib/octokit/client/events.rb +151 -0
- data/lib/octokit/client/feeds.rb +33 -0
- data/lib/octokit/client/gists.rb +233 -0
- data/lib/octokit/client/gitignore.rb +43 -0
- data/lib/octokit/client/hooks.rb +297 -0
- data/lib/octokit/client/integrations.rb +77 -0
- data/lib/octokit/client/issues.rb +321 -0
- data/lib/octokit/client/labels.rb +156 -0
- data/lib/octokit/client/legacy_search.rb +42 -0
- data/lib/octokit/client/licenses.rb +45 -0
- data/lib/octokit/client/markdown.rb +27 -0
- data/lib/octokit/client/meta.rb +21 -0
- data/lib/octokit/client/milestones.rb +87 -0
- data/lib/octokit/client/notifications.rb +171 -0
- data/lib/octokit/client/objects.rb +141 -0
- data/lib/octokit/client/organizations.rb +768 -0
- data/lib/octokit/client/pages.rb +63 -0
- data/lib/octokit/client/projects.rb +314 -0
- data/lib/octokit/client/pub_sub_hubbub.rb +111 -0
- data/lib/octokit/client/pull_requests.rb +301 -0
- data/lib/octokit/client/rate_limit.rb +54 -0
- data/lib/octokit/client/reactions.rb +158 -0
- data/lib/octokit/client/refs.rb +118 -0
- data/lib/octokit/client/releases.rb +163 -0
- data/lib/octokit/client/repositories.rb +654 -0
- data/lib/octokit/client/repository_invitations.rb +103 -0
- data/lib/octokit/client/reviews.rb +174 -0
- data/lib/octokit/client/say.rb +19 -0
- data/lib/octokit/client/search.rb +76 -0
- data/lib/octokit/client/service_status.rb +38 -0
- data/lib/octokit/client/source_import.rb +161 -0
- data/lib/octokit/client/stats.rb +105 -0
- data/lib/octokit/client/statuses.rb +47 -0
- data/lib/octokit/client/traffic.rb +69 -0
- data/lib/octokit/client/users.rb +354 -0
- data/lib/octokit/configurable.rb +147 -0
- data/lib/octokit/connection.rb +199 -0
- data/lib/octokit/default.rb +166 -0
- data/lib/octokit/enterprise_admin_client.rb +40 -0
- data/lib/octokit/enterprise_admin_client/admin_stats.rb +120 -0
- data/lib/octokit/enterprise_admin_client/license.rb +18 -0
- data/lib/octokit/enterprise_admin_client/orgs.rb +27 -0
- data/lib/octokit/enterprise_admin_client/search_indexing.rb +83 -0
- data/lib/octokit/enterprise_admin_client/users.rb +128 -0
- data/lib/octokit/enterprise_management_console_client.rb +50 -0
- data/lib/octokit/enterprise_management_console_client/management_console.rb +176 -0
- data/lib/octokit/error.rb +286 -0
- data/lib/octokit/gist.rb +36 -0
- data/lib/octokit/middleware/follow_redirects.rb +131 -0
- data/lib/octokit/organization.rb +17 -0
- data/lib/octokit/preview.rb +38 -0
- data/lib/octokit/rate_limit.rb +33 -0
- data/lib/octokit/repo_arguments.rb +19 -0
- data/lib/octokit/repository.rb +93 -0
- data/lib/octokit/response/feed_parser.rb +21 -0
- data/lib/octokit/response/raise_error.rb +21 -0
- data/lib/octokit/user.rb +19 -0
- data/lib/octokit/version.rb +17 -0
- data/lib/octokit/warnable.rb +17 -0
- data/octokit.gemspec +22 -0
- metadata +160 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Gitignore API
|
5
|
+
#
|
6
|
+
# @see https://developer.github.com/v3/gitignore/
|
7
|
+
module Gitignore
|
8
|
+
|
9
|
+
# Listing available gitignore templates.
|
10
|
+
#
|
11
|
+
# These templates can be passed option when creating a repository.
|
12
|
+
#
|
13
|
+
# @see https://developer.github.com/v3/gitignore/#listing-available-templates
|
14
|
+
#
|
15
|
+
# @return [Array<String>] List of templates.
|
16
|
+
#
|
17
|
+
# @example Git all the gitignore templates
|
18
|
+
# @client.gitignore_templates
|
19
|
+
def gitignore_templates(options = {})
|
20
|
+
get "gitignore/templates", options
|
21
|
+
end
|
22
|
+
|
23
|
+
# Get a gitignore template.
|
24
|
+
#
|
25
|
+
# Use the raw {http://developer.github.com/v3/media/ media type} to get
|
26
|
+
# the raw contents.
|
27
|
+
#
|
28
|
+
# @param template_name [String] Name of the template. Template names are
|
29
|
+
# case sensitive, make sure to use a valid name from the
|
30
|
+
# .gitignore_templates list.
|
31
|
+
#
|
32
|
+
# @see https://developer.github.com/v3/gitignore/#get-a-single-template
|
33
|
+
#
|
34
|
+
# @return [Sawyer::Resource] Gitignore template
|
35
|
+
#
|
36
|
+
# @example Get the Ruby gitignore template
|
37
|
+
# @client.gitignore_template('Ruby')
|
38
|
+
def gitignore_template(template_name, options = {})
|
39
|
+
get "gitignore/templates/#{template_name}", options
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,297 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Hooks API
|
5
|
+
module Hooks
|
6
|
+
|
7
|
+
# List all Service Hooks supported by GitHub
|
8
|
+
#
|
9
|
+
# @return [Sawyer::Resource] A list of all hooks on GitHub
|
10
|
+
# @see https://developer.github.com/v3/repos/hooks/#services
|
11
|
+
# @example List all hooks
|
12
|
+
# Octokit.available_hooks
|
13
|
+
def available_hooks(options = {})
|
14
|
+
get "hooks", options
|
15
|
+
end
|
16
|
+
|
17
|
+
# List repo hooks
|
18
|
+
#
|
19
|
+
# Requires authenticated client.
|
20
|
+
#
|
21
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
22
|
+
# @return [Array<Sawyer::Resource>] Array of hashes representing hooks.
|
23
|
+
# @see https://developer.github.com/v3/repos/hooks/#list-hooks
|
24
|
+
# @example
|
25
|
+
# @client.hooks('octokit/octokit.rb')
|
26
|
+
def hooks(repo, options = {})
|
27
|
+
paginate "#{Repository.path repo}/hooks", options
|
28
|
+
end
|
29
|
+
|
30
|
+
# Get single hook
|
31
|
+
#
|
32
|
+
# Requires authenticated client.
|
33
|
+
#
|
34
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
35
|
+
# @param id [Integer] Id of the hook to get.
|
36
|
+
# @return [Sawyer::Resource] Hash representing hook.
|
37
|
+
# @see https://developer.github.com/v3/repos/hooks/#get-single-hook
|
38
|
+
# @example
|
39
|
+
# @client.hook('octokit/octokit.rb', 100000)
|
40
|
+
def hook(repo, id, options = {})
|
41
|
+
get "#{Repository.path repo}/hooks/#{id}", options
|
42
|
+
end
|
43
|
+
|
44
|
+
# Create a hook
|
45
|
+
#
|
46
|
+
# Requires authenticated client.
|
47
|
+
#
|
48
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
49
|
+
# @param name [String] The name of the service that is being called. See
|
50
|
+
# {https://api.github.com/hooks Hooks} for the possible names.
|
51
|
+
# @param config [Hash] A Hash containing key/value pairs to provide
|
52
|
+
# settings for this hook. These settings vary between the services and
|
53
|
+
# are defined in the {https://github.com/github/github-services github-services} repo.
|
54
|
+
# @option options [Array<String>] :events ('["push"]') Determines what
|
55
|
+
# events the hook is triggered for.
|
56
|
+
# @option options [Boolean] :active Determines whether the hook is
|
57
|
+
# actually triggered on pushes.
|
58
|
+
# @return [Sawyer::Resource] Hook info for the new hook
|
59
|
+
# @see https://api.github.com/hooks
|
60
|
+
# @see https://github.com/github/github-services
|
61
|
+
# @see https://developer.github.com/v3/repos/hooks/#create-a-hook
|
62
|
+
# @example
|
63
|
+
# @client.create_hook(
|
64
|
+
# 'octokit/octokit.rb',
|
65
|
+
# 'web',
|
66
|
+
# {
|
67
|
+
# :url => 'http://something.com/webhook',
|
68
|
+
# :content_type => 'json'
|
69
|
+
# },
|
70
|
+
# {
|
71
|
+
# :events => ['push', 'pull_request'],
|
72
|
+
# :active => true
|
73
|
+
# }
|
74
|
+
# )
|
75
|
+
def create_hook(repo, name, config, options = {})
|
76
|
+
options = {:name => name, :config => config, :events => ["push"], :active => true}.merge(options)
|
77
|
+
post "#{Repository.path repo}/hooks", options
|
78
|
+
end
|
79
|
+
|
80
|
+
# Edit a hook
|
81
|
+
#
|
82
|
+
# Requires authenticated client.
|
83
|
+
#
|
84
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
85
|
+
# @param id [Integer] Id of the hook being updated.
|
86
|
+
# @param name [String] The name of the service that is being called. See
|
87
|
+
# {https://api.github.com/hooks Hooks} for the possible names.
|
88
|
+
# @param config [Hash] A Hash containing key/value pairs to provide
|
89
|
+
# settings for this hook. These settings vary between the services and
|
90
|
+
# are defined in the {https://github.com/github/github-services github-services} repo.
|
91
|
+
# @option options [Array<String>] :events ('["push"]') Determines what
|
92
|
+
# events the hook is triggered for.
|
93
|
+
# @option options [Array<String>] :add_events Determines a list of events
|
94
|
+
# to be added to the list of events that the Hook triggers for.
|
95
|
+
# @option options [Array<String>] :remove_events Determines a list of events
|
96
|
+
# to be removed from the list of events that the Hook triggers for.
|
97
|
+
# @option options [Boolean] :active Determines whether the hook is
|
98
|
+
# actually triggered on pushes.
|
99
|
+
# @return [Sawyer::Resource] Hook info for the updated hook
|
100
|
+
# @see https://api.github.com/hooks
|
101
|
+
# @see https://github.com/github/github-services
|
102
|
+
# @see https://developer.github.com/v3/repos/hooks/#edit-a-hook
|
103
|
+
# @example
|
104
|
+
# @client.edit_hook(
|
105
|
+
# 'octokit/octokit.rb',
|
106
|
+
# 100000,
|
107
|
+
# 'web',
|
108
|
+
# {
|
109
|
+
# :url => 'http://something.com/webhook',
|
110
|
+
# :content_type => 'json'
|
111
|
+
# },
|
112
|
+
# {
|
113
|
+
# :add_events => ['status'],
|
114
|
+
# :remove_events => ['pull_request'],
|
115
|
+
# :active => true
|
116
|
+
# }
|
117
|
+
# )
|
118
|
+
def edit_hook(repo, id, name, config, options = {})
|
119
|
+
options = {:name => name, :config => config}.merge(options)
|
120
|
+
patch "#{Repository.path repo}/hooks/#{id}", options
|
121
|
+
end
|
122
|
+
|
123
|
+
# Delete hook
|
124
|
+
#
|
125
|
+
# Requires authenticated client.
|
126
|
+
#
|
127
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
128
|
+
# @param id [Integer] Id of the hook to remove.
|
129
|
+
# @return [Boolean] True if hook removed, false otherwise.
|
130
|
+
# @see https://developer.github.com/v3/repos/hooks/#delete-a-hook
|
131
|
+
# @example
|
132
|
+
# @client.remove_hook('octokit/octokit.rb', 1000000)
|
133
|
+
def remove_hook(repo, id, options = {})
|
134
|
+
boolean_from_response :delete, "#{Repository.path repo}/hooks/#{id}", options
|
135
|
+
end
|
136
|
+
|
137
|
+
# Test hook
|
138
|
+
#
|
139
|
+
# Requires authenticated client.
|
140
|
+
#
|
141
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
142
|
+
# @param id [Integer] Id of the hook to test.
|
143
|
+
# @return [Boolean] Success
|
144
|
+
# @see https://developer.github.com/v3/repos/hooks/#test-a-push-hook
|
145
|
+
# @example
|
146
|
+
# @client.test_hook('octokit/octokit.rb', 1000000)
|
147
|
+
def test_hook(repo, id, options = {})
|
148
|
+
boolean_from_response :post, "#{Repository.path repo}/hooks/#{id}/tests", options
|
149
|
+
end
|
150
|
+
|
151
|
+
# Ping hook
|
152
|
+
#
|
153
|
+
# Requires authenticated client.
|
154
|
+
#
|
155
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
156
|
+
# @param id [Integer] Id of the hook to send a ping.
|
157
|
+
# @return [Boolean] Ping requested?
|
158
|
+
# @see https://developer.github.com/v3/repos/hooks/#ping-a-hook
|
159
|
+
# @example
|
160
|
+
# @client.ping_hook('octokit/octokit.rb', 1000000)
|
161
|
+
def ping_hook(repo, id, options={})
|
162
|
+
boolean_from_response :post, "#{Repository.path repo}/hooks/#{id}/pings", options
|
163
|
+
end
|
164
|
+
|
165
|
+
# List org hooks
|
166
|
+
#
|
167
|
+
# Requires client authenticated as admin for the org.
|
168
|
+
#
|
169
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
170
|
+
# @return [Array<Sawyer::Resource>] Array of hashes representing hooks.
|
171
|
+
# @see https://developer.github.com/v3/orgs/hooks/#list-hooks
|
172
|
+
# @example
|
173
|
+
# @client.org_hooks('octokit')
|
174
|
+
def org_hooks(org, options = {})
|
175
|
+
paginate "#{Organization.path org}/hooks", options
|
176
|
+
end
|
177
|
+
alias :list_org_hooks :org_hooks
|
178
|
+
|
179
|
+
# Get an org hook
|
180
|
+
#
|
181
|
+
# Requires client authenticated as admin for the org.
|
182
|
+
#
|
183
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
184
|
+
# @param id [Integer] Id of the hook to get.
|
185
|
+
# @return [Sawyer::Resource] Hash representing hook.
|
186
|
+
# @see https://developer.github.com/v3/orgs/hooks/#get-single-hook
|
187
|
+
# @example
|
188
|
+
# @client.org_hook('octokit', 123)
|
189
|
+
def org_hook(org, id, options = {})
|
190
|
+
get "#{Organization.path org}/hooks/#{id}", options
|
191
|
+
end
|
192
|
+
|
193
|
+
# Create an org hook
|
194
|
+
#
|
195
|
+
# Requires client authenticated as admin for the org.
|
196
|
+
#
|
197
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
198
|
+
# @param config [Hash] A Hash containing key/value pairs to provide
|
199
|
+
# settings for this hook.
|
200
|
+
# @option options [Array<String>] :events ('["push"]') Determines what
|
201
|
+
# events the hook is triggered for.
|
202
|
+
# @option options [Boolean] :active Determines whether the hook is
|
203
|
+
# actually triggered on pushes.
|
204
|
+
# @return [Sawyer::Resource] Hook info for the new hook
|
205
|
+
# @see https://api.github.com/hooks
|
206
|
+
# @see https://developer.github.com/v3/orgs/hooks/#create-a-hook
|
207
|
+
# @example
|
208
|
+
# @client.create_org_hook(
|
209
|
+
# 'octokit',
|
210
|
+
# {
|
211
|
+
# :url => 'http://something.com/webhook',
|
212
|
+
# :content_type => 'json'
|
213
|
+
# },
|
214
|
+
# {
|
215
|
+
# :events => ['push', 'pull_request'],
|
216
|
+
# :active => true
|
217
|
+
# }
|
218
|
+
# )
|
219
|
+
def create_org_hook(org, config, options = {})
|
220
|
+
options = { :name => "web", :config => config }.merge(options)
|
221
|
+
post "#{Organization.path org}/hooks", options
|
222
|
+
end
|
223
|
+
|
224
|
+
# Update an org hook
|
225
|
+
#
|
226
|
+
# Requires client authenticated as admin for the org.
|
227
|
+
#
|
228
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
229
|
+
# @param id [Integer] Id of the hook to update.
|
230
|
+
# @param config [Hash] A Hash containing key/value pairs to provide
|
231
|
+
# settings for this hook.
|
232
|
+
# @option options [Array<String>] :events ('["push"]') Determines what
|
233
|
+
# events the hook is triggered for.
|
234
|
+
# @option options [Boolean] :active Determines whether the hook is
|
235
|
+
# actually triggered on pushes.
|
236
|
+
# @return [Sawyer::Resource] Hook info for the new hook
|
237
|
+
# @see https://api.github.com/hooks
|
238
|
+
# @see https://developer.github.com/v3/orgs/hooks/#edit-a-hook
|
239
|
+
# @example
|
240
|
+
# @client.edit_org_hook(
|
241
|
+
# 'octokit',
|
242
|
+
# 123,
|
243
|
+
# {
|
244
|
+
# :url => 'http://something.com/webhook',
|
245
|
+
# :content_type => 'json'
|
246
|
+
# },
|
247
|
+
# {
|
248
|
+
# :events => ['push', 'pull_request'],
|
249
|
+
# :active => true
|
250
|
+
# }
|
251
|
+
# )
|
252
|
+
def edit_org_hook(org, id, config, options = {})
|
253
|
+
options = { :config => config }.merge(options)
|
254
|
+
patch "#{Organization.path org}/hooks/#{id}", options
|
255
|
+
end
|
256
|
+
alias :update_org_hook :edit_org_hook
|
257
|
+
|
258
|
+
# Ping org hook
|
259
|
+
#
|
260
|
+
# Requires client authenticated as admin for the org.
|
261
|
+
#
|
262
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
263
|
+
# @param id [Integer] Id of the hook to update.
|
264
|
+
# @return [Boolean] Success
|
265
|
+
# @see https://developer.github.com/v3/orgs/hooks/#ping-a-hook
|
266
|
+
# @example
|
267
|
+
# @client.ping_org_hook('octokit', 1000000)
|
268
|
+
def ping_org_hook(org, id, options = {})
|
269
|
+
boolean_from_response :post, "#{Organization.path org}/hooks/#{id}/pings", options
|
270
|
+
end
|
271
|
+
|
272
|
+
# Remove org hook
|
273
|
+
#
|
274
|
+
# Requires client authenticated as admin for the org.
|
275
|
+
#
|
276
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
277
|
+
# @param id [Integer] Id of the hook to update.
|
278
|
+
# @return [Boolean] True if hook removed, false otherwise.
|
279
|
+
# @see https://developer.github.com/v3/orgs/hooks/#delete-a-hook
|
280
|
+
# @example
|
281
|
+
# @client.remove_org_hook('octokit', 1000000)
|
282
|
+
def remove_org_hook(org, id, options = {})
|
283
|
+
boolean_from_response :delete, "#{Organization.path org}/hooks/#{id}", options
|
284
|
+
end
|
285
|
+
|
286
|
+
# Parse payload string
|
287
|
+
#
|
288
|
+
# @param payload_string [String] The payload
|
289
|
+
# @return [Sawyer::Resource] The payload object
|
290
|
+
# @see https://developer.github.com/v3/activity/events/types/
|
291
|
+
def parse_payload(payload_string)
|
292
|
+
payload_hash = agent.class.decode payload_string
|
293
|
+
Sawyer::Resource.new agent, payload_hash
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Integrations API
|
5
|
+
module Integrations
|
6
|
+
|
7
|
+
# Find all installations that belong to an Integration
|
8
|
+
#
|
9
|
+
# @param options [Hash] An customizable set of options
|
10
|
+
#
|
11
|
+
# @see https://developer.github.com/v3/integrations/#find-installations
|
12
|
+
#
|
13
|
+
# @return [Array<Sawyer::Resource>] A list of installations
|
14
|
+
def find_integration_installations(options = {})
|
15
|
+
opts = ensure_api_media_type(:integrations, options)
|
16
|
+
paginate "/integration/installations", opts
|
17
|
+
end
|
18
|
+
alias find_installations find_integration_installations
|
19
|
+
|
20
|
+
# Create a new installation token
|
21
|
+
#
|
22
|
+
# @param installation [Integer] The id of a a GitHub Integration Installation
|
23
|
+
# @param options [Hash] An customizable set of options
|
24
|
+
#
|
25
|
+
# @see https://developer.github.com/v3/integrations/#find-installations
|
26
|
+
#
|
27
|
+
# @return [<Sawyer::Resource>] An installation token
|
28
|
+
def create_integration_installation_access_token(installation, options = {})
|
29
|
+
opts = ensure_api_media_type(:integrations, options)
|
30
|
+
post "/installations/#{installation}/access_tokens", opts
|
31
|
+
end
|
32
|
+
alias create_installation_access_token create_integration_installation_access_token
|
33
|
+
|
34
|
+
# List repositories that are accessible to the authenticated installation
|
35
|
+
#
|
36
|
+
# @param options [Hash] An customizable set of options
|
37
|
+
# @see https://developer.github.com/v3/integrations/installations/#list-repositories
|
38
|
+
#
|
39
|
+
# @return [Array<Sawyer::Resource>] A list of repositories
|
40
|
+
def list_integration_installation_repositories(options = {})
|
41
|
+
opts = ensure_api_media_type(:integrations, options)
|
42
|
+
paginate "/installation/repositories", opts
|
43
|
+
end
|
44
|
+
alias list_installation_repos list_integration_installation_repositories
|
45
|
+
|
46
|
+
# Add a single repository to an installation
|
47
|
+
#
|
48
|
+
# @param installation [Integer] The id of a a GitHub Integration Installation
|
49
|
+
# @param repo [Integer] The id of the GitHub repository
|
50
|
+
# @param options [Hash] An customizable set of options
|
51
|
+
#
|
52
|
+
# @see https://developer.github.com/v3/integrations/installations/#add-repository-to-installation
|
53
|
+
#
|
54
|
+
# @return [Boolean] Success
|
55
|
+
def add_repository_to_integration_installation(installation, repo, options = {})
|
56
|
+
opts = ensure_api_media_type(:integrations, options)
|
57
|
+
boolean_from_response :put, "/installations/#{installation}/repositories/#{repo}", opts
|
58
|
+
end
|
59
|
+
alias add_repo_to_installation add_repository_to_integration_installation
|
60
|
+
|
61
|
+
# Remove a single repository to an installation
|
62
|
+
#
|
63
|
+
# @param installation [Integer] The id of a a GitHub Integration Installation
|
64
|
+
# @param repo [Integer] The id of the GitHub repository
|
65
|
+
# @param options [Hash] An customizable set of options
|
66
|
+
#
|
67
|
+
# @see https://developer.github.com/v3/integrations/installations/#remove-repository-from-installation
|
68
|
+
#
|
69
|
+
# @return [Boolean] Success
|
70
|
+
def remove_repository_from_integration_installation(installation, repo, options = {})
|
71
|
+
opts = ensure_api_media_type(:integrations, options)
|
72
|
+
boolean_from_response :delete, "/installations/#{installation}/repositories/#{repo}", opts
|
73
|
+
end
|
74
|
+
alias remove_repo_from_installation remove_repository_from_integration_installation
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,321 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Issues API
|
5
|
+
#
|
6
|
+
# @see https://developer.github.com/v3/issues/
|
7
|
+
module Issues
|
8
|
+
|
9
|
+
# List issues for the authenticated user or repository
|
10
|
+
#
|
11
|
+
# @param repository [Integer, String, Repository, Hash] A GitHub repository.
|
12
|
+
# @param options [Sawyer::Resource] A customizable set of options.
|
13
|
+
# @option options [Integer] :milestone Milestone number.
|
14
|
+
# @option options [String] :state (open) State: <tt>open</tt>, <tt>closed</tt>, or <tt>all</tt>.
|
15
|
+
# @option options [String] :assignee User login.
|
16
|
+
# @option options [String] :creator User login.
|
17
|
+
# @option options [String] :mentioned User login.
|
18
|
+
# @option options [String] :labels List of comma separated Label names. Example: <tt>bug,ui,@high</tt>.
|
19
|
+
# @option options [String] :sort (created) Sort: <tt>created</tt>, <tt>updated</tt>, or <tt>comments</tt>.
|
20
|
+
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
|
21
|
+
# @option options [Integer] :page (1) Page number.
|
22
|
+
# @return [Array<Sawyer::Resource>] A list of issues for a repository.
|
23
|
+
# @see https://developer.github.com/v3/issues/#list-issues-for-a-repository
|
24
|
+
# @see https://developer.github.com/v3/issues/#list-issues
|
25
|
+
# @example List issues for a repository
|
26
|
+
# Octokit.list_issues("sferik/rails_admin")
|
27
|
+
# @example List issues for the authenticated user across repositories
|
28
|
+
# @client = Octokit::Client.new(:login => 'foo', :password => 'bar')
|
29
|
+
# @client.list_issues
|
30
|
+
def list_issues(repository = nil, options = {})
|
31
|
+
path = repository ? "#{Repository.new(repository).path}/issues" : "issues"
|
32
|
+
paginate path, options
|
33
|
+
end
|
34
|
+
alias :issues :list_issues
|
35
|
+
|
36
|
+
# List all issues across owned and member repositories for the authenticated user
|
37
|
+
#
|
38
|
+
# @param options [Sawyer::Resource] A customizable set of options.
|
39
|
+
# @option options [String] :filter (assigned) State: <tt>assigned</tt>, <tt>created</tt>, <tt>mentioned</tt>, <tt>subscribed</tt> or <tt>closed</tt>.
|
40
|
+
# @option options [String] :state (open) State: <tt>open</tt>, <tt>closed</tt>, or <tt>all</tt>.
|
41
|
+
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
42
|
+
# @option options [String] :sort (created) Sort: <tt>created</tt>, <tt>updated</tt>, or <tt>comments</tt>.
|
43
|
+
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
|
44
|
+
# @option options [Integer] :page (1) Page number.
|
45
|
+
# @option options [String] :since Timestamp in ISO 8601
|
46
|
+
# format: YYYY-MM-DDTHH:MM:SSZ
|
47
|
+
# @return [Array<Sawyer::Resource>] A list of issues for a repository.
|
48
|
+
# @see https://developer.github.com/v3/issues/#list-issues
|
49
|
+
# @example List issues for the authenticated user across owned and member repositories
|
50
|
+
# @client = Octokit::Client.new(:login => 'foo', :password => 'bar')
|
51
|
+
# @client.user_issues
|
52
|
+
def user_issues(options = {})
|
53
|
+
paginate 'user/issues', options
|
54
|
+
end
|
55
|
+
|
56
|
+
# List all issues for a given organization for the authenticated user
|
57
|
+
#
|
58
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
59
|
+
# @param options [Sawyer::Resource] A customizable set of options.
|
60
|
+
# @option options [String] :filter (assigned) State: <tt>assigned</tt>, <tt>created</tt>, <tt>mentioned</tt>, <tt>subscribed</tt> or <tt>closed</tt>.
|
61
|
+
# @option options [String] :state (open) State: <tt>open</tt>, <tt>closed</tt>, or <tt>all</tt>.
|
62
|
+
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
63
|
+
# @option options [String] :sort (created) Sort: <tt>created</tt>, <tt>updated</tt>, or <tt>comments</tt>.
|
64
|
+
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
|
65
|
+
# @option options [Integer] :page (1) Page number.
|
66
|
+
# @option options [String] :since Timestamp in ISO 8601
|
67
|
+
# format: YYYY-MM-DDTHH:MM:SSZ
|
68
|
+
# @return [Array<Sawyer::Resource>] A list of issues.
|
69
|
+
# @see https://developer.github.com/v3/issues/#list-issues
|
70
|
+
# @example List all issues for a given organization for the authenticated user
|
71
|
+
# @client = Octokit::Client.new(:login => 'foo', :password => 'bar')
|
72
|
+
# @client.org_issues("octokit")
|
73
|
+
def org_issues(org, options = {})
|
74
|
+
paginate "#{Organization.path org}/issues", options
|
75
|
+
end
|
76
|
+
|
77
|
+
# Create an issue for a repository
|
78
|
+
#
|
79
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
80
|
+
# @param title [String] A descriptive title
|
81
|
+
# @param body [String] An optional concise description
|
82
|
+
# @param options [Hash] A customizable set of options.
|
83
|
+
# @option options [String] :assignee User login.
|
84
|
+
# @option options [Integer] :milestone Milestone number.
|
85
|
+
# @option options [String] :labels List of comma separated Label names. Example: <tt>bug,ui,@high</tt>.
|
86
|
+
# @return [Sawyer::Resource] Your newly created issue
|
87
|
+
# @see https://developer.github.com/v3/issues/#create-an-issue
|
88
|
+
# @example Create a new Issues for a repository
|
89
|
+
# Octokit.create_issue("sferik/rails_admin", 'Updated Docs', 'Added some extra links')
|
90
|
+
def create_issue(repo, title, body = nil, options = {})
|
91
|
+
options[:labels] = case options[:labels]
|
92
|
+
when String
|
93
|
+
options[:labels].split(",").map(&:strip)
|
94
|
+
when Array
|
95
|
+
options[:labels]
|
96
|
+
else
|
97
|
+
[]
|
98
|
+
end
|
99
|
+
parameters = { :title => title }
|
100
|
+
parameters[:body] = body unless body.nil?
|
101
|
+
post "#{Repository.path repo}/issues", options.merge(parameters)
|
102
|
+
end
|
103
|
+
alias :open_issue :create_issue
|
104
|
+
|
105
|
+
# Get a single issue from a repository
|
106
|
+
#
|
107
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
108
|
+
# @param number [Integer] Number ID of the issue
|
109
|
+
# @return [Sawyer::Resource] The issue you requested, if it exists
|
110
|
+
# @see https://developer.github.com/v3/issues/#get-a-single-issue
|
111
|
+
# @example Get issue #25 from octokit/octokit.rb
|
112
|
+
# Octokit.issue("octokit/octokit.rb", "25")
|
113
|
+
def issue(repo, number, options = {})
|
114
|
+
get "#{Repository.path repo}/issues/#{number}", options
|
115
|
+
end
|
116
|
+
|
117
|
+
# Close an issue
|
118
|
+
#
|
119
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
120
|
+
# @param number [Integer] Number ID of the issue
|
121
|
+
# @param options [Hash] A customizable set of options.
|
122
|
+
# @option options [String] :assignee User login.
|
123
|
+
# @option options [Integer] :milestone Milestone number.
|
124
|
+
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
125
|
+
# @return [Sawyer::Resource] The updated Issue
|
126
|
+
# @see https://developer.github.com/v3/issues/#edit-an-issue
|
127
|
+
# @example Close Issue #25 from octokit/octokit.rb
|
128
|
+
# Octokit.close_issue("octokit/octokit.rb", "25")
|
129
|
+
def close_issue(repo, number, options = {})
|
130
|
+
patch "#{Repository.path repo}/issues/#{number}", options.merge({:state => "closed"})
|
131
|
+
end
|
132
|
+
|
133
|
+
# Reopen an issue
|
134
|
+
#
|
135
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
136
|
+
# @param number [Integer] Number ID of the issue
|
137
|
+
# @param options [Hash] A customizable set of options.
|
138
|
+
# @option options [String] :assignee User login.
|
139
|
+
# @option options [Integer] :milestone Milestone number.
|
140
|
+
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
141
|
+
# @return [Sawyer::Resource] The updated Issue
|
142
|
+
# @see https://developer.github.com/v3/issues/#edit-an-issue
|
143
|
+
# @example Reopen Issue #25 from octokit/octokit.rb
|
144
|
+
# Octokit.reopen_issue("octokit/octokit.rb", "25")
|
145
|
+
def reopen_issue(repo, number, options = {})
|
146
|
+
patch "#{Repository.path repo}/issues/#{number}", options.merge({:state => "open"})
|
147
|
+
end
|
148
|
+
|
149
|
+
# Lock an issue's conversation, limiting it to collaborators
|
150
|
+
#
|
151
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
152
|
+
# @param number [Integer] Number ID of the issue
|
153
|
+
# @return [Boolean] Success
|
154
|
+
# @see https://developer.github.com/v3/issues/#lock-an-issue
|
155
|
+
# @example Lock Issue #25 from octokit/octokit.rb
|
156
|
+
# Octokit.lock_issue("octokit/octokit.rb", "25")
|
157
|
+
def lock_issue(repo, number, options = {})
|
158
|
+
boolean_from_response :put, "#{Repository.path repo}/issues/#{number}/lock", options
|
159
|
+
end
|
160
|
+
|
161
|
+
# Unlock an issue's conversation, opening it to all viewers
|
162
|
+
#
|
163
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
164
|
+
# @param number [Integer] Number ID of the issue
|
165
|
+
# @return [Boolean] Success
|
166
|
+
# @see https://developer.github.com/v3/issues/#unlock-an-issue
|
167
|
+
# @example Unlock Issue #25 from octokit/octokit.rb
|
168
|
+
# Octokit.close_issue("octokit/octokit.rb", "25")
|
169
|
+
def unlock_issue(repo, number, options = {})
|
170
|
+
boolean_from_response :delete, "#{Repository.path repo}/issues/#{number}/lock", options
|
171
|
+
end
|
172
|
+
|
173
|
+
# Update an issue
|
174
|
+
#
|
175
|
+
# @overload update_issue(repo, number, title, body, options)
|
176
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
177
|
+
# @param number [Integer] Number ID of the issue
|
178
|
+
# @param title [String] Updated title for the issue
|
179
|
+
# @param body [String] Updated body of the issue
|
180
|
+
# @param options [Hash] A customizable set of options.
|
181
|
+
# @option options [String] :assignee User login.
|
182
|
+
# @option options [Integer] :milestone Milestone number.
|
183
|
+
# @option options [String] :labels List of comma separated Label names. Example: <tt>bug,ui,@high</tt>.
|
184
|
+
# @option options [String] :state State of the issue. <tt>open</tt> or <tt>closed</tt>
|
185
|
+
#
|
186
|
+
# @overload update_issue(repo, number, options)
|
187
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
188
|
+
# @param number [Integer] Number ID of the issue
|
189
|
+
# @param options [Hash] A customizable set of options.
|
190
|
+
# @option options [String] :title Updated title for the issue
|
191
|
+
# @option options [String] :body Updated body of the issue
|
192
|
+
# @option options [String] :assignee User login.
|
193
|
+
# @option options [Integer] :milestone Milestone number.
|
194
|
+
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
195
|
+
# @option options [String] :state State of the issue. <tt>open</tt> or <tt>closed</tt>
|
196
|
+
# @return [Sawyer::Resource] The updated Issue
|
197
|
+
# @see https://developer.github.com/v3/issues/#edit-an-issue
|
198
|
+
#
|
199
|
+
# @example Change the title of Issue #25
|
200
|
+
# Octokit.update_issue("octokit/octokit.rb", "25", "A new title", "the same body")
|
201
|
+
#
|
202
|
+
# @example Change only the assignee of Issue #25
|
203
|
+
# Octokit.update_issue("octokit/octokit.rb", "25", :assignee => "pengwynn")
|
204
|
+
def update_issue(repo, number, *args)
|
205
|
+
arguments = Arguments.new(args)
|
206
|
+
opts = arguments.options
|
207
|
+
|
208
|
+
if arguments.length > 0
|
209
|
+
opts[:title] = arguments.shift
|
210
|
+
opts[:body] = arguments.shift
|
211
|
+
end
|
212
|
+
|
213
|
+
patch "#{Repository.path repo}/issues/#{number}", opts
|
214
|
+
end
|
215
|
+
|
216
|
+
# Get all comments attached to issues for the repository
|
217
|
+
#
|
218
|
+
# By default, Issue Comments are ordered by ascending ID.
|
219
|
+
#
|
220
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
221
|
+
# @param options [Hash] Optional parameters
|
222
|
+
# @option options [String] :sort created or updated
|
223
|
+
# @option options [String] :direction asc or desc. Ignored without sort
|
224
|
+
# parameter.
|
225
|
+
# @option options [String] :since Timestamp in ISO 8601
|
226
|
+
# format: YYYY-MM-DDTHH:MM:SSZ
|
227
|
+
#
|
228
|
+
# @return [Array<Sawyer::Resource>] List of issues comments.
|
229
|
+
#
|
230
|
+
# @see https://developer.github.com/v3/issues/comments/#list-comments-in-a-repository
|
231
|
+
#
|
232
|
+
# @example Get the comments for issues in the octokit repository
|
233
|
+
# @client.issues_comments("octokit/octokit.rb")
|
234
|
+
#
|
235
|
+
# @example Get issues comments, sort by updated descending since a time
|
236
|
+
# @client.issues_comments("octokit/octokit.rb", {
|
237
|
+
# :sort => 'desc',
|
238
|
+
# :direction => 'asc',
|
239
|
+
# :since => '2010-05-04T23:45:02Z'
|
240
|
+
# })
|
241
|
+
def issues_comments(repo, options = {})
|
242
|
+
paginate "#{Repository.path repo}/issues/comments", options
|
243
|
+
end
|
244
|
+
|
245
|
+
# Get all comments attached to an issue
|
246
|
+
#
|
247
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
248
|
+
# @param number [Integer] Number ID of the issue
|
249
|
+
# @return [Array<Sawyer::Resource>] Array of comments that belong to an issue
|
250
|
+
# @see https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue
|
251
|
+
# @example Get comments for issue #25 from octokit/octokit.rb
|
252
|
+
# Octokit.issue_comments("octokit/octokit.rb", "25")
|
253
|
+
def issue_comments(repo, number, options = {})
|
254
|
+
paginate "#{Repository.path repo}/issues/#{number}/comments", options
|
255
|
+
end
|
256
|
+
|
257
|
+
# Get a single comment attached to an issue
|
258
|
+
#
|
259
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
260
|
+
# @param number [Integer] Number ID of the comment
|
261
|
+
# @return [Sawyer::Resource] The specific comment in question
|
262
|
+
# @see https://developer.github.com/v3/issues/comments/#get-a-single-comment
|
263
|
+
# @example Get comment #1194549 from an issue on octokit/octokit.rb
|
264
|
+
# Octokit.issue_comments("octokit/octokit.rb", 1194549)
|
265
|
+
def issue_comment(repo, number, options = {})
|
266
|
+
paginate "#{Repository.path repo}/issues/comments/#{number}", options
|
267
|
+
end
|
268
|
+
|
269
|
+
# Add a comment to an issue
|
270
|
+
#
|
271
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
272
|
+
# @param number [Integer] Issue number
|
273
|
+
# @param comment [String] Comment to be added
|
274
|
+
# @return [Sawyer::Resource] Comment
|
275
|
+
# @see https://developer.github.com/v3/issues/comments/#create-a-comment
|
276
|
+
# @example Add the comment "Almost to v1" to Issue #23 on octokit/octokit.rb
|
277
|
+
# Octokit.add_comment("octokit/octokit.rb", 23, "Almost to v1")
|
278
|
+
def add_comment(repo, number, comment, options = {})
|
279
|
+
post "#{Repository.path repo}/issues/#{number}/comments", options.merge({:body => comment})
|
280
|
+
end
|
281
|
+
|
282
|
+
# Update a single comment on an issue
|
283
|
+
#
|
284
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
285
|
+
# @param number [Integer] Comment number
|
286
|
+
# @param comment [String] Body of the comment which will replace the existing body.
|
287
|
+
# @return [Sawyer::Resource] Comment
|
288
|
+
# @see https://developer.github.com/v3/issues/comments/#edit-a-comment
|
289
|
+
# @example Update the comment #1194549 with body "I've started this on my 25-issue-comments-v3 fork" on an issue on octokit/octokit.rb
|
290
|
+
# Octokit.update_comment("octokit/octokit.rb", 1194549, "Almost to v1, added this on my fork")
|
291
|
+
def update_comment(repo, number, comment, options = {})
|
292
|
+
patch "#{Repository.path repo}/issues/comments/#{number}", options.merge({:body => comment})
|
293
|
+
end
|
294
|
+
|
295
|
+
# Delete a single comment
|
296
|
+
#
|
297
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
298
|
+
# @param number [Integer] Comment number
|
299
|
+
# @return [Boolean] Success
|
300
|
+
# @see https://developer.github.com/v3/issues/comments/#delete-a-comment
|
301
|
+
# @example Delete the comment #1194549 on an issue on octokit/octokit.rb
|
302
|
+
# Octokit.delete_comment("octokit/octokit.rb", 1194549)
|
303
|
+
def delete_comment(repo, number, options = {})
|
304
|
+
boolean_from_response :delete, "#{Repository.path repo}/issues/comments/#{number}", options
|
305
|
+
end
|
306
|
+
|
307
|
+
# Get the timeline for an issue
|
308
|
+
#
|
309
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
310
|
+
# @param number [Integer] Number ID of the comment
|
311
|
+
# @return [Sawyer::Resource] The timeline for this issue
|
312
|
+
# @see https://developer.github.com/v3/issues/timeline/
|
313
|
+
# @example Get timeline for issue #1435 on octokit/octokit.rb
|
314
|
+
# Octokit.issue_timeline("octokit/octokit.rb", 1435)
|
315
|
+
def issue_timeline(repo, number, options = {})
|
316
|
+
options = ensure_api_media_type(:issue_timelines, options)
|
317
|
+
paginate "#{Repository.path repo}/issues/#{number}/timeline", options
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|