class Morse::MysqlDump

Constants

ARCHIVE_FILE_REGEX
DUMP_DIR
DUMP_FILE_REGEX

Attributes

archive_file[R]
dump_file[R]

Public Class Methods

new() click to toggle source
# File lib/morse_mysql_dump.rb, line 23
def initialize
  return self if load_db_config and prepare_dump_paths
  nil
end

Public Instance Methods

clean!() click to toggle source
# File lib/morse_mysql_dump.rb, line 12
def clean!
  FileUtils.rm_rf @temp_dir
  true
rescue
  false
end
dump!() click to toggle source
# File lib/morse_mysql_dump.rb, line 36
def dump!
  FileUtils.mkdir_p @temp_dir
  system dump_command
  if File.exists? @dump_file
    # temporary changes pwd
    Dir.chdir(@temp_dir) { |path| system tar_command }
    return File.exists?(@archive_file) ? @archive_file : nil
  end
end
fake_rails_env() click to toggle source
# File lib/morse_mysql_dump.rb, line 19
def fake_rails_env
  { database: '', username: '', password: '' }
end
rails_env() click to toggle source
# File lib/morse_mysql_dump.rb, line 32
def rails_env
  rails_env ||= defined?(Rails) ? Rails.env : fake_rails_env
end
rails_root() click to toggle source
# File lib/morse_mysql_dump.rb, line 28
def rails_root
  defined?(Rails) ? Rails.root : '/tmp'
end

Private Instance Methods

dump_command() click to toggle source
# File lib/morse_mysql_dump.rb, line 74
def dump_command
  cmd = "mysqldump #{@mysql_database}"
  cmd << " -u #{@mysql_user}"
  cmd << " -p#{@mysql_password}" if @mysql_password.present?
  cmd << " > #{@dump_file}"
  return cmd
end
load_db_config() click to toggle source
# File lib/morse_mysql_dump.rb, line 49
def load_db_config
  db_conf_file = File.join(rails_root, "/config/database.yml")
  @db_config = YAML::load(IO.read(db_conf_file))
  @mysql_database = @db_config[rails_env]["database"]
  @mysql_user = @db_config[rails_env]["username"]
  @mysql_password = @db_config[rails_env]["password"]
  true
rescue
  false
end
prepare_dump_paths() click to toggle source
# File lib/morse_mysql_dump.rb, line 60
def prepare_dump_paths
  time_str = Time.now.strftime('%d.%m.%y_%H.%M.%S')
  @temp_dir = File.join(rails_root, DUMP_DIR)

  @dump_file_name = "dump_#{time_str}.sql"
  @dump_file = File.join(@temp_dir, @dump_file_name)

  @archive_file_name = "dump_#{time_str}.tar.gz"
  @archive_file = File.join(@temp_dir, @archive_file_name)
  true
rescue
  false
end
tar_command() click to toggle source
# File lib/morse_mysql_dump.rb, line 82
def tar_command
  "tar czf #{@archive_file_name} #{@dump_file_name}"
end