slack-notify 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -10
- data/lib/slack-notify.rb +7 -1
- data/lib/slack-notify/client.rb +5 -14
- data/lib/slack-notify/connection.rb +1 -9
- data/lib/slack-notify/version.rb +1 -1
- data/spec/slack-notify/client_spec.rb +38 -62
- data/spec/slack_notify_spec.rb +9 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7258bd95339bbf7ce21f40177fe44b2cefe94a06
|
4
|
+
data.tar.gz: a1ff2e2acfcab61138ae1d3558f91616fae29883
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a25b9e37a3e7e74baf9e81567640f0c6bb93a4f2b9a497a6c78ba5b0908c4e2ed04e8ef2a4f58dc43cbc90e753a4b0d696741171ea7a66924e5d2896570e335
|
7
|
+
data.tar.gz: a9bbde639753f8077256c3d2c80dd1696e1a031bed8f03c95d73ca82ed3b3068b6fb5283efbc5108e3b47b97a81dc1d62152f068c87b723386896d6e8ed96b31
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# slack-notify
|
2
2
|
|
3
|
-
Send notifications to [Slack](http://slack.com/)
|
3
|
+
Send notifications to [Slack](http://slack.com/) via webhooks.
|
4
4
|
|
5
5
|
[![Build Status](http://img.shields.io/travis/sosedoff/slack-notify/master.svg?style=flat)](https://travis-ci.org/sosedoff/slack-notify)
|
6
6
|
[![Code Climate](http://img.shields.io/codeclimate/github/sosedoff/slack-notify.svg?style=flat)](https://codeclimate.com/github/sosedoff/slack-notify)
|
@@ -37,13 +37,13 @@ require "slack-notify"
|
|
37
37
|
Initialize client:
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
client = SlackNotify::Client.new("
|
40
|
+
client = SlackNotify::Client.new("slack webhook url")
|
41
41
|
```
|
42
42
|
|
43
43
|
Initialize with options:
|
44
44
|
|
45
45
|
```ruby
|
46
|
-
client = SlackNotify::Client.new("
|
46
|
+
client = SlackNotify::Client.new("slack webhook url", {
|
47
47
|
channel: "#development",
|
48
48
|
username: "mybot",
|
49
49
|
icon_url: "http://mydomain.com/myimage.png",
|
@@ -52,6 +52,12 @@ client = SlackNotify::Client.new("team", "token", {
|
|
52
52
|
})
|
53
53
|
```
|
54
54
|
|
55
|
+
Initialize via shorthand method:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
client = SlackNotify.new(options)
|
59
|
+
```
|
60
|
+
|
55
61
|
Send test request:
|
56
62
|
|
57
63
|
```ruby
|
@@ -78,13 +84,6 @@ You can also test gem via rake console:
|
|
78
84
|
rake console
|
79
85
|
```
|
80
86
|
|
81
|
-
## Gotchas
|
82
|
-
|
83
|
-
Current issues with Slack API:
|
84
|
-
|
85
|
-
- No message raised if team subdomain is invalid
|
86
|
-
- 500 server error is raised on bad requests
|
87
|
-
|
88
87
|
## License
|
89
88
|
|
90
89
|
Copyright (c) 2013-2014 Dan Sosedoff, <dan.sosedoff@gmail.com>
|
data/lib/slack-notify.rb
CHANGED
@@ -2,4 +2,10 @@ require "slack-notify/version"
|
|
2
2
|
require "slack-notify/error"
|
3
3
|
require "slack-notify/connection"
|
4
4
|
require "slack-notify/payload"
|
5
|
-
require "slack-notify/client"
|
5
|
+
require "slack-notify/client"
|
6
|
+
|
7
|
+
module SlackNotify
|
8
|
+
def self.new(options = {})
|
9
|
+
SlackNotify::Client.new(options)
|
10
|
+
end
|
11
|
+
end
|
data/lib/slack-notify/client.rb
CHANGED
@@ -5,9 +5,8 @@ module SlackNotify
|
|
5
5
|
class Client
|
6
6
|
include SlackNotify::Connection
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
@token = token
|
8
|
+
def initialize(options = {})
|
9
|
+
@webhook_url = options[:webhook_url]
|
11
10
|
@username = options[:username]
|
12
11
|
@channel = options[:channel]
|
13
12
|
@icon_url = options[:icon_url]
|
@@ -15,7 +14,9 @@ module SlackNotify
|
|
15
14
|
@link_names = options[:link_names]
|
16
15
|
@unfurl_links = options[:unfurl_links] || "1"
|
17
16
|
|
18
|
-
|
17
|
+
if @webhook_url.nil?
|
18
|
+
raise ArgumentError, "Webhook URL required"
|
19
|
+
end
|
19
20
|
end
|
20
21
|
|
21
22
|
def test
|
@@ -42,16 +43,6 @@ module SlackNotify
|
|
42
43
|
|
43
44
|
private
|
44
45
|
|
45
|
-
def validate_arguments
|
46
|
-
raise ArgumentError, "Team name required" if @team.nil?
|
47
|
-
raise ArgumentError, "Token required" if @token.nil?
|
48
|
-
raise ArgumentError, "Invalid team name" unless valid_team_name?
|
49
|
-
end
|
50
|
-
|
51
|
-
def valid_team_name?
|
52
|
-
@team =~ /^[a-z\d\-]+$/i ? true : false
|
53
|
-
end
|
54
|
-
|
55
46
|
def delivery_channels(channel)
|
56
47
|
[channel || @channel || "#general"].flatten.compact.uniq
|
57
48
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module SlackNotify
|
2
2
|
module Connection
|
3
3
|
def send_payload(payload)
|
4
|
-
conn = Faraday.new(
|
4
|
+
conn = Faraday.new(@webhook_url) do |c|
|
5
5
|
c.use(Faraday::Request::UrlEncoded)
|
6
6
|
c.adapter(Faraday.default_adapter)
|
7
7
|
c.options.timeout = 5
|
@@ -24,13 +24,5 @@ module SlackNotify
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
28
|
-
def hook_url
|
29
|
-
"#{base_url}/services/hooks/incoming-webhook?token=#{@token}"
|
30
|
-
end
|
31
|
-
|
32
|
-
def base_url
|
33
|
-
"https://#{@team}.slack.com"
|
34
|
-
end
|
35
27
|
end
|
36
28
|
end
|
data/lib/slack-notify/version.rb
CHANGED
@@ -2,36 +2,17 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe SlackNotify::Client do
|
4
4
|
describe "#initialize" do
|
5
|
-
it "requires
|
6
|
-
expect { described_class.new
|
7
|
-
to raise_error ArgumentError, "Team name required"
|
5
|
+
it "requires webhook_url" do
|
6
|
+
expect { described_class.new }.to raise_error ArgumentError, "Webhook URL required"
|
8
7
|
end
|
9
8
|
|
10
|
-
it "
|
11
|
-
expect { described_class.new("foobar"
|
12
|
-
to raise_error ArgumentError, "Token required"
|
13
|
-
end
|
14
|
-
|
15
|
-
it "raises error on invalid team name" do
|
16
|
-
names = ["foo bar", "foo $bar", "foo.bar"]
|
17
|
-
|
18
|
-
names.each do |name|
|
19
|
-
expect { described_class.new(name, "token") }.
|
20
|
-
to raise_error "Invalid team name"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
it "does not raise error on valid team name" do
|
25
|
-
names = ["foo", "Foo", "foo-bar"]
|
26
|
-
|
27
|
-
names.each do |name|
|
28
|
-
expect { described_class.new(name, "token") }.not_to raise_error
|
29
|
-
end
|
9
|
+
it "does not raise error when webhook_url is set" do
|
10
|
+
expect { described_class.new(webhook_url: "foobar") }.not_to raise_error
|
30
11
|
end
|
31
12
|
end
|
32
13
|
|
33
14
|
describe "#test" do
|
34
|
-
let(:client) { described_class.new(
|
15
|
+
let(:client) { described_class.new(webhook_url: "foobar") }
|
35
16
|
|
36
17
|
before do
|
37
18
|
client.stub(:notify)
|
@@ -44,46 +25,31 @@ describe SlackNotify::Client do
|
|
44
25
|
end
|
45
26
|
|
46
27
|
describe "#notify" do
|
47
|
-
let(:client)
|
28
|
+
let(:client) do
|
29
|
+
described_class.new(webhook_url: "https://hooks.slack.com/services/foo/bar")
|
30
|
+
end
|
48
31
|
|
49
|
-
|
50
|
-
stub_request(:post, "https://
|
51
|
-
|
52
|
-
|
53
|
-
|
32
|
+
before do
|
33
|
+
stub_request(:post, "https://hooks.slack.com/services/foo/bar").
|
34
|
+
with(:body => {"{\"text\":\"Message\",\"username\":\"webhookbot\",\"channel\":\"#general\",\"unfurl_links\":\"1\"}"=>true},
|
35
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded'}).
|
36
|
+
to_return(:status => 200, :body => "", :headers => {})
|
37
|
+
end
|
54
38
|
|
39
|
+
it "delivers payload" do
|
55
40
|
expect(client.notify("Message")).to eq true
|
56
41
|
end
|
57
42
|
|
58
|
-
context "
|
59
|
-
let(:vars) { ["SLACK_TEAM", "SLACK_TOKEN", "SLACK_CHANNEL", "SLACK_USER"] }
|
60
|
-
|
43
|
+
context "when icon_url is set" do
|
61
44
|
let(:client) do
|
62
|
-
described_class.new(
|
63
|
-
|
64
|
-
|
65
|
-
|
45
|
+
described_class.new(
|
46
|
+
webhook_url: "https://hooks.slack.com/services/foo/bar",
|
47
|
+
icon_url: "foobar"
|
48
|
+
)
|
66
49
|
end
|
67
50
|
|
68
51
|
before do
|
69
|
-
|
70
|
-
client.stub(:send_payload) { true }
|
71
|
-
end
|
72
|
-
|
73
|
-
after do
|
74
|
-
vars.each { |v| ENV.delete(v) }
|
75
|
-
end
|
76
|
-
|
77
|
-
it "sends data to channel specified by environment variables" do
|
78
|
-
client.notify("Message")
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
context "when icon_url is set" do
|
83
|
-
let(:client) { described_class.new("foo", "bar", icon_url: "foobar") }
|
84
|
-
|
85
|
-
before do
|
86
|
-
stub_request(:post, "https://foo.slack.com/services/hooks/incoming-webhook?token=bar").
|
52
|
+
stub_request(:post, "https://hooks.slack.com/services/foo/bar").
|
87
53
|
with(:body => {"{\"text\":\"Message\",\"username\":\"webhookbot\",\"channel\":\"#general\",\"icon_url\":\"foobar\",\"unfurl_links\":\"1\"}"=>true},
|
88
54
|
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Faraday v0.9.0'}).
|
89
55
|
to_return(:status => 200, :body => "", :headers => {})
|
@@ -95,10 +61,15 @@ describe SlackNotify::Client do
|
|
95
61
|
end
|
96
62
|
|
97
63
|
context "when icon_emoji is set" do
|
98
|
-
let(:client)
|
64
|
+
let(:client) do
|
65
|
+
described_class.new(
|
66
|
+
webhook_url: "https://hooks.slack.com/services/foo/bar",
|
67
|
+
icon_emoji: "foobar"
|
68
|
+
)
|
69
|
+
end
|
99
70
|
|
100
71
|
before do
|
101
|
-
stub_request(:post, "https://
|
72
|
+
stub_request(:post, "https://hooks.slack.com/services/foo/bar").
|
102
73
|
with(:body => {"{\"text\":\"Message\",\"username\":\"webhookbot\",\"channel\":\"#general\",\"icon_emoji\":\"foobar\",\"unfurl_links\":\"1\"}"=>true},
|
103
74
|
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Faraday v0.9.0'}).
|
104
75
|
to_return(:status => 200, :body => "", :headers => {})
|
@@ -110,10 +81,15 @@ describe SlackNotify::Client do
|
|
110
81
|
end
|
111
82
|
|
112
83
|
context "when link_names is set" do
|
113
|
-
let(:client)
|
84
|
+
let(:client) do
|
85
|
+
described_class.new(
|
86
|
+
webhook_url: "https://hooks.slack.com/services/foo/bar",
|
87
|
+
link_names: 1
|
88
|
+
)
|
89
|
+
end
|
114
90
|
|
115
91
|
before do
|
116
|
-
stub_request(:post, "https://
|
92
|
+
stub_request(:post, "https://hooks.slack.com/services/foo/bar").
|
117
93
|
with(:body => {"{\"text\":\"Message\",\"username\":\"webhookbot\",\"channel\":\"#general\",\"link_names\":1,\"unfurl_links\":\"1\"}"=>true},
|
118
94
|
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Faraday v0.9.0'}).
|
119
95
|
to_return(:status => 200, :body => "", :headers => {})
|
@@ -137,7 +113,7 @@ describe SlackNotify::Client do
|
|
137
113
|
|
138
114
|
context "when team name is invalid" do
|
139
115
|
before do
|
140
|
-
stub_request(:post, "https://
|
116
|
+
stub_request(:post, "https://hooks.slack.com/services/foo/bar").
|
141
117
|
with(:body => {"{\"text\":\"Message\",\"username\":\"webhookbot\",\"channel\":\"#general\",\"unfurl_links\":\"1\"}"=>true},
|
142
118
|
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded'}).
|
143
119
|
to_return(:status => 404, :body => "Line 1\nLine 2\nLine 3", :headers => {})
|
@@ -150,7 +126,7 @@ describe SlackNotify::Client do
|
|
150
126
|
|
151
127
|
context "when token is invalid" do
|
152
128
|
before do
|
153
|
-
stub_request(:post, "https://
|
129
|
+
stub_request(:post, "https://hooks.slack.com/services/foo/bar").
|
154
130
|
with(:body => {"{\"text\":\"Message\",\"username\":\"webhookbot\",\"channel\":\"#general\",\"unfurl_links\":\"1\"}"=>true},
|
155
131
|
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded'}).
|
156
132
|
to_return(:status => 500, :body => "No hooks", :headers => {})
|
@@ -164,7 +140,7 @@ describe SlackNotify::Client do
|
|
164
140
|
|
165
141
|
context "when channel is invalid" do
|
166
142
|
before do
|
167
|
-
stub_request(:post, "https://
|
143
|
+
stub_request(:post, "https://hooks.slack.com/services/foo/bar").
|
168
144
|
with(:body => {"{\"text\":\"message\",\"username\":\"webhookbot\",\"channel\":\"#foobar\",\"unfurl_links\":\"1\"}"=>true},
|
169
145
|
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/x-www-form-urlencoded'}).
|
170
146
|
to_return(:status => 500, :body => "Invalid channel specified", :headers => {})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slack-notify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Sosedoff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- slack-notify.gemspec
|
132
132
|
- spec/slack-notify/client_spec.rb
|
133
133
|
- spec/slack-notify/payload_spec.rb
|
134
|
+
- spec/slack_notify_spec.rb
|
134
135
|
- spec/spec_helper.rb
|
135
136
|
homepage: https://github.com/sosedoff/slack-notify
|
136
137
|
licenses:
|
@@ -159,4 +160,5 @@ summary: Send notifications to a Slack channel
|
|
159
160
|
test_files:
|
160
161
|
- spec/slack-notify/client_spec.rb
|
161
162
|
- spec/slack-notify/payload_spec.rb
|
163
|
+
- spec/slack_notify_spec.rb
|
162
164
|
- spec/spec_helper.rb
|