interu-backup 3.0.16

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.
Files changed (151) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +31 -0
  3. data/Gemfile.lock +117 -0
  4. data/Guardfile +17 -0
  5. data/LICENSE.md +24 -0
  6. data/README.md +332 -0
  7. data/backup.gemspec +31 -0
  8. data/bin/backup +267 -0
  9. data/lib/backup.rb +181 -0
  10. data/lib/backup/archive.rb +73 -0
  11. data/lib/backup/cli.rb +82 -0
  12. data/lib/backup/compressor/base.rb +17 -0
  13. data/lib/backup/compressor/bzip2.rb +64 -0
  14. data/lib/backup/compressor/gzip.rb +61 -0
  15. data/lib/backup/configuration/base.rb +15 -0
  16. data/lib/backup/configuration/compressor/base.rb +10 -0
  17. data/lib/backup/configuration/compressor/bzip2.rb +23 -0
  18. data/lib/backup/configuration/compressor/gzip.rb +23 -0
  19. data/lib/backup/configuration/database/base.rb +18 -0
  20. data/lib/backup/configuration/database/mongodb.rb +41 -0
  21. data/lib/backup/configuration/database/mysql.rb +37 -0
  22. data/lib/backup/configuration/database/postgresql.rb +37 -0
  23. data/lib/backup/configuration/database/redis.rb +35 -0
  24. data/lib/backup/configuration/encryptor/base.rb +10 -0
  25. data/lib/backup/configuration/encryptor/gpg.rb +17 -0
  26. data/lib/backup/configuration/encryptor/open_ssl.rb +26 -0
  27. data/lib/backup/configuration/helpers.rb +54 -0
  28. data/lib/backup/configuration/notifier/base.rb +39 -0
  29. data/lib/backup/configuration/notifier/campfire.rb +25 -0
  30. data/lib/backup/configuration/notifier/mail.rb +52 -0
  31. data/lib/backup/configuration/notifier/presently.rb +25 -0
  32. data/lib/backup/configuration/notifier/twitter.rb +21 -0
  33. data/lib/backup/configuration/storage/base.rb +18 -0
  34. data/lib/backup/configuration/storage/cloudfiles.rb +21 -0
  35. data/lib/backup/configuration/storage/dropbox.rb +29 -0
  36. data/lib/backup/configuration/storage/ftp.rb +25 -0
  37. data/lib/backup/configuration/storage/rsync.rb +25 -0
  38. data/lib/backup/configuration/storage/s3.rb +25 -0
  39. data/lib/backup/configuration/storage/scp.rb +25 -0
  40. data/lib/backup/configuration/storage/sftp.rb +25 -0
  41. data/lib/backup/configuration/syncer/rsync.rb +45 -0
  42. data/lib/backup/configuration/syncer/s3.rb +33 -0
  43. data/lib/backup/database/base.rb +33 -0
  44. data/lib/backup/database/mongodb.rb +179 -0
  45. data/lib/backup/database/mysql.rb +104 -0
  46. data/lib/backup/database/postgresql.rb +111 -0
  47. data/lib/backup/database/redis.rb +105 -0
  48. data/lib/backup/dependency.rb +96 -0
  49. data/lib/backup/encryptor/base.rb +17 -0
  50. data/lib/backup/encryptor/gpg.rb +78 -0
  51. data/lib/backup/encryptor/open_ssl.rb +67 -0
  52. data/lib/backup/exception/command_not_found.rb +8 -0
  53. data/lib/backup/finder.rb +39 -0
  54. data/lib/backup/logger.rb +102 -0
  55. data/lib/backup/model.rb +272 -0
  56. data/lib/backup/notifier/base.rb +29 -0
  57. data/lib/backup/notifier/binder.rb +32 -0
  58. data/lib/backup/notifier/campfire.rb +194 -0
  59. data/lib/backup/notifier/mail.rb +141 -0
  60. data/lib/backup/notifier/presently.rb +105 -0
  61. data/lib/backup/notifier/templates/notify_failure.erb +33 -0
  62. data/lib/backup/notifier/templates/notify_success.erb +16 -0
  63. data/lib/backup/notifier/twitter.rb +87 -0
  64. data/lib/backup/storage/base.rb +67 -0
  65. data/lib/backup/storage/cloudfiles.rb +95 -0
  66. data/lib/backup/storage/dropbox.rb +91 -0
  67. data/lib/backup/storage/ftp.rb +114 -0
  68. data/lib/backup/storage/object.rb +45 -0
  69. data/lib/backup/storage/rsync.rb +129 -0
  70. data/lib/backup/storage/s3.rb +180 -0
  71. data/lib/backup/storage/scp.rb +106 -0
  72. data/lib/backup/storage/sftp.rb +106 -0
  73. data/lib/backup/syncer/base.rb +10 -0
  74. data/lib/backup/syncer/rsync.rb +152 -0
  75. data/lib/backup/syncer/s3.rb +118 -0
  76. data/lib/backup/version.rb +43 -0
  77. data/lib/templates/archive +7 -0
  78. data/lib/templates/compressor/bzip2 +7 -0
  79. data/lib/templates/compressor/gzip +7 -0
  80. data/lib/templates/database/mongodb +14 -0
  81. data/lib/templates/database/mysql +14 -0
  82. data/lib/templates/database/postgresql +14 -0
  83. data/lib/templates/database/redis +13 -0
  84. data/lib/templates/encryptor/gpg +12 -0
  85. data/lib/templates/encryptor/openssl +8 -0
  86. data/lib/templates/notifier/campfire +11 -0
  87. data/lib/templates/notifier/mail +17 -0
  88. data/lib/templates/notifier/presently +12 -0
  89. data/lib/templates/notifier/twitter +12 -0
  90. data/lib/templates/readme +15 -0
  91. data/lib/templates/storage/cloudfiles +10 -0
  92. data/lib/templates/storage/dropbox +12 -0
  93. data/lib/templates/storage/ftp +11 -0
  94. data/lib/templates/storage/rsync +10 -0
  95. data/lib/templates/storage/s3 +21 -0
  96. data/lib/templates/storage/scp +11 -0
  97. data/lib/templates/storage/sftp +11 -0
  98. data/lib/templates/syncer/rsync +17 -0
  99. data/lib/templates/syncer/s3 +15 -0
  100. data/spec/archive_spec.rb +90 -0
  101. data/spec/backup_spec.rb +11 -0
  102. data/spec/compressor/bzip2_spec.rb +59 -0
  103. data/spec/compressor/gzip_spec.rb +59 -0
  104. data/spec/configuration/base_spec.rb +35 -0
  105. data/spec/configuration/compressor/gzip_spec.rb +28 -0
  106. data/spec/configuration/database/base_spec.rb +16 -0
  107. data/spec/configuration/database/mongodb_spec.rb +30 -0
  108. data/spec/configuration/database/mysql_spec.rb +32 -0
  109. data/spec/configuration/database/postgresql_spec.rb +32 -0
  110. data/spec/configuration/database/redis_spec.rb +30 -0
  111. data/spec/configuration/encryptor/gpg_spec.rb +25 -0
  112. data/spec/configuration/encryptor/open_ssl_spec.rb +31 -0
  113. data/spec/configuration/notifier/campfire_spec.rb +20 -0
  114. data/spec/configuration/notifier/mail_spec.rb +32 -0
  115. data/spec/configuration/notifier/twitter_spec.rb +22 -0
  116. data/spec/configuration/storage/cloudfiles_spec.rb +34 -0
  117. data/spec/configuration/storage/dropbox_spec.rb +43 -0
  118. data/spec/configuration/storage/ftp_spec.rb +40 -0
  119. data/spec/configuration/storage/rsync_spec.rb +37 -0
  120. data/spec/configuration/storage/s3_spec.rb +37 -0
  121. data/spec/configuration/storage/scp_spec.rb +40 -0
  122. data/spec/configuration/storage/sftp_spec.rb +40 -0
  123. data/spec/configuration/syncer/rsync_spec.rb +46 -0
  124. data/spec/configuration/syncer/s3_spec.rb +43 -0
  125. data/spec/database/base_spec.rb +30 -0
  126. data/spec/database/mongodb_spec.rb +181 -0
  127. data/spec/database/mysql_spec.rb +150 -0
  128. data/spec/database/postgresql_spec.rb +164 -0
  129. data/spec/database/redis_spec.rb +122 -0
  130. data/spec/encryptor/gpg_spec.rb +57 -0
  131. data/spec/encryptor/open_ssl_spec.rb +102 -0
  132. data/spec/logger_spec.rb +58 -0
  133. data/spec/model_spec.rb +236 -0
  134. data/spec/notifier/campfire_spec.rb +96 -0
  135. data/spec/notifier/mail_spec.rb +97 -0
  136. data/spec/notifier/presently_spec.rb +99 -0
  137. data/spec/notifier/twitter_spec.rb +86 -0
  138. data/spec/spec_helper.rb +25 -0
  139. data/spec/storage/base_spec.rb +33 -0
  140. data/spec/storage/cloudfiles_spec.rb +102 -0
  141. data/spec/storage/dropbox_spec.rb +105 -0
  142. data/spec/storage/ftp_spec.rb +133 -0
  143. data/spec/storage/object_spec.rb +74 -0
  144. data/spec/storage/rsync_spec.rb +131 -0
  145. data/spec/storage/s3_spec.rb +110 -0
  146. data/spec/storage/scp_spec.rb +129 -0
  147. data/spec/storage/sftp_spec.rb +125 -0
  148. data/spec/syncer/rsync_spec.rb +195 -0
  149. data/spec/syncer/s3_spec.rb +139 -0
  150. data/spec/version_spec.rb +21 -0
  151. metadata +231 -0
@@ -0,0 +1,102 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
+
5
+ describe Backup::Encryptor::OpenSSL do
6
+
7
+ context "when no block is provided" do
8
+ let(:encryptor) { Backup::Encryptor::OpenSSL.new }
9
+
10
+ it do
11
+ encryptor.password.should == nil
12
+ end
13
+
14
+ it do
15
+ encryptor.send(:base64).should == []
16
+ end
17
+
18
+ it do
19
+ encryptor.send(:salt).should == []
20
+ end
21
+
22
+ it do
23
+ encryptor.send(:options).should == "aes-256-cbc"
24
+ end
25
+ end
26
+
27
+ context "when a block is provided" do
28
+ let(:encryptor) do
29
+ Backup::Encryptor::OpenSSL.new do |e|
30
+ e.password = "my_secret_password"
31
+ e.salt = true
32
+ e.base64 = true
33
+ end
34
+ end
35
+
36
+ it do
37
+ encryptor.password.should == "my_secret_password"
38
+ end
39
+
40
+ it do
41
+ encryptor.send(:salt).should == ['-salt']
42
+ end
43
+
44
+ it do
45
+ encryptor.send(:base64).should == ['-base64']
46
+ end
47
+
48
+ it do
49
+ encryptor.send(:options).should == "aes-256-cbc -base64 -salt"
50
+ end
51
+ end
52
+
53
+ describe '#perform!' do
54
+ let(:encryptor) { Backup::Encryptor::OpenSSL.new }
55
+ before do
56
+ Backup::Model.extension = 'tar'
57
+ Backup::Logger.stubs(:message)
58
+ [:utility, :run, :rm].each { |method| encryptor.stubs(method) }
59
+ end
60
+
61
+ it do
62
+ encryptor = Backup::Encryptor::OpenSSL.new
63
+ encryptor.expects(:utility).returns(:openssl)
64
+ encryptor.expects(:run).with("openssl aes-256-cbc -in '#{ File.join(Backup::TMP_PATH, "#{Backup::TIME}.#{Backup::TRIGGER}.tar") }' -out '#{ File.join(Backup::TMP_PATH, "#{Backup::TIME}.#{Backup::TRIGGER}.tar.enc") }' -k ''")
65
+ encryptor.perform!
66
+ end
67
+
68
+ it do
69
+ encryptor = Backup::Encryptor::OpenSSL.new do |e|
70
+ e.password = "my_secret_password"
71
+ e.salt = true
72
+ e.base64 = true
73
+ end
74
+ encryptor.stubs(:utility).returns(:openssl)
75
+ encryptor.expects(:run).with("openssl aes-256-cbc -base64 -salt -in '#{ File.join(Backup::TMP_PATH, "#{Backup::TIME}.#{Backup::TRIGGER}.tar") }' -out '#{ File.join(Backup::TMP_PATH, "#{Backup::TIME}.#{Backup::TRIGGER}.tar.enc") }' -k 'my_secret_password'")
76
+ encryptor.perform!
77
+ end
78
+
79
+ it 'should append the .enc extension after the encryption' do
80
+ Backup::Model.extension.should == 'tar'
81
+ encryptor.perform!
82
+ Backup::Model.extension.should == 'tar.enc'
83
+ end
84
+
85
+ it do
86
+ encryptor.expects(:utility).with(:openssl)
87
+ encryptor.perform!
88
+ end
89
+
90
+ it do
91
+ Backup::Logger.expects(:message).with("Backup::Encryptor::OpenSSL started encrypting the archive.")
92
+ encryptor.perform!
93
+ end
94
+
95
+ context "after encrypting the file (which creates a new file)" do
96
+ it 'should remove the non-encrypted file' do
97
+ encryptor.expects(:rm).with(Backup::Model.file)
98
+ encryptor.perform!
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/spec_helper'
4
+ require 'timecop'
5
+
6
+ describe Backup::Logger do
7
+ before do
8
+ Timecop.freeze( Time.now )
9
+ end
10
+
11
+ context 'when logging regular messages' do
12
+ it do
13
+ Backup::Logger.expects(:puts).with("[#{ Time.now.strftime("%Y/%m/%d %H:%M:%S") }][\e[32mmessage\e[0m] This has been logged.")
14
+ File.expects(:open).with(File.join(Backup::LOG_PATH, 'backup.log'), 'a')
15
+
16
+ Backup::Logger.message "This has been logged."
17
+ end
18
+ end
19
+
20
+ context 'when logging error messages' do
21
+ it do
22
+ Backup::Logger.expects(:puts).with("[#{ Time.now.strftime("%Y/%m/%d %H:%M:%S") }][\e[31merror\e[0m] This has been logged.")
23
+ File.expects(:open).with(File.join(Backup::LOG_PATH, 'backup.log'), 'a')
24
+
25
+ Backup::Logger.error "This has been logged."
26
+ end
27
+ end
28
+
29
+ context 'when logging warn messages' do
30
+ it do
31
+ Backup::Logger.expects(:puts).with("[#{ Time.now.strftime("%Y/%m/%d %H:%M:%S") }][\e[33mwarning\e[0m] This has been logged.")
32
+ File.expects(:open).with(File.join(Backup::LOG_PATH, 'backup.log'), 'a')
33
+
34
+ Backup::Logger.warn "This has been logged."
35
+ end
36
+ end
37
+
38
+ context 'when logging silent messages' do
39
+ it do
40
+ Backup::Logger.expects(:puts).never
41
+ File.expects(:open).with(File.join(Backup::LOG_PATH, 'backup.log'), 'a')
42
+
43
+ Backup::Logger.silent "This has been logged."
44
+ end
45
+ end
46
+
47
+ context 'when quieted' do
48
+ it do
49
+ Backup::Logger.send(:const_set, :QUIET, true)
50
+ Backup::Logger.expects(:puts).never
51
+
52
+ Backup::Logger.message "This has been logged."
53
+ Backup::Logger.error "This has been logged."
54
+ Backup::Logger.warn "This has been logged."
55
+ Backup::Logger.normal "This has been logged."
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,236 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/spec_helper'
4
+
5
+ describe Backup::Model do
6
+
7
+ before do
8
+ class Backup::Database::TestDatabase
9
+ def initialize(&block); end
10
+ end
11
+ class Backup::Storage::TestStorage
12
+ def initialize(&block); end
13
+ end
14
+ class Backup::Archive
15
+ def initialize(name, &block); end
16
+ end
17
+ class Backup::Compressor::Gzip
18
+ def initialize(&block); end
19
+ end
20
+ class Backup::Compressor::SevenZip
21
+ def initialize(&block); end
22
+ end
23
+ class Backup::Encryptor::OpenSSL
24
+ def initialize(&block); end
25
+ end
26
+ class Backup::Encryptor::GPG
27
+ def initialize(&block); end
28
+ end
29
+ class Backup::Notifier::TestMail
30
+ def initialize(&block); end
31
+ end
32
+ end
33
+
34
+ let(:model) { Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') {} }
35
+
36
+ it do
37
+ Backup::Model.extension.should == 'tar'
38
+ end
39
+
40
+ it do
41
+ Backup::Model.new('foo', 'bar') {}
42
+ Backup::Model.extension.should == 'tar'
43
+ end
44
+
45
+ before do
46
+ Backup::Model.extension = 'tar'
47
+ end
48
+
49
+ it do
50
+ Backup::Model.new('blah', 'blah') {}
51
+ Backup::Model.extension.should == 'tar'
52
+ end
53
+
54
+ it do
55
+ Backup::Model.new('blah', 'blah') {}
56
+ Backup::Model.file.should == "#{ File.join(Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar") }"
57
+ end
58
+
59
+ it do
60
+ Backup::Model.new('blah', 'blah') {}
61
+ File.basename(Backup::Model.file).should == "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar"
62
+ end
63
+
64
+ it do
65
+ Backup::Model.new('blah', 'blah') {}
66
+ Backup::Model.tmp_path.should == File.join(Backup::TMP_PATH, Backup::TRIGGER)
67
+ end
68
+
69
+ it 'should create a new model with a trigger and label' do
70
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') {}
71
+ model.trigger.should == 'mysql-s3'
72
+ model.label.should == 'MySQL S3 Backup for MyApp'
73
+ end
74
+
75
+ it 'should have the time logged in the object' do
76
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') {}
77
+ model.time.should == Backup::TIME
78
+ end
79
+
80
+ describe '#extension' do
81
+ it 'should start out with just .tar before compression occurs' do
82
+ Backup::Model.extension.should == 'tar'
83
+ end
84
+ end
85
+
86
+ describe 'databases' do
87
+ it 'should add the mysql adapter to the array of databases to invoke' do
88
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
89
+ database('TestDatabase')
90
+ end
91
+
92
+ model.databases.count.should == 1
93
+ end
94
+
95
+ it 'should add 2 mysql adapters to the array of adapters to invoke' do
96
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
97
+ database('TestDatabase')
98
+ database('TestDatabase')
99
+ end
100
+
101
+ model.databases.count.should == 2
102
+ end
103
+ end
104
+
105
+ describe 'storages' do
106
+ it 'should add a storage to the array of storages to use' do
107
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
108
+ store_with('TestStorage')
109
+ end
110
+
111
+ model.storages.count.should == 1
112
+ end
113
+
114
+ it 'should add a storage to the array of storages to use' do
115
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
116
+ store_with('TestStorage')
117
+ store_with('TestStorage')
118
+ end
119
+
120
+ model.storages.count.should == 2
121
+ end
122
+ end
123
+
124
+ describe 'archives' do
125
+ it 'should add an archive to the array of archives to use' do
126
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
127
+ archive('my_archive')
128
+ end
129
+
130
+ model.archives.count.should == 1
131
+ end
132
+
133
+ it 'should add a storage to the array of storages to use' do
134
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
135
+ archive('TestStorage')
136
+ archive('TestStorage')
137
+ end
138
+
139
+ model.archives.count.should == 2
140
+ end
141
+ end
142
+
143
+ describe '#compress_with' do
144
+ it 'should add a compressor to the array of compressors to use' do
145
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
146
+ compress_with('Gzip')
147
+ end
148
+
149
+ model.compressors.count.should == 1
150
+ end
151
+
152
+ it 'should add a compressor to the array of compressors to use' do
153
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
154
+ compress_with('Gzip')
155
+ compress_with('SevenZip')
156
+ end
157
+
158
+ model.compressors.count.should == 2
159
+ end
160
+ end
161
+
162
+ describe '#encrypt_with' do
163
+ it 'should add a encryptor to the array of encryptors to use' do
164
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
165
+ encrypt_with('OpenSSL')
166
+ end
167
+
168
+ model.encryptors.count.should == 1
169
+ end
170
+
171
+ it 'should add a encryptor to the array of encryptors to use' do
172
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
173
+ encrypt_with('OpenSSL')
174
+ encrypt_with('GPG')
175
+ end
176
+
177
+ model.encryptors.count.should == 2
178
+ end
179
+ end
180
+
181
+ describe '#notify_by' do
182
+ it 'should add a notifier to the array of notifiers to use' do
183
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
184
+ notify_by('TestMail')
185
+ end
186
+
187
+ model.notifiers.count.should == 1
188
+ end
189
+
190
+ it 'should add a notifier to the array of notifiers to use' do
191
+ model = Backup::Model.new('mysql-s3', 'MySQL S3 Backup for MyApp') do
192
+ notify_by('TestMail')
193
+ notify_by('TestMail')
194
+ end
195
+
196
+ model.notifiers.count.should == 2
197
+ end
198
+ end
199
+
200
+ describe '#package!' do
201
+ before do
202
+ [:utility, :run].each { |method| model.stubs(method) }
203
+ Backup::Logger.stubs(:message)
204
+ end
205
+
206
+ it 'should package the folder' do
207
+ model.expects(:utility).with(:tar).returns(:tar)
208
+ model.expects(:run).with(%|tar -c -f '#{ File.join( Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar" ) }' -C '#{ Backup::TMP_PATH }' '#{ Backup::TRIGGER }'|)
209
+ model.send(:package!)
210
+ end
211
+
212
+ it 'should log' do
213
+ Backup::Logger.expects(:message).with("Backup started packaging everything to a single archive file.")
214
+ model.send(:package!)
215
+ end
216
+ end
217
+
218
+ describe '#clean!' do
219
+ before do
220
+ [:utility, :run, :rm].each { |method| model.stubs(method) }
221
+ Backup::Logger.stubs(:message)
222
+ end
223
+
224
+ it 'should remove the temporary files and folders that were created' do
225
+ model.expects(:utility).with(:rm).returns(:rm)
226
+ model.expects(:run).with("rm -rf '#{ File.join(Backup::TMP_PATH, Backup::TRIGGER) }' '#{ File.join(Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar") }'")
227
+ model.send(:clean!)
228
+ end
229
+
230
+ it do
231
+ Backup::Logger.expects(:message).with("Backup started cleaning up the temporary files.")
232
+ model.send(:clean!)
233
+ end
234
+ end
235
+
236
+ end
@@ -0,0 +1,96 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
+
5
+ describe Backup::Notifier::Campfire do
6
+ let(:notifier) do
7
+ Backup::Notifier::Campfire.new do |campfire|
8
+ campfire.api_token = 'token'
9
+ campfire.subdomain = 'subdomain'
10
+ campfire.room_id = 'room_id'
11
+ end
12
+ end
13
+
14
+ it do
15
+ notifier.api_token.should == 'token'
16
+ notifier.subdomain.should == 'subdomain'
17
+ notifier.room_id.should == 'room_id'
18
+
19
+ notifier.on_success.should == true
20
+ notifier.on_failure.should == true
21
+ end
22
+
23
+ describe 'defaults' do
24
+ it do
25
+ Backup::Configuration::Notifier::Campfire.defaults do |campfire|
26
+ campfire.api_token = 'old_token'
27
+ campfire.on_success = false
28
+ campfire.on_failure = true
29
+ end
30
+ notifier = Backup::Notifier::Campfire.new do |campfire|
31
+ campfire.api_token = 'new_token'
32
+ end
33
+
34
+ notifier.api_token.should == 'new_token'
35
+ notifier.on_success.should == false
36
+ notifier.on_failure.should == true
37
+ end
38
+ end
39
+
40
+ describe '#initialize' do
41
+ it do
42
+ Backup::Notifier::Campfire.any_instance.expects(:set_defaults!)
43
+ Backup::Notifier::Campfire.new
44
+ end
45
+ end
46
+
47
+ describe '#perform!' do
48
+ let(:model) { Backup::Model.new('blah', 'blah') {} }
49
+ before do
50
+ notifier.on_success = false
51
+ notifier.on_failure = false
52
+ end
53
+
54
+ context "when successful" do
55
+ it do
56
+ Backup::Logger.expects(:message).with("Backup::Notifier::Campfire started notifying about the process.")
57
+ notifier.expects("notify_success!")
58
+ notifier.on_success = true
59
+ notifier.perform!(model)
60
+ end
61
+
62
+ it do
63
+ notifier.expects("notify_success!").never
64
+ notifier.on_success = false
65
+ notifier.perform!(model)
66
+ end
67
+ end
68
+
69
+ context "when failed" do
70
+ it do
71
+ Backup::Logger.expects(:message).with("Backup::Notifier::Campfire started notifying about the process.")
72
+ notifier.expects("notify_failure!")
73
+ notifier.on_failure = true
74
+ notifier.perform!(model, Exception.new)
75
+ end
76
+
77
+ it do
78
+ notifier.expects("notify_failure!").never
79
+ notifier.on_failure = false
80
+ notifier.perform!(model, Exception.new)
81
+ end
82
+ end
83
+ end
84
+
85
+ describe Backup::Notifier::Campfire::Interface do
86
+ let(:room) do
87
+ Backup::Notifier::Campfire::Room.new('room_id', 'subdomain', 'token')
88
+ end
89
+
90
+ it do
91
+ room.api_token.should == 'token'
92
+ room.subdomain.should == 'subdomain'
93
+ room.room_id.should == 'room_id'
94
+ end
95
+ end
96
+ end