Merge pull request #1358 from mz3944/mz-SCI-2646

Removal of the temporary files for export all [SCI-2646]
This commit is contained in:
mz3944 2018-11-13 20:31:04 +01:00 committed by GitHub
commit 056efe170b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 22 deletions

View file

@ -18,19 +18,20 @@ class TeamZipExport < ZipExport
def generate_exportable_zip(user, data, type, options = {})
@user = user
FileUtils.mkdir_p(File.join(Rails.root, 'tmp/zip-ready'))
dir_to_zip = FileUtils.mkdir_p(
zip_input_dir = FileUtils.mkdir_p(
File.join(Rails.root, "tmp/temp-zip-#{Time.now.to_i}")
).first
output_file = File.new(
File.join(Rails.root,
"tmp/zip-ready/projects-export-#{Time.now.to_i}.zip"),
zip_dir = FileUtils.mkdir_p(File.join(Rails.root, 'tmp/zip-ready')).first
zip_file = File.new(
File.join(zip_dir, "projects-export-#{Time.now.to_i}.zip"),
'w+'
)
fill_content(dir_to_zip, data, type, options)
zip!(dir_to_zip, output_file.path)
self.zip_file = File.open(output_file)
fill_content(zip_input_dir, data, type, options)
zip!(zip_input_dir, zip_file)
self.zip_file = File.open(zip_file)
generate_notification(user) if save
ensure
FileUtils.rm_rf([zip_input_dir, zip_file], secure: true)
end
handle_asynchronously :generate_exportable_zip
@ -128,6 +129,9 @@ class TeamZipExport < ZipExport
file = FileUtils.touch("#{root}/#{pdf_name}").first
File.open(file, 'wb') { |f| f.write(project_report_pdf) }
end
# Change current dir outside tmp_dir, since tmp_dir will be deleted
Dir.chdir(File.join(Rails.root, 'tmp'))
end
def generate_notification(user)
@ -252,7 +256,7 @@ class TeamZipExport < ZipExport
# Don't zip current/above directory
files.delete_if { |el| ['.', '..'].include?(el) }
Zip::File.open(output_file, Zip::File::CREATE) do |zipfile|
Zip::File.open(output_file.path, Zip::File::CREATE) do |zipfile|
write_entries(input_dir, files, '', zipfile)
end
end

View file

@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'zip'
require 'fileutils'
require 'csv'
@ -47,18 +49,20 @@ class ZipExport < ApplicationRecord
end
def generate_exportable_zip(user, data, type, options = {})
FileUtils.mkdir_p(File.join(Rails.root, 'tmp/zip-ready'))
dir_to_zip = FileUtils.mkdir_p(
zip_input_dir = FileUtils.mkdir_p(
File.join(Rails.root, "tmp/temp-zip-#{Time.now.to_i}")
).first
output_file = File.new(
File.join(Rails.root, "tmp/zip-ready/export-#{Time.now.to_i}.zip"),
zip_dir = FileUtils.mkdir_p(File.join(Rails.root, 'tmp/zip-ready')).first
zip_file = File.new(
File.join(zip_dir, "export-#{Time.now.to_i}.zip"),
'w+'
)
fill_content(dir_to_zip, data, type, options)
zip!(dir_to_zip, output_file.path)
self.zip_file = File.open(output_file)
fill_content(zip_input_dir, data, type, options)
zip!(zip_input_dir, zip_file)
self.zip_file = File.open(zip_file)
generate_notification(user) if save
ensure
FileUtils.rm_rf([zip_input_dir, zip_file], secure: true)
end
handle_asynchronously :generate_exportable_zip
@ -96,7 +100,7 @@ class ZipExport < ApplicationRecord
def zip!(input_dir, output_file)
files = Dir.entries(input_dir)
files.delete_if { |el| el == '..' || el == '.' }
Zip::File.open(output_file, Zip::File::CREATE) do |zipfile|
Zip::File.open(output_file.path, Zip::File::CREATE) do |zipfile|
files.each do |filename|
zipfile.add(filename, input_dir + '/' + filename)
end

View file

@ -1,4 +1,7 @@
# frozen_string_literal: true
require 'csv'
module RepositoryZipExport
def self.generate_zip(params, repository, current_user)
# Fetch rows in the same order as in the currently viewed datatable

View file

@ -65,12 +65,15 @@ describe RepositoryZipExport, type: :background_job do
it 'generates a zip with csv file with exported rows' do
RepositoryZipExport.generate_zip(params, repository, user)
zip = ZipExport.first.zip_file_file_name
.gsub('export-', '')
.gsub('.zip', '')
csv_path = Rails.root.join('tmp', "temp-zip-#{zip}", 'export.csv').to_s
csv_zip_file = ZipExport.first.zip_file
parsed_csv_content = Zip::File.open(csv_zip_file.path) do |zip_file|
csv_file = zip_file.glob('*.csv').first
csv_content = csv_file.get_input_stream.read
CSV.parse(csv_content, headers: true)
end
index = 0
CSV.foreach(csv_path, headers: true) do |row|
parsed_csv_content.each do |row|
row_hash = row.to_h
expect(row_hash.fetch('Sample group')).to eq 'item one'
expect(row_hash.fetch('Custom items')).to eq 'custum column value'