Files
dunlop-core/app/services/dunlop/file_zip.rb
T

52 lines
1.7 KiB
Ruby

module Dunlop::FileZip
def self.unzip(zipped_filename, unzipped_filename)
case self.mime_type(zipped_filename)
when "application/zip"
if zipped_filename.to_s.end_with?('.xlsx') # .xlsx IS a zipfile # .to_s is because it can be a Pathname
%x[ cp #{Shellwords.escape(zipped_filename)} #{Shellwords.escape(unzipped_filename)} ]
else
%x[ unzip -p #{Shellwords.escape(zipped_filename)} > #{Shellwords.escape(unzipped_filename)} ]
end
when "application/x-gzip"
%x[ gzip -c -d #{Shellwords.escape(zipped_filename)} > #{Shellwords.escape(unzipped_filename)} ]
when "text/plain"
FileUtils.cp(zipped_filename, unzipped_filename)
else
raise "unsupported mime-type"
end
end
def self.unzip_to_directory_and_junk_paths(zipped_filename, destination_directory)
case self.mime_type(zipped_filename)
when "application/zip"
%x[ unzip -j #{Shellwords.escape(zipped_filename)} -d #{Shellwords.escape(destination_directory)} ]
else
raise "unsupported mime-type"
end
end
def self.mime_type(filename)
command = if /Darwin/i =~ %x[uname]
"file -bI #{Shellwords.escape(filename)}"
else
"file -bi #{Shellwords.escape(filename)}"
end
case %x[#{command}]
when /gzip/i
"application/x-gzip"
when /zip/i
"application/zip"
else
"text/plain"
end
end
def self.gzip(unzipped_filename, gzipped_filename)
return if mime_type(unzipped_filename) == "application/x-gzip" #TODO: maybe the application using is is expecti a copy at the target location in this case?
%x[cat #{Shellwords.escape(unzipped_filename)} | gzip -c > #{Shellwords.escape(gzipped_filename)}]
end
end