Commit 6a62895

mo khan <mo@mokhan.ca>
2015-05-31 23:45:49
extract 5 of the 7 types of exercises from the ios backup.
1 parent 1323871
Changed files (3)
app/models/ios/import.rb
@@ -13,10 +13,47 @@ class Ios::Import
   def import_from(directory)
     database(directory) do |db|
       db.execute("SELECT * FROM ZBASEWORKOUT") do |row|
-        puts row.inspect
         workout_name = row[5] == 1 ? "A" : "B"
         workout = program.workouts.find_by(name: workout_name)
-        user.begin_workout(workout, DateTime.parse(row[8]), row[7].to_f)
+        training_session = user.begin_workout(workout, DateTime.parse(row[8]), row[7].to_f)
+
+        workout_id = row[0]
+        Rails.logger.debug [ "workout_id", workout_id].inspect
+        db.execute("SELECT * FROM ZEXERCISESETS WHERE ZWORKOUT = '#{workout_id}';") do |exercise_set_row|
+          Rails.logger.debug ["exercise set", exercise_set_row].inspect
+
+          exercise = nil
+          target_weight = nil
+
+          exercise_id = exercise_set_row[4]
+          Rails.logger.debug ["exercise id", exercise_id].inspect
+          db.execute("SELECT * FROM ZEXERCISE WHERE ZTYPE = '#{exercise_id}';") do |exercise_row|
+            Rails.logger.debug ["exercise row", exercise_row].inspect
+            exercise = exercise_from(exercise_row)
+          end
+
+          weight_id = exercise_set_row[13]
+          Rails.logger.debug ["weight id", weight_id].inspect
+          db.execute("SELECT * FROM ZWEIGHT where Z_PK = '#{weight_id}'") do |weight_row|
+            Rails.logger.debug ["weight row", weight_row].inspect
+            target_weight = weight_row[6]
+          end
+
+          sets = [
+            row[6],
+            row[7],
+            row[8],
+            row[9] == -3 ? nil : row[9],
+            row[10] == -3 ? nil : row[10]
+          ]
+          if exercise
+            training_session.train(
+              exercise,
+              target_weight,
+              sets
+            )
+          end
+        end
       end
     end
   end
@@ -30,4 +67,16 @@ class Ios::Import
   def database(directory)
     yield SQLite3::Database.new(database_file(directory))
   end
+
+  def exercise_from(exercise_row)
+    mapping = {
+      1 => "Squat",
+      2 => "Bench Press",
+      3 => "Barbell Row",
+      4 => "Overhead Press",
+      5 => "Deadlift",
+    }
+
+    program.exercises.find_by(name: mapping[exercise_row[4]])
+  end
 end
spec/jobs/upload_stronglifts_backup_job_spec.rb
@@ -22,10 +22,10 @@ describe UploadStrongliftsBackupJob, type: :job do
         Rails.root.join("spec", "fixtures", "backup.ios.stronglifts").to_s
       end
 
-      xit "adds each workout to the list of training sessions for the user" do
+      it "adds each workout to the list of training sessions for the user" do
         subject.perform(user, backup_file, program)
 
-        expect(user.training_sessions.count).to eql(31)
+        expect(user.training_sessions.count).to eql(9)
       end
     end
   end
spec/models/ios/import_spec.rb
@@ -41,5 +41,10 @@ describe Ios::Import do
       subject.import_from(directory)
       expect(user.training_sessions.count).to eql(9)
     end
+
+    it "imports each training session" do
+      subject.import_from(directory)
+      expect(user.training_sessions.first.exercise_sessions.count).to eql(3)
+    end
   end
 end