Commit 6975b69
Changed files (4)
app
models
spec
models
app/models/csv/import.rb
@@ -14,8 +14,11 @@ class Csv::Import
def import_from(directory)
ActiveRecord::Base.transaction do
+ previous = nil
::CSV.foreach(database_file(directory)).drop(1).each do |row|
+ next if previous.present? && row == previous
import(row)
+ previous = row
end
end
end
@@ -32,11 +35,14 @@ class Csv::Import
workout.exercises.each do |exercise|
exercise_row = workout_row.find(exercise)
next if exercise_row.nil?
- training_session.train(
- exercise,
- exercise_row.weight_lb,
- exercise_row.sets
- )
+ exercise_row.sets.compact.each_with_index do |completed_reps, index|
+ training_session.train(
+ exercise,
+ exercise_row.weight_lb,
+ repetitions: completed_reps,
+ set: index
+ )
+ end
end
end
app/models/training_session.rb
@@ -10,7 +10,7 @@ class TrainingSession < ActiveRecord::Base
recommendation = workout.exercise_workouts.find_by(exercise: exercise)
session = exercise_sessions.find_or_create_by(exercise_workout: recommendation)
- exercise_set = set.present? ? session.sets.at(set-1) : session.sets.build
+ exercise_set = set.present? && session.sets.at(set).present? ? session.sets.at(set) : session.sets.build
exercise_set.update!(
actual_repetitions: repetitions,
target_repetitions: recommendation.repetitions,
spec/models/csv/import_spec.rb
@@ -60,12 +60,7 @@ describe Csv::Import do
training_session = user.training_sessions.order(:occurred_at).first
squat_session = training_session.progress_for(squat)
- expect(squat_session.target_weight).to eql(45.0)
- expect(squat_session.actual_sets[0]).to eql("5")
- expect(squat_session.actual_sets[1]).to eql("5")
- expect(squat_session.actual_sets[2]).to eql("5")
- expect(squat_session.actual_sets[3]).to eql("5")
- expect(squat_session.actual_sets[4]).to eql("5")
+ expect(squat_session.to_sets).to eql([5, 5, 5, 5, 5])
end
it "imports the completed bench exercise" do
@@ -73,12 +68,8 @@ describe Csv::Import do
training_session = user.training_sessions.order(:occurred_at).first
bench_session = training_session.progress_for(bench_press)
- expect(bench_session.target_weight).to eql(65.0)
- expect(bench_session.actual_sets[0]).to eql("5")
- expect(bench_session.actual_sets[1]).to eql("5")
- expect(bench_session.actual_sets[2]).to eql("5")
- expect(bench_session.actual_sets[3]).to eql("5")
- expect(bench_session.actual_sets[4]).to eql("5")
+ expect(bench_session.sets.count).to eql(5)
+ expect(bench_session.to_sets).to eql([5, 5, 5, 5, 5])
end
it "imports the completed barbell row exercise" do
@@ -86,12 +77,17 @@ describe Csv::Import do
training_session = user.training_sessions.order(:occurred_at).first
row_session = training_session.progress_for(barbell_row)
- expect(row_session.target_weight).to eql(65.0)
- expect(row_session.actual_sets[0]).to eql("5")
- expect(row_session.actual_sets[1]).to eql("5")
- expect(row_session.actual_sets[2]).to eql("5")
- expect(row_session.actual_sets[3]).to eql("5")
- expect(row_session.actual_sets[4]).to eql("5")
+ expect(row_session.to_sets).to eql([5, 5, 5, 5, 5])
+ expect(row_session.sets.at(0).target_weight).to eql(65.0)
+ expect(row_session.sets.at(0).actual_repetitions).to eql(5)
+ expect(row_session.sets.at(1).target_weight).to eql(65.0)
+ expect(row_session.sets.at(1).actual_repetitions).to eql(5)
+ expect(row_session.sets.at(2).target_weight).to eql(65.0)
+ expect(row_session.sets.at(2).actual_repetitions).to eql(5)
+ expect(row_session.sets.at(3).target_weight).to eql(65.0)
+ expect(row_session.sets.at(3).actual_repetitions).to eql(5)
+ expect(row_session.sets.at(4).target_weight).to eql(65.0)
+ expect(row_session.sets.at(4).actual_repetitions).to eql(5)
end
it "excludes items that have already been imported" do
@@ -109,10 +105,7 @@ describe Csv::Import do
training_session = user.training_sessions.first
session = training_session.progress_for(dips)
expect(session).to_not be_nil
- expect(session.target_weight).to eql(12.5)
- expect(session.actual_sets[0]).to eql("5")
- expect(session.actual_sets[1]).to eql("5")
- expect(session.actual_sets[2]).to eql("5")
+ expect(session.to_sets).to eql([5, 5, 5])
end
it "imports chinups" do
@@ -122,10 +115,16 @@ describe Csv::Import do
training_session = user.training_sessions.first
session = training_session.progress_for(chinups)
expect(session).to_not be_nil
- expect(session.target_weight).to eql(0.0)
- expect(session.actual_sets[0]).to eql("5")
- expect(session.actual_sets[1]).to eql("3")
- expect(session.actual_sets[2]).to eql("2")
+ expect(session.to_sets).to eql([5, 3, 2])
+ expect(session.sets.at(0).target_weight).to eql(0.0)
+ expect(session.sets.at(0).target_repetitions).to eql(5)
+ expect(session.sets.at(0).actual_repetitions).to eql(5)
+ expect(session.sets.at(1).target_weight).to eql(0.0)
+ expect(session.sets.at(1).target_repetitions).to eql(5)
+ expect(session.sets.at(1).actual_repetitions).to eql(3)
+ expect(session.sets.at(2).target_weight).to eql(0.0)
+ expect(session.sets.at(2).target_repetitions).to eql(5)
+ expect(session.sets.at(2).actual_repetitions).to eql(2)
end
end
end
spec/models/training_session_spec.rb
@@ -5,7 +5,6 @@ describe TrainingSession, type: :model do
describe "#train" do
let(:workout) { subject.workout }
- #let(:sets) { [5, 5, 5, 5, 5] }
let(:target_weight) { 200 }
let(:squat) { create(:exercise) }
@@ -48,7 +47,7 @@ describe TrainingSession, type: :model do
subject.train(squat, target_weight, repetitions: 5)
new_weight = target_weight + 10
- result = subject.train(squat, new_weight, repetitions: 3, set: 2)
+ result = subject.train(squat, new_weight, repetitions: 3, set: 1)
expect(result).to be_persisted
expect(result.exercise).to eql(squat)