Commit e0791c3

mo khan <mo@mokhan.ca>
2016-06-30 04:19:56
add more warmup sets.
1 parent 5f98e6b
Changed files (3)
app/models/program.rb
@@ -24,7 +24,7 @@ class Program < ActiveRecord::Base
 
   def prepare_sets_for(user, exercise)
     recommendation = recommendation_for(user, exercise)
-    recommendation.prepare_sets_for(user, exercise)
+    recommendation.prepare_sets
   end
 
   def recommendation_for(user, exercise)
app/models/user_recommendation.rb
@@ -7,34 +7,18 @@ class UserRecommendation
     @program = program
   end
 
-  def prepare_sets_for(user, exercise)
+  def prepare_sets
     target_weight = next_weight
     warm_up_sets = []
     if target_weight >= 65.lbs
-      2.times.map do
-        warm_up_sets << ExerciseSet.new(
-          type: :warm_up,
-          exercise: exercise,
-          target_weight: 45.lbs,
-          target_repetitions: 5,
-        )
-      end
+      warm_up_sets << warm_up(45.lbs, 5)
+      warm_up_sets << warm_up(45.lbs, 5)
     end
-    if target_weight >= 95.lbs
-      warm_up_sets << ExerciseSet.new(
-        type: :warm_up,
-        exercise: exercise,
-        target_weight: 65.lbs,
-        target_repetitions: 3,
-      )
-    end
-    work_sets = sets.times.map do
-      ExerciseSet.new(
-        type: :work,
-        exercise: exercise,
-        target_repetitions: repetitions,
-        target_weight: target_weight
-      )
+    warm_up_sets << warm_up(65.lbs, 3) if target_weight >= 95.lbs
+    warm_up_sets << warm_up(75.lbs, 3) if target_weight >= 105.lbs
+    warm_up_sets << warm_up(85.lbs, 3) if target_weight >= 125.lbs
+    work_sets = recommended_sets.times.map do
+      work_set(target_weight, repetitions)
     end
     (warm_up_sets + work_sets).compact
   end
@@ -45,7 +29,25 @@ class UserRecommendation
 
   private
 
-  def sets
+  def warm_up(weight, repetitions)
+    ExerciseSet.new(
+      type: :warm_up,
+      exercise: exercise,
+      target_weight: weight,
+      target_repetitions: repetitions,
+    )
+  end
+
+  def work_set(target_weight, repetitions)
+    ExerciseSet.new(
+      type: :work,
+      exercise: exercise,
+      target_repetitions: repetitions,
+      target_weight: target_weight
+    )
+  end
+
+  def recommended_sets
     recommended_sets = user.history_for(exercise).last_target_sets
     recommended_sets > 0 ? recommended_sets : recommendation.sets
   end
spec/models/program_spec.rb
@@ -100,6 +100,32 @@ describe Program do
             expect(warmup_sets.at(2).target_repetitions).to eql(3)
           end
         end
+
+        describe "when the work set is between 105 lbs and 125 lbs" do
+          it 'returns another warm up set' do
+            workout = create(:workout, user: user, routine: routine_a)
+            5.times { |n| workout.train(squat, 105, repetitions: 5) }
+
+            sets = subject.prepare_sets_for(user, squat)
+            warmup_sets = sets.find_all { |x| x.warm_up? }
+            expect(warmup_sets.length).to eql(4)
+            expect(warmup_sets.at(3).target_weight.lbs).to eql(75.lbs)
+            expect(warmup_sets.at(3).target_repetitions).to eql(3)
+          end
+        end
+
+        describe "when the work set is between 125 lbs and 135 lbs" do
+          it 'returns another warm up set' do
+            workout = create(:workout, user: user, routine: routine_a)
+            5.times { |n| workout.train(squat, 125, repetitions: 5) }
+
+            sets = subject.prepare_sets_for(user, squat)
+            warmup_sets = sets.find_all { |x| x.warm_up? }
+            expect(warmup_sets.length).to eql(5)
+            expect(warmup_sets.at(4).target_weight.lbs).to eql(85.lbs)
+            expect(warmup_sets.at(4).target_repetitions).to eql(3)
+          end
+        end
       end
     end