Commit 7ca85bd
Changed files (3)
app/jobs/upload_stronglifts_backup_job.rb
@@ -3,8 +3,7 @@ class UploadStrongliftsBackupJob < ActiveJob::Base
def perform(user, backup_file, program)
tmp_dir do |dir|
- `unzip #{backup_file} -d #{dir}`
- ActiveRecord::Base.transaction do
+ if extract!(backup_file, dir)
importer_for(dir, user, program).import_from(dir)
end
end
@@ -26,6 +25,19 @@ class UploadStrongliftsBackupJob < ActiveJob::Base
].detect { |x| x.can_parse?(directory) }
end
+ def extract!(backup_file, dir)
+ #`unzip #{backup_file} -d #{dir}`
+ Zip::File.open(backup_file) do |zip_file|
+ zip_file.each do |entry|
+ entry.extract(File.join(dir, entry.name))
+ end
+ end
+ true
+ rescue StandardError => error
+ Rails.logger.error("#{error.message} #{error.backtrace.join(' ')}")
+ false
+ end
+
class UnknownFile
def can_parse?(directory)
true
Gemfile
@@ -38,6 +38,7 @@ gem 'chartkick'
gem 'groupdate'
gem 'dalli'
gem 'sequel'
+gem 'rubyzip', require: "zip"
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
Gemfile.lock
@@ -250,6 +250,7 @@ GEM
rspec-support (~> 3.2.0)
rspec-support (3.2.2)
ruby-graphviz (1.2.2)
+ rubyzip (1.1.7)
sass (3.4.14)
sass-rails (5.0.3)
railties (>= 4.0.0, < 5.0)
@@ -365,6 +366,7 @@ DEPENDENCIES
rails-erd
rails_12factor
rspec-rails
+ rubyzip
sass-rails (~> 5.0)
scale
sdoc (~> 0.4)