class TotalCompressor::BaseCompressor

Constants

FILE
HASH_TYPE
HOME
MSG
PROJECT
TEMP_FOLDER
TEST
TEST_FILE
TEST_FOLDER
TEST_FOLDER_UNCOMPRESSED
TEXT_FILE
TYPE

Public Instance Methods

back_to_last_dir() click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 56
def back_to_last_dir
  chdir(@current_dir)
end
chdir(folder) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 64
def chdir(folder)
  if File.directory?(folder)
    Dir.chdir(folder)
    true
  else
    false
  end
end
compress(path, format) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 121
def compress(path, format)
  save_current_dir
  result = {
    :success => false
  }
  folder = get_folder(path)
  return result unless chdir(folder)
  begin
    file = get_file(path)
    archive = file + ".#{format}"
    if file
      message = if File.directory?(path)
        %x[#{TYPE[format]['tool']} #{TYPE[format]['compress_folder']} #{archive} #{file}]
      else
        %x[#{TYPE[format]['tool']} #{TYPE[format]['compress_file']} #{archive} #{file}]
      end
      if message && message.match(TYPE[format]['success_message'])
        result[:success] = true
        result[:file] = "#{folder}/#{archive}"
      else
        result[:error] = message
      end
    else
      result[:error] = BaseCompressor::MSG[:incorrect]
    end
  rescue
    result[:error] = BaseCompressor::MSG[:exception]
  ensure
    back_to_last_dir
  end
  return_result(result)
end
decompress(path, format) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 154
def decompress(path, format)
  save_current_dir
  result = {
      :success => false,
      :files => []
  }
  folder = get_folder(path)
  Dir.chdir(folder)
  begin
    file = get_file(path)
    previous_entries = Dir.entries(Dir.pwd)
    %x[#{TYPE[format]['tool']} #{TYPE[format]['decompress']} #{file}]
    new_entries = Dir.entries(Dir.pwd)
    uncompressed_entries = new_entries - previous_entries
    uncompressed_entries.each{|entry| result[:files] << "#{folder}/#{entry}" }
    result[:success] = true
  rescue
    result[:error] = BaseCompressor::MSG[:exception]
  ensure
    back_to_last_dir
  end
  return_result(result)
end
get_file(path) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 73
def get_file(path)
  file = path.split('/')[-1]
  file ? file : path
end
get_folder(path) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 60
def get_folder(path)
  path.split('/')[0..-2].join('/')
end
get_format() click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 178
def get_format
  self.class.to_s.split('::').last.downcase[1..-1]
end
prepare_test_files() click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 78
def prepare_test_files
  FileUtils.rm_rf(TEMP_FOLDER, secure: true)
  Dir.mkdir(TEMP_FOLDER)
  Dir.mkdir(TEST_FOLDER)
  Dir.mkdir(TEST_FOLDER_UNCOMPRESSED)
  FileUtils.cp("#{FILE}", TEMP_FOLDER)
  FileUtils.cp("#{FILE}", TEST_FOLDER)
  chdir(HOME)
end
return_result(result) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 182
def return_result(result)
  ap result unless result[:success]
  result
end
save_current_dir() click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 52
def save_current_dir
  @current_dir = Dir.pwd
end
skip_test?(format, test_set) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 117
def skip_test?(format, test_set)
  true if File.directory?(test_set) && format == 'gzip'
end
test(format) click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 93
def test(format)
  test_sets = [
    TotalCompressor::BaseCompressor::TEST_FILE,
    TotalCompressor::BaseCompressor::TEST_FOLDER
  ]
  result = {
    :success => true
  }
  prepare_test_files
  test_sets.each do |test_set|
    next if skip_test?(format, test_set)
    res = eval("TotalCompressor::T#{format.capitalize}.new.compress(\'#{test_set}\')")
    if res[:success]
      FileUtils.cp("#{res[:file]}", TEST_FOLDER_UNCOMPRESSED)
      res = eval("TotalCompressor::T#{format.capitalize}.new.decompress(\'#{TEST_FOLDER_UNCOMPRESSED}/#{res[:file].split('/').last}\')")
      result[:success] = false unless res[:success]
    else
      result[:success] = false
    end
  end
  utilize_test_files
  result[:success] ? 'Success' : 'Failure'
end
utilize_test_files() click to toggle source
# File lib/total_compressor/compressors/base_compressor.rb, line 88
def utilize_test_files
  FileUtils.rm_rf("#{TEMP_FOLDER}", secure: true)
  chdir(PROJECT)
end