backup 3.0.13 → 3.0.14

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.
@@ -33,6 +33,7 @@ module Backup
33
33
  ENCRYPTOR_PATH = File.join(LIBRARY_PATH, 'encryptor')
34
34
  NOTIFIER_PATH = File.join(LIBRARY_PATH, 'notifier')
35
35
  SYNCER_PATH = File.join(LIBRARY_PATH, 'syncer')
36
+ EXCEPTION_PATH = File.join(LIBRARY_PATH, 'exception')
36
37
 
37
38
  ##
38
39
  # Backup's Environment paths
@@ -158,6 +159,12 @@ module Backup
158
159
  autoload :Campfire, File.join(NOTIFIER_PATH, 'campfire')
159
160
  end
160
161
 
162
+ ##
163
+ # Autoload exception classes
164
+ module Exception
165
+ autoload :CommandNotFound, File.join(EXCEPTION_PATH, 'command_not_found')
166
+ end
167
+
161
168
  ##
162
169
  # Dynamically defines all the available database, storage, compressor, encryptor and notifier
163
170
  # classes inside Backup::Finder to improve the DSL for the configuration file
@@ -6,9 +6,21 @@ module Backup
6
6
  ##
7
7
  # Wrapper method for %x[] to run CL commands
8
8
  # through a ruby method. This helps with test coverage and
9
- # improves readability
9
+ # improves readability.
10
+ #
11
+ # Every time the Backup::CLI#run method is invoked, it'll invoke
12
+ # the Backup::CLI#raise_if_command_not_found method after running the
13
+ # requested command on the OS.
14
+ #
15
+ # Backup::CLI#raise_if_command_not_found takes a single argument, the utility name.
16
+ # the command.slice(0, command.index(/\s/)).split('/')[-1] line will extract only the utility
17
+ # name (e.g. mongodump, pgdump, etc) from a command like "/usr/local/bin/mongodump <options>"
18
+ # and pass that in to the Backup::CLI#raise_if_command_not_found
10
19
  def run(command)
11
20
  %x[#{command}]
21
+ raise_if_command_not_found!(
22
+ command.slice(0, command.index(/\s/)).split('/')[-1]
23
+ )
12
24
  end
13
25
 
14
26
  ##
@@ -46,5 +58,18 @@ module Backup
46
58
  name
47
59
  end
48
60
 
61
+ ##
62
+ # If the command that was previously run via this Ruby process returned
63
+ # error code "32512", the invoked utility (e.g. mysqldump, pgdump, etc) could not be found.
64
+ # If this is the case then this method will throw an exception, informing the user of this problem.
65
+ #
66
+ # Since this raises an exception, it'll stop the entire backup process, clean up the temp files
67
+ # and notify the user via the built-in notifiers if these are set.
68
+ def raise_if_command_not_found!(utility)
69
+ if $?.to_i.eql?(32512)
70
+ raise Exception::CommandNotFound , "Could not find the utility \"#{utility}\" on \"#{RUBY_PLATFORM}\"."
71
+ end
72
+ end
73
+
49
74
  end
50
75
  end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ module Exception
5
+ class CommandNotFound < StandardError
6
+ end
7
+ end
8
+ end
@@ -24,6 +24,14 @@ module Backup
24
24
  to_file loggify(:warning, string)
25
25
  end
26
26
 
27
+ ##
28
+ # Outputs the data as if it were a regular 'puts' command,
29
+ # but also logs it to the backup.log
30
+ def self.normal(string)
31
+ puts string
32
+ to_file string
33
+ end
34
+
27
35
  ##
28
36
  # Silently logs data to the log file
29
37
  def self.silent(string)
@@ -225,7 +225,7 @@ module Backup
225
225
 
226
226
  syncers.each { |s| s.perform! }
227
227
  notifiers.each { |n| n.perform!(self) }
228
- rescue Exception => exception
228
+ rescue => exception
229
229
  clean!
230
230
  notifiers.each { |n| n.perform!(self, exception) }
231
231
  show_exception!(exception)
@@ -263,9 +263,9 @@ module Backup
263
263
  ##
264
264
  # Formats an exception
265
265
  def show_exception!(exception)
266
- puts ("=" * 75) + "\nException that got raised:\n#{exception}\n" + ("=" * 75) + "\n" + exception.backtrace.join("\n")
267
- puts ("=" * 75) + "\n\nYou are running Backup version \"#{Backup::Version.current}\" and Ruby version \"#{ENV['RUBY_VERSION']}\".\n"
268
- puts "If you've setup a \"Notification\" in your configuration file, the above error will have been sent."
266
+ Logger.normal "=" * 75 + "\nException that got raised:\n#{exception.class} - #{exception} \n" + "=" * 75 + "\n" + exception.backtrace.join("\n")
267
+ Logger.normal "=" * 75 + "\n\nYou are running Backup version \"#{Backup::Version.current}\" and Ruby version \"#{RUBY_VERSION} (patchlevel #{RUBY_PATCHLEVEL})\" on platform \"#{RUBY_PLATFORM}\".\n"
268
+ Logger.normal "If you've setup a \"Notification\" in your configuration file, the above error will have been sent."
269
269
  end
270
270
 
271
271
  end
@@ -3,7 +3,7 @@ There seemed to be a problem backing up <%= @model.label %> (<%= @model.trigger
3
3
 
4
4
  ===========================================================================
5
5
  Exception that got raised:
6
- <%= @exception.to_s %>
6
+ <%= @exception.class %> - <%= @exception.to_s %>
7
7
  ===========================================================================
8
8
  <%= @exception.backtrace.join("\n") %>
9
9
  ===========================================================================
@@ -13,8 +13,10 @@ You are running Backup version:
13
13
  <%= Backup::Version.current %>
14
14
 
15
15
  You are running Ruby version:
16
- <%= ENV["RUBY_VERSION"] %>
16
+ <%= RUBY_VERSION %> (patchlevel <%= RUBY_PATCHLEVEL %>)
17
17
 
18
+ On platform:
19
+ <%= RUBY_PLATFORM %>
18
20
 
19
21
  ---------------------------------------------------------------------------
20
22
 
@@ -79,7 +79,11 @@ module Backup
79
79
  ##
80
80
  # Removes the transferred archive file from the Dropbox folder
81
81
  def remove!
82
- connection.delete(File.join(remote_path, remote_file))
82
+ begin
83
+ connection.delete(File.join(remote_path, remote_file))
84
+ rescue ::Dropbox::FileNotFoundError
85
+ Logger.warn "File \"#{ File.join(remote_path, remote_file) }\" does not exist, skipping removal."
86
+ end
83
87
  end
84
88
 
85
89
  end
@@ -13,7 +13,7 @@ module Backup
13
13
  # Defines the minor version
14
14
  # PATCH:
15
15
  # Defines the patch version
16
- MAJOR, MINOR, PATCH = 3, 0, 13
16
+ MAJOR, MINOR, PATCH = 3, 0, 14
17
17
 
18
18
  ##
19
19
  # Returns the major version ( big release based off of multiple minor releases )
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backup
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
4
  prerelease:
6
- segments:
7
- - 3
8
- - 0
9
- - 13
10
- version: 3.0.13
5
+ version: 3.0.14
11
6
  platform: ruby
12
7
  authors:
13
8
  - Michael van Rooijen
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-03-29 00:00:00 +02:00
13
+ date: 2011-04-02 00:00:00 +02:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,11 +21,6 @@ dependencies:
26
21
  requirements:
27
22
  - - ~>
28
23
  - !ruby/object:Gem::Version
29
- hash: 43
30
- segments:
31
- - 0
32
- - 14
33
- - 6
34
24
  version: 0.14.6
35
25
  type: :runtime
36
26
  version_requirements: *id001
@@ -92,6 +82,7 @@ files:
92
82
  - lib/backup/encryptor/base.rb
93
83
  - lib/backup/encryptor/gpg.rb
94
84
  - lib/backup/encryptor/open_ssl.rb
85
+ - lib/backup/exception/command_not_found.rb
95
86
  - lib/backup/finder.rb
96
87
  - lib/backup/logger.rb
97
88
  - lib/backup/model.rb
@@ -199,18 +190,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
199
190
  requirements:
200
191
  - - ">="
201
192
  - !ruby/object:Gem::Version
202
- hash: 3
203
- segments:
204
- - 0
205
193
  version: "0"
206
194
  required_rubygems_version: !ruby/object:Gem::Requirement
207
195
  none: false
208
196
  requirements:
209
197
  - - ">="
210
198
  - !ruby/object:Gem::Version
211
- hash: 3
212
- segments:
213
- - 0
214
199
  version: "0"
215
200
  requirements: []
216
201