capnotify 0.1.0pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +376 -0
- data/Rakefile +1 -0
- data/capnotify.gemspec +28 -0
- data/lib/capnotify/component.rb +88 -0
- data/lib/capnotify/plugin/details.rb +26 -0
- data/lib/capnotify/plugin/overview.rb +23 -0
- data/lib/capnotify/plugin.rb +121 -0
- data/lib/capnotify/templates/_component.html.erb +20 -0
- data/lib/capnotify/templates/_component.txt.erb +11 -0
- data/lib/capnotify/templates/default_notification.html.erb +78 -0
- data/lib/capnotify/templates/default_notification.txt.erb +8 -0
- data/lib/capnotify/version.rb +3 -0
- data/lib/capnotify.rb +132 -0
- data/spec/capnotify/component_spec.rb +100 -0
- data/spec/capnotify/plugin_spec.rb +256 -0
- data/spec/capnotify_spec.rb +196 -0
- data/spec/spec_helper.rb +15 -0
- metadata +170 -0
@@ -0,0 +1,256 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Capnotify::Plugin do
|
4
|
+
|
5
|
+
# a proxy object to call methods on to detect what gets called in the plugin
|
6
|
+
class ProxyObject
|
7
|
+
class << self
|
8
|
+
@instance = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.instance
|
12
|
+
@instance ||= ProxyObject.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def call_init; end
|
16
|
+
def call_unload; end
|
17
|
+
end
|
18
|
+
|
19
|
+
# a plugin for testing with
|
20
|
+
# wires up init and unload to the ProxyObject
|
21
|
+
module MyPlugin
|
22
|
+
def init
|
23
|
+
ProxyObject.instance.call_init
|
24
|
+
end
|
25
|
+
|
26
|
+
def unload
|
27
|
+
ProxyObject.instance.call_unload
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:config) do
|
32
|
+
Capistrano::Configuration.new
|
33
|
+
end
|
34
|
+
|
35
|
+
before do
|
36
|
+
Capnotify.load_into(config)
|
37
|
+
end
|
38
|
+
|
39
|
+
after do
|
40
|
+
Capistrano::EXTENSIONS.keys.each do |ex|
|
41
|
+
Capistrano.remove_plugin(ex)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
let(:capnotify) { config.capnotify }
|
46
|
+
|
47
|
+
context "#appname" do
|
48
|
+
|
49
|
+
context "when capnotify_appname is missing" do
|
50
|
+
|
51
|
+
before do
|
52
|
+
config.load do
|
53
|
+
unset :capnotify_appname
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return an empty string" do
|
58
|
+
capnotify.appname.should == ''
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
context "#load_plugin" do
|
65
|
+
|
66
|
+
it "should load the plugin into capistrano" do
|
67
|
+
config.load do
|
68
|
+
capnotify.load_plugin :my_plugin, MyPlugin
|
69
|
+
end
|
70
|
+
|
71
|
+
Capistrano::EXTENSIONS.keys.should include(:my_plugin)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should call init on the plugin" do
|
75
|
+
ProxyObject.instance.should_receive :call_init
|
76
|
+
|
77
|
+
config.load do
|
78
|
+
capnotify.load_plugin :my_plugin, MyPlugin
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context "#unload_plugin" do
|
86
|
+
|
87
|
+
before do
|
88
|
+
config.load do
|
89
|
+
capnotify.load_plugin :my_plugin, MyPlugin
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should call unload on the plugin if the plugin handles it" do
|
94
|
+
ProxyObject.instance.should_receive(:call_unload)
|
95
|
+
|
96
|
+
config.load do
|
97
|
+
capnotify.unload_plugin :my_plugin
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should not blow up if the plugin does not handle #unload" do
|
102
|
+
MyPlugin.send(:undef_method, :unload)
|
103
|
+
|
104
|
+
lambda do
|
105
|
+
config.load do
|
106
|
+
capnotify.unload_plugin :my_plugin
|
107
|
+
end
|
108
|
+
end.should_not raise_error
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
context "#get_plugin" do
|
114
|
+
|
115
|
+
context "when plugin exists" do
|
116
|
+
before do
|
117
|
+
config.load do
|
118
|
+
capnotify.load_plugin :my_plugin, MyPlugin
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should return the plugin" do
|
123
|
+
capnotify.send(:get_plugin, :my_plugin).should_not be_nil
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should not raise an error" do
|
127
|
+
lambda { capnotify.send(:get_plugin, :my_plugin) }.should_not raise_error
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when the plugin does not exist" do
|
133
|
+
|
134
|
+
it "should raise an error" do
|
135
|
+
lambda { capnotify.send(:get_plugin, :does_not_exist) }.should raise_error
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
context "#build_template" do
|
143
|
+
|
144
|
+
it "should not error when using a built-in html template" do
|
145
|
+
lambda { capnotify.build_template( capnotify.built_in_template_for('default_notification.html.erb') ) }.should_not raise_error
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should not error when using a built-in text template" do
|
149
|
+
lambda { capnotify.build_template( capnotify.built_in_template_for('default_notification.txt.erb') ) }.should_not raise_error
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
context "#components" do
|
155
|
+
it "should return the components" do
|
156
|
+
capnotify.components.should === config.fetch(:capnotify_component_list)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context "#component" do
|
161
|
+
let!(:component) { Capnotify::Component.new(:test_component) }
|
162
|
+
|
163
|
+
before do
|
164
|
+
4.times do |i|
|
165
|
+
capnotify.components << Capnotify::Component.new("component_#{ i }")
|
166
|
+
end
|
167
|
+
|
168
|
+
capnotify.components << component
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should return the component with the given name" do
|
172
|
+
capnotify.component(:test_component).should === component
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should return nil if the requested component does not exist" do
|
176
|
+
capnotify.component(:fake_component).should be_nil
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context "inserting components" do
|
181
|
+
let!(:component) { Capnotify::Component.new(:test_component) }
|
182
|
+
|
183
|
+
before do
|
184
|
+
capnotify.components.clear
|
185
|
+
|
186
|
+
# add components 0 - 3
|
187
|
+
4.times do |i|
|
188
|
+
capnotify.components << Capnotify::Component.new("component_#{ i }")
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
context "before" do
|
193
|
+
|
194
|
+
it "should insert the given component" do
|
195
|
+
expect { capnotify.insert_component_before(:component_2, component) }.to change { capnotify.components.count }.by(1)
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should insert the given component in the correct place" do
|
199
|
+
capnotify.insert_component_before(:component_2, component)
|
200
|
+
|
201
|
+
capnotify.components.map(&:name)[2].should == component.name
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should insert the component at the end if no component with given name exists" do
|
205
|
+
capnotify.insert_component_before(:this_component_does_not_exist, component)
|
206
|
+
|
207
|
+
capnotify.components.last.name.should == component.name
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
context "after" do
|
213
|
+
|
214
|
+
it "should insert the given component" do
|
215
|
+
expect { capnotify.insert_component_after(:component_2, component) }.to change { capnotify.components.count }.by(1)
|
216
|
+
end
|
217
|
+
|
218
|
+
it "should insert the given component in the correct place" do
|
219
|
+
capnotify.insert_component_after(:component_2, component)
|
220
|
+
|
221
|
+
capnotify.components.map(&:name)[3].should == component.name
|
222
|
+
end
|
223
|
+
|
224
|
+
it "should insert the component at the end if no component with given name exists" do
|
225
|
+
capnotify.insert_component_after(:this_component_does_not_exist, component)
|
226
|
+
|
227
|
+
capnotify.components.last.name.should == component.name
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
context "#delete_component" do
|
234
|
+
let!(:component) { Capnotify::Component.new(:test_component) }
|
235
|
+
|
236
|
+
before do
|
237
|
+
4.times do |i|
|
238
|
+
capnotify.components << Capnotify::Component.new("component_#{ i }")
|
239
|
+
end
|
240
|
+
|
241
|
+
capnotify.components << component
|
242
|
+
end
|
243
|
+
|
244
|
+
it "should not error out if you delete a non-existent component" do
|
245
|
+
lambda { capnotify.delete_component(:fake_component) }.should_not raise_error
|
246
|
+
end
|
247
|
+
|
248
|
+
it "should delete the given component" do
|
249
|
+
expect { capnotify.delete_component(:test_component) }.to change { capnotify.components.length }.by(-1)
|
250
|
+
end
|
251
|
+
|
252
|
+
it "should return the given deleted component" do
|
253
|
+
capnotify.delete_component(:test_component).should === capnotify.components
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
@@ -0,0 +1,196 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Capnotify do
|
4
|
+
|
5
|
+
let(:config) do
|
6
|
+
Capistrano::Configuration.new
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
Capnotify.load_into(config)
|
11
|
+
end
|
12
|
+
|
13
|
+
after do
|
14
|
+
Capistrano::EXTENSIONS.keys.each do |ex|
|
15
|
+
Capistrano.remove_plugin(ex)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:capnotify) { config.capnotify }
|
20
|
+
|
21
|
+
context "loading" do
|
22
|
+
it "should initialize capnotify.components" do
|
23
|
+
capnotify.components.should_not be_nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "built-in callbacks" do
|
28
|
+
|
29
|
+
before do
|
30
|
+
# there has to be a better way of doing this...
|
31
|
+
# create a MockObject to handle the callbacks
|
32
|
+
class MockObject
|
33
|
+
end
|
34
|
+
MockObject.stub!(:deploy_start => true)
|
35
|
+
MockObject.stub!(:deploy_complete => true)
|
36
|
+
MockObject.stub!(:migrate_start => true)
|
37
|
+
MockObject.stub!(:migrate_complete => true)
|
38
|
+
MockObject.stub!(:maintenance_page_up => true)
|
39
|
+
MockObject.stub!(:maintenance_page_down => true)
|
40
|
+
|
41
|
+
config.load do
|
42
|
+
# these don't get triggered unless something is defined.
|
43
|
+
on(:deploy_start) { MockObject.deploy_start }
|
44
|
+
on(:deploy_complete) { MockObject.deploy_complete }
|
45
|
+
on(:migrate_start) { MockObject.migrate_start }
|
46
|
+
on(:migrate_complete) { MockObject.migrate_complete }
|
47
|
+
on(:maintenance_page_up) { MockObject.maintenance_page_up }
|
48
|
+
on(:maintenance_page_down) { MockObject.maintenance_page_down }
|
49
|
+
|
50
|
+
# stub some tasks
|
51
|
+
namespace :deploy do
|
52
|
+
task(:default) {}
|
53
|
+
task(:migrate) {}
|
54
|
+
namespace :web do
|
55
|
+
task(:enable) {}
|
56
|
+
task(:disable) {}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
config.trigger(:load)
|
62
|
+
end
|
63
|
+
|
64
|
+
context "deploy callbacks" do
|
65
|
+
it "should trigger :deploy_start before deploy" do
|
66
|
+
MockObject.should_receive(:deploy_start)
|
67
|
+
config.find_and_execute_task('deploy')
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should trigger :deploy_complete after deploy" do
|
71
|
+
MockObject.should_receive(:deploy_complete)
|
72
|
+
config.find_and_execute_task('deploy')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "migration callbacks" do
|
77
|
+
it "should trigger :migrate_start before deploy:migrate" do
|
78
|
+
MockObject.should_receive(:migrate_start)
|
79
|
+
config.find_and_execute_task('deploy:migrate')
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should trigger :migrate_complete after deploy:migrate" do
|
83
|
+
MockObject.should_receive(:migrate_complete)
|
84
|
+
config.find_and_execute_task('deploy:migrate')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "maintenance page callbacks" do
|
89
|
+
it "should trigger :maintenance_page_up before deploy:web:disable" do
|
90
|
+
MockObject.should_receive(:maintenance_page_up)
|
91
|
+
config.find_and_execute_task('deploy:web:disable')
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should trigger :maintenance_page_down after deploy:web:enable" do
|
95
|
+
MockObject.should_receive(:maintenance_page_down)
|
96
|
+
config.find_and_execute_task('deploy:web:enable')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
context "built-in messages" do
|
103
|
+
|
104
|
+
context "when application is not specified" do
|
105
|
+
|
106
|
+
before do
|
107
|
+
config.load do
|
108
|
+
set :stage, 'production'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should not raise an error" do
|
113
|
+
lambda { config.capnotify_appname }.should_not raise_error
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
context "when stage is not specified" do
|
119
|
+
|
120
|
+
before do
|
121
|
+
config.load do
|
122
|
+
set :application, 'MyApp'
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should not raise an error" do
|
127
|
+
lambda { config.capnotify_appname }.should_not raise_error
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when the user wants to override capnotify_appname" do
|
133
|
+
before do
|
134
|
+
config.load do
|
135
|
+
set :capnotify_appname, 'SimpleApp'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should return what the user overrode with" do
|
140
|
+
config.capnotify_appname.should == 'SimpleApp'
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
|
145
|
+
context "when both application and stage are specified" do
|
146
|
+
|
147
|
+
before do
|
148
|
+
config.load do
|
149
|
+
set :application, 'SimpleApp'
|
150
|
+
set :stage, 'production'
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should not raise an error" do
|
155
|
+
lambda { config.capnotify_appname }.should_not raise_error
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should include the application name" do
|
159
|
+
config.capnotify_appname.should match('SimpleApp')
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should include the stage name" do
|
163
|
+
config.capnotify_appname.should match('production')
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
context "capnotify_disable_default_components" do
|
171
|
+
|
172
|
+
context "when it is set to true" do
|
173
|
+
|
174
|
+
before do
|
175
|
+
config.load do
|
176
|
+
set :capnotify_disable_default_components, true
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should not have any plugins loaded by default" do
|
181
|
+
config.trigger(:load)
|
182
|
+
Capistrano::EXTENSIONS.keys.map(&:to_s).grep(/^capnotify_/).count.should == 0
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
context "when it is not set" do
|
188
|
+
|
189
|
+
it "should have defauilt plugins loaded by default" do
|
190
|
+
config.trigger(:load)
|
191
|
+
Capistrano::EXTENSIONS.keys.map(&:to_s).grep(/^capnotify_/).count.should > 0
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'awesome_print'
|
5
|
+
|
6
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
7
|
+
|
8
|
+
require 'capistrano'
|
9
|
+
require 'capnotify'
|
10
|
+
require 'pry'
|
11
|
+
|
12
|
+
def fixture_path(filename)
|
13
|
+
File.join( File.dirname(__FILE__), 'fixtures', filename )
|
14
|
+
end
|
15
|
+
|
metadata
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capnotify
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0pre
|
5
|
+
prerelease: 5
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Spike Grobstein
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: pry
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: awesome_print
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: capistrano
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 2.14.2
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.14.2
|
110
|
+
description: Extensible Capistrano notification system with helpers and sensible default
|
111
|
+
values for common notification tasks.
|
112
|
+
email:
|
113
|
+
- me@spike.cx
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- .gitignore
|
119
|
+
- .rspec
|
120
|
+
- .travis.yml
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- capnotify.gemspec
|
126
|
+
- lib/capnotify.rb
|
127
|
+
- lib/capnotify/component.rb
|
128
|
+
- lib/capnotify/plugin.rb
|
129
|
+
- lib/capnotify/plugin/details.rb
|
130
|
+
- lib/capnotify/plugin/overview.rb
|
131
|
+
- lib/capnotify/templates/_component.html.erb
|
132
|
+
- lib/capnotify/templates/_component.txt.erb
|
133
|
+
- lib/capnotify/templates/default_notification.html.erb
|
134
|
+
- lib/capnotify/templates/default_notification.txt.erb
|
135
|
+
- lib/capnotify/version.rb
|
136
|
+
- spec/capnotify/component_spec.rb
|
137
|
+
- spec/capnotify/plugin_spec.rb
|
138
|
+
- spec/capnotify_spec.rb
|
139
|
+
- spec/spec_helper.rb
|
140
|
+
homepage: https://github.com/spikegrobstein/capnotify
|
141
|
+
licenses:
|
142
|
+
- MIT
|
143
|
+
post_install_message:
|
144
|
+
rdoc_options: []
|
145
|
+
require_paths:
|
146
|
+
- lib
|
147
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
148
|
+
none: false
|
149
|
+
requirements:
|
150
|
+
- - ! '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>'
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 1.3.1
|
159
|
+
requirements: []
|
160
|
+
rubyforge_project:
|
161
|
+
rubygems_version: 1.8.24
|
162
|
+
signing_key:
|
163
|
+
specification_version: 3
|
164
|
+
summary: Extensible Capistrano notification system.
|
165
|
+
test_files:
|
166
|
+
- spec/capnotify/component_spec.rb
|
167
|
+
- spec/capnotify/plugin_spec.rb
|
168
|
+
- spec/capnotify_spec.rb
|
169
|
+
- spec/spec_helper.rb
|
170
|
+
has_rdoc:
|