Commit e0791c3
Changed files (3)
app
models
spec
models
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