octodoggy 4.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/CONTRIBUTING.md +22 -0
  4. data/LICENSE.md +20 -0
  5. data/README.md +714 -0
  6. data/Rakefile +22 -0
  7. data/lib/ext/sawyer/relation.rb +10 -0
  8. data/lib/octokit.rb +59 -0
  9. data/lib/octokit/arguments.rb +14 -0
  10. data/lib/octokit/authentication.rb +82 -0
  11. data/lib/octokit/client.rb +238 -0
  12. data/lib/octokit/client/authorizations.rb +244 -0
  13. data/lib/octokit/client/commit_comments.rb +95 -0
  14. data/lib/octokit/client/commits.rb +239 -0
  15. data/lib/octokit/client/contents.rb +162 -0
  16. data/lib/octokit/client/deployments.rb +62 -0
  17. data/lib/octokit/client/downloads.rb +50 -0
  18. data/lib/octokit/client/emojis.rb +18 -0
  19. data/lib/octokit/client/events.rb +151 -0
  20. data/lib/octokit/client/feeds.rb +33 -0
  21. data/lib/octokit/client/gists.rb +233 -0
  22. data/lib/octokit/client/gitignore.rb +43 -0
  23. data/lib/octokit/client/hooks.rb +297 -0
  24. data/lib/octokit/client/integrations.rb +77 -0
  25. data/lib/octokit/client/issues.rb +321 -0
  26. data/lib/octokit/client/labels.rb +156 -0
  27. data/lib/octokit/client/legacy_search.rb +42 -0
  28. data/lib/octokit/client/licenses.rb +45 -0
  29. data/lib/octokit/client/markdown.rb +27 -0
  30. data/lib/octokit/client/meta.rb +21 -0
  31. data/lib/octokit/client/milestones.rb +87 -0
  32. data/lib/octokit/client/notifications.rb +171 -0
  33. data/lib/octokit/client/objects.rb +141 -0
  34. data/lib/octokit/client/organizations.rb +768 -0
  35. data/lib/octokit/client/pages.rb +63 -0
  36. data/lib/octokit/client/projects.rb +314 -0
  37. data/lib/octokit/client/pub_sub_hubbub.rb +111 -0
  38. data/lib/octokit/client/pull_requests.rb +301 -0
  39. data/lib/octokit/client/rate_limit.rb +54 -0
  40. data/lib/octokit/client/reactions.rb +158 -0
  41. data/lib/octokit/client/refs.rb +118 -0
  42. data/lib/octokit/client/releases.rb +163 -0
  43. data/lib/octokit/client/repositories.rb +654 -0
  44. data/lib/octokit/client/repository_invitations.rb +103 -0
  45. data/lib/octokit/client/reviews.rb +174 -0
  46. data/lib/octokit/client/say.rb +19 -0
  47. data/lib/octokit/client/search.rb +76 -0
  48. data/lib/octokit/client/service_status.rb +38 -0
  49. data/lib/octokit/client/source_import.rb +161 -0
  50. data/lib/octokit/client/stats.rb +105 -0
  51. data/lib/octokit/client/statuses.rb +47 -0
  52. data/lib/octokit/client/traffic.rb +69 -0
  53. data/lib/octokit/client/users.rb +354 -0
  54. data/lib/octokit/configurable.rb +147 -0
  55. data/lib/octokit/connection.rb +199 -0
  56. data/lib/octokit/default.rb +166 -0
  57. data/lib/octokit/enterprise_admin_client.rb +40 -0
  58. data/lib/octokit/enterprise_admin_client/admin_stats.rb +120 -0
  59. data/lib/octokit/enterprise_admin_client/license.rb +18 -0
  60. data/lib/octokit/enterprise_admin_client/orgs.rb +27 -0
  61. data/lib/octokit/enterprise_admin_client/search_indexing.rb +83 -0
  62. data/lib/octokit/enterprise_admin_client/users.rb +128 -0
  63. data/lib/octokit/enterprise_management_console_client.rb +50 -0
  64. data/lib/octokit/enterprise_management_console_client/management_console.rb +176 -0
  65. data/lib/octokit/error.rb +286 -0
  66. data/lib/octokit/gist.rb +36 -0
  67. data/lib/octokit/middleware/follow_redirects.rb +131 -0
  68. data/lib/octokit/organization.rb +17 -0
  69. data/lib/octokit/preview.rb +38 -0
  70. data/lib/octokit/rate_limit.rb +33 -0
  71. data/lib/octokit/repo_arguments.rb +19 -0
  72. data/lib/octokit/repository.rb +93 -0
  73. data/lib/octokit/response/feed_parser.rb +21 -0
  74. data/lib/octokit/response/raise_error.rb +21 -0
  75. data/lib/octokit/user.rb +19 -0
  76. data/lib/octokit/version.rb +17 -0
  77. data/lib/octokit/warnable.rb +17 -0
  78. data/octokit.gemspec +22 -0
  79. metadata +160 -0
@@ -0,0 +1,63 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the Pages API
5
+ #
6
+ # @see https://developer.github.com/v3/repos/pages/
7
+ module Pages
8
+
9
+ # List Pages information for a repository
10
+ #
11
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
12
+ # @return Sawyer::Resource A GitHub Pages resource
13
+ # @see https://developer.github.com/v3/repos/pages/#get-information-about-a-pages-site
14
+ def pages(repo, options = {})
15
+ get "#{Repository.path repo}/pages", options
16
+ end
17
+
18
+ # Get a specific Pages build by ID
19
+ #
20
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
21
+ # @param id [Integer, String] Build ID
22
+ # @return [Sawyer::Resource] Pages build information
23
+ # @see https://developer.github.com/v3/repos/pages/#list-a-specific-pages-build
24
+ # @example
25
+ # Octokit.pages_build("github/developer.github.com", 5472601)
26
+ def pages_build(repo, id, options = {})
27
+ opts = ensure_api_media_type(:pages, options)
28
+ get "#{Repository.path repo}/pages/builds/#{id}", opts
29
+ end
30
+
31
+ # List Pages builds for a repository
32
+ #
33
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
34
+ # @return [Array<Sawyer::Resource>] A list of build history for a repository.
35
+ # @see https://developer.github.com/v3/repos/pages/#list-pages-builds
36
+ def pages_builds(repo, options = {})
37
+ get "#{Repository.path repo}/pages/builds", options
38
+ end
39
+ alias :list_pages_builds :pages_builds
40
+
41
+ # List the latest Pages build information for a repository
42
+ #
43
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
44
+ # @return Sawyer::Resource A GitHub Pages resource about a build
45
+ # @see https://developer.github.com/v3/repos/pages/#list-latest-pages-build
46
+ def latest_pages_build(repo, options = {})
47
+ get "#{Repository.path repo}/pages/builds/latest", options
48
+ end
49
+
50
+ # Request a page build for the latest revision of the default branch
51
+ #
52
+ # You can only request builds for your repositories
53
+ #
54
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
55
+ # @return [Sawyer::Resource] Request result
56
+ # @see https://developer.github.com/v3/repos/pages/#request-a-page-build
57
+ def request_page_build(repo, options = {})
58
+ opts = ensure_api_media_type(:pages, options)
59
+ post "#{Repository.path repo}/pages/builds", opts
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,314 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for Projects API
5
+ #
6
+ # @see https://developer.github.com/v3/repos/projects
7
+ module Projects
8
+
9
+ # List projects for a repository
10
+ #
11
+ # Requires authenticated client
12
+ #
13
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
14
+ # @return [Array<Sawyer::Resource>] Repository projects
15
+ # @see https://developer.github.com/v3/projects/#list-repository-projects
16
+ # @example
17
+ # @client.projects('octokit/octokit.rb')
18
+ def projects(repo, options = {})
19
+ opts = ensure_api_media_type(:projects, options)
20
+ paginate "#{Repository.path repo}/projects", opts
21
+ end
22
+
23
+ # Create a project
24
+ #
25
+ # Requires authenticated client
26
+ #
27
+ # @param repo [Integer, String, Repository, Hash] A GitHub repository
28
+ # @param name [String] Project name
29
+ # @option options [String] :body Body of the project
30
+ # @return [Sawyer::Resource] Fresh new project
31
+ # @see https://developer.github.com/v3/projects/#create-a-repository-project
32
+ # @example Create project with only a name
33
+ # @client.create_project('octokit/octokit.rb', 'implement new APIs')
34
+ #
35
+ # @example Create project with name and body
36
+ # @client.create_project('octokit/octokit.rb', 'bugs be gone', body: 'Fix all the bugs @joeyw creates')
37
+ def create_project(repo, name, options = {})
38
+ opts = ensure_api_media_type(:projects, options)
39
+ opts[:name] = name
40
+ post "#{Repository.path repo}/projects", opts
41
+ end
42
+
43
+ # List organization projects
44
+ #
45
+ # Requires authenticated client
46
+ #
47
+ # @param org [String] A GitHub organization
48
+ # @return [Array<Sawyer::Resource>] Organization projects
49
+ # @see https://developer.github.com/v3/projects/#list-organization-projects
50
+ # @example
51
+ # @client.org_projects("octokit")
52
+ def org_projects(org, options = {})
53
+ opts = ensure_api_media_type(:projects, options)
54
+ get "orgs/#{org}/projects", opts
55
+ end
56
+ alias :organization_projects :org_projects
57
+
58
+ # Create organization project
59
+ #
60
+ # Requires authenticated client
61
+ #
62
+ # @param org [String] A GitHub organization
63
+ # @param name [String] Project name
64
+ # @option options [String] :body Project body
65
+ # @return [Sawyer::Resource] Organization project
66
+ # @see https://developer.github.com/v3/projects/#create-an-organization-project
67
+ # @example Create with only a name
68
+ # @client.create_org_project("octocat", "make more octocats")
69
+ # @example Create a project with name and body
70
+ # @client.create_org_project("octokit", "octocan", body: 'Improve clients')
71
+ def create_org_project(org, name, options = {})
72
+ opts = ensure_api_media_type(:projects, options)
73
+ opts[:name] = name
74
+ post "orgs/#{org}/projects", opts
75
+ end
76
+ alias :create_organization_project :create_org_project
77
+
78
+ # Get a project by id
79
+ #
80
+ # @param id [Integer] Project id
81
+ # @return [Sawyer::Resource] Project
82
+ # @see https://developer.github.com/v3/projects/#get-a-project
83
+ # @example
84
+ # Octokit.project(123942)
85
+ def project(id, options = {})
86
+ opts = ensure_api_media_type(:projects, options)
87
+ get "projects/#{id}", opts
88
+ end
89
+
90
+ # Update a project
91
+ #
92
+ # Requires authenticated client
93
+ #
94
+ # @param id [Integer] Project id
95
+ # @option options [String] :name Project name
96
+ # @option options [String] :body Project body
97
+ # @return [Sawyer::Resource] Project
98
+ # @see https://developer.github.com/v3/projects/#update-a-project
99
+ # @example Update project name
100
+ # @client.update_project(123942, name: 'New name')
101
+ def update_project(id, options = {})
102
+ opts = ensure_api_media_type(:projects, options)
103
+ patch "projects/#{id}", opts
104
+ end
105
+
106
+ # Delete a project
107
+ #
108
+ # Requires authenticated client
109
+ #
110
+ # @param id [Integer] Project id
111
+ # @return [Boolean] Result of deletion
112
+ # @see https://developer.github.com/v3/projects/#delete-a-project
113
+ # @example
114
+ # @client.delete_project(123942)
115
+ def delete_project(id, options = {})
116
+ opts = ensure_api_media_type(:projects, options)
117
+ boolean_from_response :delete, "projects/#{id}", opts
118
+ end
119
+
120
+ # List project columns
121
+ #
122
+ # @param id [Integer] Project id
123
+ # @return [Array<Sawyer::Resource>] List of project columns
124
+ # @see https://developer.github.com/v3/projects/columns/#list-project-columns
125
+ # @example
126
+ # @client.project_columns(123942)
127
+ def project_columns(id, options = {})
128
+ opts = ensure_api_media_type(:projects, options)
129
+ paginate "projects/#{id}/columns", opts
130
+ end
131
+
132
+ # Create a project column
133
+ #
134
+ # Requires authenticated client
135
+ #
136
+ # @param id [Integer] Project column id
137
+ # @param name [String] New column name
138
+ # @return [Sawyer::Resource] Newly created column
139
+ # @see https://developer.github.com/v3/projects/columns/#create-a-project-column
140
+ # @example
141
+ # @client.create_project_column(123942, "To Dones")
142
+ def create_project_column(id, name, options = {})
143
+ opts = ensure_api_media_type(:projects, options)
144
+ opts[:name] = name
145
+ post "projects/#{id}/columns", opts
146
+ end
147
+
148
+ # Get a project column by ID
149
+ #
150
+ # @param id [Integer] Project column id
151
+ # @return [Sawyer::Resource] Project column
152
+ # @see https://developer.github.com/v3/projects/columns/#get-a-project-column
153
+ # @example
154
+ # Octokit.project_column(30294)
155
+ def project_column(id, options = {})
156
+ opts = ensure_api_media_type(:projects, options)
157
+ get "projects/columns/#{id}", opts
158
+ end
159
+
160
+ # Update a project column
161
+ #
162
+ # Requires authenticated client
163
+ #
164
+ # @param id [Integer] Project column id
165
+ # @param name [String] New column name
166
+ # @return [Sawyer::Resource] Updated column
167
+ # @see https://developer.github.com/v3/projects/columns/#update-a-project-column
168
+ # @example
169
+ # @client.update_project_column(30294, "new column name")
170
+ def update_project_column(id, name, options = {})
171
+ opts = ensure_api_media_type(:projects, options)
172
+ opts[:name] = name
173
+ patch "projects/columns/#{id}", opts
174
+ end
175
+
176
+ # Delete a project column
177
+ #
178
+ # Requires authenticated client
179
+ #
180
+ # @param id [Integer] Project column id
181
+ # @return [Boolean] Result of deletion request, true when deleted
182
+ # @see https://developer.github.com/v3/projects/columns/#delete-a-project-column
183
+ # @example
184
+ # @client.delete_project_column(30294)
185
+ def delete_project_column(id, options = {})
186
+ opts = ensure_api_media_type(:projects, options)
187
+ boolean_from_response :delete, "projects/columns/#{id}", opts
188
+ end
189
+
190
+ # Move a project column
191
+ #
192
+ # Requires authenticated client
193
+ #
194
+ # @param id [Integer] Project column id
195
+ # @param position [String] New position for the column. Can be one of
196
+ # <tt>first</tt>, <tt>last</tt>, or <tt>after:<column-id></tt>, where
197
+ # <tt><column-id></tt> is the id value of a column in the same project.
198
+ # @return [Sawyer::Resource] Result
199
+ # @see https://developer.github.com/v3/projects/columns/#move-a-project-column
200
+ # @example
201
+ # @client.move_project_column(30294, "last")
202
+ def move_project_column(id, position, options = {})
203
+ opts = ensure_api_media_type(:projects, options)
204
+ opts[:position] = position
205
+ post "projects/columns/#{id}/moves", opts
206
+ end
207
+
208
+ # List columns cards
209
+ #
210
+ # Requires authenticated client
211
+ #
212
+ # @param id [Integer] Project column id
213
+ # @return [Array<Sawyer::Resource>] Cards in the column
214
+ # @see https://developer.github.com/v3/projects/cards/#list-project-cards
215
+ # @example
216
+ # @client.column_cards(30294)
217
+ def column_cards(id, options = {})
218
+ opts = ensure_api_media_type(:projects, options)
219
+ paginate "projects/columns/#{id}/cards", opts
220
+ end
221
+
222
+ # Create project card
223
+ #
224
+ # Requires authenticated client
225
+ #
226
+ # @param id [Integer] Project column id
227
+ # @option options [String] :note Card contents for a note type
228
+ # @option options [Integer] :content_id Issue ID for the card contents
229
+ # @option options [String] :content_type Type of content to associate
230
+ # with the card. <tt>Issue</tt> is presently the only avaiable value
231
+ # @note If :note is supplied, :content_id and :content_type must be
232
+ # excluded. Similarly, if :content_id is supplied, :content_type must
233
+ # be set and :note must not be included.
234
+ # @return [Sawyer::Resource] Newly created card
235
+ # @see https://developer.github.com/v3/projects/cards/#create-a-project-card
236
+ # @example Create a project card with a note
237
+ # @client.create_project_card(123495, note: 'New note card')
238
+ # @example Create a project card for an repository issue
239
+ # @client.create_project_card(123495, content_id: 1, content_type: 'Issue')
240
+ def create_project_card(id, options = {})
241
+ opts = ensure_api_media_type(:projects, options)
242
+ post "projects/columns/#{id}/cards", opts
243
+ end
244
+
245
+ # Get a project card
246
+ #
247
+ # Requires authenticated client
248
+ #
249
+ # @param id [Integer] Project card id
250
+ # @return [Sawyer::Resource] Project card
251
+ # @see https://developer.github.com/v3/projects/cards/#get-a-project-card
252
+ # @example
253
+ # @client.project_card(123495)
254
+ def project_card(id, options = {})
255
+ opts = ensure_api_media_type(:projects, options)
256
+ get "projects/columns/cards/#{id}", opts
257
+ end
258
+
259
+ # Update a project card
260
+ #
261
+ # Requires authenticated client
262
+ #
263
+ # @param id [Integer] Project card id
264
+ # @option options [String] :note The card's note content. Only valid for
265
+ # cards without another type of content, so this cannot be specified if
266
+ # the card already has a content_id and content_type.
267
+ # @return [Sawyer::Resource] Updated project card
268
+ # @see https://developer.github.com/v3/projects/cards/#update-a-project-card
269
+ # @example
270
+ # @client.update_project_card(12345, note: 'new note')
271
+ def update_project_card(id, options = {})
272
+ opts = ensure_api_media_type(:projects, options)
273
+ patch "projects/columns/cards/#{id}", opts
274
+ end
275
+
276
+ # Move a project card
277
+ #
278
+ # Requires authenticated client
279
+ #
280
+ # @param id [Integer] Project card id
281
+ # @param position [String] Can be one of <tt>top</tt>, <tt>bottom</tt>,
282
+ # or <tt>after:<card-id></tt>, where <card-id> is the id value of a
283
+ # card in the same column, or in the new column specified by column_id.
284
+ # @option options [Integer] :column_id The column id to move the card to,
285
+ # must be column in same project
286
+ # @return [Sawyer::Resource] Empty sawyer resource
287
+ # @see https://developer.github.com/v3/projects/cards/#move-a-project-card
288
+ # @example Move a card to the bottom of the same column
289
+ # @client.move_project_card(123495, 'bottom')
290
+ # @example Move a card to the top of another column
291
+ # @client.move_project_card(123495, 'top', column_id: 59402)
292
+ def move_project_card(id, position, options = {})
293
+ opts = ensure_api_media_type(:projects, options)
294
+ opts[:position] = position
295
+ post "projects/columns/cards/#{id}/moves", opts
296
+ end
297
+
298
+ # Delete a project card
299
+ #
300
+ # Requires authenticated client
301
+ #
302
+ # @param id [Integer] Project card id
303
+ # @return [Boolean] True of deleted, false otherwise
304
+ # @see https://developer.github.com/v3/projects/cards/#delete-a-project-card
305
+ # @example
306
+ # @client.delete_project_card(123495)
307
+ def delete_project_card(id, options = {})
308
+ opts = ensure_api_media_type(:projects, options)
309
+ boolean_from_response :delete, "projects/columns/cards/#{id}", opts
310
+ end
311
+
312
+ end # Projects
313
+ end
314
+ end
@@ -0,0 +1,111 @@
1
+ module Octokit
2
+ class Client
3
+
4
+ # Methods for the PubSubHubbub API
5
+ #
6
+ # @see https://developer.github.com/v3/repos/hooks/#pubsubhubbub
7
+ module PubSubHubbub
8
+
9
+ # Subscribe to a pubsub topic
10
+ #
11
+ # @param topic [String] A recoginized and supported pubsub topic
12
+ # @param callback [String] A callback url to be posted to when the topic event is fired
13
+ # @param secret [String] An optional shared secret used to generate a SHA1 HMAC of the outgoing body content
14
+ # @return [Boolean] true if the subscribe was successful, otherwise an error is raised
15
+ # @see https://developer.github.com/v3/repos/hooks/#subscribing
16
+ # @example Subscribe to push events from one of your repositories, having an email sent when fired
17
+ # client = Octokit::Client.new(:oauth_token = "token")
18
+ # client.subscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com")
19
+ def subscribe(topic, callback, secret = nil)
20
+ options = {
21
+ :"hub.callback" => callback,
22
+ :"hub.mode" => "subscribe",
23
+ :"hub.topic" => topic
24
+ }
25
+ options.merge!(:"hub.secret" => secret) unless secret.nil?
26
+
27
+ response = pub_sub_hubbub_request(options)
28
+
29
+ response.status == 204
30
+ end
31
+
32
+ # Unsubscribe from a pubsub topic
33
+ #
34
+ # @param topic [String] A recoginized pubsub topic
35
+ # @param callback [String] A callback url to be unsubscribed from
36
+ # @return [Boolean] true if the unsubscribe was successful, otherwise an error is raised
37
+ # @see https://developer.github.com/v3/repos/hooks/#subscribing
38
+ # @example Unsubscribe to push events from one of your repositories, no longer having an email sent when fired
39
+ # client = Octokit::Client.new(:oauth_token = "token")
40
+ # client.unsubscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com")
41
+ def unsubscribe(topic, callback)
42
+ options = {
43
+ :"hub.callback" => callback,
44
+ :"hub.mode" => "unsubscribe",
45
+ :"hub.topic" => topic
46
+ }
47
+ response = pub_sub_hubbub_request(options)
48
+
49
+ response.status == 204
50
+ end
51
+
52
+ # Subscribe to a repository through pubsub
53
+ #
54
+ # @param repo [String, Repository, Hash] A GitHub repository
55
+ # @param service_name [String] service name owner
56
+ # @param service_arguments [Hash] params that will be passed by subscribed hook.
57
+ # List of services is available @ https://github.com/github/github-services/tree/master/docs.
58
+ # Please refer Data node for complete list of arguments.
59
+ # @param secret [String] An optional shared secret used to generate a SHA1 HMAC of the outgoing body content
60
+ # @return [Boolean] True if subscription successful, false otherwise
61
+ # @see https://developer.github.com/v3/repos/hooks/#subscribing
62
+ # @example Subscribe to push events to one of your repositories to Travis-CI
63
+ # client = Octokit::Client.new(:oauth_token = "token")
64
+ # client.subscribe_service_hook('joshk/device_imapable', 'Travis', { :token => "test", :domain => "domain", :user => "user" })
65
+ def subscribe_service_hook(repo, service_name, service_arguments = {}, secret = nil)
66
+ topic = "#{Octokit.web_endpoint}#{Repository.new(repo)}/events/push"
67
+ callback = "github://#{service_name}?#{service_arguments.collect{ |k,v| [ k,v ].map{ |p| URI.encode_www_form_component(p) }.join("=") }.join("&") }"
68
+ subscribe(topic, callback, secret)
69
+ end
70
+
71
+ # Unsubscribe repository through pubsub
72
+ #
73
+ # @param repo [String, Repository, Hash] A GitHub repository
74
+ # @param service_name [String] service name owner
75
+ # List of services is available @ https://github.com/github/github-services/tree/master/docs.
76
+ # @see https://developer.github.com/v3/repos/hooks/#subscribing
77
+ # @example Subscribe to push events to one of your repositories to Travis-CI
78
+ # client = Octokit::Client.new(:oauth_token = "token")
79
+ # client.unsubscribe_service_hook('joshk/device_imapable', 'Travis')
80
+ def unsubscribe_service_hook(repo, service_name)
81
+ topic = "#{Octokit.web_endpoint}#{Repository.new(repo)}/events/push"
82
+ callback = "github://#{service_name}"
83
+ unsubscribe(topic, callback)
84
+ end
85
+
86
+ private
87
+
88
+ def pub_sub_hubbub_request(options = {})
89
+ # This method is janky, bypass normal stack so we don't
90
+ # serialize request as JSON
91
+ conn = Faraday.new(:url => @api_endpoint) do |http|
92
+ http.headers[:user_agent] = user_agent
93
+ if basic_authenticated?
94
+ http.basic_auth(@login, @password)
95
+ elsif token_authenticated?
96
+ http.authorization 'token', @access_token
97
+ end
98
+ http.request :url_encoded
99
+ http.use Octokit::Response::RaiseError
100
+ http.adapter Faraday.default_adapter
101
+ end
102
+
103
+ conn.post do |req|
104
+ req.url "hub"
105
+ req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
106
+ req.body = options
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end