Skip to content

Commit

Permalink
Added functionality to create tree structures
Browse files Browse the repository at this point in the history
  • Loading branch information
L33tH4x0r committed Feb 20, 2020
1 parent 65921be commit 43a3273
Showing 1 changed file with 32 additions and 9 deletions.
41 changes: 32 additions & 9 deletions lib/active_storage/send_zip_helper.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

require 'rails'
require 'zip'
require 'tempfile'
Expand All @@ -17,14 +19,7 @@ def self.save_files_on_server(files)
temp_folder = Dir.mktmpdir 'active_storage-send_zip'

if files.is_a? Hash
filepaths = []

files.each do |subfolder, filesHash|
filesHash = [filesHash] unless filesHash.is_a? Array
filesHash.each do |f|
filepaths << save_file_on_server(f, temp_folder, subfolder: subfolder.to_s)
end
end
filepaths = construct_with_hash(files, temp_folder)
elsif files.respond_to? :each
files.each { |file| save_file_on_server(file, temp_folder) }
else
Expand All @@ -34,6 +29,34 @@ def self.save_files_on_server(files)
temp_folder
end

# Parses hash to build out directories where folders are key names
#
# @param files [ActiveStorage::Attached::One|ActiveStorage::Attached::Many|Array|Hash] file(s) to save
# @return [String] folder path of saved files
def self.construct_with_hash(files, temp_folder)
filepaths = []

files.each do |subfolder, filesHash|
filesHash = [filesHash] unless filesHash.is_a? Array

filesHash.each do |f|
# Build directory strucutre recursively for hashes
if f.is_a? Hash
# Build folder for hash entry
folder = File.join(temp_folder, subfolder)
Dir.mkdir(folder) unless Dir.exist?(folder)

filepaths += construct_with_hash(f, folder)
# Save attachement
else
filepaths << save_file_on_server(f, temp_folder, subfolder: subfolder)
end
end
end

filepaths
end

# Save the given file on the server
#
# @param file [ActiveStorage::Attached] files to save
Expand Down Expand Up @@ -84,7 +107,7 @@ def self.create_temporary_zip_file(folderpath)
end
end

return File.read(temp_file.path)
File.read(temp_file.path)
ensure
# close all ressources & remove temporary files
# temp_file.close
Expand Down

0 comments on commit 43a3273

Please sign in to comment.