master
1class UploadStrongliftsBackupJob < ApplicationJob
2 queue_as :default
3
4 def perform(user, backup_file, program)
5 tmp_dir do |dir|
6 if extract!(backup_file, dir)
7 importer_for(dir, user, program).import_from(dir)
8 end
9 end
10 end
11
12 private
13
14 def tmp_dir
15 Dir.mktmpdir do |dir|
16 yield dir
17 end
18 end
19
20 def importer_for(directory, user, program)
21 [
22 Csv::Import.new(user, program),
23 UnknownFile.new
24 ].detect { |x| x.can_parse?(directory) }
25 end
26
27 def extract!(backup_file, dir)
28 # `unzip #{backup_file} -d #{dir}`
29 extension = File.extname(backup_file)
30 if extension.eql?(".stronglifts")
31 Zip::File.open(backup_file) do |zip_file|
32 zip_file.each do |entry|
33 entry.extract(File.join(dir, entry.name))
34 end
35 end
36 else
37 `cp #{backup_file} #{dir}`
38 end
39 true
40 rescue StandardError => error
41 Rails.logger.error("#{error.message} #{error.backtrace.join(' ')}")
42 false
43 end
44
45 class UnknownFile
46 def can_parse?(_directory)
47 true
48 end
49
50 def import_from(_directory)
51 end
52 end
53end