/lib/backup.rb

https://github.com/splendeo/backup · Ruby · 203 lines · 158 code · 20 blank · 25 comment · 0 complexity · 847f7ec312b72a14480204a4bbf59565 MD5 · raw file

  1. # encoding: utf-8
  2. # Load Ruby Core Libraries
  3. require 'rubygems'
  4. require 'fileutils'
  5. require 'tempfile'
  6. require 'yaml'
  7. require 'etc'
  8. # Attempt load to POpen4 and Thor Libraries
  9. begin
  10. gem 'POpen4', '~> 0.1.4'
  11. gem 'thor', '~> 0.14.6'
  12. require 'popen4'
  13. require 'thor'
  14. rescue LoadError
  15. puts "\nBackup requires Thor to load the CLI Utility (Command Line Interface Utility) and POpen4 to determine the status of the unix processes."
  16. 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'"
  17. exit 1
  18. end
  19. ##
  20. # The Backup Ruby Gem
  21. module Backup
  22. ##
  23. # Backup's internal paths
  24. LIBRARY_PATH = File.join(File.dirname(__FILE__), 'backup')
  25. CLI_PATH = File.join(LIBRARY_PATH, 'cli')
  26. STORAGE_PATH = File.join(LIBRARY_PATH, 'storage')
  27. DATABASE_PATH = File.join(LIBRARY_PATH, 'database')
  28. COMPRESSOR_PATH = File.join(LIBRARY_PATH, 'compressor')
  29. ENCRYPTOR_PATH = File.join(LIBRARY_PATH, 'encryptor')
  30. NOTIFIER_PATH = File.join(LIBRARY_PATH, 'notifier')
  31. SYNCER_PATH = File.join(LIBRARY_PATH, 'syncer')
  32. CONFIGURATION_PATH = File.join(LIBRARY_PATH, 'configuration')
  33. TEMPLATE_PATH = File.expand_path('../../templates', __FILE__)
  34. ##
  35. # Autoload Backup CLI files
  36. module CLI
  37. autoload :Helpers, File.join(CLI_PATH, 'helpers')
  38. autoload :Utility, File.join(CLI_PATH, 'utility')
  39. end
  40. ##
  41. # Autoload Backup storage files
  42. module Storage
  43. autoload :Base, File.join(STORAGE_PATH, 'base')
  44. autoload :Cycler, File.join(STORAGE_PATH, 'cycler')
  45. autoload :S3, File.join(STORAGE_PATH, 's3')
  46. autoload :CloudFiles, File.join(STORAGE_PATH, 'cloudfiles')
  47. autoload :Ninefold, File.join(STORAGE_PATH, 'ninefold')
  48. autoload :Dropbox, File.join(STORAGE_PATH, 'dropbox')
  49. autoload :FTP, File.join(STORAGE_PATH, 'ftp')
  50. autoload :SFTP, File.join(STORAGE_PATH, 'sftp')
  51. autoload :SCP, File.join(STORAGE_PATH, 'scp')
  52. autoload :RSync, File.join(STORAGE_PATH, 'rsync')
  53. autoload :Local, File.join(STORAGE_PATH, 'local')
  54. end
  55. ##
  56. # Autoload Backup syncer files
  57. module Syncer
  58. autoload :Base, File.join(SYNCER_PATH, 'base')
  59. autoload :Cloud, File.join(SYNCER_PATH, 'cloud')
  60. autoload :CloudFiles, File.join(SYNCER_PATH, 'cloud_files')
  61. autoload :S3, File.join(SYNCER_PATH, 's3')
  62. module RSync
  63. autoload :Base, File.join(SYNCER_PATH, 'rsync', 'base')
  64. autoload :Local, File.join(SYNCER_PATH, 'rsync', 'local')
  65. autoload :Push, File.join(SYNCER_PATH, 'rsync', 'push')
  66. autoload :Pull, File.join(SYNCER_PATH, 'rsync', 'pull')
  67. end
  68. end
  69. ##
  70. # Autoload Backup database files
  71. module Database
  72. autoload :Base, File.join(DATABASE_PATH, 'base')
  73. autoload :MySQL, File.join(DATABASE_PATH, 'mysql')
  74. autoload :PostgreSQL, File.join(DATABASE_PATH, 'postgresql')
  75. autoload :MongoDB, File.join(DATABASE_PATH, 'mongodb')
  76. autoload :Redis, File.join(DATABASE_PATH, 'redis')
  77. autoload :Riak, File.join(DATABASE_PATH, 'riak')
  78. end
  79. ##
  80. # Autoload compressor files
  81. module Compressor
  82. autoload :Base, File.join(COMPRESSOR_PATH, 'base')
  83. autoload :Gzip, File.join(COMPRESSOR_PATH, 'gzip')
  84. autoload :Bzip2, File.join(COMPRESSOR_PATH, 'bzip2')
  85. autoload :Pbzip2, File.join(COMPRESSOR_PATH, 'pbzip2')
  86. autoload :Lzma, File.join(COMPRESSOR_PATH, 'lzma')
  87. end
  88. ##
  89. # Autoload encryptor files
  90. module Encryptor
  91. autoload :Base, File.join(ENCRYPTOR_PATH, 'base')
  92. autoload :OpenSSL, File.join(ENCRYPTOR_PATH, 'open_ssl')
  93. autoload :GPG, File.join(ENCRYPTOR_PATH, 'gpg')
  94. end
  95. ##
  96. # Autoload notification files
  97. module Notifier
  98. autoload :Base, File.join(NOTIFIER_PATH, 'base')
  99. autoload :Binder, File.join(NOTIFIER_PATH, 'binder')
  100. autoload :Mail, File.join(NOTIFIER_PATH, 'mail')
  101. autoload :Twitter, File.join(NOTIFIER_PATH, 'twitter')
  102. autoload :Campfire, File.join(NOTIFIER_PATH, 'campfire')
  103. autoload :Presently, File.join(NOTIFIER_PATH, 'presently')
  104. autoload :Prowl, File.join(NOTIFIER_PATH, 'prowl')
  105. autoload :Hipchat, File.join(NOTIFIER_PATH, 'hipchat')
  106. end
  107. ##
  108. # Autoload Backup configuration files
  109. module Configuration
  110. autoload :Base, File.join(CONFIGURATION_PATH, 'base')
  111. autoload :Helpers, File.join(CONFIGURATION_PATH, 'helpers')
  112. module Notifier
  113. autoload :Base, File.join(CONFIGURATION_PATH, 'notifier', 'base')
  114. autoload :Mail, File.join(CONFIGURATION_PATH, 'notifier', 'mail')
  115. autoload :Twitter, File.join(CONFIGURATION_PATH, 'notifier', 'twitter')
  116. autoload :Campfire, File.join(CONFIGURATION_PATH, 'notifier', 'campfire')
  117. autoload :Presently, File.join(CONFIGURATION_PATH, 'notifier', 'presently')
  118. autoload :Prowl, File.join(CONFIGURATION_PATH, 'notifier', 'prowl')
  119. autoload :Hipchat, File.join(CONFIGURATION_PATH, 'notifier', 'hipchat')
  120. end
  121. module Encryptor
  122. autoload :Base, File.join(CONFIGURATION_PATH, 'encryptor', 'base')
  123. autoload :OpenSSL, File.join(CONFIGURATION_PATH, 'encryptor', 'open_ssl')
  124. autoload :GPG, File.join(CONFIGURATION_PATH, 'encryptor', 'gpg')
  125. end
  126. module Compressor
  127. autoload :Base, File.join(CONFIGURATION_PATH, 'compressor', 'base')
  128. autoload :Gzip, File.join(CONFIGURATION_PATH, 'compressor', 'gzip')
  129. autoload :Bzip2, File.join(CONFIGURATION_PATH, 'compressor', 'bzip2')
  130. autoload :Pbzip2, File.join(CONFIGURATION_PATH, 'compressor', 'pbzip2')
  131. autoload :Lzma, File.join(CONFIGURATION_PATH, 'compressor', 'lzma')
  132. end
  133. module Storage
  134. autoload :Base, File.join(CONFIGURATION_PATH, 'storage', 'base')
  135. autoload :S3, File.join(CONFIGURATION_PATH, 'storage', 's3')
  136. autoload :CloudFiles, File.join(CONFIGURATION_PATH, 'storage', 'cloudfiles')
  137. autoload :Ninefold, File.join(CONFIGURATION_PATH, 'storage', 'ninefold')
  138. autoload :Dropbox, File.join(CONFIGURATION_PATH, 'storage', 'dropbox')
  139. autoload :FTP, File.join(CONFIGURATION_PATH, 'storage', 'ftp')
  140. autoload :SFTP, File.join(CONFIGURATION_PATH, 'storage', 'sftp')
  141. autoload :SCP, File.join(CONFIGURATION_PATH, 'storage', 'scp')
  142. autoload :RSync, File.join(CONFIGURATION_PATH, 'storage', 'rsync')
  143. autoload :Local, File.join(CONFIGURATION_PATH, 'storage', 'local')
  144. end
  145. module Syncer
  146. autoload :Base, File.join(CONFIGURATION_PATH, 'syncer', 'base')
  147. autoload :Cloud, File.join(CONFIGURATION_PATH, 'syncer', 'cloud')
  148. autoload :CloudFiles, File.join(CONFIGURATION_PATH, 'syncer', 'cloud_files')
  149. autoload :S3, File.join(CONFIGURATION_PATH, 'syncer', 's3')
  150. module RSync
  151. autoload :Base, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'base')
  152. autoload :Local, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'local')
  153. autoload :Push, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'push')
  154. autoload :Pull, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'pull')
  155. end
  156. end
  157. module Database
  158. autoload :Base, File.join(CONFIGURATION_PATH, 'database', 'base')
  159. autoload :MySQL, File.join(CONFIGURATION_PATH, 'database', 'mysql')
  160. autoload :PostgreSQL, File.join(CONFIGURATION_PATH, 'database', 'postgresql')
  161. autoload :MongoDB, File.join(CONFIGURATION_PATH, 'database', 'mongodb')
  162. autoload :Redis, File.join(CONFIGURATION_PATH, 'database', 'redis')
  163. autoload :Riak, File.join(CONFIGURATION_PATH, 'database', 'riak')
  164. end
  165. end
  166. ##
  167. # Require Backup base files
  168. %w{
  169. model
  170. archive
  171. packager
  172. package
  173. cleaner
  174. splitter
  175. config
  176. binder
  177. template
  178. dependency
  179. logger
  180. version
  181. errors
  182. }.each {|lib| require File.join(LIBRARY_PATH, lib) }
  183. end