Commit a2a4ad1
Changed files (3)
app
spec
models
app/models/exercise_set.rb
@@ -2,4 +2,5 @@ class ExerciseSet < ActiveRecord::Base
belongs_to :exercise
belongs_to :workout
scope :for, ->(exercise) { where(exercise: exercise).order(:created_at) }
+ scope :successful, -> { where('actual_repetitions = target_repetitions') }
end
app/models/training_history.rb
@@ -8,7 +8,7 @@ class TrainingHistory
end
def personal_record
- successful_sets.maximum(:target_weight)
+ sets.successful.maximum(:target_weight)
end
def completed_any?
@@ -22,14 +22,14 @@ class TrainingHistory
end
def last_weight
- last_successful_set = successful_sets.order('workouts.occurred_at').last
+ last_successful_set = sets.successful.last
last_successful_set.try(:target_weight).to_i
end
def to_line_chart
user.workouts.inject({}) do |memo, workout|
memo[workout.occurred_at] =
- workout.sets.where(exercise: exercise).maximum(:target_weight)
+ workout.sets.for(exercise).maximum(:target_weight)
memo
end
end
@@ -37,10 +37,6 @@ class TrainingHistory
private
def sets
- user.sets.where(exercise: exercise)
- end
-
- def successful_sets
- sets.where('actual_repetitions = target_repetitions')
+ user.sets.for(exercise)
end
end
spec/models/program_spec.rb
@@ -44,6 +44,14 @@ describe Program do
sets = subject.prepare_sets_for(user, squat)
expect(sets.map(&:target_weight).uniq).to match_array([50.lbs])
end
+
+ it 'returns the same weight after a failed workout' do
+ workout = create(:workout, user: user, routine: routine_a)
+ 5.times { |n| workout.train(squat, 45, repetitions: n) }
+
+ sets = subject.prepare_sets_for(user, squat)
+ expect(sets.map(&:target_weight).uniq).to match_array([45.lbs])
+ end
end
end
end