slack-notifier 2.2.2 → 2.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d741922d25b1c2a19c397045f22e37565f6f665
4
- data.tar.gz: 25b452bb8bb9ffee8ed85c60a5c9e9dd522470a8
3
+ metadata.gz: 68824ffcac979f733a61c7b5a77d0d21e8ed1dfe
4
+ data.tar.gz: '08d9cee6b3a56238304f54756640794f443c78ec'
5
5
  SHA512:
6
- metadata.gz: 2d54f11cc362ca57bd76792dc38d2e7755cc0f483144cce7721da028825a53227b4ecf703eac2fa910225a8a2ac02748e982b7fd3d372250cf9fe4bc1ce57519
7
- data.tar.gz: c9eee1509416474730ff6a7f4aa63819c9f3297ce3720f28505489359cb12f7426e004b76ce3fc04b9047166eab36a2beed4c45e186ed5389211b4b5e806388e
6
+ metadata.gz: 65efd0c9618f26051b0f562f3ee46b5e6c697c479a6fe50d2014f77da3fdfb13c1ad6009f255cf6481cb4922d7bcc33b49ce8d4a65fb3372734f422f87189e7d
7
+ data.tar.gz: 9b636e5fcd4d0bc0c815fb6d3c0625a9f1fd62a366bd24e4f0cd3fbe368eadc0405410ce0786a87b12ccd5fbd4f9968b1d89239cd955e9ed62f6407982a76276
@@ -42,9 +42,11 @@ module Slack
42
42
  payload = config.defaults.merge(payload)
43
43
 
44
44
  params[:http_options] = payload.delete(:http_options) if payload.key?(:http_options)
45
- params[:payload] = middleware.call(payload).to_json
46
45
 
47
- client.post endpoint, params
46
+ middleware.call(payload).each do |pld|
47
+ params[:payload] = pld.to_json
48
+ client.post endpoint, params
49
+ end
48
50
  end
49
51
 
50
52
  private
@@ -5,7 +5,12 @@ module Slack
5
5
  def initialize
6
6
  @http_client = Util::HTTPClient
7
7
  @defaults = {}
8
- @middleware = [:format_message, :format_attachments, :at]
8
+ @middleware = [
9
+ :format_message,
10
+ :format_attachments,
11
+ :at,
12
+ :channels,
13
+ ]
9
14
  end
10
15
 
11
16
  def http_client client=nil
@@ -20,3 +20,4 @@ require_relative "payload_middleware/base"
20
20
  require_relative "payload_middleware/format_message"
21
21
  require_relative "payload_middleware/format_attachments"
22
22
  require_relative "payload_middleware/at"
23
+ require_relative "payload_middleware/channels"
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Slack
4
+ class Notifier
5
+ class PayloadMiddleware
6
+ class Channels < Base
7
+ middleware_name :channels
8
+
9
+ def call payload={}
10
+ return payload unless payload[:channel].respond_to?(:to_ary)
11
+
12
+ payload[:channel].to_ary.map do |channel|
13
+ pld = payload.dup
14
+ pld[:channel] = channel
15
+ pld
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -25,10 +25,24 @@ module Slack
25
25
  end
26
26
 
27
27
  def call payload={}
28
- stack.inject payload do |pld, middleware|
29
- middleware.call(pld)
28
+ result = stack.inject payload do |pld, middleware|
29
+ as_array(pld).flat_map do |p|
30
+ middleware.call(p)
31
+ end
30
32
  end
33
+
34
+ as_array(result)
31
35
  end
36
+
37
+ private
38
+
39
+ def as_array args
40
+ if args.respond_to?(:to_ary)
41
+ args.to_ary
42
+ else
43
+ [args]
44
+ end
45
+ end
32
46
  end
33
47
  end
34
48
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Slack
3
3
  class Notifier
4
- VERSION = "2.2.2".freeze # rubocop:disable Style/RedundantFreeze
4
+ VERSION = "2.3.0".freeze # rubocop:disable Style/RedundantFreeze
5
5
  end
6
6
  end
@@ -10,5 +10,6 @@ end
10
10
  puts "testing with #{ruby}"
11
11
 
12
12
  notifier = Slack::Notifier.new ENV["SLACK_WEBHOOK_URL"], username: "notifier"
13
+ notifier.ping "hello", channel: ["#general", "#random"]
13
14
  notifier.ping "hello/こんにちは from notifier test script on #{ruby}\225"
14
15
  notifier.ping attachments: [{ color: "#1BF5AF", fallback: "fallback", text: "attachment" }]
@@ -46,7 +46,7 @@ RSpec.describe Slack::Notifier::Config do
46
46
  it "is [:format_message, :format_attachments, :at] if not set" do
47
47
  subject = described_class.new
48
48
 
49
- expect(subject.middleware).to eq [:format_message, :format_attachments, :at]
49
+ expect(subject.middleware).to eq [:format_message, :format_attachments, :at, :channels]
50
50
  end
51
51
 
52
52
  it "takes an array or a splat of args" do
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Slack::Notifier::PayloadMiddleware::Channels do
4
+ it "leaves string channels alone" do
5
+ subject = described_class.new(:notifier)
6
+ payload = { text: "hello", channel: "hodor" }
7
+
8
+ expect(subject.call(payload)).to eq text: "hello", channel: "hodor"
9
+ end
10
+
11
+ it "splits payload into multiple if given an array of channels" do
12
+ subject = described_class.new(:notifier)
13
+ payload = { text: "hello", channel: %w[foo hodor] }
14
+
15
+ expect(subject.call(payload)).to eq [
16
+ { text: "hello", channel: "foo" },
17
+ { text: "hello", channel: "hodor" }
18
+ ]
19
+ end
20
+ end
@@ -4,6 +4,10 @@ RSpec.describe Slack::Notifier::PayloadMiddleware::Stack do
4
4
  double(call: 1)
5
5
  end
6
6
 
7
+ let(:return_one_twice) do
8
+ double(call: [1, 1])
9
+ end
10
+
7
11
  let(:return_two) do
8
12
  double(call: 2)
9
13
  end
@@ -18,6 +22,7 @@ RSpec.describe Slack::Notifier::PayloadMiddleware::Stack do
18
22
  Slack::Notifier::PayloadMiddleware.send(:remove_instance_variable, :@registry)
19
23
 
20
24
  Slack::Notifier::PayloadMiddleware.register return_one, :return_one
25
+ Slack::Notifier::PayloadMiddleware.register return_one_twice, :return_one_twice
21
26
  Slack::Notifier::PayloadMiddleware.register return_two, :return_two
22
27
  Slack::Notifier::PayloadMiddleware.register return_three, :return_three
23
28
  end
@@ -87,7 +92,28 @@ RSpec.describe Slack::Notifier::PayloadMiddleware::Stack do
87
92
  expect(return_three).to receive(:call).with(1)
88
93
  expect(return_two).to receive(:call).with(3)
89
94
 
90
- expect(subject.call(5)).to eq 2
95
+ expect(subject.call(5)).to eq [2]
96
+ end
97
+
98
+ it "allows any middleware to return an array but other's don't need special behavior" do
99
+ allow(return_one_twice).to receive(:new).and_return(return_one_twice)
100
+ allow(return_two).to receive(:new).and_return(return_two)
101
+
102
+ subject = described_class.new(:notifier)
103
+ subject.set(:return_one_twice, :return_two)
104
+
105
+ expect(subject.call(5)).to eq [2, 2]
106
+ end
107
+
108
+ it "handles multiple middleware splitting payload" do
109
+ allow(return_one_twice).to receive(:new).and_return(return_one_twice)
110
+ allow(return_two).to receive(:new).and_return(return_two)
111
+
112
+ subject = described_class.new(:notifier)
113
+ subject.set(:return_one_twice, :return_one_twice, :return_two)
114
+
115
+ expect(subject.call(5)).to eq [2, 2, 2, 2]
116
+
91
117
  end
92
118
  end
93
119
  end
@@ -84,7 +84,7 @@ RSpec.describe Slack::Notifier do
84
84
 
85
85
  expect(stack).to receive(:call)
86
86
  .with(channel: "default", user: "rocket")
87
- .and_return(test: "stack")
87
+ .and_return([test: "stack"])
88
88
 
89
89
  expect(mock_http).to receive(:post).with(
90
90
  URI.parse("http://example.com"),
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-notifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Sloan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-28 00:00:00.000000000 Z
11
+ date: 2017-08-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: " A slim ruby wrapper for posting to slack webhooks "
14
14
  email:
@@ -22,6 +22,7 @@ files:
22
22
  - lib/slack-notifier/payload_middleware.rb
23
23
  - lib/slack-notifier/payload_middleware/at.rb
24
24
  - lib/slack-notifier/payload_middleware/base.rb
25
+ - lib/slack-notifier/payload_middleware/channels.rb
25
26
  - lib/slack-notifier/payload_middleware/format_attachments.rb
26
27
  - lib/slack-notifier/payload_middleware/format_message.rb
27
28
  - lib/slack-notifier/payload_middleware/stack.rb
@@ -34,6 +35,7 @@ files:
34
35
  - spec/lib/slack-notifier/config_spec.rb
35
36
  - spec/lib/slack-notifier/payload_middleware/at_spec.rb
36
37
  - spec/lib/slack-notifier/payload_middleware/base_spec.rb
38
+ - spec/lib/slack-notifier/payload_middleware/channels_spec.rb
37
39
  - spec/lib/slack-notifier/payload_middleware/format_attachments_spec.rb
38
40
  - spec/lib/slack-notifier/payload_middleware/format_message_spec.rb
39
41
  - spec/lib/slack-notifier/payload_middleware/stack_spec.rb
@@ -72,6 +74,7 @@ test_files:
72
74
  - spec/lib/slack-notifier/config_spec.rb
73
75
  - spec/lib/slack-notifier/payload_middleware/at_spec.rb
74
76
  - spec/lib/slack-notifier/payload_middleware/base_spec.rb
77
+ - spec/lib/slack-notifier/payload_middleware/channels_spec.rb
75
78
  - spec/lib/slack-notifier/payload_middleware/format_attachments_spec.rb
76
79
  - spec/lib/slack-notifier/payload_middleware/format_message_spec.rb
77
80
  - spec/lib/slack-notifier/payload_middleware/stack_spec.rb