Commit 7ca85bd

mo khan <mo@mokhan.ca>
2015-06-13 23:07:30
use rubyzip to unzip file and continue if successful.
1 parent 13e9724
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)