right_hook 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/right_hook/app.rb +3 -8
- data/lib/right_hook/event.rb +24 -0
- data/lib/right_hook/logger.rb +13 -0
- data/lib/right_hook/subscriber.rb +10 -3
- data/lib/right_hook/version.rb +1 -1
- data/spec/event_spec.rb +13 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/subscriber_spec.rb +20 -2
- metadata +5 -1
data/lib/right_hook/app.rb
CHANGED
@@ -3,27 +3,22 @@ require 'json'
|
|
3
3
|
|
4
4
|
module RightHook
|
5
5
|
class App < Sinatra::Base
|
6
|
-
KNOWN_EVENT_TYPES = %w(
|
7
|
-
pull_request
|
8
|
-
issue
|
9
|
-
)
|
10
|
-
|
11
6
|
post '/hook/:owner/:repo_name/:event_type' do
|
12
7
|
owner = params[:owner]
|
13
8
|
repo_name = params[:repo_name]
|
14
9
|
event_type = params[:event_type]
|
15
10
|
content = request.body.read
|
16
11
|
|
17
|
-
halt 404 unless
|
12
|
+
halt 404 unless Event::KNOWN_TYPES.include?(event_type)
|
18
13
|
halt 501 unless respond_to?("on_#{event_type}")
|
19
14
|
|
20
15
|
require_valid_signature(content, owner, repo_name, event_type)
|
21
16
|
|
22
17
|
json = JSON.parse(content)
|
23
18
|
case event_type
|
24
|
-
when
|
19
|
+
when Event::PULL_REQUEST
|
25
20
|
on_pull_request(owner, repo_name, json['number'], json['action'], json['pull_request'])
|
26
|
-
when
|
21
|
+
when Event::ISSUE
|
27
22
|
on_issue(owner, repo_name, json['action'], json['issue'])
|
28
23
|
else
|
29
24
|
halt 500
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module RightHook
|
2
|
+
module Event
|
3
|
+
class << self
|
4
|
+
def github_name(event_type)
|
5
|
+
case event_type
|
6
|
+
when ISSUE
|
7
|
+
'issues'
|
8
|
+
when PULL_REQUEST
|
9
|
+
'pull_request'
|
10
|
+
else
|
11
|
+
raise ArgumentError, "Unrecognized event_type: #{event_type}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ISSUE = 'issue'.freeze
|
17
|
+
PULL_REQUEST = 'pull_request'.freeze
|
18
|
+
|
19
|
+
KNOWN_TYPES = [
|
20
|
+
ISSUE,
|
21
|
+
PULL_REQUEST
|
22
|
+
].freeze
|
23
|
+
end
|
24
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'httparty'
|
2
|
+
require 'right_hook/event'
|
3
|
+
require 'right_hook/logger'
|
2
4
|
|
3
5
|
module RightHook
|
4
6
|
# Subscriber can subscribe and unsubscribe GitHub hooks to a hosted instance of a specified {RightHook::App}.
|
@@ -49,19 +51,24 @@ module RightHook
|
|
49
51
|
oauth_token = opts.fetch(:oauth_token) { self.oauth_token }
|
50
52
|
owner = opts.fetch(:owner) { self.owner }
|
51
53
|
base_url = opts.fetch(:base_url) { self.base_url }
|
54
|
+
event_type = opts.fetch(:event_type) { self.event_type }
|
52
55
|
|
53
|
-
HTTParty.post('https://api.github.com/hub',
|
56
|
+
response = HTTParty.post('https://api.github.com/hub',
|
54
57
|
headers: {
|
55
58
|
# http://developer.github.com/v3/#authentication
|
56
59
|
'Authorization' => "token #{oauth_token}"
|
57
60
|
},
|
58
61
|
body: {
|
59
62
|
'hub.mode' => mode,
|
60
|
-
'hub.topic' => "https://github.com/#{owner}/#{repo_name}/events/#{event_type}",
|
63
|
+
'hub.topic' => "https://github.com/#{owner}/#{repo_name}/events/#{Event.github_name(event_type)}",
|
61
64
|
'hub.callback' => "#{base_url}/hook/#{owner}/#{repo_name}/#{event_type}",
|
62
65
|
'hub.secret' => secret
|
63
66
|
}
|
64
|
-
)
|
67
|
+
)
|
68
|
+
|
69
|
+
RightHook.logger.warn("Failure modifying subscription: #{response.inspect}") unless response.success?
|
70
|
+
|
71
|
+
response.success?
|
65
72
|
end
|
66
73
|
end
|
67
74
|
end
|
data/lib/right_hook/version.rb
CHANGED
data/spec/event_spec.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RightHook::Event do
|
4
|
+
describe '.github_name' do
|
5
|
+
it 'maps all known types' do
|
6
|
+
described_class::KNOWN_TYPES.each do |type|
|
7
|
+
expect {
|
8
|
+
described_class.github_name(type)
|
9
|
+
}.not_to raise_error
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/subscriber_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe RightHook::Subscriber do
|
|
13
13
|
describe '.subscribe' do
|
14
14
|
let!(:stubbed_request) do
|
15
15
|
stub_request(:post, 'https://api.github.com/hub').
|
16
|
-
with(:body => 'hub.mode=subscribe&hub.topic=https%3A%2F%2Fgithub.com%2Fmark-rushakoff%2Fright_hook%2Fevents%
|
16
|
+
with(:body => 'hub.mode=subscribe&hub.topic=https%3A%2F%2Fgithub.com%2Fmark-rushakoff%2Fright_hook%2Fevents%2Fissues&hub.callback=http%3A%2F%2Fexample.com%2Fhook%2Fmark-rushakoff%2Fright_hook%2Fissue&hub.secret=the-secret',
|
17
17
|
:headers => {'Authorization' => 'token my_token'}
|
18
18
|
).to_return(:status => status_code, :body => '', :headers => {})
|
19
19
|
end
|
@@ -37,12 +37,30 @@ describe RightHook::Subscriber do
|
|
37
37
|
expect(stubbed_request).to have_been_requested
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
context 'When everything is overridden' do
|
42
|
+
let(:status_code) { 200 }
|
43
|
+
it 'works' do
|
44
|
+
s = described_class.new
|
45
|
+
result = s.subscribe(
|
46
|
+
repo_name: 'right_hook',
|
47
|
+
secret: 'the-secret',
|
48
|
+
oauth_token: 'my_token',
|
49
|
+
owner: 'mark-rushakoff',
|
50
|
+
base_url: 'http://example.com',
|
51
|
+
event_type: 'issue'
|
52
|
+
)
|
53
|
+
expect(result).to eq(true)
|
54
|
+
|
55
|
+
expect(stubbed_request).to have_been_requested
|
56
|
+
end
|
57
|
+
end
|
40
58
|
end
|
41
59
|
|
42
60
|
describe '.unsubscribe' do
|
43
61
|
let!(:stubbed_request) do
|
44
62
|
stub_request(:post, 'https://api.github.com/hub').
|
45
|
-
with(:body => 'hub.mode=unsubscribe&hub.topic=https%3A%2F%2Fgithub.com%2Fmark-rushakoff%2Fright_hook%2Fevents%
|
63
|
+
with(:body => 'hub.mode=unsubscribe&hub.topic=https%3A%2F%2Fgithub.com%2Fmark-rushakoff%2Fright_hook%2Fevents%2Fissues&hub.callback=http%3A%2F%2Fexample.com%2Fhook%2Fmark-rushakoff%2Fright_hook%2Fissue&hub.secret=the-secret',
|
46
64
|
:headers => {'Authorization' => 'token my_token'}
|
47
65
|
).to_return(:status => status_code, :body => '', :headers => {})
|
48
66
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_hook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -174,6 +174,8 @@ files:
|
|
174
174
|
- lib/right_hook/authenticated_client.rb
|
175
175
|
- lib/right_hook/authenticator.rb
|
176
176
|
- lib/right_hook/commenter.rb
|
177
|
+
- lib/right_hook/event.rb
|
178
|
+
- lib/right_hook/logger.rb
|
177
179
|
- lib/right_hook/subscriber.rb
|
178
180
|
- lib/right_hook/version.rb
|
179
181
|
- right_hook.gemspec
|
@@ -184,6 +186,7 @@ files:
|
|
184
186
|
- spec/authenticator_spec.rb
|
185
187
|
- spec/captain_hook_spec.rb
|
186
188
|
- spec/commenter_spec.rb
|
189
|
+
- spec/event_spec.rb
|
187
190
|
- spec/spec_helper.rb
|
188
191
|
- spec/subscriber_spec.rb
|
189
192
|
- spec/support/spec_helpers.rb
|
@@ -221,6 +224,7 @@ test_files:
|
|
221
224
|
- spec/authenticator_spec.rb
|
222
225
|
- spec/captain_hook_spec.rb
|
223
226
|
- spec/commenter_spec.rb
|
227
|
+
- spec/event_spec.rb
|
224
228
|
- spec/spec_helper.rb
|
225
229
|
- spec/subscriber_spec.rb
|
226
230
|
- spec/support/spec_helpers.rb
|