Commit 107c8db

mo khan <mo@mokhan.ca>
2015-11-22 16:01:20
import dips.
1 parent 9531340
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") }