52 lines
1.7 KiB
Ruby
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
|