backup_checksum 3.0.23

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 (244) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +10 -0
  3. data/Gemfile +28 -0
  4. data/Gemfile.lock +130 -0
  5. data/Guardfile +21 -0
  6. data/LICENSE.md +24 -0
  7. data/README.md +476 -0
  8. data/backup_checksum.gemspec +32 -0
  9. data/bin/backup +11 -0
  10. data/lib/backup.rb +217 -0
  11. data/lib/backup/archive.rb +117 -0
  12. data/lib/backup/binder.rb +22 -0
  13. data/lib/backup/checksum/base.rb +44 -0
  14. data/lib/backup/checksum/shasum.rb +16 -0
  15. data/lib/backup/cleaner.rb +121 -0
  16. data/lib/backup/cli/helpers.rb +88 -0
  17. data/lib/backup/cli/utility.rb +247 -0
  18. data/lib/backup/compressor/base.rb +29 -0
  19. data/lib/backup/compressor/bzip2.rb +50 -0
  20. data/lib/backup/compressor/gzip.rb +47 -0
  21. data/lib/backup/compressor/lzma.rb +50 -0
  22. data/lib/backup/compressor/pbzip2.rb +56 -0
  23. data/lib/backup/config.rb +173 -0
  24. data/lib/backup/configuration/base.rb +15 -0
  25. data/lib/backup/configuration/checksum/base.rb +9 -0
  26. data/lib/backup/configuration/checksum/shasum.rb +9 -0
  27. data/lib/backup/configuration/compressor/base.rb +9 -0
  28. data/lib/backup/configuration/compressor/bzip2.rb +23 -0
  29. data/lib/backup/configuration/compressor/gzip.rb +23 -0
  30. data/lib/backup/configuration/compressor/lzma.rb +23 -0
  31. data/lib/backup/configuration/compressor/pbzip2.rb +28 -0
  32. data/lib/backup/configuration/database/base.rb +19 -0
  33. data/lib/backup/configuration/database/mongodb.rb +49 -0
  34. data/lib/backup/configuration/database/mysql.rb +42 -0
  35. data/lib/backup/configuration/database/postgresql.rb +41 -0
  36. data/lib/backup/configuration/database/redis.rb +39 -0
  37. data/lib/backup/configuration/database/riak.rb +29 -0
  38. data/lib/backup/configuration/encryptor/base.rb +9 -0
  39. data/lib/backup/configuration/encryptor/gpg.rb +17 -0
  40. data/lib/backup/configuration/encryptor/open_ssl.rb +32 -0
  41. data/lib/backup/configuration/helpers.rb +52 -0
  42. data/lib/backup/configuration/notifier/base.rb +28 -0
  43. data/lib/backup/configuration/notifier/campfire.rb +25 -0
  44. data/lib/backup/configuration/notifier/hipchat.rb +41 -0
  45. data/lib/backup/configuration/notifier/mail.rb +112 -0
  46. data/lib/backup/configuration/notifier/presently.rb +25 -0
  47. data/lib/backup/configuration/notifier/prowl.rb +23 -0
  48. data/lib/backup/configuration/notifier/twitter.rb +21 -0
  49. data/lib/backup/configuration/storage/base.rb +18 -0
  50. data/lib/backup/configuration/storage/cloudfiles.rb +25 -0
  51. data/lib/backup/configuration/storage/dropbox.rb +58 -0
  52. data/lib/backup/configuration/storage/ftp.rb +29 -0
  53. data/lib/backup/configuration/storage/local.rb +17 -0
  54. data/lib/backup/configuration/storage/ninefold.rb +20 -0
  55. data/lib/backup/configuration/storage/rsync.rb +29 -0
  56. data/lib/backup/configuration/storage/s3.rb +25 -0
  57. data/lib/backup/configuration/storage/scp.rb +25 -0
  58. data/lib/backup/configuration/storage/sftp.rb +25 -0
  59. data/lib/backup/configuration/syncer/base.rb +10 -0
  60. data/lib/backup/configuration/syncer/cloud.rb +23 -0
  61. data/lib/backup/configuration/syncer/cloud_files.rb +30 -0
  62. data/lib/backup/configuration/syncer/rsync/base.rb +28 -0
  63. data/lib/backup/configuration/syncer/rsync/local.rb +11 -0
  64. data/lib/backup/configuration/syncer/rsync/pull.rb +11 -0
  65. data/lib/backup/configuration/syncer/rsync/push.rb +31 -0
  66. data/lib/backup/configuration/syncer/s3.rb +23 -0
  67. data/lib/backup/database/base.rb +59 -0
  68. data/lib/backup/database/mongodb.rb +232 -0
  69. data/lib/backup/database/mysql.rb +163 -0
  70. data/lib/backup/database/postgresql.rb +146 -0
  71. data/lib/backup/database/redis.rb +139 -0
  72. data/lib/backup/database/riak.rb +69 -0
  73. data/lib/backup/dependency.rb +114 -0
  74. data/lib/backup/encryptor/base.rb +29 -0
  75. data/lib/backup/encryptor/gpg.rb +80 -0
  76. data/lib/backup/encryptor/open_ssl.rb +72 -0
  77. data/lib/backup/errors.rb +124 -0
  78. data/lib/backup/logger.rb +152 -0
  79. data/lib/backup/model.rb +386 -0
  80. data/lib/backup/notifier/base.rb +81 -0
  81. data/lib/backup/notifier/campfire.rb +168 -0
  82. data/lib/backup/notifier/hipchat.rb +99 -0
  83. data/lib/backup/notifier/mail.rb +206 -0
  84. data/lib/backup/notifier/presently.rb +88 -0
  85. data/lib/backup/notifier/prowl.rb +65 -0
  86. data/lib/backup/notifier/twitter.rb +70 -0
  87. data/lib/backup/package.rb +51 -0
  88. data/lib/backup/packager.rb +108 -0
  89. data/lib/backup/pipeline.rb +107 -0
  90. data/lib/backup/splitter.rb +75 -0
  91. data/lib/backup/storage/base.rb +119 -0
  92. data/lib/backup/storage/cloudfiles.rb +87 -0
  93. data/lib/backup/storage/cycler.rb +117 -0
  94. data/lib/backup/storage/dropbox.rb +181 -0
  95. data/lib/backup/storage/ftp.rb +119 -0
  96. data/lib/backup/storage/local.rb +82 -0
  97. data/lib/backup/storage/ninefold.rb +116 -0
  98. data/lib/backup/storage/rsync.rb +149 -0
  99. data/lib/backup/storage/s3.rb +94 -0
  100. data/lib/backup/storage/scp.rb +99 -0
  101. data/lib/backup/storage/sftp.rb +108 -0
  102. data/lib/backup/syncer/base.rb +42 -0
  103. data/lib/backup/syncer/cloud.rb +190 -0
  104. data/lib/backup/syncer/cloud_files.rb +56 -0
  105. data/lib/backup/syncer/rsync/base.rb +52 -0
  106. data/lib/backup/syncer/rsync/local.rb +53 -0
  107. data/lib/backup/syncer/rsync/pull.rb +38 -0
  108. data/lib/backup/syncer/rsync/push.rb +113 -0
  109. data/lib/backup/syncer/s3.rb +47 -0
  110. data/lib/backup/template.rb +46 -0
  111. data/lib/backup/version.rb +43 -0
  112. data/spec/archive_spec.rb +335 -0
  113. data/spec/cleaner_spec.rb +304 -0
  114. data/spec/cli/helpers_spec.rb +176 -0
  115. data/spec/cli/utility_spec.rb +363 -0
  116. data/spec/compressor/base_spec.rb +31 -0
  117. data/spec/compressor/bzip2_spec.rb +83 -0
  118. data/spec/compressor/gzip_spec.rb +83 -0
  119. data/spec/compressor/lzma_spec.rb +83 -0
  120. data/spec/compressor/pbzip2_spec.rb +124 -0
  121. data/spec/config_spec.rb +321 -0
  122. data/spec/configuration/base_spec.rb +35 -0
  123. data/spec/configuration/compressor/bzip2_spec.rb +29 -0
  124. data/spec/configuration/compressor/gzip_spec.rb +29 -0
  125. data/spec/configuration/compressor/lzma_spec.rb +29 -0
  126. data/spec/configuration/compressor/pbzip2_spec.rb +32 -0
  127. data/spec/configuration/database/base_spec.rb +17 -0
  128. data/spec/configuration/database/mongodb_spec.rb +56 -0
  129. data/spec/configuration/database/mysql_spec.rb +53 -0
  130. data/spec/configuration/database/postgresql_spec.rb +53 -0
  131. data/spec/configuration/database/redis_spec.rb +50 -0
  132. data/spec/configuration/database/riak_spec.rb +35 -0
  133. data/spec/configuration/encryptor/gpg_spec.rb +26 -0
  134. data/spec/configuration/encryptor/open_ssl_spec.rb +35 -0
  135. data/spec/configuration/notifier/base_spec.rb +32 -0
  136. data/spec/configuration/notifier/campfire_spec.rb +32 -0
  137. data/spec/configuration/notifier/hipchat_spec.rb +44 -0
  138. data/spec/configuration/notifier/mail_spec.rb +71 -0
  139. data/spec/configuration/notifier/presently_spec.rb +35 -0
  140. data/spec/configuration/notifier/prowl_spec.rb +29 -0
  141. data/spec/configuration/notifier/twitter_spec.rb +35 -0
  142. data/spec/configuration/storage/cloudfiles_spec.rb +41 -0
  143. data/spec/configuration/storage/dropbox_spec.rb +38 -0
  144. data/spec/configuration/storage/ftp_spec.rb +44 -0
  145. data/spec/configuration/storage/local_spec.rb +29 -0
  146. data/spec/configuration/storage/ninefold_spec.rb +32 -0
  147. data/spec/configuration/storage/rsync_spec.rb +41 -0
  148. data/spec/configuration/storage/s3_spec.rb +38 -0
  149. data/spec/configuration/storage/scp_spec.rb +41 -0
  150. data/spec/configuration/storage/sftp_spec.rb +41 -0
  151. data/spec/configuration/syncer/cloud_files_spec.rb +44 -0
  152. data/spec/configuration/syncer/rsync/base_spec.rb +33 -0
  153. data/spec/configuration/syncer/rsync/local_spec.rb +10 -0
  154. data/spec/configuration/syncer/rsync/pull_spec.rb +10 -0
  155. data/spec/configuration/syncer/rsync/push_spec.rb +43 -0
  156. data/spec/configuration/syncer/s3_spec.rb +38 -0
  157. data/spec/database/base_spec.rb +54 -0
  158. data/spec/database/mongodb_spec.rb +428 -0
  159. data/spec/database/mysql_spec.rb +335 -0
  160. data/spec/database/postgresql_spec.rb +278 -0
  161. data/spec/database/redis_spec.rb +260 -0
  162. data/spec/database/riak_spec.rb +108 -0
  163. data/spec/dependency_spec.rb +49 -0
  164. data/spec/encryptor/base_spec.rb +30 -0
  165. data/spec/encryptor/gpg_spec.rb +134 -0
  166. data/spec/encryptor/open_ssl_spec.rb +129 -0
  167. data/spec/errors_spec.rb +306 -0
  168. data/spec/logger_spec.rb +363 -0
  169. data/spec/model_spec.rb +649 -0
  170. data/spec/notifier/base_spec.rb +89 -0
  171. data/spec/notifier/campfire_spec.rb +199 -0
  172. data/spec/notifier/hipchat_spec.rb +188 -0
  173. data/spec/notifier/mail_spec.rb +280 -0
  174. data/spec/notifier/presently_spec.rb +181 -0
  175. data/spec/notifier/prowl_spec.rb +117 -0
  176. data/spec/notifier/twitter_spec.rb +132 -0
  177. data/spec/package_spec.rb +61 -0
  178. data/spec/packager_spec.rb +225 -0
  179. data/spec/pipeline_spec.rb +257 -0
  180. data/spec/spec_helper.rb +59 -0
  181. data/spec/splitter_spec.rb +120 -0
  182. data/spec/storage/base_spec.rb +160 -0
  183. data/spec/storage/cloudfiles_spec.rb +230 -0
  184. data/spec/storage/cycler_spec.rb +239 -0
  185. data/spec/storage/dropbox_spec.rb +370 -0
  186. data/spec/storage/ftp_spec.rb +247 -0
  187. data/spec/storage/local_spec.rb +235 -0
  188. data/spec/storage/ninefold_spec.rb +319 -0
  189. data/spec/storage/rsync_spec.rb +345 -0
  190. data/spec/storage/s3_spec.rb +221 -0
  191. data/spec/storage/scp_spec.rb +209 -0
  192. data/spec/storage/sftp_spec.rb +220 -0
  193. data/spec/syncer/base_spec.rb +22 -0
  194. data/spec/syncer/cloud_files_spec.rb +192 -0
  195. data/spec/syncer/rsync/base_spec.rb +118 -0
  196. data/spec/syncer/rsync/local_spec.rb +121 -0
  197. data/spec/syncer/rsync/pull_spec.rb +90 -0
  198. data/spec/syncer/rsync/push_spec.rb +327 -0
  199. data/spec/syncer/s3_spec.rb +192 -0
  200. data/spec/version_spec.rb +21 -0
  201. data/templates/cli/utility/archive +25 -0
  202. data/templates/cli/utility/compressor/bzip2 +7 -0
  203. data/templates/cli/utility/compressor/gzip +7 -0
  204. data/templates/cli/utility/compressor/lzma +7 -0
  205. data/templates/cli/utility/compressor/pbzip2 +7 -0
  206. data/templates/cli/utility/config +31 -0
  207. data/templates/cli/utility/database/mongodb +18 -0
  208. data/templates/cli/utility/database/mysql +21 -0
  209. data/templates/cli/utility/database/postgresql +17 -0
  210. data/templates/cli/utility/database/redis +16 -0
  211. data/templates/cli/utility/database/riak +11 -0
  212. data/templates/cli/utility/encryptor/gpg +12 -0
  213. data/templates/cli/utility/encryptor/openssl +9 -0
  214. data/templates/cli/utility/model.erb +23 -0
  215. data/templates/cli/utility/notifier/campfire +12 -0
  216. data/templates/cli/utility/notifier/hipchat +15 -0
  217. data/templates/cli/utility/notifier/mail +22 -0
  218. data/templates/cli/utility/notifier/presently +13 -0
  219. data/templates/cli/utility/notifier/prowl +11 -0
  220. data/templates/cli/utility/notifier/twitter +13 -0
  221. data/templates/cli/utility/splitter +7 -0
  222. data/templates/cli/utility/storage/cloud_files +22 -0
  223. data/templates/cli/utility/storage/dropbox +20 -0
  224. data/templates/cli/utility/storage/ftp +12 -0
  225. data/templates/cli/utility/storage/local +7 -0
  226. data/templates/cli/utility/storage/ninefold +9 -0
  227. data/templates/cli/utility/storage/rsync +11 -0
  228. data/templates/cli/utility/storage/s3 +19 -0
  229. data/templates/cli/utility/storage/scp +11 -0
  230. data/templates/cli/utility/storage/sftp +11 -0
  231. data/templates/cli/utility/syncer/cloud_files +48 -0
  232. data/templates/cli/utility/syncer/rsync_local +12 -0
  233. data/templates/cli/utility/syncer/rsync_pull +17 -0
  234. data/templates/cli/utility/syncer/rsync_push +17 -0
  235. data/templates/cli/utility/syncer/s3 +45 -0
  236. data/templates/general/links +11 -0
  237. data/templates/general/version.erb +2 -0
  238. data/templates/notifier/mail/failure.erb +9 -0
  239. data/templates/notifier/mail/success.erb +7 -0
  240. data/templates/notifier/mail/warning.erb +9 -0
  241. data/templates/storage/dropbox/authorization_url.erb +6 -0
  242. data/templates/storage/dropbox/authorized.erb +4 -0
  243. data/templates/storage/dropbox/cache_file_written.erb +10 -0
  244. metadata +311 -0
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path('lib/backup/version')
4
+
5
+ Gem::Specification.new do |gem|
6
+
7
+ ##
8
+ # General configuration / information
9
+ gem.name = 'backup_checksum'
10
+ gem.version = Backup::Version.current
11
+ gem.platform = Gem::Platform::RUBY
12
+ gem.authors = 'Lukasz Kaniowski'
13
+ gem.email = 'lukasz.kaniowski@gmail.com'
14
+ gem.homepage = 'http://rubygems.org/gems/backup_checksum'
15
+ gem.summary = 'It is a clone of http://rubygems.org/gems/backup with checksum added'
16
+
17
+ ##
18
+ # Files and folder that need to be compiled in to the Ruby Gem
19
+ gem.files = %x[git ls-files].split("\n")
20
+ gem.test_files = %x[git ls-files -- {spec}/*].split("\n")
21
+ gem.require_path = 'lib'
22
+
23
+ ##
24
+ # The Backup CLI executable
25
+ gem.executables = ['backup']
26
+
27
+ ##
28
+ # Gem dependencies
29
+ gem.add_dependency 'thor', ['~> 0.14.6']
30
+ gem.add_dependency 'POpen4', ['~> 0.1.4']
31
+
32
+ end
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ # Load the Backup core library
5
+ require File.expand_path("../../lib/backup", __FILE__)
6
+
7
+ # Load the Backup command line interface utility
8
+ require File.expand_path("../../lib/backup/cli/utility", __FILE__)
9
+
10
+ # Initialize the Backup command line utility
11
+ Backup::CLI::Utility.start
@@ -0,0 +1,217 @@
1
+ # encoding: utf-8
2
+
3
+ # Load Ruby Core Libraries
4
+ require 'rubygems'
5
+ require 'fileutils'
6
+ require 'tempfile'
7
+ require 'yaml'
8
+ require 'etc'
9
+
10
+ # Attempt load to POpen4 and Thor Libraries
11
+ begin
12
+ gem 'POpen4', '~> 0.1.4'
13
+ gem 'thor', '~> 0.14.6'
14
+ require 'popen4'
15
+ require 'thor'
16
+ rescue LoadError
17
+ puts "\nBackup requires Thor to load the CLI Utility (Command Line Interface Utility) and POpen4 to determine the status of the unix processes."
18
+ puts "Please install both the Thor and POpen4 libraries first:\n\ngem install thor -v '~> 0.14.6'\ngem install POpen4 -v '~> 0.1.4'"
19
+ exit 1
20
+ end
21
+
22
+ ##
23
+ # The Backup Ruby Gem
24
+ module Backup
25
+
26
+ ##
27
+ # Backup's internal paths
28
+ LIBRARY_PATH = File.join(File.dirname(__FILE__), 'backup')
29
+ CLI_PATH = File.join(LIBRARY_PATH, 'cli')
30
+ STORAGE_PATH = File.join(LIBRARY_PATH, 'storage')
31
+ DATABASE_PATH = File.join(LIBRARY_PATH, 'database')
32
+ COMPRESSOR_PATH = File.join(LIBRARY_PATH, 'compressor')
33
+ CHECKSUM_PATH = File.join(LIBRARY_PATH, 'checksum')
34
+ ENCRYPTOR_PATH = File.join(LIBRARY_PATH, 'encryptor')
35
+ NOTIFIER_PATH = File.join(LIBRARY_PATH, 'notifier')
36
+ SYNCER_PATH = File.join(LIBRARY_PATH, 'syncer')
37
+ CONFIGURATION_PATH = File.join(LIBRARY_PATH, 'configuration')
38
+ TEMPLATE_PATH = File.expand_path('../../templates', __FILE__)
39
+
40
+ ##
41
+ # Autoload Backup CLI files
42
+ module CLI
43
+ autoload :Helpers, File.join(CLI_PATH, 'helpers')
44
+ autoload :Utility, File.join(CLI_PATH, 'utility')
45
+ end
46
+
47
+ ##
48
+ # Autoload Backup storage files
49
+ module Storage
50
+ autoload :Base, File.join(STORAGE_PATH, 'base')
51
+ autoload :Cycler, File.join(STORAGE_PATH, 'cycler')
52
+ autoload :S3, File.join(STORAGE_PATH, 's3')
53
+ autoload :CloudFiles, File.join(STORAGE_PATH, 'cloudfiles')
54
+ autoload :Ninefold, File.join(STORAGE_PATH, 'ninefold')
55
+ autoload :Dropbox, File.join(STORAGE_PATH, 'dropbox')
56
+ autoload :FTP, File.join(STORAGE_PATH, 'ftp')
57
+ autoload :SFTP, File.join(STORAGE_PATH, 'sftp')
58
+ autoload :SCP, File.join(STORAGE_PATH, 'scp')
59
+ autoload :RSync, File.join(STORAGE_PATH, 'rsync')
60
+ autoload :Local, File.join(STORAGE_PATH, 'local')
61
+ end
62
+
63
+ ##
64
+ # Autoload Backup syncer files
65
+ module Syncer
66
+ autoload :Base, File.join(SYNCER_PATH, 'base')
67
+ autoload :Cloud, File.join(SYNCER_PATH, 'cloud')
68
+ autoload :CloudFiles, File.join(SYNCER_PATH, 'cloud_files')
69
+ autoload :S3, File.join(SYNCER_PATH, 's3')
70
+ module RSync
71
+ autoload :Base, File.join(SYNCER_PATH, 'rsync', 'base')
72
+ autoload :Local, File.join(SYNCER_PATH, 'rsync', 'local')
73
+ autoload :Push, File.join(SYNCER_PATH, 'rsync', 'push')
74
+ autoload :Pull, File.join(SYNCER_PATH, 'rsync', 'pull')
75
+ end
76
+ end
77
+
78
+ ##
79
+ # Autoload Backup database files
80
+ module Database
81
+ autoload :Base, File.join(DATABASE_PATH, 'base')
82
+ autoload :MySQL, File.join(DATABASE_PATH, 'mysql')
83
+ autoload :PostgreSQL, File.join(DATABASE_PATH, 'postgresql')
84
+ autoload :MongoDB, File.join(DATABASE_PATH, 'mongodb')
85
+ autoload :Redis, File.join(DATABASE_PATH, 'redis')
86
+ autoload :Riak, File.join(DATABASE_PATH, 'riak')
87
+ end
88
+
89
+ ##
90
+ # Autoload compressor files
91
+ module Compressor
92
+ autoload :Base, File.join(COMPRESSOR_PATH, 'base')
93
+ autoload :Gzip, File.join(COMPRESSOR_PATH, 'gzip')
94
+ autoload :Bzip2, File.join(COMPRESSOR_PATH, 'bzip2')
95
+ autoload :Pbzip2, File.join(COMPRESSOR_PATH, 'pbzip2')
96
+ autoload :Lzma, File.join(COMPRESSOR_PATH, 'lzma')
97
+ end
98
+
99
+ ##
100
+ # Autoload Checksum files
101
+ module Checksum
102
+ autoload :Base, File.join(CHECKSUM_PATH, 'base')
103
+ autoload :Shasum, File.join(CHECKSUM_PATH, 'shasum')
104
+ end
105
+
106
+ ##
107
+ # Autoload encryptor files
108
+ module Encryptor
109
+ autoload :Base, File.join(ENCRYPTOR_PATH, 'base')
110
+ autoload :OpenSSL, File.join(ENCRYPTOR_PATH, 'open_ssl')
111
+ autoload :GPG, File.join(ENCRYPTOR_PATH, 'gpg')
112
+ end
113
+
114
+ ##
115
+ # Autoload notification files
116
+ module Notifier
117
+ autoload :Base, File.join(NOTIFIER_PATH, 'base')
118
+ autoload :Binder, File.join(NOTIFIER_PATH, 'binder')
119
+ autoload :Mail, File.join(NOTIFIER_PATH, 'mail')
120
+ autoload :Twitter, File.join(NOTIFIER_PATH, 'twitter')
121
+ autoload :Campfire, File.join(NOTIFIER_PATH, 'campfire')
122
+ autoload :Presently, File.join(NOTIFIER_PATH, 'presently')
123
+ autoload :Prowl, File.join(NOTIFIER_PATH, 'prowl')
124
+ autoload :Hipchat, File.join(NOTIFIER_PATH, 'hipchat')
125
+ end
126
+
127
+ ##
128
+ # Autoload Backup configuration files
129
+ module Configuration
130
+ autoload :Base, File.join(CONFIGURATION_PATH, 'base')
131
+ autoload :Helpers, File.join(CONFIGURATION_PATH, 'helpers')
132
+
133
+ module Notifier
134
+ autoload :Base, File.join(CONFIGURATION_PATH, 'notifier', 'base')
135
+ autoload :Mail, File.join(CONFIGURATION_PATH, 'notifier', 'mail')
136
+ autoload :Twitter, File.join(CONFIGURATION_PATH, 'notifier', 'twitter')
137
+ autoload :Campfire, File.join(CONFIGURATION_PATH, 'notifier', 'campfire')
138
+ autoload :Presently, File.join(CONFIGURATION_PATH, 'notifier', 'presently')
139
+ autoload :Prowl, File.join(CONFIGURATION_PATH, 'notifier', 'prowl')
140
+ autoload :Hipchat, File.join(CONFIGURATION_PATH, 'notifier', 'hipchat')
141
+ end
142
+
143
+ module Encryptor
144
+ autoload :Base, File.join(CONFIGURATION_PATH, 'encryptor', 'base')
145
+ autoload :OpenSSL, File.join(CONFIGURATION_PATH, 'encryptor', 'open_ssl')
146
+ autoload :GPG, File.join(CONFIGURATION_PATH, 'encryptor', 'gpg')
147
+ end
148
+
149
+ module Compressor
150
+ autoload :Base, File.join(CONFIGURATION_PATH, 'compressor', 'base')
151
+ autoload :Gzip, File.join(CONFIGURATION_PATH, 'compressor', 'gzip')
152
+ autoload :Bzip2, File.join(CONFIGURATION_PATH, 'compressor', 'bzip2')
153
+ autoload :Pbzip2, File.join(CONFIGURATION_PATH, 'compressor', 'pbzip2')
154
+ autoload :Lzma, File.join(CONFIGURATION_PATH, 'compressor', 'lzma')
155
+ end
156
+
157
+ module Storage
158
+ autoload :Base, File.join(CONFIGURATION_PATH, 'storage', 'base')
159
+ autoload :S3, File.join(CONFIGURATION_PATH, 'storage', 's3')
160
+ autoload :CloudFiles, File.join(CONFIGURATION_PATH, 'storage', 'cloudfiles')
161
+ autoload :Ninefold, File.join(CONFIGURATION_PATH, 'storage', 'ninefold')
162
+ autoload :Dropbox, File.join(CONFIGURATION_PATH, 'storage', 'dropbox')
163
+ autoload :FTP, File.join(CONFIGURATION_PATH, 'storage', 'ftp')
164
+ autoload :SFTP, File.join(CONFIGURATION_PATH, 'storage', 'sftp')
165
+ autoload :SCP, File.join(CONFIGURATION_PATH, 'storage', 'scp')
166
+ autoload :RSync, File.join(CONFIGURATION_PATH, 'storage', 'rsync')
167
+ autoload :Local, File.join(CONFIGURATION_PATH, 'storage', 'local')
168
+ end
169
+
170
+ module Checksum
171
+ autoload :Base, File.join(CONFIGURATION_PATH, 'checksum', 'base')
172
+ autoload :Shasum, File.join(CONFIGURATION_PATH, 'checksum', 'shasum')
173
+ end
174
+
175
+ module Syncer
176
+ autoload :Base, File.join(CONFIGURATION_PATH, 'syncer', 'base')
177
+ autoload :Cloud, File.join(CONFIGURATION_PATH, 'syncer', 'cloud')
178
+ autoload :CloudFiles, File.join(CONFIGURATION_PATH, 'syncer', 'cloud_files')
179
+ autoload :S3, File.join(CONFIGURATION_PATH, 'syncer', 's3')
180
+ module RSync
181
+ autoload :Base, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'base')
182
+ autoload :Local, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'local')
183
+ autoload :Push, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'push')
184
+ autoload :Pull, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'pull')
185
+ end
186
+ end
187
+
188
+ module Database
189
+ autoload :Base, File.join(CONFIGURATION_PATH, 'database', 'base')
190
+ autoload :MySQL, File.join(CONFIGURATION_PATH, 'database', 'mysql')
191
+ autoload :PostgreSQL, File.join(CONFIGURATION_PATH, 'database', 'postgresql')
192
+ autoload :MongoDB, File.join(CONFIGURATION_PATH, 'database', 'mongodb')
193
+ autoload :Redis, File.join(CONFIGURATION_PATH, 'database', 'redis')
194
+ autoload :Riak, File.join(CONFIGURATION_PATH, 'database', 'riak')
195
+ end
196
+ end
197
+
198
+ ##
199
+ # Require Backup base files
200
+ %w{
201
+ model
202
+ archive
203
+ packager
204
+ pipeline
205
+ package
206
+ cleaner
207
+ splitter
208
+ config
209
+ binder
210
+ template
211
+ dependency
212
+ logger
213
+ version
214
+ errors
215
+ }.each {|lib| require File.join(LIBRARY_PATH, lib) }
216
+
217
+ end
@@ -0,0 +1,117 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ class Archive
5
+ include Backup::CLI::Helpers
6
+
7
+ ##
8
+ # Stores the name of the archive
9
+ attr_accessor :name
10
+
11
+ ##
12
+ # Stores an array of different paths/files to store
13
+ attr_accessor :paths
14
+
15
+ ##
16
+ # Stores an array of different paths/files to exclude
17
+ attr_accessor :excludes
18
+
19
+ ##
20
+ # String of additional arguments for the `tar` command
21
+ attr_accessor :tar_args
22
+
23
+ ##
24
+ # Takes the name of the archive and the configuration block
25
+ def initialize(model, name, &block)
26
+ @model = model
27
+ @name = name.to_s
28
+ @paths = Array.new
29
+ @excludes = Array.new
30
+ @tar_args = ''
31
+
32
+ instance_eval(&block) if block_given?
33
+ end
34
+
35
+ ##
36
+ # Adds new paths to the @paths instance variable array
37
+ def add(path)
38
+ path = File.expand_path(path)
39
+ if File.exist?(path)
40
+ @paths << path
41
+ else
42
+ Logger.warn Errors::Archive::NotFoundError.new(<<-EOS)
43
+ The following path was not found:
44
+ #{ path }
45
+ This path will be omitted from the '#{ name }' Archive.
46
+ EOS
47
+ end
48
+ end
49
+
50
+ ##
51
+ # Adds new paths to the @excludes instance variable array
52
+ def exclude(path)
53
+ @excludes << File.expand_path(path)
54
+ end
55
+
56
+ ##
57
+ # Adds the given String of +options+ to the `tar` command.
58
+ # e.g. '-h --xattrs'
59
+ def tar_options(options)
60
+ @tar_args = options
61
+ end
62
+
63
+ ##
64
+ # Archives all the provided paths in to a single .tar file
65
+ # and places that .tar file in the folder which later will be packaged
66
+ # If the model is configured with a Compressor, the tar command output
67
+ # will be piped through the Compressor command and the file extension
68
+ # will be adjusted to indicate the type of compression used.
69
+ def perform!
70
+ Logger.message "#{ self.class } has started archiving:\n" +
71
+ paths.map {|path| " #{path}" }.join("\n")
72
+
73
+ archive_path = File.join(Config.tmp_path, @model.trigger, 'archives')
74
+ FileUtils.mkdir_p(archive_path)
75
+
76
+ archive_ext = 'tar'
77
+ pipeline = Pipeline.new
78
+
79
+ pipeline << "#{ utility(:tar) } #{ tar_args } -cPf - " +
80
+ "#{ paths_to_exclude } #{ paths_to_package }"
81
+
82
+ if @model.compressor
83
+ @model.compressor.compress_with do |command, ext|
84
+ pipeline << command
85
+ archive_ext << ext
86
+ end
87
+ end
88
+
89
+ pipeline << "cat > '#{ File.join(archive_path, "#{name}.#{archive_ext}") }'"
90
+ pipeline.run
91
+ if pipeline.success?
92
+ Logger.message "#{ self.class } Complete!"
93
+ else
94
+ raise Errors::Archive::PipelineError,
95
+ "Failed to Create Backup Archive\n" +
96
+ pipeline.error_messages
97
+ end
98
+ end
99
+
100
+ private
101
+
102
+ ##
103
+ # Returns a "tar-ready" string of all the specified paths combined
104
+ def paths_to_package
105
+ paths.map {|path| "'#{path}'" }.join(' ')
106
+ end
107
+
108
+ ##
109
+ # Returns a "tar-ready" string of all the specified excludes combined
110
+ def paths_to_exclude
111
+ if excludes.any?
112
+ excludes.map {|path| "--exclude='#{path}'" }.join(' ')
113
+ end
114
+ end
115
+
116
+ end
117
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ class Binder
5
+
6
+ ##
7
+ # Creates a new Backup::Notifier::Binder instance. Loops through the provided
8
+ # Hash to set instance variables
9
+ def initialize(key_and_values)
10
+ key_and_values.each do |key, value|
11
+ instance_variable_set("@#{ key }", value)
12
+ end
13
+ end
14
+
15
+ ##
16
+ # Returns the binding (needs a wrapper method because #binding is a private method)
17
+ def get_binding
18
+ binding
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ module Checksum
5
+ class Base
6
+ include Backup::CLI::Helpers
7
+ include Backup::Configuration::Helpers
8
+
9
+ def initialize
10
+ load_defaults!
11
+ end
12
+
13
+ def process_checksum_file_before_transfer(file_names_hash, checksum_name, local_path)
14
+ file_names_hash.each do |local, remote|
15
+ replace_in_file(File.join(local_path, checksum_name), /#{File.join(local_path, local)}/) do |match|
16
+ remote
17
+ end
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ ##
24
+ # Return the checksum name, with Backup namespace removed
25
+ def checksum_name
26
+ self.class.to_s.sub('Backup::', '')
27
+ end
28
+
29
+ ##
30
+ # Logs a message to the console and log file to inform
31
+ # the client that Backup is using the compressor
32
+ def log!
33
+ Logger.message "Using #{ checksum_name } for checksum."
34
+ end
35
+
36
+
37
+ def replace_in_file(filepath, regexp, *args, &block)
38
+ content = File.read(filepath).gsub(regexp, *args, &block)
39
+ File.open(filepath, 'wb') { |file| file.write(content) }
40
+ end
41
+
42
+ end
43
+ end
44
+ end