Commit b6b7746
Changed files (3)
app
spec
models
app/models/android_import.rb
@@ -7,11 +7,50 @@ class AndroidImport
end
def import(row)
- user.training_sessions.create_workout_from(map_from(row), program)
+ create_workout_from(map_from(row), program)
end
private
+ # refactor this to use the new api to add a workout
+ # training_session = user.begin(workout_a)
+ # training_session.train(squat, 200, [5,5,5,5,5])
+ def create_workout_from(workout_row, program)
+ ActiveRecord::Base.transaction do
+ workout = program.workouts.find_by(name: workout_row.workout)
+ matching_workouts = user.training_sessions.where(occurred_at: workout_row.date)
+ if matching_workouts.any?
+ session = matching_workouts.first
+ else
+ session = user.training_sessions.create!(
+ workout: workout,
+ occurred_at: workout_row.date,
+ body_weight: workout_row.body_weight.to_f
+ )
+ end
+
+ session.exercise_sessions.destroy_all
+ workout.exercise_workouts.each_with_index do |exercise_workout, index|
+ exercise_row = workout_row.exercises[index]
+ sets = []
+ 1.upto(exercise_workout.sets).each do |n|
+ if exercise_row["set#{n}"].to_i > 0
+ sets << exercise_row["set#{n}"]
+ else
+ sets << 0
+ end
+ end
+
+ session.exercise_sessions.create!(
+ target_weight: exercise_row["warmup"]["targetWeight"],
+ exercise_workout: exercise_workout,
+ sets: sets
+ )
+ end
+ session
+ end
+ end
+
def map_from(row)
WorkoutRow.new(
id: row[0],
app/models/training_session.rb
@@ -13,43 +13,4 @@ class TrainingSession < ActiveRecord::Base
sets: completed_sets
)
end
-
- # refactor this to use the new api to add a workout
- # training_session = user.begin(workout_a)
- # training_session.train(squat, 200, [5,5,5,5,5])
- def self.create_workout_from(workout_row, program)
- transaction do
- workout = program.workouts.find_by(name: workout_row.workout)
- matching_workouts = where(occurred_at: workout_row.date)
- if matching_workouts.any?
- session = matching_workouts.first
- else
- session = create!(
- workout: workout,
- occurred_at: workout_row.date,
- body_weight: workout_row.body_weight.to_f
- )
- end
-
- session.exercise_sessions.destroy_all
- workout.exercise_workouts.each_with_index do |exercise_workout, index|
- exercise_row = workout_row.exercises[index]
- sets = []
- 1.upto(exercise_workout.sets).each do |n|
- if exercise_row["set#{n}"].to_i > 0
- sets << exercise_row["set#{n}"]
- else
- sets << 0
- end
- end
-
- session.exercise_sessions.create!(
- target_weight: exercise_row["warmup"]["targetWeight"],
- exercise_workout: exercise_workout,
- sets: sets
- )
- end
- session
- end
- end
end
spec/models/training_session_spec.rb
@@ -1,91 +1,6 @@
require "rails_helper"
describe TrainingSession, type: :model do
- describe ".create_workout_from" do
- include_context "stronglifts_program"
- let(:user) { create(:user) }
-
- context "when extracting from an android backup" do
- let(:row) do
- [
- 31,
- "2015-05-13 06:10:21",
- "A",
- "{\"weight\":{\"lastWeightKg\":90,\"lastWeightLb\":200},\"success\":false,\"set1\":-1,\"set2\":-1,\"set3\":-1,\"set4\":-1,\"set5\":-1,\"messageDismissed\":false,\"workoutType\":0,\"warmup\":{\"exerciseType\":1,\"targetWeight\":200,\"warmupSets\":[{\"completed\":false},{\"completed\":false},{\"completed\":false},{\"completed\":false},{\"completed\":false}]}}",
- "{\"weight\":{\"lastWeightKg\":65,\"lastWeightLb\":145},\"success\":true,\"set1\":5,\"set2\":5,\"set3\":5,\"set4\":5,\"set5\":5,\"messageDismissed\":false,\"workoutType\":0,\"warmup\":{\"exerciseType\":2,\"targetWeight\":145,\"warmupSets\":[{\"completed\":true},{\"completed\":true},{\"completed\":true},{\"completed\":true}]}}",
- "{\"weight\":{\"lastWeightKg\":60,\"lastWeightLb\":130},\"success\":false,\"set1\":5,\"set2\":4,\"set3\":4,\"set4\":4,\"set5\":4,\"messageDismissed\":false,\"workoutType\":0,\"warmup\":{\"exerciseType\":3,\"targetWeight\":130,\"warmupSets\":[{\"completed\":true}]}}",
- "",
- "209LB",
- "{\"set1\":8,\"set2\":4,\"set3\":4,\"messageDismissed\":false,\"exercise\":0,\"weight\":{\"lastWeightKg\":0,\"lastWeightLb\":0}}",
- 0
- ]
- end
-
- let(:workout_row) do
- WorkoutRow.new(
- id: row[0],
- date: DateTime.parse(row[1]),
- workout: row[2],
- exercise_1: JSON.parse(row[3]),
- exercise_2: JSON.parse(row[4]),
- exercise_3: JSON.parse(row[5]),
- note: row[6],
- body_weight: row[7],
- arm_work: JSON.parse(row[8])
- )
- end
-
- it "creates a new workout" do
- training_session = user.training_sessions.
- create_workout_from(workout_row, program)
-
- expect(training_session).to be_persisted
- expect(training_session.occurred_at).to eql(workout_row.date)
- expect(training_session.workout).to eql(workout_a)
- expect(training_session.body_weight).to eql(209.0)
- expect(training_session.exercise_sessions.count).to eql(3)
- expect(
- training_session.exercise_sessions.map { |x| x.exercise.name }
- ).to match_array(["Squat", "Bench Press", "Barbell Row"])
-
- squat_session = training_session.exercise_sessions.
- find_by(exercise_workout: squat_workout)
- expect(squat_session.target_weight).to eql(200.0)
- expect(squat_session.sets[0]).to eql("0")
- expect(squat_session.sets[1]).to eql("0")
- expect(squat_session.sets[2]).to eql("0")
- expect(squat_session.sets[3]).to eql("0")
- expect(squat_session.sets[4]).to eql("0")
-
- bench_session = training_session.exercise_sessions.
- find_by(exercise_workout: bench_workout)
- expect(bench_session.target_weight).to eql(145.0)
- expect(bench_session.sets[0]).to eql("5")
- expect(bench_session.sets[1]).to eql("5")
- expect(bench_session.sets[2]).to eql("5")
- expect(bench_session.sets[3]).to eql("5")
- expect(bench_session.sets[4]).to eql("5")
-
- row_session = training_session.exercise_sessions.
- find_by(exercise_workout: row_workout)
- expect(row_session.target_weight).to eql(130.0)
- expect(row_session.sets[0]).to eql("5")
- expect(row_session.sets[1]).to eql("4")
- expect(row_session.sets[2]).to eql("4")
- expect(row_session.sets[3]).to eql("4")
- expect(row_session.sets[4]).to eql("4")
- end
-
- it "excludes items that have already been imported" do
- training_session = user.training_sessions.
- create_workout_from(workout_row, program)
- expect(
- user.training_sessions.create_workout_from(workout_row, program)
- ).to eql(training_session)
- end
- end
- end
-
describe "#train" do
subject { create(:training_session) }
let(:workout) { subject.workout }