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