Commit 107c8db
Changed files (8)
app
models
views
profiles
spec
models
support
app/models/csv/import.rb
@@ -20,12 +20,6 @@ class Csv::Import
end
end
- private
-
- def database_file(dir)
- Dir.glob("#{dir}/spreadsheet-stronglifts*csv*").first
- end
-
def import(row)
workout_row = Csv::Workout.map_from(row, user)
@@ -37,7 +31,15 @@ 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)
end
end
+
+ private
+
+ def database_file(dir)
+ Dir.glob("#{dir}/spreadsheet-stronglifts*csv*").first
+ end
+
end
app/models/csv/workout.rb
@@ -35,6 +35,17 @@ class Csv::Workout
sets: slice[3..(slice.size)],
)
end
+
+ # import additional exercises
+ row[(5 + (3 * 8))..(row.size)].each_slice(6) do |slice|
+ next if slice[0].nil?
+ workout.exercises << Csv::Exercise.new(
+ name: slice[0],
+ weight_kg: slice[1],
+ weight_lb: slice[2],
+ sets: slice[3..(slice.size)],
+ )
+ end
workout
end
end
app/models/training_session.rb
@@ -3,6 +3,7 @@ class TrainingSession < ActiveRecord::Base
belongs_to :workout
has_one :program, through: :workout
has_many :exercise_sessions, dependent: :destroy
+ has_many :exercises, through: :exercise_sessions
def train(exercise, target_weight, completed_sets)
recommendation = workout.exercise_workouts.find_by(exercise: exercise)
app/models/user.rb
@@ -24,7 +24,7 @@ class User < ActiveRecord::Base
username
end
- def personal_record(exercise)
+ def personal_record_for(exercise)
exercise_sessions.
joins(:exercise).
where(exercises: { name: exercise.name }).
app/views/profiles/show.html.erb
@@ -23,7 +23,7 @@
<tbody>
<% @program.exercises.uniq.each do |exercise| %>
<tr>
- <td> <strong><%= exercise.name %></strong></td><td><%= @user.personal_record(exercise) %> lbs</td>
+ <td> <strong><%= exercise.name %></strong></td><td><%= @user.personal_record_for(exercise) %> lbs</td>
</tr>
<% end %>
</tbody>
spec/models/csv/import_spec.rb
@@ -100,4 +100,19 @@ describe Csv::Import do
expect(user.training_sessions.count).to eql(100)
end
end
+
+ describe "#import" do
+ it "imports dips" do
+ row = ["06/11/15", "", "A", "97.4", "215", "Squat", "120", "265", "5", "5", "5", nil, nil, "Bench press", "77.5", "170", "5", "5", "5", "5", "5", "Barbell row", "67.5", "150", "5", "5", "5", "5", "5", "Dips", "5", "12.5", "5", "5", "5"]
+ subject.import(row)
+
+ 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.sets[0]).to eql("5")
+ expect(session.sets[1]).to eql("5")
+ expect(session.sets[2]).to eql("5")
+ end
+ end
end
spec/models/user_spec.rb
@@ -136,7 +136,7 @@ describe User do
end
end
- describe "#personal_record" do
+ describe "#personal_record_for" do
include_context "stronglifts_program"
let(:user) { create(:user) }
let(:exercise_workout) { workout_a.exercise_workouts.first }
@@ -157,7 +157,7 @@ describe User do
end
it "returns the users maximum amount of weight lifted" do
- expect(user.personal_record(exercise)).to eql(205.0)
+ expect(user.personal_record_for(exercise)).to eql(205.0)
end
end
spec/support/stronglifts_program.rb
@@ -5,9 +5,11 @@ shared_context "stronglifts_program" do
let!(:workout_a) { program.workouts.create name: "A" }
let!(:bench_press) { create(:exercise, name: "Bench Press") }
let!(:barbell_row) { create(:exercise, name: "Barbell Row") }
+ let!(:dips) { create(:exercise, name: "Dips") }
let!(:squat_workout) { workout_a.add_exercise(squat, sets: 5, repetitions: 5) }
let!(:bench_workout) { workout_a.add_exercise(bench_press, sets: 5, repetitions: 5) }
let!(:row_workout) { workout_a.add_exercise(barbell_row, sets: 5, repetitions: 5) }
+ let!(:dips_workout) { workout_a.add_exercise(dips, sets: 3, repetitions: 5) }
let!(:workout_b) { program.workouts.create name: "B" }
let!(:overhead_press) { create(:exercise, name: "Overhead Press") }