backup 2.4.5.1 → 3.0.0.build.0

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 (168) hide show
  1. data/.gitignore +2 -0
  2. data/.infinity_test +7 -0
  3. data/.rspec +3 -0
  4. data/Gemfile +17 -0
  5. data/Gemfile.lock +88 -0
  6. data/LICENSE.md +24 -0
  7. data/README.md +189 -75
  8. data/backup.gemspec +41 -0
  9. data/bin/backup +161 -90
  10. data/lib/backup.rb +133 -117
  11. data/lib/backup/archive.rb +54 -0
  12. data/lib/backup/cli.rb +50 -0
  13. data/lib/backup/compressor/base.rb +17 -0
  14. data/lib/backup/compressor/gzip.rb +61 -0
  15. data/lib/backup/configuration/base.rb +7 -67
  16. data/lib/backup/configuration/compressor/base.rb +10 -0
  17. data/lib/backup/configuration/compressor/gzip.rb +23 -0
  18. data/lib/backup/configuration/database/base.rb +18 -0
  19. data/lib/backup/configuration/database/mongodb.rb +37 -0
  20. data/lib/backup/configuration/database/mysql.rb +37 -0
  21. data/lib/backup/configuration/database/postgresql.rb +37 -0
  22. data/lib/backup/configuration/database/redis.rb +35 -0
  23. data/lib/backup/configuration/encryptor/base.rb +10 -0
  24. data/lib/backup/configuration/encryptor/gpg.rb +17 -0
  25. data/lib/backup/configuration/encryptor/open_ssl.rb +26 -0
  26. data/lib/backup/configuration/helpers.rb +47 -17
  27. data/lib/backup/configuration/notifier/base.rb +39 -0
  28. data/lib/backup/configuration/notifier/mail.rb +52 -0
  29. data/lib/backup/configuration/storage/base.rb +18 -0
  30. data/lib/backup/configuration/storage/cloudfiles.rb +21 -0
  31. data/lib/backup/configuration/storage/dropbox.rb +25 -0
  32. data/lib/backup/configuration/storage/ftp.rb +25 -0
  33. data/lib/backup/configuration/storage/rsync.rb +25 -0
  34. data/lib/backup/configuration/storage/s3.rb +25 -0
  35. data/lib/backup/configuration/storage/scp.rb +25 -0
  36. data/lib/backup/configuration/storage/sftp.rb +25 -0
  37. data/lib/backup/database/base.rb +33 -0
  38. data/lib/backup/database/mongodb.rb +137 -0
  39. data/lib/backup/database/mysql.rb +104 -0
  40. data/lib/backup/database/postgresql.rb +111 -0
  41. data/lib/backup/database/redis.rb +105 -0
  42. data/lib/backup/encryptor/base.rb +17 -0
  43. data/lib/backup/encryptor/gpg.rb +78 -0
  44. data/lib/backup/encryptor/open_ssl.rb +67 -0
  45. data/lib/backup/finder.rb +39 -0
  46. data/lib/backup/logger.rb +80 -0
  47. data/lib/backup/model.rb +249 -0
  48. data/lib/backup/notifier/base.rb +29 -0
  49. data/lib/backup/notifier/binder.rb +32 -0
  50. data/lib/backup/notifier/mail.rb +141 -0
  51. data/lib/backup/notifier/templates/notify_failure.erb +31 -0
  52. data/lib/backup/notifier/templates/notify_success.erb +16 -0
  53. data/lib/backup/storage/base.rb +60 -3
  54. data/lib/backup/storage/cloudfiles.rb +85 -6
  55. data/lib/backup/storage/dropbox.rb +74 -4
  56. data/lib/backup/storage/ftp.rb +103 -27
  57. data/lib/backup/storage/object.rb +45 -0
  58. data/lib/backup/storage/rsync.rb +100 -0
  59. data/lib/backup/storage/s3.rb +100 -7
  60. data/lib/backup/storage/scp.rb +94 -19
  61. data/lib/backup/storage/sftp.rb +94 -19
  62. data/lib/backup/version.rb +70 -1
  63. data/lib/templates/archive +4 -0
  64. data/lib/templates/compressor/gzip +4 -0
  65. data/lib/templates/database/mongodb +10 -0
  66. data/lib/templates/database/mysql +11 -0
  67. data/lib/templates/database/postgresql +11 -0
  68. data/lib/templates/database/redis +10 -0
  69. data/lib/templates/encryptor/gpg +9 -0
  70. data/lib/templates/encryptor/openssl +5 -0
  71. data/lib/templates/notifier/mail +14 -0
  72. data/lib/templates/readme +15 -0
  73. data/lib/templates/storage/cloudfiles +7 -0
  74. data/lib/templates/storage/dropbox +8 -0
  75. data/lib/templates/storage/ftp +8 -0
  76. data/lib/templates/storage/rsync +7 -0
  77. data/lib/templates/storage/s3 +8 -0
  78. data/lib/templates/storage/scp +8 -0
  79. data/lib/templates/storage/sftp +8 -0
  80. data/spec/archive_spec.rb +53 -0
  81. data/spec/backup_spec.rb +11 -0
  82. data/spec/compressor/gzip_spec.rb +59 -0
  83. data/spec/configuration/base_spec.rb +35 -0
  84. data/spec/configuration/compressor/gzip_spec.rb +28 -0
  85. data/spec/configuration/database/base_spec.rb +16 -0
  86. data/spec/configuration/database/mongodb_spec.rb +30 -0
  87. data/spec/configuration/database/mysql_spec.rb +32 -0
  88. data/spec/configuration/database/postgresql_spec.rb +32 -0
  89. data/spec/configuration/database/redis_spec.rb +30 -0
  90. data/spec/configuration/encryptor/gpg_spec.rb +25 -0
  91. data/spec/configuration/encryptor/open_ssl_spec.rb +31 -0
  92. data/spec/configuration/notifier/mail_spec.rb +32 -0
  93. data/spec/configuration/storage/cloudfiles_spec.rb +34 -0
  94. data/spec/configuration/storage/dropbox_spec.rb +40 -0
  95. data/spec/configuration/storage/ftp_spec.rb +40 -0
  96. data/spec/configuration/storage/rsync_spec.rb +37 -0
  97. data/spec/configuration/storage/s3_spec.rb +37 -0
  98. data/spec/configuration/storage/scp_spec.rb +40 -0
  99. data/spec/configuration/storage/sftp_spec.rb +40 -0
  100. data/spec/database/base_spec.rb +30 -0
  101. data/spec/database/mongodb_spec.rb +144 -0
  102. data/spec/database/mysql_spec.rb +150 -0
  103. data/spec/database/postgresql_spec.rb +164 -0
  104. data/spec/database/redis_spec.rb +122 -0
  105. data/spec/encryptor/gpg_spec.rb +57 -0
  106. data/spec/encryptor/open_ssl_spec.rb +102 -0
  107. data/spec/logger_spec.rb +37 -0
  108. data/spec/model_spec.rb +236 -0
  109. data/spec/notifier/mail_spec.rb +97 -0
  110. data/spec/spec_helper.rb +21 -0
  111. data/spec/storage/base_spec.rb +33 -0
  112. data/spec/storage/cloudfiles_spec.rb +102 -0
  113. data/spec/storage/dropbox_spec.rb +89 -0
  114. data/spec/storage/ftp_spec.rb +133 -0
  115. data/spec/storage/object_spec.rb +74 -0
  116. data/spec/storage/rsync_spec.rb +115 -0
  117. data/spec/storage/s3_spec.rb +110 -0
  118. data/spec/storage/scp_spec.rb +129 -0
  119. data/spec/storage/sftp_spec.rb +125 -0
  120. data/spec/version_spec.rb +32 -0
  121. metadata +139 -123
  122. data/CHANGELOG +0 -131
  123. data/LICENSE +0 -20
  124. data/generators/backup/backup_generator.rb +0 -69
  125. data/generators/backup/templates/backup.rake +0 -56
  126. data/generators/backup/templates/backup.rb +0 -253
  127. data/generators/backup/templates/create_backup_tables.rb +0 -18
  128. data/generators/backup_update/backup_update_generator.rb +0 -50
  129. data/generators/backup_update/templates/migrations/update_backup_tables.rb +0 -27
  130. data/lib/backup/adapters/archive.rb +0 -34
  131. data/lib/backup/adapters/base.rb +0 -167
  132. data/lib/backup/adapters/custom.rb +0 -41
  133. data/lib/backup/adapters/mongo_db.rb +0 -139
  134. data/lib/backup/adapters/mysql.rb +0 -60
  135. data/lib/backup/adapters/postgresql.rb +0 -60
  136. data/lib/backup/adapters/sqlite.rb +0 -25
  137. data/lib/backup/command_helper.rb +0 -14
  138. data/lib/backup/configuration/adapter.rb +0 -21
  139. data/lib/backup/configuration/adapter_options.rb +0 -8
  140. data/lib/backup/configuration/attributes.rb +0 -19
  141. data/lib/backup/configuration/mail.rb +0 -20
  142. data/lib/backup/configuration/smtp.rb +0 -8
  143. data/lib/backup/configuration/storage.rb +0 -8
  144. data/lib/backup/connection/cloudfiles.rb +0 -75
  145. data/lib/backup/connection/dropbox.rb +0 -63
  146. data/lib/backup/connection/s3.rb +0 -88
  147. data/lib/backup/core_ext/object.rb +0 -5
  148. data/lib/backup/environment/base.rb +0 -12
  149. data/lib/backup/environment/rails_configuration.rb +0 -15
  150. data/lib/backup/environment/unix_configuration.rb +0 -109
  151. data/lib/backup/mail/base.rb +0 -97
  152. data/lib/backup/mail/mail.txt +0 -7
  153. data/lib/backup/record/base.rb +0 -65
  154. data/lib/backup/record/cloudfiles.rb +0 -28
  155. data/lib/backup/record/dropbox.rb +0 -27
  156. data/lib/backup/record/ftp.rb +0 -39
  157. data/lib/backup/record/local.rb +0 -26
  158. data/lib/backup/record/s3.rb +0 -25
  159. data/lib/backup/record/scp.rb +0 -33
  160. data/lib/backup/record/sftp.rb +0 -38
  161. data/lib/backup/storage/local.rb +0 -22
  162. data/lib/generators/backup/USAGE +0 -10
  163. data/lib/generators/backup/backup_generator.rb +0 -47
  164. data/lib/generators/backup/templates/backup.rake +0 -56
  165. data/lib/generators/backup/templates/backup.rb +0 -236
  166. data/lib/generators/backup/templates/create_backup_tables.rb +0 -18
  167. data/setup/backup.rb +0 -257
  168. data/setup/backup.sqlite3 +0 -0
@@ -1,31 +1,106 @@
1
+ # encoding: utf-8
2
+
3
+ ##
4
+ # Only load the Net::SFTP library/gem when the Backup::Storage::SFTP class is loaded
1
5
  require 'net/sftp'
2
6
 
3
7
  module Backup
4
8
  module Storage
5
9
  class SFTP < Base
6
-
7
- attr_accessor :user, :password, :ip, :path, :tmp_path, :final_file
8
-
9
- # Stores the backup file on the remote server using SFTP
10
- def initialize(adapter)
11
- %w(ip user password path).each do |method|
12
- send("#{method}=", adapter.procedure.get_storage_configuration.attributes[method])
10
+
11
+ ##
12
+ # Server credentials
13
+ attr_accessor :username, :password
14
+
15
+ ##
16
+ # Server IP Address and SFTP port
17
+ attr_accessor :ip, :port
18
+
19
+ ##
20
+ # Path to store backups to
21
+ attr_accessor :path
22
+
23
+ ##
24
+ # Creates a new instance of the SFTP storage object
25
+ # First it sets the defaults (if any exist) and then evaluates
26
+ # the configuration block which may overwrite these defaults
27
+ def initialize(&block)
28
+ load_defaults!
29
+
30
+ @port ||= 22
31
+ @path ||= 'backups'
32
+
33
+ instance_eval(&block) if block_given?
34
+
35
+ @time = TIME
36
+ @path = path.sub(/^\~\//, '')
37
+ end
38
+
39
+ ##
40
+ # This is the remote path to where the backup files will be stored
41
+ def remote_path
42
+ File.join(path, TRIGGER)
43
+ end
44
+
45
+ ##
46
+ # Performs the backup transfer
47
+ def perform!
48
+ transfer!
49
+ cycle!
50
+ end
51
+
52
+ private
53
+
54
+ ##
55
+ # Establishes a connection to the remote server and returns the Net::SFTP object.
56
+ # Not doing any instance variable caching because this object gets persisted in YAML
57
+ # format to a file and will issues. This, however has no impact on performance since it only
58
+ # gets invoked once per object for a #transfer! and once for a remove! Backups run in the
59
+ # background anyway so even if it were a bit slower it shouldn't matter.
60
+ def connection
61
+ Net::SFTP.start(ip, username, :password => password, :port => port)
62
+ end
63
+
64
+ ##
65
+ # Transfers the archived file to the specified remote server
66
+ def transfer!
67
+ Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
68
+ create_remote_directories!
69
+ connection.upload!(
70
+ File.join(local_path, local_file),
71
+ File.join(remote_path, remote_file)
72
+ )
73
+ end
74
+
75
+ ##
76
+ # Removes the transferred archive file from the server
77
+ def remove!
78
+ begin
79
+ connection.remove!(
80
+ File.join(remote_path, remote_file)
81
+ )
82
+ rescue Net::SFTP::StatusException
83
+ Logger.warn "Could not remove file \"#{ File.join(remote_path, remote_file) }\"."
13
84
  end
14
-
15
- final_file = adapter.final_file
16
- tmp_path = adapter.tmp_path
17
-
18
- Net::SFTP.start(ip, user, :password => password) do |sftp|
85
+ end
86
+
87
+ ##
88
+ # Creates (if they don't exist yet) all the directories on the remote
89
+ # server in order to upload the backup file. Net::SFTP does not support
90
+ # paths to directories that don't yet exist when creating new directories.
91
+ # Instead, we split the parts up in to an array (for each '/') and loop through
92
+ # that to create the directories one by one. Net::SFTP raises an exception when
93
+ # the directory it's trying ot create already exists, so we have rescue it
94
+ def create_remote_directories!
95
+ path_parts = Array.new
96
+ remote_path.split('/').each do |path_part|
97
+ path_parts << path_part
19
98
  begin
20
- puts "Storing \"#{final_file}\" to path \"#{path}\" on remote server (#{ip})."
21
- sftp.upload!(File.join(tmp_path, final_file).gsub('\ ', ' '), File.join(path, final_file))
22
- rescue
23
- puts "Could not find \"#{path}\" on \"#{ip}\", please ensure this directory exists."
24
- exit
25
- end
99
+ connection.mkdir!(path_parts.join('/'))
100
+ rescue Net::SFTP::StatusException; end
26
101
  end
27
102
  end
28
-
103
+
29
104
  end
30
105
  end
31
106
  end
@@ -1,3 +1,72 @@
1
+ # encoding: utf-8
2
+
1
3
  module Backup
2
- VERSION = "2.4.5.1"
4
+
5
+ ##
6
+ # Usage:
7
+ #
8
+ # # Returns the current backup version based on the defined constants
9
+ # Backup::Version.current
10
+ #
11
+ # # Returns a gemspec compatible version number based on the defined constants
12
+ # Backup::Version.gemspec
13
+ #
14
+ class Version
15
+
16
+ ##
17
+ # MAJOR:
18
+ # Defines the major version
19
+ # MINOR:
20
+ # Defines the minor version
21
+ # PATCH:
22
+ # Defines the patch version
23
+ # BUILD:
24
+ # Defines the build version ( use 'false' if no build )
25
+ MAJOR, MINOR, PATCH, BUILD = 3, 0, 0, 0
26
+
27
+ # ========================================================= #
28
+ # ADJUST THE CONSTANTS ABOVE TO CHANGE THE BACKUP VERSION #
29
+ # ========================================================= #
30
+
31
+ ##
32
+ # Returns the major version ( big release based off of multiple minor releases )
33
+ def self.major
34
+ MAJOR
35
+ end
36
+
37
+ ##
38
+ # Returns the minor version ( small release based off of multiple patches )
39
+ def self.minor
40
+ MINOR
41
+ end
42
+
43
+ ##
44
+ # Returns the patch version ( updates, features and (crucial) bug fixes based off of multiple builds )
45
+ def self.patch
46
+ PATCH
47
+ end
48
+
49
+ ##
50
+ # Returns the build version ( improvements, small additions, frequent releases )
51
+ def self.build
52
+ BUILD
53
+ end
54
+
55
+ ##
56
+ # Returns the current version ( not for gemspec / rubygems )
57
+ def self.current
58
+ "#{major}.#{minor}.#{patch} / build #{build or 0}"
59
+ end
60
+
61
+ ##
62
+ # Returns the (gemspec qualified) current version
63
+ def self.gemspec
64
+ if build.eql?(false)
65
+ "#{major}.#{minor}.#{patch}"
66
+ else
67
+ "#{major}.#{minor}.#{patch}.build.#{build}"
68
+ end
69
+ end
70
+
71
+ end
3
72
  end
@@ -0,0 +1,4 @@
1
+ archive :my_archive do |archive|
2
+ archive.add '/path/to/a/file.rb'
3
+ archive.add '/path/to/a/folder/'
4
+ end
@@ -0,0 +1,4 @@
1
+ compress_with Gzip do |compression|
2
+ compression.best = true
3
+ compression.fast = false
4
+ end
@@ -0,0 +1,10 @@
1
+ database MongoDB do |db|
2
+ db.name = "my_database_name"
3
+ db.username = "my_username"
4
+ db.password = "my_password"
5
+ db.host = "localhost"
6
+ db.port = 5432
7
+ db.ipv6 = false
8
+ db.only_collections = ['only', 'these' 'collections']
9
+ db.additional_options = []
10
+ end
@@ -0,0 +1,11 @@
1
+ database MySQL do |db|
2
+ db.name = "my_database_name"
3
+ db.username = "my_username"
4
+ db.password = "my_password"
5
+ db.host = "localhost"
6
+ db.port = 3306
7
+ db.socket = "/tmp/mysql.sock"
8
+ db.skip_tables = ['skip', 'these', 'tables']
9
+ db.only_tables = ['only', 'these' 'tables']
10
+ db.additional_options = ['--quick', '--single-transaction']
11
+ end
@@ -0,0 +1,11 @@
1
+ database PostgreSQL do |db|
2
+ db.name = "my_database_name"
3
+ db.username = "my_username"
4
+ db.password = "my_password"
5
+ db.host = "localhost"
6
+ db.port = 5432
7
+ db.socket = "/tmp/pg.sock"
8
+ db.skip_tables = ['skip', 'these', 'tables']
9
+ db.only_tables = ['only', 'these' 'tables']
10
+ db.additional_options = ['--quick', '--single-transaction']
11
+ end
@@ -0,0 +1,10 @@
1
+ database Redis do |db|
2
+ db.name = "my_database_name"
3
+ db.path = "/usr/local/var/db/redis"
4
+ db.password = "my_password"
5
+ db.host = "localhost"
6
+ db.port = 5432
7
+ db.socket = "/tmp/redis.sock"
8
+ db.additional_options = []
9
+ db.invoke_save = true
10
+ end
@@ -0,0 +1,9 @@
1
+ encrypt_with GPG do |encryption|
2
+ encryption.key = <<-KEY
3
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
4
+ Version: GnuPG v1.4.11 (Darwin)
5
+
6
+ <Your GPG Public Key Here>
7
+ -----END PGP PUBLIC KEY BLOCK-----
8
+ KEY
9
+ end
@@ -0,0 +1,5 @@
1
+ encrypt_with OpenSSL do |encryption|
2
+ encryption.password = 'my_password'
3
+ encryption.base64 = true
4
+ encryption.salt = true
5
+ end
@@ -0,0 +1,14 @@
1
+ notify_by Mail do |mail|
2
+ mail.on_success = true
3
+ mail.on_failure = true
4
+
5
+ mail.from = 'sender@email.com'
6
+ mail.to = 'receiver@email.com'
7
+ mail.address = 'smtp.gmail.com'
8
+ mail.port = 587
9
+ mail.domain = 'your.host.name'
10
+ mail.user_name = 'sender@email.com'
11
+ mail.password = 'my_password'
12
+ mail.authentication = 'plain'
13
+ mail.enable_starttls_auto = true
14
+ end
@@ -0,0 +1,15 @@
1
+ ##
2
+ # Backup
3
+ # Generated Template
4
+ #
5
+ # For more information:
6
+ #
7
+ # View the Git repository at https://github.com/meskyanichi/backup
8
+ # View the Wiki/Documentation at https://github.com/meskyanichi/backup/wiki
9
+ # View the issue log at https://github.com/meskyanichi/backup/issues
10
+ #
11
+ # When you're finished configuring this configuration file,
12
+ # you can run it from the command line by issuing the following command:
13
+ #
14
+ # $ backup -t my_backup [-c <path_to_configuration_file>]
15
+
@@ -0,0 +1,7 @@
1
+ store_with CloudFiles do |cf|
2
+ cf.api_key = 'my_api_key'
3
+ cf.username = 'my_username'
4
+ cf.container = 'my_container'
5
+ cf.path = '/path/to/my/backups'
6
+ cf.keep = 5
7
+ end
@@ -0,0 +1,8 @@
1
+ store_with Dropbox do |db|
2
+ db.email = 'my@email.com'
3
+ db.password = 'my_password'
4
+ db.api_key = 'my_api_key'
5
+ db.api_secret = 'my_api_secret'
6
+ db.path = '/path/to/my/backups'
7
+ db.keep = 25
8
+ end
@@ -0,0 +1,8 @@
1
+ store_with FTP do |server|
2
+ server.username = 'my_username'
3
+ server.password = 'my_password'
4
+ server.ip = '123.45.678.90'
5
+ server.port = 21
6
+ server.path = '~/backups/'
7
+ server.keep = 5
8
+ end
@@ -0,0 +1,7 @@
1
+ store_with RSync do |server|
2
+ server.username = 'my_username'
3
+ server.password = 'my_password'
4
+ server.ip = '123.45.678.90'
5
+ server.port = 22
6
+ server.path = '~/backups/'
7
+ end
@@ -0,0 +1,8 @@
1
+ store_with S3 do |s3|
2
+ s3.access_key_id = 'my_access_key_id'
3
+ s3.secret_access_key = 'my_secret_access_key'
4
+ s3.region = 'us-east-1'
5
+ s3.bucket = 'bucket-name'
6
+ s3.path = '/path/to/my/backups'
7
+ s3.keep = 10
8
+ end
@@ -0,0 +1,8 @@
1
+ store_with SCP do |server|
2
+ server.username = 'my_username'
3
+ server.password = 'my_password'
4
+ server.ip = '123.45.678.90'
5
+ server.port = 22
6
+ server.path = '~/backups/'
7
+ server.keep = 5
8
+ end
@@ -0,0 +1,8 @@
1
+ store_with SFTP do |server|
2
+ server.username = 'my_username'
3
+ server.password = 'my_password'
4
+ server.ip = '123.45.678.90'
5
+ server.port = 22
6
+ server.path = '~/backups/'
7
+ server.keep = 5
8
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/spec_helper'
4
+
5
+ describe Backup::Archive do
6
+
7
+ let(:archive) do
8
+ Backup::Archive.new(:dummy_archive) do |a|
9
+ a.add '/home/rspecuser/somefile'
10
+ a.add '/home/rspecuser/logs/'
11
+ a.add '/home/rspecuser/dotfiles/'
12
+ end
13
+ end
14
+
15
+ it 'should have no paths' do
16
+ archive = Backup::Archive.new(:dummy_archive) { |a| }
17
+ archive.paths.count.should == 0
18
+ end
19
+
20
+ it 'should have 3 paths' do
21
+ archive.paths.count.should == 3
22
+ end
23
+
24
+ it do
25
+ archive.name.should == :dummy_archive
26
+ end
27
+
28
+ describe '#paths_to_package' do
29
+ it 'should return a tar -c friendly string' do
30
+ archive.send(:paths_to_package).should ==
31
+ "'/home/rspecuser/somefile' '/home/rspecuser/logs/' '/home/rspecuser/dotfiles/'"
32
+ end
33
+ end
34
+
35
+ describe '#perform!' do
36
+ before do
37
+ [:mkdir, :run, :utility].each { |method| archive.stubs(method) }
38
+ Backup::Logger.stubs(:message)
39
+ end
40
+
41
+ it 'should tar all the specified paths' do
42
+ archive.expects(:mkdir).with(File.join(Backup::TMP_PATH, Backup::TRIGGER, 'archive'))
43
+ archive.expects(:run).with("tar -c '/home/rspecuser/somefile' '/home/rspecuser/logs/' '/home/rspecuser/dotfiles/' 1> '#{File.join(Backup::TMP_PATH, Backup::TRIGGER, 'archive', "#{:dummy_archive}.tar")}' 2> /dev/null")
44
+ archive.expects(:utility).with(:tar).returns(:tar)
45
+ archive.perform!
46
+ end
47
+
48
+ it 'should log the status' do
49
+ Backup::Logger.expects(:message).with("Backup::Archive started packaging and archiving \"/home/rspecuser/somefile\", \"/home/rspecuser/logs/\", \"/home/rspecuser/dotfiles/\".")
50
+ archive.perform!
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/spec_helper'
4
+
5
+ describe Backup do
6
+ it do
7
+ Backup::TMP_PATH.should == File.join(ENV['HOME'], 'Backup', '.tmp')
8
+ Backup::DATA_PATH.should == File.join(ENV['HOME'], 'Backup', 'data')
9
+ Backup::CONFIG_FILE.should == File.join(ENV['HOME'], 'Backup', 'config.rb')
10
+ end
11
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
+
5
+ describe Backup::Compressor::Gzip do
6
+ let(:compressor) { Backup::Compressor::Gzip.new }
7
+
8
+ before do
9
+ Backup::Model.extension = 'tar'
10
+ end
11
+
12
+ describe 'the options' do
13
+ it do
14
+ compressor.send(:best).should == []
15
+ end
16
+
17
+ it do
18
+ compressor.send(:fast).should == []
19
+ end
20
+ end
21
+
22
+ describe '#perform!' do
23
+ before do
24
+ [:run, :utility].each { |method| compressor.stubs(method) }
25
+ Backup::Logger.stubs(:message)
26
+ end
27
+
28
+ it 'should perform the compression' do
29
+ compressor.expects(:utility).with(:gzip).returns(:gzip)
30
+ compressor.expects(:run).with("gzip '#{ File.join(Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar") }'")
31
+ compressor.perform!
32
+ end
33
+
34
+ it 'should perform the compression with the --best and --fast options' do
35
+ compressor = Backup::Compressor::Gzip.new do |c|
36
+ c.best = true
37
+ c.fast = true
38
+ end
39
+
40
+ compressor.stubs(:utility).returns(:gzip)
41
+ compressor.expects(:run).with("gzip --best --fast '#{ File.join(Backup::TMP_PATH, "#{ Backup::TIME }.#{ Backup::TRIGGER }.tar") }'")
42
+ compressor.perform!
43
+ end
44
+
45
+ it 'should set the class variable @extension (Backup::Model.extension) to .gz' do
46
+ compressor.stubs(:utility).returns(:gzip)
47
+ compressor.expects(:run)
48
+
49
+ Backup::Model.extension.should == 'tar'
50
+ compressor.perform!
51
+ Backup::Model.extension.should == 'tar.gz'
52
+ end
53
+
54
+ it 'should log' do
55
+ Backup::Logger.expects(:message).with("Backup::Compressor::Gzip started compressing the archive.")
56
+ compressor.perform!
57
+ end
58
+ end
59
+ end