rake_notification 0.0.1 → 0.0.2
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 +4 -4
- data/.travis.yml +10 -0
- data/README.md +39 -1
- data/bin/rake_notify +5 -2
- data/lib/rake_notification/version.rb +1 -1
- data/lib/rake_notification.rb +38 -39
- data/lib/rake_notifier/ikachan.rb +76 -0
- data/lib/rake_notifier.rb +17 -0
- data/rake_notification.gemspec +1 -0
- data/spec/lib/rake_notification_spec.rb +20 -15
- data/spec/lib/rake_notifier/ikachan/client_spec.rb +17 -0
- data/spec/lib/rake_notifier/ikachan_spec.rb +11 -0
- data/spec/lib/rake_notifier_spec.rb +10 -0
- data/spec/spec_helper.rb +2 -0
- metadata +25 -3
- data/lib/rake_notification/whenever.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a8517f309e1bea9d58fe584474dbaa145fa1aaa
|
4
|
+
data.tar.gz: 21f6dbca969770b2e71b63d32ea1083235f706b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c53716a47671ea36cfcc23bed3a6969afd150f5f67b5ac83e51bd23339644440879834637ab24f67132387f2b30b9b12109628cf03e326edbeece360d28f236
|
7
|
+
data.tar.gz: c67b702b0f57212873bc258d5240b973a82f6791280a8f06a60281232f089126b945c9c30deef69c19ae3fd479c4fe0a12f471a0dc0c638d2ac6cb2d7c555098
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# RakeNotification
|
2
2
|
|
3
|
+
[](https://travis-ci.org/mizoR/rake_notification)
|
4
|
+
|
3
5
|
Notification of status for rake
|
4
6
|
|
5
7
|
## Installation
|
@@ -14,7 +16,43 @@ And then execute:
|
|
14
16
|
|
15
17
|
### Execution
|
16
18
|
|
17
|
-
$ bundle exec rake_notify
|
19
|
+
$ bundle exec rake_notify awesome_task
|
20
|
+
|
21
|
+
### Usage
|
22
|
+
|
23
|
+
#### Ikachan Notifier
|
24
|
+
|
25
|
+
```rb
|
26
|
+
# config/rake_notification.rb
|
27
|
+
|
28
|
+
endpoint = 'https://irc.example.com:4979/'
|
29
|
+
channel = '#rake_notification'
|
30
|
+
ikachan = RakeNotifier::Ikachan.new(endpoint, channel)
|
31
|
+
|
32
|
+
Rake.application.register_interceptor ikachan
|
33
|
+
Rake.application.register_observer ikachan
|
34
|
+
```
|
35
|
+
|
36
|
+
#### Custom Notifier
|
37
|
+
|
38
|
+
```rb
|
39
|
+
# config/rake_notification.rb
|
40
|
+
|
41
|
+
notifier = Object.new.tap do |o|
|
42
|
+
def o.started_task(task)
|
43
|
+
CustomNotifier.started(task).deliver
|
44
|
+
end
|
45
|
+
|
46
|
+
def o.completed_task(task, system_exit)
|
47
|
+
if !system_exit.success?
|
48
|
+
CustomNotifier.failed(task, system_exit)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
Rake.application.register_interceptor notifier
|
54
|
+
Rake.application.register_observer notifier
|
55
|
+
```
|
18
56
|
|
19
57
|
## Contributing
|
20
58
|
|
data/bin/rake_notify
CHANGED
@@ -9,10 +9,13 @@ end
|
|
9
9
|
require 'rake'
|
10
10
|
require 'rake_notification'
|
11
11
|
|
12
|
-
|
12
|
+
class Rake::Application
|
13
|
+
prepend RakeNotification
|
14
|
+
end
|
13
15
|
|
14
|
-
|
16
|
+
begin
|
15
17
|
require RakeNotification.config_path
|
18
|
+
rescue LoadError
|
16
19
|
end
|
17
20
|
|
18
21
|
Rake.application.run
|
data/lib/rake_notification.rb
CHANGED
@@ -1,57 +1,56 @@
|
|
1
1
|
require 'rake'
|
2
|
+
require 'rake_notifier'
|
2
3
|
|
3
4
|
module RakeNotification
|
4
5
|
def self.config_path
|
5
|
-
'./config/rake_notification
|
6
|
+
'./config/rake_notification'
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def reconstructed_command_line
|
14
|
-
@reconstructed_command_line ||= "#{File.basename($0)} #{ARGV.join(' ')}"
|
15
|
-
end
|
9
|
+
def reconstructed_command_line
|
10
|
+
@reconstructed_command_line ||= "#{File.basename($0)} #{ARGV.join(' ')}"
|
11
|
+
end
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
def register_observer(observer)
|
14
|
+
notification_observers << observer
|
15
|
+
end
|
20
16
|
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
def register_interceptor(interceptor)
|
18
|
+
notification_interceptors << interceptor
|
19
|
+
end
|
24
20
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
def top_level
|
22
|
+
inform_interceptors rescue nil
|
23
|
+
|
24
|
+
super
|
25
|
+
rescue SystemExit => original_error
|
26
|
+
inform_observers(original_error) rescue nil
|
27
|
+
raise original_error
|
28
|
+
rescue Exception => original_error
|
29
|
+
inform_observers(SystemExit.new(1, original_error.message)) rescue nil
|
30
|
+
raise original_error
|
31
|
+
else
|
32
|
+
inform_observers rescue nil
|
33
|
+
end
|
34
34
|
|
35
|
-
|
35
|
+
private
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
37
|
+
def inform_interceptors
|
38
|
+
notification_interceptors.each do |interceptor|
|
39
|
+
interceptor.started_task(self)
|
41
40
|
end
|
41
|
+
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
43
|
+
def inform_observers(system_exit=SystemExit.new(0))
|
44
|
+
notification_observers.each do |observer|
|
45
|
+
observer.completed_task(self, system_exit)
|
47
46
|
end
|
47
|
+
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
def notification_interceptors
|
50
|
+
@notification_interceptors ||= []
|
51
|
+
end
|
52
52
|
|
53
|
-
|
54
|
-
|
55
|
-
end
|
53
|
+
def notification_observers
|
54
|
+
@notification_observers ||= []
|
56
55
|
end
|
57
56
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'active_support/core_ext/string/strip'
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
module RakeNotifier
|
7
|
+
class Ikachan < Base
|
8
|
+
|
9
|
+
START_LABEL = "\x02\x0307[START]\x0f"
|
10
|
+
SUCCESS_LABEL = "\x02\x0303[SUCCESS]\x0f"
|
11
|
+
FAILED_LABEL = "\x02\x0304[FAILED]\x0f"
|
12
|
+
|
13
|
+
def initialize(url, channel)
|
14
|
+
@client = Client.new(url, channel)
|
15
|
+
end
|
16
|
+
|
17
|
+
def started_task(task)
|
18
|
+
notice <<-EOS.strip_heredoc
|
19
|
+
#{START_LABEL} $ #{task.reconstructed_command_line}
|
20
|
+
(from #{hostname} at #{Time.now} RAILS_ENV=#{rails_env})
|
21
|
+
EOS
|
22
|
+
end
|
23
|
+
|
24
|
+
def completed_task(task, system_exit)
|
25
|
+
label = system_exit.success? ? SUCCESS_LABEL : FAILED_LABEL
|
26
|
+
notice <<-EOS.strip_heredoc
|
27
|
+
#{label} $ #{task.reconstructed_command_line}
|
28
|
+
(exit #{system_exit.status} from #{hostname} at #{Time.now} RAILS_ENV=#{rails_env})
|
29
|
+
EOS
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def notice(message)
|
35
|
+
message.each_line {|m| @client.notice m }
|
36
|
+
end
|
37
|
+
|
38
|
+
class Client
|
39
|
+
def initialize(url, channel)
|
40
|
+
@url = url
|
41
|
+
@channel = channel
|
42
|
+
end
|
43
|
+
|
44
|
+
def join
|
45
|
+
request('/join', {channel: @channel})
|
46
|
+
end
|
47
|
+
|
48
|
+
def notice(message)
|
49
|
+
join
|
50
|
+
request('/notice', {channel: @channel, message: message})
|
51
|
+
end
|
52
|
+
|
53
|
+
def uri_for(path = nil)
|
54
|
+
uri = URI.parse("#{@url}/#{path}")
|
55
|
+
uri.path = Pathname.new(uri.path).cleanpath.to_s
|
56
|
+
uri
|
57
|
+
end
|
58
|
+
|
59
|
+
def request(path, params)
|
60
|
+
begin
|
61
|
+
uri = uri_for(path)
|
62
|
+
|
63
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
64
|
+
http.open_timeout = http.read_timeout = 10
|
65
|
+
|
66
|
+
req = Net::HTTP::Post.new(uri.path)
|
67
|
+
req.form_data = params
|
68
|
+
|
69
|
+
http.request(req)
|
70
|
+
rescue StandardError, TimeoutError => e
|
71
|
+
$stderr.puts "#{e.class} #{e.message}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
module RakeNotifier
|
4
|
+
autoload :Ikachan, File.join(__dir__, 'rake_notifier', 'ikachan')
|
5
|
+
|
6
|
+
class Base
|
7
|
+
private
|
8
|
+
|
9
|
+
def hostname
|
10
|
+
Socket.gethostname rescue 'Anonymous'
|
11
|
+
end
|
12
|
+
|
13
|
+
def rails_env
|
14
|
+
ENV['RAILS_ENV'] || 'development'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/rake_notification.gemspec
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RakeNotification do
|
4
|
-
using RakeNotification
|
5
|
-
|
6
4
|
subject { app }
|
7
5
|
|
8
6
|
let(:app) { Rake::Application.new }
|
@@ -10,48 +8,55 @@ describe RakeNotification do
|
|
10
8
|
let(:notifier) { double('notifier') }
|
11
9
|
|
12
10
|
before {
|
11
|
+
class Rake::Application; prepend RakeNotification; end
|
12
|
+
|
13
13
|
allow(app).to receive(:invoke_task).and_return(true)
|
14
14
|
}
|
15
15
|
|
16
16
|
it { expect(described_class.config_path).to be_a String }
|
17
17
|
|
18
|
-
it {
|
18
|
+
it { is_expected.to be_respond_to :run }
|
19
19
|
|
20
20
|
describe "#reconstruct_command_line" do
|
21
|
-
subject { app.
|
21
|
+
subject { app.reconstructed_command_line }
|
22
|
+
|
22
23
|
it {
|
23
24
|
app.init
|
24
|
-
|
25
|
+
is_expected.to be_a String
|
25
26
|
}
|
26
27
|
end
|
27
28
|
|
28
29
|
describe '#register_interceptor' do
|
30
|
+
subject { notifier }
|
31
|
+
|
29
32
|
before { app.register_interceptor notifier }
|
30
33
|
|
31
|
-
it '
|
32
|
-
|
33
|
-
|
34
|
+
it 'should receive started_task' do
|
35
|
+
is_expected.to receive(:started_task).with(app)
|
36
|
+
is_expected.not_to receive(:completed_task)
|
34
37
|
|
35
38
|
app.run
|
36
39
|
end
|
37
40
|
end
|
38
41
|
|
39
42
|
describe '#register_observer' do
|
43
|
+
subject { notifier }
|
44
|
+
|
40
45
|
before { app.register_observer notifier }
|
41
46
|
|
42
|
-
it '
|
43
|
-
|
44
|
-
|
47
|
+
it 'is_expected.to receive completed_task' do
|
48
|
+
is_expected.not_to receive(:started_task)
|
49
|
+
is_expected.to receive(:completed_task)
|
45
50
|
|
46
51
|
app.run
|
47
52
|
end
|
48
53
|
|
49
|
-
context '
|
54
|
+
context 'raise error on invoking task' do
|
50
55
|
before { app.stub(:invoke_task).and_raise(StandardError.new('Rake Error')) }
|
51
56
|
|
52
|
-
it '
|
53
|
-
|
54
|
-
|
57
|
+
it 'should receive completed_task' do
|
58
|
+
is_expected.not_to receive(:started_task)
|
59
|
+
is_expected.to receive(:completed_task).with(app, kind_of(SystemExit))
|
55
60
|
begin
|
56
61
|
$stderr.reopen('/dev/null', 'w')
|
57
62
|
app.run
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RakeNotifier::Ikachan::Client do
|
4
|
+
subject { client }
|
5
|
+
|
6
|
+
let(:client) { described_class.new(url, channel) }
|
7
|
+
let(:url) { 'https://irc.example.com:4649' }
|
8
|
+
let(:channel) { '#rake_notification' }
|
9
|
+
|
10
|
+
describe '#uri_for' do
|
11
|
+
subject { client.uri_for('/notice') }
|
12
|
+
|
13
|
+
let(:path) { '/notice' }
|
14
|
+
|
15
|
+
its(:to_s) { is_expected.to eq "#{url}#{path}" }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RakeNotifier::Ikachan do
|
4
|
+
subject { described_class.new(url, channel) }
|
5
|
+
|
6
|
+
let(:url) { 'https://irc.example.com:4979' }
|
7
|
+
let(:channel) { '#rake_notification' }
|
8
|
+
|
9
|
+
it { is_expected.to respond_to :started_task }
|
10
|
+
it { is_expected.to respond_to :completed_task }
|
11
|
+
end
|
data/spec/spec_helper.rb
CHANGED
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.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mizokami
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-its
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description:
|
84
98
|
email:
|
85
99
|
- suzunatsu@yahoo.com
|
@@ -89,6 +103,7 @@ extensions: []
|
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
105
|
- ".gitignore"
|
106
|
+
- ".travis.yml"
|
92
107
|
- Gemfile
|
93
108
|
- LICENSE.txt
|
94
109
|
- README.md
|
@@ -96,9 +111,13 @@ files:
|
|
96
111
|
- bin/rake_notify
|
97
112
|
- lib/rake_notification.rb
|
98
113
|
- lib/rake_notification/version.rb
|
99
|
-
- lib/
|
114
|
+
- lib/rake_notifier.rb
|
115
|
+
- lib/rake_notifier/ikachan.rb
|
100
116
|
- rake_notification.gemspec
|
101
117
|
- spec/lib/rake_notification_spec.rb
|
118
|
+
- spec/lib/rake_notifier/ikachan/client_spec.rb
|
119
|
+
- spec/lib/rake_notifier/ikachan_spec.rb
|
120
|
+
- spec/lib/rake_notifier_spec.rb
|
102
121
|
- spec/spec_helper.rb
|
103
122
|
homepage: ''
|
104
123
|
licenses:
|
@@ -126,4 +145,7 @@ specification_version: 4
|
|
126
145
|
summary: Rake notification
|
127
146
|
test_files:
|
128
147
|
- spec/lib/rake_notification_spec.rb
|
148
|
+
- spec/lib/rake_notifier/ikachan/client_spec.rb
|
149
|
+
- spec/lib/rake_notifier/ikachan_spec.rb
|
150
|
+
- spec/lib/rake_notifier_spec.rb
|
129
151
|
- spec/spec_helper.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
job_type :rake_notify, "cd :path && :environment_variable=:environment :bundle_command rake_notify :task --silent :output"
|