master
1class WarmUp
2 attr_reader :exercise, :sets, :target_weight
3
4 def initialize(exercise, target_weight)
5 @sets = []
6 @exercise = exercise
7 @target_weight = target_weight
8 case exercise.name
9 when "Deadlift"
10 dead_lift_warmup
11 when "Barbell Row"
12 barbell_row_warmup
13 else
14 default_warmup
15 end
16 end
17
18 private
19
20 def add_set(weight, repetitions)
21 @sets << WarmUpSet.new(
22 exercise: exercise,
23 target_weight: weight,
24 target_repetitions: repetitions,
25 )
26 self
27 end
28
29 def dead_lift_warmup
30 return self if target_weight < 155.0
31 return add_set(135.0, 5) if target_weight < 175.0
32 add_set(135.0, 5)
33 return add_set(165.0, 5) if target_weight < 200.0
34 return add_set(175.0, 5) if target_weight < 220.0
35 return add_set(185.0, 5) if target_weight < 225.0
36 add_set(185.0, 5)
37 return add_set(205.0, 5) if target_weight < 240.0
38 return add_set(215.0, 5) if target_weight < 250.0
39 return add_set(225.0, 5) if target_weight < 270.0
40 add_set(225.0, 5)
41 return add_set(245.0, 5) if target_weight < 275.0
42 return add_set(255.0, 5) if target_weight < 290.0
43 return add_set(265.0, 5) if target_weight < 301.0
44 add_set(265.0, 3)
45 return add_set(285.0, 1) if target_weight < 320.0
46 return add_set(295.0, 1) if target_weight < 330.0
47 return add_set(305.0, 1) if target_weight < 340.0
48 return add_set(315.0, 1) if target_weight < 350.0
49 add_set(315.0, 3)
50 return add_set(335.0, 1) if target_weight < 360.0
51 return add_set(340.0, 1) if target_weight < 370.0
52 return add_set(345.0, 1) if target_weight < 380.0
53 return add_set(350.0, 1) if target_weight < 390.0
54 return add_set(355.0, 1) if target_weight < 395.0
55 return add_set(360.0, 1) if target_weight < 400.0
56 add_set(365.0, 1)
57 end
58
59 def barbell_row_warmup
60 return self if target_weight < 105.0 || target_weight < 65.0
61 return add_set(95.0, 5) if target_weight < 145.0
62 return add_set(115.0, 5) if target_weight < 160.0
63 return add_set(65.0, 3) if target_weight < 105.0
64 return add_set(75.0, 3) if target_weight < 125.0
65 return add_set(85.0, 3) if target_weight < 135.0
66 return add_set(135.0, 3) if target_weight < 185.0
67 add_set(135.0, 5)
68 return add_set(165.0, 3) if target_weight < 200.0
69 return add_set(175.0, 3) if target_weight < 220.0
70 return add_set(185.0, 3) if target_weight < 225.0
71 add_set(185.0, 5)
72 return add_set(205.0, 2) if target_weight < 240.0
73 return add_set(215.0, 2) if target_weight < 250.0
74 return add_set(225.0, 2) if target_weight < 270.0
75 add_set(225.0, 5)
76 return add_set(245.0, 1) if target_weight < 275.0
77 return add_set(255.0, 1) if target_weight < 290.0
78 return add_set(265.0, 1) if target_weight < 301.0
79 add_set(265.0, 3)
80 return add_set(285.0, 1) if target_weight < 320.0
81 return add_set(295.0, 1) if target_weight < 330.0
82 return add_set(305.0, 1) if target_weight < 340.0
83 return add_set(315.0, 1) if target_weight < 350.0
84 add_set(315.0, 3)
85 return add_set(330.0, 1) if target_weight < 355.0
86 return add_set(340.0, 1) if target_weight < 370.0
87 return add_set(345.0, 1) if target_weight < 380.0
88 return add_set(350.0, 1) if target_weight < 390.0
89 return add_set(355.0, 1) if target_weight < 395.0
90 return add_set(360.0, 1) if target_weight < 400.0
91 add_set(365.0, 1)
92 end
93
94 def default_warmup
95 return self if target_weight < 65.0
96 add_set(45.0, 5)
97 add_set(45.0, 5)
98 return self if target_weight < 95.0
99 return add_set(65.0, 3) if target_weight < 105.0
100 return add_set(75.0, 3) if target_weight < 125.0
101 return add_set(85.0, 3) if target_weight < 135.0
102 add_set(95.0, 5)
103 return add_set(115.0, 3) if target_weight < 150.0
104 return add_set(125.0, 3) if target_weight < 160.0
105 return add_set(135.0, 3) if target_weight < 185.0
106 return add_set(135.0, 3) if target_weight < 185.0
107 add_set(135.0, 5)
108 return add_set(165.0, 3) if target_weight < 200.0
109 return add_set(175.0, 3) if target_weight < 220.0
110 return add_set(185.0, 3) if target_weight < 225.0
111 add_set(185.0, target_weight < 305.0 ? 3 : 5)
112 return add_set(205.0, 2) if target_weight < 240.0
113 return add_set(215.0, 2) if target_weight < 250.0
114 return add_set(225.0, 2) if target_weight < 270.0
115 add_set(225.0, target_weight < 305.0 ? 2 : 3)
116 return add_set(245.0, 1) if target_weight < 275.0
117 return add_set(255.0, 1) if target_weight < 290.0
118 return add_set(265.0, 1) if target_weight < 301.0
119 if target_weight < 305.0
120 add_set(265.0, 1)
121 elsif target_weight < 350.0
122 add_set(265.0, 2)
123 else
124 add_set(265.0, 3)
125 end
126 return add_set(285.0, 1) if target_weight < 320.0
127 return add_set(295.0, 1) if target_weight < 330.0
128 return add_set(305.0, 1) if target_weight < 340.0
129 return add_set(315.0, 1) if target_weight < 350.0
130 add_set(315.0, 2)
131 return add_set(330.0, 1) if target_weight < 355.0
132 return add_set(340.0, 1) if target_weight < 370.0
133 return add_set(345.0, 1) if target_weight < 380.0
134 return add_set(350.0, 1) if target_weight < 390.0
135 return add_set(355.0, 1) if target_weight < 395.0
136 return add_set(360.0, 1) if target_weight < 400.0
137 add_set(365.0, 1)
138 end
139end