Update core domain entities.

Domain modeling is hard.

Commit
df5d1d28b608a8b3ac8f05738cb6a49f99215a9f
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
src/MyFitnessTracker-Core/MFTActivity.class.st
index 987b625f..00000000 100644..000000
@@ -1,78 +0,0 @@
1 Removed: Class {
2 Removed: #name : 'MFTActivity',
3 Removed: #superclass : 'MFTObject',
4 Removed: #instVars : [
5 Removed: 'planned',
6 Removed: 'started',
7 Removed: 'completed'
8 Removed: ],
9 Removed: #category : 'MyFitnessTracker-Core',
10 Removed: #package : 'MyFitnessTracker-Core'
11 Removed: }
12 Removed:
13 Removed: { #category : 'accessing' }
14 Removed: MFTActivity >> completed [
15 Removed:
16 Removed: ^ completed
17 Removed: ]
18 Removed:
19 Removed: { #category : 'accessing' }
20 Removed: MFTActivity >> completed: aDateAndTime [
21 Removed:
22 Removed: completed := aDateAndTime
23 Removed: ]
24 Removed:
25 Removed: { #category : 'initialization' }
26 Removed: MFTActivity >> initialize [
27 Removed:
28 Removed: super initialize.
29 Removed: planned := DateAndTime now
30 Removed: ]
31 Removed:
32 Removed: { #category : 'testing' }
33 Removed: MFTActivity >> isCompleted [
34 Removed:
35 Removed: ^ completed isNotNil
36 Removed: ]
37 Removed:
38 Removed: { #category : 'testing' }
39 Removed: MFTActivity >> isLive [
40 Removed:
41 Removed: ^ self isStarted and: self isCompleted not
42 Removed: ]
43 Removed:
44 Removed: { #category : 'testing' }
45 Removed: MFTActivity >> isPlanned [
46 Removed:
47 Removed: ^ planned isNotNil
48 Removed: ]
49 Removed:
50 Removed: { #category : 'testing' }
51 Removed: MFTActivity >> isStarted [
52 Removed:
53 Removed: ^ started isNotNil
54 Removed: ]
55 Removed:
56 Removed: { #category : 'accessing' }
57 Removed: MFTActivity >> planned [
58 Removed:
59 Removed: ^ planned
60 Removed: ]
61 Removed:
62 Removed: { #category : 'accessing' }
63 Removed: MFTActivity >> planned: aDateAndTime [
64 Removed:
65 Removed: planned := aDateAndTime
66 Removed: ]
67 Removed:
68 Removed: { #category : 'accessing' }
69 Removed: MFTActivity >> started [
70 Removed:
71 Removed: ^ started
72 Removed: ]
73 Removed:
74 Removed: { #category : 'accessing' }
75 Removed: MFTActivity >> started: aDateAndTime [
76 Removed:
77 Removed: started := aDateAndTime
78 Removed: ]
src/MyFitnessTracker-Core/MFTEquipment.class.st
index 55374961..b5b4a18b 100644..100644
@@ -7,8 +7,9 @@
7 7 #instVars : [
8 8 'englishName'
9 9 ],
10 Removed: #category : 'MyFitnessTracker-Core',
11 Removed: #package : 'MyFitnessTracker-Core'
10 Added: #category : 'MyFitnessTracker-Core-Base',
11 Added: #package : 'MyFitnessTracker-Core',
12 Added: #tag : 'Base'
12 13 }
13 14
14 15 { #category : 'as yet unclassified' }
src/MyFitnessTracker-Core/MFTExercise.class.st
index 463c7cf9..7d5a0895 100644..100644
@@ -13,11 +13,12 @@
13 13 #instVars : [
14 14 'englishName',
15 15 'frenchName',
16 Removed: 'activatedMuscles',
16 Added: 'activatedMuscleGroups',
17 17 'equipment'
18 18 ],
19 Removed: #category : 'MyFitnessTracker-Core',
20 Removed: #package : 'MyFitnessTracker-Core'
19 Added: #category : 'MyFitnessTracker-Core-Base',
20 Added: #package : 'MyFitnessTracker-Core',
21 Added: #tag : 'Base'
21 22 }
22 23
23 24 { #category : 'chest' }
@@ -25,8 +26,7 @@
25 26
26 27 ^ self newWithEnglishName
27 28 equipment: MFTEquipment barbell;
28 Removed: activates: MFTMuscle pectoralisMajor percent: 100;
29 Removed: activates: MFTMuscle pectoralisMinor percent: 80
29 Added: activates: MFTMuscleGroup chest
30 30 ]
31 31
32 32 { #category : 'benchmarking' }
@@ -40,25 +40,19 @@
40 40 { #category : 'bicep' }
41 41 MFTExercise class >> bicepCurl [
42 42
43 Removed: ^ self newWithEnglishName
44 Removed: activates: MFTMuscle bicepsBrachii percent: 100;
45 Removed: activates: MFTMuscle brachioRadialis percent: 80
43 Added: ^ self newWithEnglishName activates: MFTMuscleGroup arm
46 44 ]
47 45
48 46 { #category : 'benchmarking' }
49 47 MFTExercise class >> cableRow [
50 48
51 Removed: ^ self newWithEnglishName
52 Removed: activates: MFTMuscle latissimusDorsi percent: 60;
53 Removed: activates: MFTMuscle deltoidPosterior percent: 70
49 Added: ^ self newWithEnglishName activates: MFTMuscleGroup back
54 50 ]
55 51
56 52 { #category : 'compound' }
57 53 MFTExercise class >> calfRaise [
58 54
59 Removed: ^ self newWithEnglishName
60 Removed: activatesAll: MFTMuscleGroup calf muscles
61 Removed: percent: 100
55 Added: ^ self newWithEnglishName activates: MFTMuscleGroup calf
62 56 ]
63 57
64 58 { #category : 'benchmarking' }
@@ -72,15 +66,15 @@
72 66 { #category : 'compound' }
73 67 MFTExercise class >> deadlift [
74 68
75 Removed: ^ self newWithEnglishName
76 Removed: activates: MFTMuscle latissimusDorsi
77 Removed: percent: 80
69 Added: ^ self newWithEnglishName activates: MFTMuscleGroup back
78 70 ]
79 71
80 72 { #category : 'compound' }
81 73 MFTExercise class >> dip [
82 74
83 75 ^ self newWithEnglishName
76 Added: activates: MFTMuscleGroup chest;
77 Added: activates: MFTMuscleGroup arm
84 78 ]
85 79
86 80 { #category : 'benchmarking' }
@@ -88,14 +82,15 @@
88 82
89 83 ^ self newWithEnglishName
90 84 equipment: MFTEquipment dumbbell;
91 Removed: activates: MFTMuscle pectoralisMajor percent: 100;
92 Removed: activates: MFTMuscle pectoralisMinor percent: 80
85 Added: activates: MFTMuscleGroup chest
93 86 ]
94 87
95 88 { #category : 'benchmarking' }
96 89 MFTExercise class >> dumbbellFly [
97 90
98 Removed: ^ self newWithEnglishName equipment: MFTEquipment dumbbell
91 Added: ^ self newWithEnglishName
92 Added: activates: MFTMuscleGroup chest;
93 Added: equipment: MFTEquipment dumbbell
99 94 ]
100 95
101 96 { #category : 'benchmarking' }
@@ -107,7 +102,7 @@
107 102 { #category : 'benchmarking' }
108 103 MFTExercise class >> hammerCurl [
109 104
110 Removed: ^ self newWithEnglishName
105 Added: ^ self newWithEnglishName activates: MFTMuscleGroup arm
111 106 ]
112 107
113 108 { #category : 'benchmarking' }
@@ -119,7 +114,7 @@
119 114 { #category : 'benchmarking' }
120 115 MFTExercise class >> inclinePress [
121 116
122 Removed: ^ self newWithEnglishName
117 Added: ^ self newWithEnglishName activates: MFTMuscleGroup chest
123 118 ]
124 119
125 120 { #category : 'benchmarking' }
@@ -137,9 +132,7 @@
137 132 { #category : 'benchmarking' }
138 133 MFTExercise class >> lateralRaise [
139 134
140 Removed: ^ self newWithEnglishName
141 Removed: activatesAll: MFTMuscleGroup shoulder muscles
142 Removed: percent: 90
135 Added: ^ self newWithEnglishName activates: MFTMuscleGroup shoulder
143 136 ]
144 137
145 138 { #category : 'benchmarking' }
@@ -174,17 +167,18 @@
174 167 { #category : 'benchmarking' }
175 168 MFTExercise class >> rearDeltFly [
176 169
177 Removed: ^ self newWithEnglishName equipment: MFTEquipment pecDeck
170 Added: ^ self newWithEnglishName
171 Added: activates: MFTMuscleGroup shoulder;
172 Added: equipment: MFTEquipment pecDeck
178 173 ]
179 174
180 175 { #category : 'shoulder' }
181 176 MFTExercise class >> shoulderPressDumbell [
182 177
183 Removed: ^ self register: (self new
184 Removed: englishName: 'shoulder press (dumbell)';
185 Removed: activates: MFTMuscle deltoidAnterior percent: 90;
186 Removed: activates: MFTMuscle deltoidMedial percent: 60;
187 Removed: equipment: MFTEquipment dumbbell)
178 Added: ^ self new
179 Added: englishName: 'shoulder press (dumbell)';
180 Added: activates: MFTMuscleGroup shoulder;
181 Added: equipment: MFTEquipment dumbbell
188 182 ]
189 183
190 184 { #category : 'traps' }
@@ -198,7 +192,7 @@
198 192
199 193 ^ self new
200 194 englishName: 'sit-up';
201 Removed: activatesAll: MFTMuscleGroup abdominal muscles percent: 100
195 Added: activates: MFTMuscleGroup abdominal
202 196 ]
203 197
204 198 { #category : 'compound' }
@@ -214,25 +208,18 @@
214 208 ]
215 209
216 210 { #category : 'accessing' }
217 Removed: MFTExercise >> activatedMuscles [
211 Added: MFTExercise >> activates: aMFTMuscleGroup [
218 212
219 Removed: ^ activatedMuscles
213 Added: activatedMuscleGroups at: aMFTMuscleGroup put: 100
220 214 ]
221 215
222 216 { #category : 'accessing' }
223 Removed: MFTExercise >> activates: aMFTMuscle percent: aPercent [
217 Added: MFTExercise >> activates: aMFTMuscleGroup percent: aPercent [
224 218
225 Removed: activatedMuscles at: aMFTMuscle put: aPercent
219 Added: activatedMuscleGroups at: aMFTMuscleGroup put: aPercent
226 220 ]
227 221
228 222 { #category : 'accessing' }
229 Removed: MFTExercise >> activatesAll: aMFTMuscleCollection percent: aPercent [
230 Removed:
231 Removed: aMFTMuscleCollection do: [ :muscle |
232 Removed: activatedMuscles at: muscle put: aPercent ]
233 Removed: ]
234 Removed:
235 Removed: { #category : 'accessing' }
236 223 MFTExercise >> canonicalName [
237 224
238 225 ^ englishName
@@ -280,5 +267,15 @@
280 267 super initialize.
281 268 englishName := String new.
282 269 frenchName := String new.
283 Removed: activatedMuscles := Dictionary new.
270 Added: activatedMuscleGroups := Dictionary new
271 Added: ]
272 Added:
273 Added: { #category : 'accessing' }
274 Added: MFTExercise >> mainActivatedMuscleGroups [
275 Added:
276 Added: | values maxValue |
277 Added: values := activatedMuscleGroups values ifEmpty: [ ^ nil ].
278 Added: maxValue := values max.
279 Added: ^ activatedMuscleGroups keys select: [ :group |
280 Added: (activatedMuscleGroups at: group) = maxValue ]
284 281 ]
src/MyFitnessTracker-Core/MFTMuscle.class.st
index b900b302..cc93d2d9 100644..100644
@@ -7,11 +7,12 @@
7 7 #instVars : [
8 8 'latinName',
9 9 'englishName',
10 Removed: 'primaryMuscleGroup',
10 Added: 'muscleGroup',
11 11 'description'
12 12 ],
13 Removed: #category : 'MyFitnessTracker-Core',
14 Removed: #package : 'MyFitnessTracker-Core'
13 Added: #category : 'MyFitnessTracker-Core-Anatomy',
14 Added: #package : 'MyFitnessTracker-Core',
15 Added: #tag : 'Anatomy'
15 16 }
16 17
17 18 { #category : 'as yet unclassified' }
@@ -299,7 +300,7 @@
299 300 { #category : 'accessing' }
300 301 MFTMuscle >> canonicalName [
301 302
302 Removed: ^ englishName
303 Added: ^ latinName
303 304 ]
304 305
305 306 { #category : 'accessing' }
@@ -330,7 +331,6 @@
330 331 MFTMuscle >> initialize [
331 332
332 333 super initialize.
333 Removed: primaryMuscleGroup := MFTMuscleGroup new.
334 334 latinName := String new.
335 335 englishName := String new.
336 336 description := String new
@@ -356,13 +356,13 @@
356 356 ]
357 357
358 358 { #category : 'accessing' }
359 Removed: MFTMuscle >> primaryMuscleGroup [
359 Added: MFTMuscle >> muscleGroup [
360 360
361 Removed: ^ primaryMuscleGroup
361 Added: ^ muscleGroup
362 362 ]
363 363
364 364 { #category : 'accessing' }
365 Removed: MFTMuscle >> primaryMuscleGroup: aMFTMuscleGroup [
365 Added: MFTMuscle >> muscleGroup: aMFTMuscleGroup [
366 366
367 Removed: primaryMuscleGroup := aMFTMuscleGroup
367 Added: muscleGroup := aMFTMuscleGroup
368 368 ]
src/MyFitnessTracker-Core/MFTMuscleGroup.class.st
index 0bae5b2d..ee727aeb 100644..100644
@@ -9,8 +9,9 @@
9 9 'frenchName',
10 10 'muscles'
11 11 ],
12 Removed: #category : 'MyFitnessTracker-Core',
13 Removed: #package : 'MyFitnessTracker-Core'
12 Added: #category : 'MyFitnessTracker-Core-Anatomy',
13 Added: #package : 'MyFitnessTracker-Core',
14 Added: #tag : 'Anatomy'
14 15 }
15 16
16 17 { #category : 'instance creation' }
@@ -29,7 +30,6 @@
29 30 MFTMuscleGroup class >> arm [
30 31
31 32 ^ self newWithEnglishName
32 Removed: latinName: 'brachium';
33 33 muscles: {
34 34 MFTMuscle bicepsBrachii.
35 35 MFTMuscle tricepsBrachii };
@@ -154,6 +154,12 @@
154 154 frenchName := anObject
155 155 ]
156 156
157 Added: { #category : 'testing' }
158 Added: MFTMuscleGroup >> includes: aMFTMuscle [
159 Added:
160 Added: ^ muscles includes: aMFTMuscle
161 Added: ]
162 Added:
157 163 { #category : 'initialization' }
158 164 MFTMuscleGroup >> initialize [
159 165
@@ -170,7 +176,7 @@
170 176 ]
171 177
172 178 { #category : 'accessing' }
173 Removed: MFTMuscleGroup >> muscles: anObject [
179 Added: MFTMuscleGroup >> muscles: aMFTMuscleCollection [
174 180
175 Removed: muscles := anObject
181 Added: muscles := aMFTMuscleCollection asOrderedCollection
176 182 ]
src/MyFitnessTracker-Core/MFTObject.class.st
index 62c9218e..6153ebd8 100644..100644
@@ -7,8 +7,9 @@
7 7 #instVars : [
8 8 'id'
9 9 ],
10 Removed: #category : 'MyFitnessTracker-Core',
11 Removed: #package : 'MyFitnessTracker-Core'
10 Added: #category : 'MyFitnessTracker-Core-Base',
11 Added: #package : 'MyFitnessTracker-Core',
12 Added: #tag : 'Base'
12 13 }
13 14
14 15 { #category : 'initialization' }
@@ -24,12 +25,12 @@
24 25 ]
25 26
26 27 { #category : 'accessing' }
27 Removed: MFTObject >> id: anObject [
28 Added: MFTObject >> id: anInteger [
28 29
29 Removed: id := anObject
30 Added: id := anInteger
30 31 ]
31 32
32 Removed: { #category : 'initialization' }
33 Added: { #category : 'printing' }
33 34 MFTObject >> printOn: aStream [
34 35
35 36 aStream nextPutAll: self canonicalName
src/MyFitnessTracker-Core/MFTPlan.class.st
index 00000000..f7aa55d9 000000..100644
@@ -0,0 +1,88 @@
1 Added: "
2 Added: I represent a training routine for a trainee.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTPlan',
6 Added: #superclass : 'MFTObject',
7 Added: #instVars : [
8 Added: 'trainee',
9 Added: 'routine',
10 Added: 'start'
11 Added: ],
12 Added: #category : 'MyFitnessTracker-Core-Logging',
13 Added: #package : 'MyFitnessTracker-Core',
14 Added: #tag : 'Logging'
15 Added: }
16 Added:
17 Added: { #category : 'instance creation' }
18 Added: MFTPlan class >> forRoutine: aMFTRoutine [
19 Added:
20 Added: ^ self new
21 Added: routine: aMFTRoutine;
22 Added: yourself
23 Added: ]
24 Added:
25 Added: { #category : 'instance creation' }
26 Added: MFTPlan class >> forRoutine: aMFTRoutine start: aDate [
27 Added:
28 Added: ^ self new
29 Added: routine: aMFTRoutine;
30 Added: start: aDate;
31 Added: yourself
32 Added: ]
33 Added:
34 Added: { #category : 'accessing' }
35 Added: MFTPlan >> canonicalName [
36 Added:
37 Added: ^ start
38 Added: ifNotNil: [ 'plan started ' , start asDate asString ]
39 Added: ifNil: [ 'plan not started' ]
40 Added: ]
41 Added:
42 Added: { #category : 'accessing' }
43 Added: MFTPlan >> routine [
44 Added:
45 Added: ^ routine
46 Added: ]
47 Added:
48 Added: { #category : 'accessing' }
49 Added: MFTPlan >> routine: aMFTRoutine [
50 Added:
51 Added: routine := aMFTRoutine
52 Added: ]
53 Added:
54 Added: { #category : 'accessing' }
55 Added: MFTPlan >> start [
56 Added:
57 Added: ^ start
58 Added: ]
59 Added:
60 Added: { #category : 'accessing' }
61 Added: MFTPlan >> start: aDateAndTime [
62 Added:
63 Added: start := aDateAndTime
64 Added: ]
65 Added:
66 Added: { #category : 'accessing' }
67 Added: MFTPlan >> startNow [
68 Added:
69 Added: start := DateAndTime now
70 Added: ]
71 Added:
72 Added: { #category : 'accessing' }
73 Added: MFTPlan >> trainee [
74 Added:
75 Added: ^ trainee
76 Added: ]
77 Added:
78 Added: { #category : 'accessing' }
79 Added: MFTPlan >> trainee: aMFTTrainee [
80 Added:
81 Added: trainee := aMFTTrainee
82 Added: ]
83 Added:
84 Added: { #category : 'accessing' }
85 Added: MFTPlan >> workouts [
86 Added:
87 Added: ^ routine workouts
88 Added: ]
src/MyFitnessTracker-Core/MFTPreExhaustSupersetGroupPrescription.class.st
index 00000000..a58f3baf 000000..100644
@@ -0,0 +1,20 @@
1 Added: Class {
2 Added: #name : 'MFTPreExhaustSupersetGroupPrescription',
3 Added: #superclass : 'MFTSetGroupPrescription',
4 Added: #category : 'MyFitnessTracker-Core-Prescription',
5 Added: #package : 'MyFitnessTracker-Core',
6 Added: #tag : 'Prescription'
7 Added: }
8 Added:
9 Added: { #category : 'initialization' }
10 Added: MFTPreExhaustSupersetGroupPrescription >> canonicalName [
11 Added:
12 Added: ^ 'pre-exhaust superset'
13 Added: ]
14 Added:
15 Added: { #category : 'validation' }
16 Added: MFTPreExhaustSupersetGroupPrescription >> validate [
17 Added:
18 Added: sets size = 2 ifFalse: [
19 Added: self error: 'Pre-exhaust superset must have exactly 2 sets.' ]
20 Added: ]
src/MyFitnessTracker-Core/MFTPrescription.class.st
index 00000000..3e3a60f8 000000..100644
@@ -0,0 +1,21 @@
1 Added: "
2 Added: I am the abstract superclass for activities that can be prescribed.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTPrescription',
6 Added: #superclass : 'MFTObject',
7 Added: #category : 'MyFitnessTracker-Core',
8 Added: #package : 'MyFitnessTracker-Core'
9 Added: }
10 Added:
11 Added: { #category : 'testing' }
12 Added: MFTPrescription >> isRest [
13 Added:
14 Added: ^ false
15 Added: ]
16 Added:
17 Added: { #category : 'testing' }
18 Added: MFTPrescription >> isWorkout [
19 Added:
20 Added: ^ false
21 Added: ]
src/MyFitnessTracker-Core/MFTRepScheme.class.st
index 00000000..cd1e6938 000000..100644
@@ -0,0 +1,67 @@
1 Added: "
2 Added: I am a rep range used when prescribing workout sets.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTRepScheme',
6 Added: #superclass : 'MFTObject',
7 Added: #instVars : [
8 Added: 'minReps',
9 Added: 'maxReps'
10 Added: ],
11 Added: #category : 'MyFitnessTracker-Core-Prescription',
12 Added: #package : 'MyFitnessTracker-Core',
13 Added: #tag : 'Prescription'
14 Added: }
15 Added:
16 Added: { #category : 'instance creation' }
17 Added: MFTRepScheme class >> from: min to: max [
18 Added:
19 Added: ^ self new
20 Added: minReps: min;
21 Added: maxReps: max;
22 Added: yourself
23 Added: ]
24 Added:
25 Added: { #category : 'initialization' }
26 Added: MFTRepScheme >> canonicalName [
27 Added:
28 Added: ^ minReps asString , '–' , maxReps asString
29 Added: ]
30 Added:
31 Added: { #category : 'testing' }
32 Added: MFTRepScheme >> includes: repsAchieved [
33 Added:
34 Added: ^ repsAchieved between: minReps and: maxReps
35 Added: ]
36 Added:
37 Added: { #category : 'accessing' }
38 Added: MFTRepScheme >> maxReps [
39 Added:
40 Added: ^ maxReps
41 Added: ]
42 Added:
43 Added: { #category : 'accessing' }
44 Added: MFTRepScheme >> maxReps: anInteger [
45 Added:
46 Added: maxReps := anInteger
47 Added: ]
48 Added:
49 Added: { #category : 'accessing' }
50 Added: MFTRepScheme >> minReps [
51 Added:
52 Added: ^ minReps
53 Added: ]
54 Added:
55 Added: { #category : 'accessing' }
56 Added: MFTRepScheme >> minReps: anInteger [
57 Added:
58 Added: minReps := anInteger
59 Added: ]
60 Added:
61 Added: { #category : 'testing' }
62 Added: MFTRepScheme >> progressionFor: repsAchieved [
63 Added:
64 Added: repsAchieved > maxReps ifTrue: [ ^ #increaseLoad ].
65 Added: repsAchieved < minReps ifTrue: [ ^ #decreaseLoad ].
66 Added: ^ #keepLoad
67 Added: ]
src/MyFitnessTracker-Core/MFTRest.class.st
index 6cfae637..00000000 100644..000000
@@ -1,35 +0,0 @@
1 Removed: Class {
2 Removed: #name : 'MFTRest',
3 Removed: #superclass : 'MFTActivity',
4 Removed: #instVars : [
5 Removed: 'duration'
6 Removed: ],
7 Removed: #category : 'MyFitnessTracker-Core',
8 Removed: #package : 'MyFitnessTracker-Core'
9 Removed: }
10 Removed:
11 Removed: { #category : 'accessing' }
12 Removed: MFTRest class >> duration: aDuration [
13 Removed:
14 Removed: ^ self new
15 Removed: duration: aDuration;
16 Removed: yourself
17 Removed: ]
18 Removed:
19 Removed: { #category : 'initialization' }
20 Removed: MFTRest >> canonicalName [
21 Removed:
22 Removed: ^ 'rest ' , duration asHours asString , ' hours'
23 Removed: ]
24 Removed:
25 Removed: { #category : 'accessing' }
26 Removed: MFTRest >> duration [
27 Removed:
28 Removed: ^ duration
29 Removed: ]
30 Removed:
31 Removed: { #category : 'accessing' }
32 Removed: MFTRest >> duration: aDuration [
33 Removed:
34 Removed: duration := aDuration
35 Removed: ]
src/MyFitnessTracker-Core/MFTRestPrescription.class.st
index 00000000..f92762c1 000000..100644
@@ -0,0 +1,65 @@
1 Added: "
2 Added: I represent a period of rest.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTRestPrescription',
6 Added: #superclass : 'MFTPrescription',
7 Added: #instVars : [
8 Added: 'routine',
9 Added: 'duration'
10 Added: ],
11 Added: #category : 'MyFitnessTracker-Core-Prescription',
12 Added: #package : 'MyFitnessTracker-Core',
13 Added: #tag : 'Prescription'
14 Added: }
15 Added:
16 Added: { #category : 'as yet unclassified' }
17 Added: MFTRestPrescription class >> withDuration: aDuration [
18 Added:
19 Added: ^ self new
20 Added: duration: aDuration;
21 Added: yourself
22 Added: ]
23 Added:
24 Added: { #category : 'initialization' }
25 Added: MFTRestPrescription >> canonicalName [
26 Added:
27 Added: ^ 'rest ' , duration asHours asString , ' hours'
28 Added: ]
29 Added:
30 Added: { #category : 'accessing' }
31 Added: MFTRestPrescription >> duration [
32 Added:
33 Added: ^ duration
34 Added: ]
35 Added:
36 Added: { #category : 'accessing' }
37 Added: MFTRestPrescription >> duration: aDuration [
38 Added:
39 Added: duration := aDuration
40 Added: ]
41 Added:
42 Added: { #category : 'as yet unclassified' }
43 Added: MFTRestPrescription >> initialize [
44 Added:
45 Added: super initialize.
46 Added: duration := 1 day
47 Added: ]
48 Added:
49 Added: { #category : 'testing' }
50 Added: MFTRestPrescription >> isRest [
51 Added:
52 Added: ^ true
53 Added: ]
54 Added:
55 Added: { #category : 'accessing' }
56 Added: MFTRestPrescription >> routine [
57 Added:
58 Added: ^ routine
59 Added: ]
60 Added:
61 Added: { #category : 'accessing' }
62 Added: MFTRestPrescription >> routine: aMFTRoutine [
63 Added:
64 Added: routine := aMFTRoutine
65 Added: ]
src/MyFitnessTracker-Core/MFTRoutine.class.st
index cf14171f..7f0e95a1 100644..100644
@@ -1,177 +1,63 @@
1 1 "
2 Removed: I represent a cyclical sequence of workouts and recovery periods.
2 Added: I represent a named cycle of prescribed MFT activities.
3 3 "
4 4 Class {
5 5 #name : 'MFTRoutine',
6 6 #superclass : 'MFTObject',
7 7 #instVars : [
8 Removed: 'trainee',
9 8 'title',
10 Removed: 'cycle',
11 Removed: 'started'
9 Added: 'workouts'
12 10 ],
13 Removed: #category : 'MyFitnessTracker-Core',
14 Removed: #package : 'MyFitnessTracker-Core'
11 Added: #category : 'MyFitnessTracker-Core-Prescription',
12 Added: #package : 'MyFitnessTracker-Core',
13 Added: #tag : 'Prescription'
15 14 }
16 15
17 Removed: { #category : 'heavy duty' }
16 Added: { #category : 'instance creation' }
18 17 MFTRoutine class >> heavyDutyOneIdealRoutine [
19 18
20 19 ^ self new
21 Removed: title: 'Heavy Duty I: Ideal Routine';
22 Removed: addWorkout: MFTWorkout heavyDutyOneDay1;
23 Removed: addRest: (MFTRest duration: 4 days);
24 Removed: addWorkout: MFTWorkout heavyDutyOneDay2;
25 Removed: addRest: (MFTRest duration: 4 days);
26 Removed: addWorkout: MFTWorkout heavyDutyOneDay3;
27 Removed: addRest: (MFTRest duration: 4 days);
20 Added: title: 'Heavy Duty I — Ideal Routine';
21 Added: workouts: {
22 Added: MFTWorkoutPrescription heavyDutyOneDay1.
23 Added: MFTWorkoutPrescription heavyDutyOneDay2.
24 Added: MFTWorkoutPrescription heavyDutyOneDay3 };
28 25 yourself
29 26 ]
30 27
31 Removed: { #category : 'placeholder' }
32 Removed: MFTRoutine class >> placeholder [
33 Removed:
34 Removed: ^ self new
35 Removed: addWorkouts: {
36 Removed: MFTWorkout placeholderForYesterday.
37 Removed: MFTWorkout placeholderForToday.
38 Removed: MFTWorkout placeholderForTomorrow };
39 Removed: yourself
40 Removed: ]
41 Removed:
42 28 { #category : 'as yet unclassified' }
43 Removed: MFTRoutine >> activityOnDate: aDate [
44 Removed:
45 Removed: | daysElapsed cycleDuration |
46 Removed: started ifNil: [ ^ nil ].
47 Removed:
48 Removed: daysElapsed := (aDate - started) asDays asInteger.
49 Removed: cycleDuration := self cycleDuration asDays asInteger.
50 Removed: ^ cycle at: daysElapsed % cycleDuration
51 Removed: ]
52 Removed:
53 Removed: { #category : 'as yet unclassified' }
54 Removed: MFTRoutine >> activityToday [
55 Removed:
56 Removed: ^ self activityOnDate: Date today
57 Removed: ]
58 Removed:
59 Removed: { #category : 'adding' }
60 Removed: MFTRoutine >> addRest: aMFTRest [
61 Removed:
62 Removed: cycle addLast: aMFTRest
63 Removed: ]
64 Removed:
65 Removed: { #category : 'as yet unclassified' }
66 Removed: MFTRoutine >> addWorkout: aMFTWorkout [
67 Removed:
68 Removed: cycle addLast: aMFTWorkout
69 Removed: ]
70 Removed:
71 Removed: { #category : 'adding' }
72 Removed: MFTRoutine >> addWorkouts: aMFTWorkoutCollection [
73 Removed:
74 Removed: cycle addAll: aMFTWorkoutCollection.
75 Removed: aMFTWorkoutCollection do: [ :workout | workout routine: self ]
76 Removed: ]
77 Removed:
78 Removed: { #category : 'initialization' }
79 29 MFTRoutine >> canonicalName [
80 30
81 31 ^ title
82 32 ]
83 33
84 Removed: { #category : 'as yet unclassified' }
85 Removed: MFTRoutine >> completedWorkouts [
86 Removed:
87 Removed: ^ self workouts select: #isCompleted
88 Removed: ]
89 Removed:
90 Removed: { #category : 'accessing' }
91 Removed: MFTRoutine >> cycle [
92 Removed:
93 Removed: ^ cycle
94 Removed: ]
95 Removed:
96 Removed: { #category : 'accessing' }
97 Removed: MFTRoutine >> cycleDuration [
98 Removed: "I add workout days and rest days."
99 Removed:
100 Removed: ^ self workouts size days + self totalRestDuration
101 Removed: ]
102 Removed:
103 Removed: { #category : 'accessing' }
34 Added: { #category : 'initialization' }
104 35 MFTRoutine >> initialize [
105 36
106 37 super initialize.
107 Removed: cycle := OrderedCollection new
38 Added: workouts := OrderedCollection new
108 39 ]
109 40
110 41 { #category : 'as yet unclassified' }
111 Removed: MFTRoutine >> nextPlannedWorkout [
112 Removed:
113 Removed: ^ (self plannedWorkouts sort: [:a :b | a planned > b planned]) first
114 Removed: ]
115 Removed:
116 Removed: { #category : 'as yet unclassified' }
117 Removed: MFTRoutine >> plannedWorkouts [
118 Removed:
119 Removed: ^ self workouts select: #isPlanned
120 Removed: ]
121 Removed:
122 Removed: { #category : 'as yet unclassified' }
123 Removed: MFTRoutine >> startToday [
124 Removed:
125 Removed: started := Date today.
126 Removed: cycle first started: Date today
127 Removed: ]
128 Removed:
129 Removed: { #category : 'accessing' }
130 Removed: MFTRoutine >> started [
131 Removed:
132 Removed: ^ started
133 Removed: ]
134 Removed:
135 Removed: { #category : 'accessing' }
136 Removed: MFTRoutine >> started: aDate [
137 Removed:
138 Removed: started := aDate
139 Removed: ]
140 Removed:
141 Removed: { #category : 'accessing' }
142 42 MFTRoutine >> title [
143 43
144 44 ^ title
145 45 ]
146 46
147 Removed: { #category : 'accessing' }
47 Added: { #category : 'as yet unclassified' }
148 48 MFTRoutine >> title: aString [
149 49
150 50 title := aString
151 51 ]
152 52
153 53 { #category : 'accessing' }
154 Removed: MFTRoutine >> totalRestDuration [
54 Added: MFTRoutine >> workouts [
155 55
156 Removed: ^ (cycle
157 Removed: select: [ :each | each class = MFTRest ]
158 Removed: thenCollect: #duration) sum
56 Added: ^ workouts
159 57 ]
160 58
161 59 { #category : 'accessing' }
162 Removed: MFTRoutine >> trainee [
60 Added: MFTRoutine >> workouts: aMFTWorkoutPrescriptionCollection [
163 61
164 Removed: ^ trainee
165 Removed: ]
166 Removed:
167 Removed: { #category : 'accessing' }
168 Removed: MFTRoutine >> trainee: aMFTTrainee [
169 Removed:
170 Removed: trainee := aMFTTrainee
171 Removed: ]
172 Removed:
173 Removed: { #category : 'as yet unclassified' }
174 Removed: MFTRoutine >> workouts [
175 Removed:
176 Removed: ^ self cycle select: [ :each | each class = MFTWorkout ]
62 Added: workouts := aMFTWorkoutPrescriptionCollection
177 63 ]
src/MyFitnessTracker-Core/MFTSet.class.st
index ef3fbf53..00000000 100644..000000
@@ -1,121 +0,0 @@
1 Removed: "
2 Removed: I represent an exercise set performed during a workout.
3 Removed: "
4 Removed: Class {
5 Removed: #name : 'MFTSet',
6 Removed: #superclass : 'MFTObject',
7 Removed: #instVars : [
8 Removed: 'exercise',
9 Removed: 'reps',
10 Removed: 'load',
11 Removed: 'setGroup'
12 Removed: ],
13 Removed: #category : 'MyFitnessTracker-Core',
14 Removed: #package : 'MyFitnessTracker-Core'
15 Removed: }
16 Removed:
17 Removed: { #category : 'accessing' }
18 Removed: MFTSet class >> exercise: aMFTExercise [
19 Removed:
20 Removed: ^ self new
21 Removed: exercise: aMFTExercise;
22 Removed: yourself
23 Removed: ]
24 Removed:
25 Removed: { #category : 'as yet unclassified' }
26 Removed: MFTSet class >> exercise: aMFTExercise reps: anInteger load: aNumber [
27 Removed:
28 Removed: ^ self new
29 Removed: exercise: aMFTExercise;
30 Removed: reps: anInteger;
31 Removed: load: aNumber;
32 Removed: yourself
33 Removed: ]
34 Removed:
35 Removed: { #category : 'as yet unclassified' }
36 Removed: MFTSet class >> reps: anInteger load: aNumber [
37 Removed:
38 Removed: ^ self new
39 Removed: reps: anInteger;
40 Removed: load: aNumber;
41 Removed: yourself
42 Removed: ]
43 Removed:
44 Removed: { #category : 'initialization' }
45 Removed: MFTSet >> canonicalName [
46 Removed:
47 Removed: ^ reps asString , '×' , load asString , ' ' , exercise canonicalName
48 Removed: ]
49 Removed:
50 Removed: { #category : 'accessing' }
51 Removed: MFTSet >> exercise [
52 Removed:
53 Removed: ^ exercise
54 Removed: ]
55 Removed:
56 Removed: { #category : 'accessing' }
57 Removed: MFTSet >> exercise: aMFTExercise [
58 Removed:
59 Removed: exercise := aMFTExercise
60 Removed: ]
61 Removed:
62 Removed: { #category : 'testing' }
63 Removed: MFTSet >> hasLoad [
64 Removed:
65 Removed: ^ load isNotNil and: [ load asString isNotEmpty ]
66 Removed: ]
67 Removed:
68 Removed: { #category : 'as yet unclassified' }
69 Removed: MFTSet >> hasVolume [
70 Removed:
71 Removed: ^ self volume ~~ 0
72 Removed: ]
73 Removed:
74 Removed: { #category : 'accessing' }
75 Removed: MFTSet >> load [
76 Removed:
77 Removed: ^ load
78 Removed: ]
79 Removed:
80 Removed: { #category : 'accessing' }
81 Removed: MFTSet >> load: aNumber [
82 Removed:
83 Removed: load := aNumber
84 Removed: ]
85 Removed:
86 Removed: { #category : 'accessing' }
87 Removed: MFTSet >> reps [
88 Removed:
89 Removed: ^ reps
90 Removed: ]
91 Removed:
92 Removed: { #category : 'accessing' }
93 Removed: MFTSet >> reps: anInteger [
94 Removed:
95 Removed: reps := anInteger
96 Removed: ]
97 Removed:
98 Removed: { #category : 'accessing' }
99 Removed: MFTSet >> setGroup [
100 Removed:
101 Removed: ^ setGroup
102 Removed: ]
103 Removed:
104 Removed: { #category : 'accessing' }
105 Removed: MFTSet >> setGroup: aMFTSetGroup [
106 Removed:
107 Removed: setGroup := aMFTSetGroup
108 Removed: ]
109 Removed:
110 Removed: { #category : 'as yet unclassified' }
111 Removed: MFTSet >> volume [
112 Removed: "reps is never nil, as enforced by the database schema."
113 Removed:
114 Removed: ^ load ifNotNil: [ reps * load ] ifNil: [ 0 ]
115 Removed: ]
116 Removed:
117 Removed: { #category : 'accessing' }
118 Removed: MFTSet >> workout [
119 Removed:
120 Removed: ^ self setGroup workout
121 Removed: ]
src/MyFitnessTracker-Core/MFTSetGroup.class.st
index 50672479..00000000 100644..000000
@@ -1,113 +0,0 @@
1 Removed: "
2 Removed: I represent a group of sets performed during a workout.
3 Removed: "
4 Removed: Class {
5 Removed: #name : 'MFTSetGroup',
6 Removed: #superclass : 'MFTObject',
7 Removed: #instVars : [
8 Removed: 'sets'
9 Removed: ],
10 Removed: #category : 'MyFitnessTracker-Core',
11 Removed: #package : 'MyFitnessTracker-Core'
12 Removed: }
13 Removed:
14 Removed: { #category : 'as yet unclassified' }
15 Removed: MFTSetGroup class >> exercise: aMFTExercise sets: aMFTSetCollection [
16 Removed:
17 Removed: ^ self withSets:
18 Removed: (aMFTSetCollection collect: [ :set | set exercise: aMFTExercise ])
19 Removed: ]
20 Removed:
21 Removed: { #category : 'as yet unclassified' }
22 Removed: MFTSetGroup class >> withSet: aMFTWorkoutSet [
23 Removed:
24 Removed: ^ self new
25 Removed: sets: { aMFTWorkoutSet };
26 Removed: yourself
27 Removed: ]
28 Removed:
29 Removed: { #category : 'as yet unclassified' }
30 Removed: MFTSetGroup class >> withSets: aMFTWorkoutSetCollection [
31 Removed:
32 Removed: ^ self new
33 Removed: sets: aMFTWorkoutSetCollection;
34 Removed: yourself
35 Removed: ]
36 Removed:
37 Removed: { #category : 'adding' }
38 Removed: MFTSetGroup >> addSet: aMFTSet [
39 Removed:
40 Removed: sets add: aMFTSet
41 Removed: ]
42 Removed:
43 Removed: { #category : 'adding' }
44 Removed: MFTSetGroup >> addSets: aMFTSetCollection [
45 Removed:
46 Removed: sets addAll: aMFTSetCollection
47 Removed: ]
48 Removed:
49 Removed: { #category : 'initialization' }
50 Removed: MFTSetGroup >> canonicalName [
51 Removed:
52 Removed: ^ self type
53 Removed: ]
54 Removed:
55 Removed: { #category : 'testing' }
56 Removed: MFTSetGroup >> hasLoad [
57 Removed:
58 Removed: ^ sets anySatisfy: #hasLoad
59 Removed: ]
60 Removed:
61 Removed: { #category : 'testing' }
62 Removed: MFTSetGroup >> hasRestAfter [
63 Removed:
64 Removed: ^ sets anySatisfy: #hasRestAfter
65 Removed: ]
66 Removed:
67 Removed: { #category : 'testing' }
68 Removed: MFTSetGroup >> hasVolume [
69 Removed:
70 Removed: ^ sets anySatisfy: #hasVolume
71 Removed: ]
72 Removed:
73 Removed: { #category : 'initialization' }
74 Removed: MFTSetGroup >> initialize [
75 Removed:
76 Removed: super initialize.
77 Removed: sets := OrderedCollection new
78 Removed: ]
79 Removed:
80 Removed: { #category : 'accessing' }
81 Removed: MFTSetGroup >> sets [
82 Removed:
83 Removed: ^ sets
84 Removed: ]
85 Removed:
86 Removed: { #category : 'accessing' }
87 Removed: MFTSetGroup >> sets: aMFTSetCollection [
88 Removed:
89 Removed: sets := aMFTSetCollection
90 Removed: ]
91 Removed:
92 Removed: { #category : 'initialization' }
93 Removed: MFTSetGroup >> type [
94 Removed:
95 Removed: | size |
96 Removed: size := self uniqueExercisesInSets size.
97 Removed: size = 0 ifTrue: [ ^ 'empty set group' ].
98 Removed: size = 1 ifTrue: [ ^ 'regular set' ].
99 Removed: size > 1 ifTrue: [ ^ 'superset' ]
100 Removed: ]
101 Removed:
102 Removed: { #category : 'testing' }
103 Removed: MFTSetGroup >> uniqueExercisesInSets [
104 Removed: "I answer unique exercises across all sets."
105 Removed:
106 Removed: ^ (sets collect: #exercise) asSet
107 Removed: ]
108 Removed:
109 Removed: { #category : 'accessing' }
110 Removed: MFTSetGroup >> volume [
111 Removed:
112 Removed: ^ (sets collect: #volume) sum
113 Removed: ]
src/MyFitnessTracker-Core/MFTSetGroupPrescription.class.st
index 00000000..8d830fd8 000000..100644
@@ -0,0 +1,54 @@
1 Added: "
2 Added: I represent a group of sets prescribed for a workout.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTSetGroupPrescription',
6 Added: #superclass : 'MFTObject',
7 Added: #instVars : [
8 Added: 'sets'
9 Added: ],
10 Added: #category : 'MyFitnessTracker-Core-Prescription',
11 Added: #package : 'MyFitnessTracker-Core',
12 Added: #tag : 'Prescription'
13 Added: }
14 Added:
15 Added: { #category : 'as yet unclassified' }
16 Added: MFTSetGroupPrescription class >> withSets: aMFTSetPrescriptionCollection [
17 Added:
18 Added: ^ self new
19 Added: sets: aMFTSetPrescriptionCollection asOrderedCollection;
20 Added: validate;
21 Added: yourself
22 Added: ]
23 Added:
24 Added: { #category : 'initialization' }
25 Added: MFTSetGroupPrescription >> initialize [
26 Added:
27 Added: super initialize.
28 Added: sets := OrderedCollection new
29 Added: ]
30 Added:
31 Added: { #category : 'accessing' }
32 Added: MFTSetGroupPrescription >> sets [
33 Added:
34 Added: ^ sets
35 Added: ]
36 Added:
37 Added: { #category : 'accessing' }
38 Added: MFTSetGroupPrescription >> sets: aMFTSetPrescriptionCollection [
39 Added:
40 Added: sets := aMFTSetPrescriptionCollection
41 Added: ]
42 Added:
43 Added: { #category : 'testing' }
44 Added: MFTSetGroupPrescription >> uniqueExercisesInSets [
45 Added: "I answer unique exercises across all sets."
46 Added:
47 Added: ^ (sets collect: #exercise) asSet
48 Added: ]
49 Added:
50 Added: { #category : 'validation' }
51 Added: MFTSetGroupPrescription >> validate [
52 Added:
53 Added: self subclassResponsibility
54 Added: ]
src/MyFitnessTracker-Core/MFTSetLog.class.st
index 00000000..adf46edc 000000..100644
@@ -0,0 +1,93 @@
1 Added: "
2 Added: I represent a set logged against a prescription.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTSetLog',
6 Added: #superclass : 'MFTObject',
7 Added: #instVars : [
8 Added: 'prescription',
9 Added: 'reps',
10 Added: 'load'
11 Added: ],
12 Added: #category : 'MyFitnessTracker-Core-Logging',
13 Added: #package : 'MyFitnessTracker-Core',
14 Added: #tag : 'Logging'
15 Added: }
16 Added:
17 Added: { #category : 'accessing' }
18 Added: MFTSetLog class >> forPrescription: aMFTSetPrescription [
19 Added:
20 Added: ^ self new
21 Added: prescription: aMFTSetPrescription;
22 Added: yourself
23 Added: ]
24 Added:
25 Added: { #category : 'as yet unclassified' }
26 Added: MFTSetLog class >> reps: anInteger load: aNumber [
27 Added:
28 Added: ^ self new
29 Added: reps: anInteger;
30 Added: load: aNumber;
31 Added: yourself
32 Added: ]
33 Added:
34 Added: { #category : 'initialization' }
35 Added: MFTSetLog >> canonicalName [
36 Added:
37 Added: ^ reps asString , '×' , load asString , ' '
38 Added: , prescription exercise canonicalName
39 Added: ]
40 Added:
41 Added: { #category : 'accessing' }
42 Added: MFTSetLog >> exercise [
43 Added:
44 Added: ^ prescription exercise
45 Added: ]
46 Added:
47 Added: { #category : 'as yet unclassified' }
48 Added: MFTSetLog >> load [
49 Added:
50 Added: ^ load
51 Added: ]
52 Added:
53 Added: { #category : 'as yet unclassified' }
54 Added: MFTSetLog >> load: aNumber [
55 Added:
56 Added: load := aNumber
57 Added: ]
58 Added:
59 Added: { #category : 'as yet unclassified' }
60 Added: MFTSetLog >> prescription [
61 Added:
62 Added: ^ prescription
63 Added: ]
64 Added:
65 Added: { #category : 'as yet unclassified' }
66 Added: MFTSetLog >> prescription: aMFTSetPrescription [
67 Added:
68 Added: prescription := aMFTSetPrescription
69 Added: ]
70 Added:
71 Added: { #category : 'as yet unclassified' }
72 Added: MFTSetLog >> progressionDecision [
73 Added:
74 Added: ^ prescription repScheme progressionFor: reps
75 Added: ]
76 Added:
77 Added: { #category : 'as yet unclassified' }
78 Added: MFTSetLog >> reps [
79 Added:
80 Added: ^ reps
81 Added: ]
82 Added:
83 Added: { #category : 'as yet unclassified' }
84 Added: MFTSetLog >> reps: anInteger [
85 Added:
86 Added: reps := anInteger
87 Added: ]
88 Added:
89 Added: { #category : 'as yet unclassified' }
90 Added: MFTSetLog >> volume [
91 Added:
92 Added: ^ reps * load
93 Added: ]
src/MyFitnessTracker-Core/MFTSetPrescription.class.st
index 00000000..540d654b 000000..100644
@@ -0,0 +1,68 @@
1 Added: "
2 Added: I represent an exercise set prescribed for a workout.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTSetPrescription',
6 Added: #superclass : 'MFTObject',
7 Added: #instVars : [
8 Added: 'exercise',
9 Added: 'repScheme'
10 Added: ],
11 Added: #category : 'MyFitnessTracker-Core-Prescription',
12 Added: #package : 'MyFitnessTracker-Core',
13 Added: #tag : 'Prescription'
14 Added: }
15 Added:
16 Added: { #category : 'as yet unclassified' }
17 Added: MFTSetPrescription class >> exercise: aMFTExercise [
18 Added:
19 Added: ^ self new
20 Added: exercise: aMFTExercise;
21 Added: yourself
22 Added: ]
23 Added:
24 Added: { #category : 'as yet unclassified' }
25 Added: MFTSetPrescription class >> exercise: aMFTExercise repScheme: aMFTRepScheme [
26 Added:
27 Added: ^ self new
28 Added: exercise: aMFTExercise;
29 Added: repScheme: aMFTRepScheme;
30 Added: yourself
31 Added: ]
32 Added:
33 Added: { #category : 'initialization' }
34 Added: MFTSetPrescription >> canonicalName [
35 Added:
36 Added: ^ repScheme canonicalName , ' reps ' , exercise canonicalName
37 Added: ]
38 Added:
39 Added: { #category : 'accessing' }
40 Added: MFTSetPrescription >> exercise [
41 Added:
42 Added: ^ exercise
43 Added: ]
44 Added:
45 Added: { #category : 'as yet unclassified' }
46 Added: MFTSetPrescription >> exercise: aMFTExercise [
47 Added:
48 Added: exercise := aMFTExercise
49 Added: ]
50 Added:
51 Added: { #category : 'as yet unclassified' }
52 Added: MFTSetPrescription >> initialize [
53 Added:
54 Added: super initialize.
55 Added: repScheme := MFTRepScheme from: 6 to: 10
56 Added: ]
57 Added:
58 Added: { #category : 'as yet unclassified' }
59 Added: MFTSetPrescription >> repScheme [
60 Added:
61 Added: ^ repScheme
62 Added: ]
63 Added:
64 Added: { #category : 'as yet unclassified' }
65 Added: MFTSetPrescription >> repScheme: aMFTRepScheme [
66 Added:
67 Added: repScheme := aMFTRepScheme
68 Added: ]
src/MyFitnessTracker-Core/MFTStraightSetGroupPrescription.class.st
index 00000000..f0f0082e 000000..100644
@@ -0,0 +1,35 @@
1 Added: "
2 Added: I represent a single working set.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTStraightSetGroupPrescription',
6 Added: #superclass : 'MFTSetGroupPrescription',
7 Added: #category : 'MyFitnessTracker-Core-Prescription',
8 Added: #package : 'MyFitnessTracker-Core',
9 Added: #tag : 'Prescription'
10 Added: }
11 Added:
12 Added: { #category : 'as yet unclassified' }
13 Added: MFTStraightSetGroupPrescription class >> withSet: aMFTSetPrescription [
14 Added:
15 Added: ^ self new
16 Added: sets: (OrderedCollection with: aMFTSetPrescription);
17 Added: validate;
18 Added: yourself
19 Added: ]
20 Added:
21 Added: { #category : 'initialization' }
22 Added: MFTStraightSetGroupPrescription >> canonicalName [
23 Added:
24 Added: ^ 'straight set'
25 Added: ]
26 Added:
27 Added: { #category : 'validation' }
28 Added: MFTStraightSetGroupPrescription >> validate [
29 Added:
30 Added: sets size = 1 ifFalse: [
31 Added: self error: 'Straight group must have exactly 1 set.' ].
32 Added: (sets allSatisfy: [ :each | each isKindOf: MFTSetPrescription ])
33 Added: ifFalse: [
34 Added: self error: 'All sets are not MFTSetPrescription subclasses.' ]
35 Added: ]
src/MyFitnessTracker-Core/MFTSupersetGroupPrescription.class.st
index 00000000..f3f8c52f 000000..100644
@@ -0,0 +1,23 @@
1 Added: "
2 Added: I represent many working sets to be performed with as little rest as possible between them.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTSupersetGroupPrescription',
6 Added: #superclass : 'MFTSetGroupPrescription',
7 Added: #category : 'MyFitnessTracker-Core-Prescription',
8 Added: #package : 'MyFitnessTracker-Core',
9 Added: #tag : 'Prescription'
10 Added: }
11 Added:
12 Added: { #category : 'initialization' }
13 Added: MFTSupersetGroupPrescription >> canonicalName [
14 Added:
15 Added: ^ 'superset'
16 Added: ]
17 Added:
18 Added: { #category : 'validation' }
19 Added: MFTSupersetGroupPrescription >> validate [
20 Added:
21 Added: sets size >= 2 ifFalse: [
22 Added: self error: 'Superset must have at least 2 sets.' ]
23 Added: ]
src/MyFitnessTracker-Core/MFTTrainee.class.st
index 31a13992..8e479cd4 100644..100644
@@ -7,8 +7,9 @@
7 7 #instVars : [
8 8 'routine'
9 9 ],
10 Removed: #category : 'MyFitnessTracker-Core',
11 Removed: #package : 'MyFitnessTracker-Core'
10 Added: #category : 'MyFitnessTracker-Core-Base',
11 Added: #package : 'MyFitnessTracker-Core',
12 Added: #tag : 'Base'
12 13 }
13 14
14 15 { #category : 'as yet unclassified' }
src/MyFitnessTracker-Core/MFTWeight.class.st
index 5a29766f..00000000 100644..000000
@@ -1,83 +0,0 @@
1 Removed: "
2 Removed: I represent the weight of a user measured at a given date.
3 Removed: "
4 Removed: Class {
5 Removed: #name : 'MFTWeight',
6 Removed: #superclass : 'MFTObject',
7 Removed: #instVars : [
8 Removed: 'date',
9 Removed: 'kilograms',
10 Removed: 'user'
11 Removed: ],
12 Removed: #category : 'MyFitnessTracker-Core',
13 Removed: #package : 'MyFitnessTracker-Core'
14 Removed: }
15 Removed:
16 Removed: { #category : 'accessing' }
17 Removed: MFTWeight class >> kilograms: aWeight date: aDate [
18 Removed:
19 Removed: ^ self new
20 Removed: kilograms: aWeight;
21 Removed: date: aDate;
22 Removed: yourself
23 Removed: ]
24 Removed:
25 Removed: { #category : 'as yet unclassified' }
26 Removed: MFTWeight class >> placeholderCollection [
27 Removed:
28 Removed: ^ OrderedCollection withAll: {
29 Removed: (self kilograms: 90 date: (Date year: 2024 month: 1 day: 1)).
30 Removed: (self kilograms: 91 date: (Date year: 2024 month: 1 day: 2)).
31 Removed: (self kilograms: 92 date: (Date year: 2024 month: 1 day: 3)).
32 Removed: (self kilograms: 93 date: (Date year: 2024 month: 1 day: 4)) }
33 Removed: ]
34 Removed:
35 Removed: { #category : 'initialization' }
36 Removed: MFTWeight >> canonicalName [
37 Removed:
38 Removed: ^ kilograms, ' kilograms'
39 Removed: ]
40 Removed:
41 Removed: { #category : 'accessing' }
42 Removed: MFTWeight >> date [
43 Removed:
44 Removed: ^ date
45 Removed: ]
46 Removed:
47 Removed: { #category : 'accessing' }
48 Removed: MFTWeight >> date: anObject [
49 Removed:
50 Removed: date := anObject
51 Removed: ]
52 Removed:
53 Removed: { #category : 'initialization' }
54 Removed: MFTWeight >> initialize [
55 Removed:
56 Removed: super initialize.
57 Removed: kilograms := 0.
58 Removed: date := Date new
59 Removed: ]
60 Removed:
61 Removed: { #category : 'accessing' }
62 Removed: MFTWeight >> kilograms [
63 Removed:
64 Removed: ^ kilograms
65 Removed: ]
66 Removed:
67 Removed: { #category : 'accessing' }
68 Removed: MFTWeight >> kilograms: anObject [
69 Removed:
70 Removed: kilograms := anObject
71 Removed: ]
72 Removed:
73 Removed: { #category : 'accessing' }
74 Removed: MFTWeight >> user [
75 Removed:
76 Removed: ^ user
77 Removed: ]
78 Removed:
79 Removed: { #category : 'accessing' }
80 Removed: MFTWeight >> user: anObject [
81 Removed:
82 Removed: user := anObject
83 Removed: ]
src/MyFitnessTracker-Core/MFTWorkout.class.st
index a616d272..00000000 100644..000000
@@ -1,247 +0,0 @@
1 Removed: "
2 Removed: I represent a user's workout.
3 Removed: "
4 Removed: Class {
5 Removed: #name : 'MFTWorkout',
6 Removed: #superclass : 'MFTActivity',
7 Removed: #instVars : [
8 Removed: 'trainee',
9 Removed: 'setGroups',
10 Removed: 'routine'
11 Removed: ],
12 Removed: #category : 'MyFitnessTracker-Core',
13 Removed: #package : 'MyFitnessTracker-Core'
14 Removed: }
15 Removed:
16 Removed: { #category : 'heavyDutyOne' }
17 Removed: MFTWorkout class >> heavyDutyOneDay1 [
18 Removed:
19 Removed: ^ self new
20 Removed: addSetGroup: (MFTSetGroup withSets: {
21 Removed: (MFTSet exercise: MFTExercise dumbbellFly reps: 8 load: 80).
22 Removed: (MFTSet exercise: MFTExercise inclinePress reps: 8 load: 80) });
23 Removed: addSets: {
24 Removed: (MFTSet exercise: MFTExercise lateralRaise reps: 12 load: 60).
25 Removed: (MFTSet exercise: MFTExercise rearDeltFly reps: 12 load: 60) };
26 Removed: addSetGroup: (MFTSetGroup withSets: {
27 Removed: (MFTSet exercise: MFTExercise lyingFrenchPress reps: 8 load: 80).
28 Removed: (MFTSet exercise: MFTExercise dip reps: 8 load: 0) })
29 Removed: ]
30 Removed:
31 Removed: { #category : 'heavyDutyOne' }
32 Removed: MFTWorkout class >> heavyDutyOneDay2 [
33 Removed:
34 Removed: ^ self new
35 Removed: addSetGroup: (MFTSetGroup withSets: {
36 Removed: (MFTSet exercise: MFTExercise latPullover).
37 Removed: (MFTSet exercise: MFTExercise closeGripPalmsUpPulldown) });
38 Removed: addSet: (MFTSet exercise: MFTExercise bentOverBarbellRows);
39 Removed: addSet: (MFTSet exercise: MFTExercise shrug);
40 Removed: addSet: (MFTSet exercise: MFTExercise hyperextension);
41 Removed: addSet: (MFTSet exercise: MFTExercise bicepCurl)
42 Removed: ]
43 Removed:
44 Removed: { #category : 'heavyDutyOne' }
45 Removed: MFTWorkout class >> heavyDutyOneDay3 [
46 Removed:
47 Removed: ^ self new
48 Removed: addSetGroup: (MFTSetGroup withSets: {
49 Removed: (MFTSet exercise: MFTExercise legExtension).
50 Removed: (MFTSet exercise: MFTExercise squat) });
51 Removed: addSet: (MFTSet exercise: MFTExercise legCurl);
52 Removed: addSet: (MFTSet exercise: MFTExercise calfRaise);
53 Removed: addSet: (MFTSet exercise: MFTExercise sitUp)
54 Removed: ]
55 Removed:
56 Removed: { #category : 'placeholders' }
57 Removed: MFTWorkout class >> placeholderForToday [
58 Removed:
59 Removed: ^ self new
60 Removed: planned: Date today;
61 Removed: setGroups: {
62 Removed: (MFTSetGroup withSets: {
63 Removed: (MFTSet new
64 Removed: reps: 12;
65 Removed: load: 140;
66 Removed: exercise: MFTExercise legExtension).
67 Removed: (MFTSet new
68 Removed: reps: 8;
69 Removed: load: 120;
70 Removed: exercise: MFTExercise squat) }).
71 Removed: (MFTSetGroup withSet: (MFTSet new
72 Removed: reps: 10;
73 Removed: load: 80;
74 Removed: exercise: MFTExercise legCurl)) };
75 Removed: yourself
76 Removed: ]
77 Removed:
78 Removed: { #category : 'placeholders' }
79 Removed: MFTWorkout class >> placeholderForTomorrow [
80 Removed:
81 Removed: ^ self new
82 Removed: planned: Date tomorrow;
83 Removed: addSets: {
84 Removed: (MFTSet new
85 Removed: reps: 8;
86 Removed: load: 120;
87 Removed: exercise: MFTExercise barbellBenchPress).
88 Removed: (MFTSet new
89 Removed: reps: 8;
90 Removed: load: 120;
91 Removed: exercise: MFTExercise squat).
92 Removed: (MFTSet new
93 Removed: reps: 8;
94 Removed: load: 110;
95 Removed: exercise: MFTExercise latPulldown) };
96 Removed: yourself
97 Removed: ]
98 Removed:
99 Removed: { #category : 'placeholders' }
100 Removed: MFTWorkout class >> placeholderForYesterday [
101 Removed:
102 Removed: ^ self new
103 Removed: planned: Date yesterday;
104 Removed: completed: Date yesterday;
105 Removed: setGroups: {
106 Removed: (MFTSetGroup exercise: MFTExercise latPulldown sets: {
107 Removed: (MFTSet reps: 6 load: 100).
108 Removed: (MFTSet reps: 8 load: 120) }).
109 Removed: (MFTSetGroup
110 Removed: exercise: MFTExercise deadlift
111 Removed: sets: { (MFTSet reps: 8 load: 120) }).
112 Removed: (MFTSetGroup
113 Removed: exercise: MFTExercise latPulldown
114 Removed: sets: { (MFTSet reps: 8 load: 120) }) };
115 Removed: yourself
116 Removed: ]
117 Removed:
118 Removed: { #category : 'adding' }
119 Removed: MFTWorkout >> addSet: aMFTSet [
120 Removed: "Automatically wrap MFTSet in a MFTSetGroup."
121 Removed:
122 Removed: setGroups addLast: (MFTSetGroup withSet: aMFTSet)
123 Removed: ]
124 Removed:
125 Removed: { #category : 'adding' }
126 Removed: MFTWorkout >> addSetGroup: aMFTSetGroup [
127 Removed:
128 Removed: setGroups addLast: aMFTSetGroup
129 Removed: ]
130 Removed:
131 Removed: { #category : 'adding' }
132 Removed: MFTWorkout >> addSetGroups: aMFTSetGroupCollection [
133 Removed:
134 Removed: setGroups addAll: aMFTSetGroupCollection
135 Removed: ]
136 Removed:
137 Removed: { #category : 'adding' }
138 Removed: MFTWorkout >> addSets: aMFTSetCollection [
139 Removed:
140 Removed: aMFTSetCollection do: [ :set | self addSet: set ]
141 Removed: ]
142 Removed:
143 Removed: { #category : 'testing' }
144 Removed: MFTWorkout >> allSetGroupsAreRegular [
145 Removed:
146 Removed: ^ self anySetGroupIsIrregular not
147 Removed: ]
148 Removed:
149 Removed: { #category : 'testing' }
150 Removed: MFTWorkout >> anySetGroupIsIrregular [
151 Removed:
152 Removed: ^ setGroups anySatisfy: [ :setGroup | setGroup isRegularSetGroup not ]
153 Removed: ]
154 Removed:
155 Removed: { #category : 'testing' }
156 Removed: MFTWorkout >> anySetHasLoad [
157 Removed:
158 Removed: ^ self sets anySatisfy: #hasLoad
159 Removed: ]
160 Removed:
161 Removed: { #category : 'testing' }
162 Removed: MFTWorkout >> anySetHasVolume [
163 Removed:
164 Removed: ^ self sets anySatisfy: #hasVolume
165 Removed: ]
166 Removed:
167 Removed: { #category : 'initialization' }
168 Removed: MFTWorkout >> canonicalName [
169 Removed:
170 Removed: ^ self status
171 Removed: ]
172 Removed:
173 Removed: { #category : 'initialization' }
174 Removed: MFTWorkout >> initialize [
175 Removed:
176 Removed: super initialize.
177 Removed: setGroups := OrderedCollection new
178 Removed: ]
179 Removed:
180 Removed: { #category : 'accessing' }
181 Removed: MFTWorkout >> routine [
182 Removed:
183 Removed: ^ routine
184 Removed: ]
185 Removed:
186 Removed: { #category : 'accessing' }
187 Removed: MFTWorkout >> routine: aMFTWorkoutPlan [
188 Removed:
189 Removed: routine := aMFTWorkoutPlan
190 Removed: ]
191 Removed:
192 Removed: { #category : 'accessing' }
193 Removed: MFTWorkout >> setGroups [
194 Removed:
195 Removed: ^ setGroups
196 Removed: ]
197 Removed:
198 Removed: { #category : 'accessing' }
199 Removed: MFTWorkout >> setGroups: aMFTSetGroupCollection [
200 Removed:
201 Removed: setGroups := aMFTSetGroupCollection
202 Removed: ]
203 Removed:
204 Removed: { #category : 'accessing' }
205 Removed: MFTWorkout >> sets [
206 Removed:
207 Removed: ^ setGroups flatCollect: #sets
208 Removed: ]
209 Removed:
210 Removed: { #category : 'accessing' }
211 Removed: MFTWorkout >> sets: aMFTSetCollection [
212 Removed:
213 Removed: | groups |
214 Removed: groups := OrderedCollection new.
215 Removed: (aMFTSetCollection groupedBy: #groupId) keysAndValuesDo: [
216 Removed: :groupId
217 Removed: :sets | groups add: (MFTSetGroup new sets: sets) ].
218 Removed: self setGroups: groups
219 Removed: ]
220 Removed:
221 Removed: { #category : 'accessing' }
222 Removed: MFTWorkout >> status [
223 Removed:
224 Removed: self isCompleted ifTrue: [
225 Removed: ^ 'completed ' , self completed asDate asString ].
226 Removed: self isLive ifTrue: [ ^ 'started ' , self started asDate asString ].
227 Removed: self isPlanned ifTrue: [ ^ 'planned ' , self planned asDate asString ].
228 Removed: ^ 'no status'
229 Removed: ]
230 Removed:
231 Removed: { #category : 'accessing' }
232 Removed: MFTWorkout >> trainee [
233 Removed:
234 Removed: ^ trainee
235 Removed: ]
236 Removed:
237 Removed: { #category : 'accessing' }
238 Removed: MFTWorkout >> trainee: aMFTTrainee [
239 Removed:
240 Removed: trainee := aMFTTrainee
241 Removed: ]
242 Removed:
243 Removed: { #category : 'accessing' }
244 Removed: MFTWorkout >> volume [
245 Removed:
246 Removed: ^ (setGroups collect: #volume) sum
247 Removed: ]
src/MyFitnessTracker-Core/MFTWorkoutLog.class.st
index 00000000..8bb6e428 000000..100644
@@ -0,0 +1,106 @@
1 Added: "
2 Added: I represent a workout logged against a prescription.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTWorkoutLog',
6 Added: #superclass : 'MFTObject',
7 Added: #instVars : [
8 Added: 'prescription',
9 Added: 'start',
10 Added: 'finish',
11 Added: 'sets',
12 Added: 'trainee'
13 Added: ],
14 Added: #category : 'MyFitnessTracker-Core-Logging',
15 Added: #package : 'MyFitnessTracker-Core',
16 Added: #tag : 'Logging'
17 Added: }
18 Added:
19 Added: { #category : 'accessing' }
20 Added: MFTWorkoutLog class >> forPrescription: aMFTWorkoutPrescription [
21 Added:
22 Added: ^ self new
23 Added: prescription: aMFTWorkoutPrescription;
24 Added: yourself
25 Added: ]
26 Added:
27 Added: { #category : 'initialization' }
28 Added: MFTWorkoutLog >> canonicalName [
29 Added:
30 Added: ^ 'log for ' , prescription
31 Added: ]
32 Added:
33 Added: { #category : 'accessing' }
34 Added: MFTWorkoutLog >> finish [
35 Added:
36 Added: ^ finish
37 Added: ]
38 Added:
39 Added: { #category : 'accessing' }
40 Added: MFTWorkoutLog >> finish: aDateAndTime [
41 Added:
42 Added: finish := aDateAndTime
43 Added: ]
44 Added:
45 Added: { #category : 'accessing' }
46 Added: MFTWorkoutLog >> initialize [
47 Added:
48 Added: super initialize.
49 Added: sets := OrderedCollection new
50 Added: ]
51 Added:
52 Added: { #category : 'accessing' }
53 Added: MFTWorkoutLog >> prescription [
54 Added:
55 Added: ^ prescription
56 Added: ]
57 Added:
58 Added: { #category : 'accessing' }
59 Added: MFTWorkoutLog >> prescription: aMFTWorkoutPrescription [
60 Added:
61 Added: prescription := aMFTWorkoutPrescription
62 Added: ]
63 Added:
64 Added: { #category : 'accessing' }
65 Added: MFTWorkoutLog >> setForPrescription: aMFTSetPrescription [
66 Added:
67 Added: ^ sets
68 Added: detect: [ :set | set prescription = aMFTSetPrescription ]
69 Added: ifNone: [ MFTSetLog forPrescription: aMFTSetPrescription ]
70 Added: ]
71 Added:
72 Added: { #category : 'accessing' }
73 Added: MFTWorkoutLog >> sets [
74 Added:
75 Added: ^ sets
76 Added: ]
77 Added:
78 Added: { #category : 'accessing' }
79 Added: MFTWorkoutLog >> sets: aMFTSetLogCollection [
80 Added:
81 Added: sets := aMFTSetLogCollection
82 Added: ]
83 Added:
84 Added: { #category : 'accessing' }
85 Added: MFTWorkoutLog >> start [
86 Added:
87 Added: ^ start
88 Added: ]
89 Added:
90 Added: { #category : 'accessing' }
91 Added: MFTWorkoutLog >> start: aDateAndTime [
92 Added:
93 Added: start := aDateAndTime
94 Added: ]
95 Added:
96 Added: { #category : 'accessing' }
97 Added: MFTWorkoutLog >> trainee [
98 Added:
99 Added: ^ trainee
100 Added: ]
101 Added:
102 Added: { #category : 'accessing' }
103 Added: MFTWorkoutLog >> trainee: aMFTTrainee [
104 Added:
105 Added: trainee := aMFTTrainee
106 Added: ]
src/MyFitnessTracker-Core/MFTWorkoutPrescription.class.st
index 00000000..8b6c2c45 000000..100644
@@ -0,0 +1,143 @@
1 Added: "
2 Added: I represent a prescribed workout.
3 Added: "
4 Added: Class {
5 Added: #name : 'MFTWorkoutPrescription',
6 Added: #superclass : 'MFTPrescription',
7 Added: #instVars : [
8 Added: 'title',
9 Added: 'setGroups'
10 Added: ],
11 Added: #category : 'MyFitnessTracker-Core-Prescription',
12 Added: #package : 'MyFitnessTracker-Core',
13 Added: #tag : 'Prescription'
14 Added: }
15 Added:
16 Added: { #category : 'heavyDutyOne' }
17 Added: MFTWorkoutPrescription class >> heavyDutyOneDay1 [
18 Added:
19 Added: ^ self new
20 Added: title: 'Day 1';
21 Added: prescribePreExhaustSuperset: {
22 Added: (MFTSetPrescription exercise: MFTExercise dumbbellFly).
23 Added: (MFTSetPrescription exercise: MFTExercise inclinePress) };
24 Added: prescribeStraightSet:
25 Added: (MFTSetPrescription exercise: MFTExercise lateralRaise);
26 Added: prescribeStraightSet:
27 Added: (MFTSetPrescription exercise: MFTExercise rearDeltFly);
28 Added: prescribeSuperset: {
29 Added: (MFTSetPrescription exercise: MFTExercise lyingFrenchPress).
30 Added: (MFTSetPrescription exercise: MFTExercise dip) }
31 Added: ]
32 Added:
33 Added: { #category : 'as yet unclassified' }
34 Added: MFTWorkoutPrescription class >> heavyDutyOneDay2 [
35 Added:
36 Added: ^ self new
37 Added: title: 'Day 2';
38 Added: prescribeSuperset: {
39 Added: (MFTSetPrescription exercise: MFTExercise latPullover).
40 Added: (MFTSetPrescription exercise:
41 Added: MFTExercise closeGripPalmsUpPulldown) };
42 Added: prescribeStraightSet:
43 Added: (MFTSetPrescription exercise: MFTExercise bentOverBarbellRows);
44 Added: prescribeStraightSet:
45 Added: (MFTSetPrescription exercise: MFTExercise shrug);
46 Added: prescribeStraightSet:
47 Added: (MFTSetPrescription exercise: MFTExercise hyperextension);
48 Added: prescribeStraightSet:
49 Added: (MFTSetPrescription exercise: MFTExercise bicepCurl)
50 Added: ]
51 Added:
52 Added: { #category : 'as yet unclassified' }
53 Added: MFTWorkoutPrescription class >> heavyDutyOneDay3 [
54 Added:
55 Added: ^ self new
56 Added: title: 'Day 3';
57 Added: prescribeSuperset: {
58 Added: (MFTSetPrescription exercise: MFTExercise legExtension).
59 Added: (MFTSetPrescription exercise: MFTExercise squat) };
60 Added: prescribeStraightSet:
61 Added: (MFTSetPrescription exercise: MFTExercise legCurl);
62 Added: prescribeStraightSet:
63 Added: (MFTSetPrescription exercise: MFTExercise calfRaise);
64 Added: prescribeStraightSet:
65 Added: (MFTSetPrescription exercise: MFTExercise sitUp)
66 Added: ]
67 Added:
68 Added: { #category : 'initialization' }
69 Added: MFTWorkoutPrescription >> canonicalName [
70 Added:
71 Added: ^ title
72 Added: ]
73 Added:
74 Added: { #category : 'accessing' }
75 Added: MFTWorkoutPrescription >> duration [
76 Added:
77 Added: ^ Duration zero
78 Added: ]
79 Added:
80 Added: { #category : 'as yet unclassified' }
81 Added: MFTWorkoutPrescription >> initialize [
82 Added:
83 Added: super initialize.
84 Added: setGroups := OrderedCollection new
85 Added: ]
86 Added:
87 Added: { #category : 'testing' }
88 Added: MFTWorkoutPrescription >> isWorkout [
89 Added:
90 Added: ^ true
91 Added: ]
92 Added:
93 Added: { #category : 'as yet unclassified' }
94 Added: MFTWorkoutPrescription >> prescribePreExhaustSuperset: aMFTSetPrescriptionCollection [
95 Added:
96 Added: setGroups addLast: (MFTPreExhaustSupersetGroupPrescription withSets:
97 Added: aMFTSetPrescriptionCollection)
98 Added: ]
99 Added:
100 Added: { #category : 'as yet unclassified' }
101 Added: MFTWorkoutPrescription >> prescribeStraightSet: aMFTSetPrescription [
102 Added:
103 Added: setGroups addLast:
104 Added: (MFTStraightSetGroupPrescription withSet: aMFTSetPrescription)
105 Added: ]
106 Added:
107 Added: { #category : 'as yet unclassified' }
108 Added: MFTWorkoutPrescription >> prescribeSuperset: aMFTSetPrescriptionCollection [
109 Added:
110 Added: setGroups addLast:
111 Added: (MFTSupersetGroupPrescription withSets:
112 Added: aMFTSetPrescriptionCollection)
113 Added: ]
114 Added:
115 Added: { #category : 'as yet unclassified' }
116 Added: MFTWorkoutPrescription >> setGroups [
117 Added:
118 Added: ^ setGroups
119 Added: ]
120 Added:
121 Added: { #category : 'as yet unclassified' }
122 Added: MFTWorkoutPrescription >> setGroups: aMFTSetGroupCollection [
123 Added:
124 Added: setGroups := aMFTSetGroupCollection
125 Added: ]
126 Added:
127 Added: { #category : 'as yet unclassified' }
128 Added: MFTWorkoutPrescription >> sets [
129 Added:
130 Added: ^ setGroups flatCollect: #sets
131 Added: ]
132 Added:
133 Added: { #category : 'as yet unclassified' }
134 Added: MFTWorkoutPrescription >> title [
135 Added:
136 Added: ^ title
137 Added: ]
138 Added:
139 Added: { #category : 'as yet unclassified' }
140 Added: MFTWorkoutPrescription >> title: aString [
141 Added:
142 Added: title := aString
143 Added: ]