From d6706fb45e554ebbd48bb52eb8984e8b7af2cc5d Mon Sep 17 00:00:00 2001 From: Benjamin ter Kuile Date: Mon, 19 Feb 2018 14:37:55 -0300 Subject: [PATCH] Add .xlsx unzip unmodified support since .xlsx files can be a natural zip file --- app/models/dunlop/source_file_model.rb | 3 ++- app/models/dunlop/target_file_model.rb | 5 +++-- app/services/dunlop/file_zip.rb | 6 +++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/models/dunlop/source_file_model.rb b/app/models/dunlop/source_file_model.rb index 3f6406e..d0ddf2a 100644 --- a/app/models/dunlop/source_file_model.rb +++ b/app/models/dunlop/source_file_model.rb @@ -48,7 +48,8 @@ module Dunlop::SourceFileModel def unzip_working_file source_path = if original_file.try(:options).try(:[], :storage) == :s3 - temp = Tempfile.new 'temp' # keep reference for tempfile till unzip completed + filename = original_file.original_filename.to_s + temp = Tempfile.new([filename, File.extname(filename)]) # keep reference for tempfile till unzip completed and keep extension preserved temp.binmode open( original_file.expiring_url ) { |data| temp.write data.read } temp.close diff --git a/app/models/dunlop/target_file_model.rb b/app/models/dunlop/target_file_model.rb index 87c8acc..855b575 100644 --- a/app/models/dunlop/target_file_model.rb +++ b/app/models/dunlop/target_file_model.rb @@ -184,9 +184,10 @@ module Dunlop::TargetFileModel def activate_dunlop! end - def generate!(resource = nil) + # Allow resource as argument. Changed from resource to rsrc to be sure to avoid method naming collision confusion + def generate!(rsrc = nil) new_record = create - new_record.resource = resource if resource.present? + new_record.resource = rsrc if rsrc.present? new_record.execute_generation_process new_record end diff --git a/app/services/dunlop/file_zip.rb b/app/services/dunlop/file_zip.rb index 194d643..4567bbc 100644 --- a/app/services/dunlop/file_zip.rb +++ b/app/services/dunlop/file_zip.rb @@ -3,7 +3,11 @@ module Dunlop::FileZip def self.unzip(zipped_filename, unzipped_filename) case self.mime_type(zipped_filename) when "application/zip" - %x[ unzip -p #{zipped_filename} > #{unzipped_filename} ] + if zipped_filename.end_with?('.xlsx') # .xlsx IS a zipfile + %x[ cp #{zipped_filename} #{unzipped_filename} ] + else + %x[ unzip -p #{zipped_filename} > #{unzipped_filename} ] + end when "application/x-gzip" %x[ gzip -c -d #{zipped_filename} > #{unzipped_filename} ] when "text/plain"