master
 1class TrainingHistory
 2  include ActiveModel::Model
 3  attr_reader :user, :exercise
 4
 5  def initialize(user, exercise)
 6    @user = user
 7    @exercise = exercise
 8  end
 9
10  def cache_key
11    [ user.to_param, exercise.to_param, sets.count ]
12  end
13
14  def personal_record
15    sets.successful.maximum(:target_weight)
16  end
17
18  def completed_any?
19    sets.any?
20  end
21
22  def last_target_sets
23    last_workout = user.last_workout(exercise)
24    return 0 if last_workout.blank?
25    sets.where(workout: last_workout).count
26  end
27
28  def deload?(number_of_workouts: 3)
29    recent_workouts = user.workouts.recent.with_exercise(exercise)
30    if recent_workouts.count >= number_of_workouts
31      recent_workouts.last(number_of_workouts).any? do |workout|
32        workout.sets.work.any?(&:failed?)
33      end
34    else
35      false
36    end
37  end
38
39  def last_weight(successfull_only: false)
40    if successfull_only
41      sets.successful.last.try(:target_weight)
42    else
43      sets.last.try(:target_weight)
44    end
45  end
46
47  def to_line_chart
48    user.workouts.with_exercise(exercise).to_line_chart
49  end
50
51  private
52
53  def sets
54    user.sets.work.for(exercise)
55  end
56end