rake_notification 0.0.2 → 0.0.3

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: 2a8517f309e1bea9d58fe584474dbaa145fa1aaa
4
- data.tar.gz: 21f6dbca969770b2e71b63d32ea1083235f706b5
3
+ metadata.gz: 07560d974879e7daaef1ce69dd0e9afbe02f6ff7
4
+ data.tar.gz: a1fbf4e5eab50209297c7e41f0436e819838a99f
5
5
  SHA512:
6
- metadata.gz: 8c53716a47671ea36cfcc23bed3a6969afd150f5f67b5ac83e51bd23339644440879834637ab24f67132387f2b30b9b12109628cf03e326edbeece360d28f236
7
- data.tar.gz: c67b702b0f57212873bc258d5240b973a82f6791280a8f06a60281232f089126b945c9c30deef69c19ae3fd479c4fe0a12f471a0dc0c638d2ac6cb2d7c555098
6
+ metadata.gz: f1bb34963c920fe7305cf887a950ac60747374fb00e5f39d1acc09acc9de32942b705dd6e15db22fa4a6dbb782c01bd70138d01b19fa9e2654b3ad1278ea0b62
7
+ data.tar.gz: 9f8cefe36de1166f5a362960f620e464554ec8d323524c777d992cc5297a6b1edadbfbc4095943e3d6c6947baa3d12321f524a0050329261780317edb922a79a
@@ -1,3 +1,3 @@
1
1
  module RakeNotification
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,72 @@
1
+ require 'active_support/core_ext/string/strip'
2
+ require 'breacan'
3
+
4
+ module RakeNotifier
5
+ class Slack < Base
6
+
7
+ START_LABEL = ":construction: *[START]*"
8
+ SUCCESS_LABEL = ":congratulations: *[SUCCESS]*"
9
+ FAILED_LABEL = ":x: *[FAILED]*"
10
+
11
+ def initialize(token, channel, icon: nil, username: nil)
12
+ @client = Client.new(token, channel: channel, icon: icon, username: username)
13
+ end
14
+
15
+ def started_task(task)
16
+ notice <<-EOS.strip_heredoc
17
+ #{START_LABEL} `$ #{task.reconstructed_command_line}`
18
+ >>> from #{hostname} at #{Time.now} RAILS_ENV=#{rails_env}
19
+ EOS
20
+ end
21
+
22
+ def completed_task(task, system_exit)
23
+ label = system_exit.success? ? SUCCESS_LABEL : FAILED_LABEL
24
+ notice <<-EOS.strip_heredoc
25
+ #{label} `$ #{task.reconstructed_command_line}`
26
+ >>> exit #{system_exit.status} from #{hostname} at #{Time.now} RAILS_ENV=#{rails_env}
27
+ EOS
28
+ end
29
+
30
+ private
31
+ def notice(msg)
32
+ @client.ping(msg)
33
+ end
34
+
35
+ class Client
36
+ def initialize(token, channel: '#test', icon: nil, username: nil)
37
+ Breacan.access_token = @token = token
38
+ @channel = channel
39
+ @icon = icon
40
+ @username = username
41
+ end
42
+ attr_accessor :token, :channel, :icon, :username
43
+
44
+ def args_to_post(msg)
45
+ arg = {
46
+ channel: channel,
47
+ text: msg,
48
+ as_user: false,
49
+ }
50
+ arg[icon_key(icon)] = icon if icon
51
+ arg[:username] = username if username
52
+ arg
53
+ end
54
+
55
+ def ping(msg)
56
+ Breacan.chat_post_message(args_to_post(msg))
57
+ end
58
+
59
+ private
60
+ def icon_key(icon_info)
61
+ case icon_info
62
+ when /^https?:\/\//
63
+ :icon_url
64
+ when /^:.+:$/
65
+ :icon_emoji
66
+ else
67
+ raise "May be invalid icon format: #{icon_info}"
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
data/lib/rake_notifier.rb CHANGED
@@ -2,6 +2,7 @@ require 'socket'
2
2
 
3
3
  module RakeNotifier
4
4
  autoload :Ikachan, File.join(__dir__, 'rake_notifier', 'ikachan')
5
+ autoload :Slack, File.join(__dir__, 'rake_notifier', 'slack')
5
6
 
6
7
  class Base
7
8
  private
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_dependency "activesupport"
21
+ spec.add_dependency "breacan"
21
22
 
22
23
  spec.add_development_dependency "bundler", "~> 1.6"
23
24
  spec.add_development_dependency "rake"
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe RakeNotifier::Slack do
4
+ let(:notifier) { described_class.new(token, channel, username: username, icon: icon) }
5
+ subject { notifier }
6
+
7
+ let(:token) { 'xoxo-Example-T0k3N' }
8
+ let(:channel) { '#rake_notification' }
9
+ let(:username) { nil }
10
+ let(:icon) { nil }
11
+ let(:task) { double(:reconstructed_command_line => 'rake sample') }
12
+
13
+ it { is_expected.to respond_to :started_task }
14
+ it { is_expected.to respond_to :completed_task }
15
+
16
+ context 'variables' do
17
+ subject { notifier.instance_variable_get(:@client) }
18
+
19
+ let(:username) { 'Rake bot' }
20
+ let(:icon) { 'http://example.com/icon.png' }
21
+
22
+ its(:channel) { is_expected.to eq '#rake_notification' }
23
+ its(:username) { is_expected.to eq 'Rake bot' }
24
+ its(:icon) { is_expected.to eq 'http://example.com/icon.png' }
25
+ end
26
+
27
+ context 'posting' do
28
+ before do
29
+ expect(subject.instance_variable_get(:@client)).to receive(:ping).with(an_instance_of(String)).once
30
+ end
31
+
32
+ it { subject.started_task(task) }
33
+ end
34
+
35
+ context 'posting to internal client' do
36
+ let(:username) { 'Rake bot' }
37
+ let(:icon) { 'http://example.com/icon.png' }
38
+
39
+ before do
40
+ expect(Breacan).to receive(:chat_post_message)
41
+ .with(hash_including(
42
+ channel: channel,
43
+ icon_url: icon,
44
+ username: username,
45
+ as_user: false,
46
+ text: an_instance_of(String)
47
+ )).once
48
+ end
49
+
50
+ it { subject.started_task(task) }
51
+ end
52
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_notification
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - mizokami
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-07 00:00:00.000000000 Z
11
+ date: 2015-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: breacan
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -113,10 +127,12 @@ files:
113
127
  - lib/rake_notification/version.rb
114
128
  - lib/rake_notifier.rb
115
129
  - lib/rake_notifier/ikachan.rb
130
+ - lib/rake_notifier/slack.rb
116
131
  - rake_notification.gemspec
117
132
  - spec/lib/rake_notification_spec.rb
118
133
  - spec/lib/rake_notifier/ikachan/client_spec.rb
119
134
  - spec/lib/rake_notifier/ikachan_spec.rb
135
+ - spec/lib/rake_notifier/slack_spec.rb
120
136
  - spec/lib/rake_notifier_spec.rb
121
137
  - spec/spec_helper.rb
122
138
  homepage: ''
@@ -139,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
155
  version: '0'
140
156
  requirements: []
141
157
  rubyforge_project:
142
- rubygems_version: 2.2.2
158
+ rubygems_version: 2.4.5
143
159
  signing_key:
144
160
  specification_version: 4
145
161
  summary: Rake notification
@@ -147,5 +163,6 @@ test_files:
147
163
  - spec/lib/rake_notification_spec.rb
148
164
  - spec/lib/rake_notifier/ikachan/client_spec.rb
149
165
  - spec/lib/rake_notifier/ikachan_spec.rb
166
+ - spec/lib/rake_notifier/slack_spec.rb
150
167
  - spec/lib/rake_notifier_spec.rb
151
168
  - spec/spec_helper.rb