" I represent an exercise performed by a user. " Class { #name : 'MFTExercise', #superclass : 'MFTObject', #instVars : [ 'englishName', 'frenchName', 'activatedMuscleGroups', 'equipment' ], #category : 'MyFitnessTracker-Core-Base', #package : 'MyFitnessTracker-Core', #tag : 'Base' } { #category : 'chest' } MFTExercise class >> barbellBenchPress [ ^ self newWithEnglishName equipment: MFTEquipment barbell; activates: MFTMuscleGroup chest ] { #category : 'compound' } MFTExercise class >> barbellSquat [ ^ self newWithEnglishName activates: MFTMuscleGroup leg; equipment: MFTEquipment barbell ] { #category : 'back' } MFTExercise class >> bentOverBarbellRows [ ^ self new englishName: 'bent-over barbell rows'; equipment: MFTEquipment barbell ] { #category : 'bicep' } MFTExercise class >> bicepCurl [ ^ self newWithEnglishName activates: MFTMuscleGroup arm ] { #category : 'back' } MFTExercise class >> cableCross [ ^ self newWithEnglishName activates: MFTMuscleGroup chest ] { #category : 'back' } MFTExercise class >> cableRow [ ^ self newWithEnglishName activates: MFTMuscleGroup back ] { #category : 'calves' } MFTExercise class >> calfRaise [ ^ self newWithEnglishName activates: MFTMuscleGroup calf ] { #category : 'back' } MFTExercise class >> closeGripPalmsUpPulldown [ ^ self new englishName: 'close-grip palms-up pulldown'; activates: MFTMuscleGroup back; equipment: MFTEquipment cable ] { #category : 'compound' } MFTExercise class >> deadlift [ ^ self newWithEnglishName activates: MFTMuscleGroup back ] { #category : 'compound' } MFTExercise class >> dip [ ^ self newWithEnglishName activates: MFTMuscleGroup chest; activates: MFTMuscleGroup arm ] { #category : 'chest' } MFTExercise class >> dumbbellBenchPress [ ^ self newWithEnglishName equipment: MFTEquipment dumbbell; activates: MFTMuscleGroup chest ] { #category : 'chest' } MFTExercise class >> dumbbellFly [ ^ self newWithEnglishName activates: MFTMuscleGroup chest; equipment: MFTEquipment dumbbell ] { #category : 'compound' } MFTExercise class >> gobletSquat [ ^ self newWithEnglishName equipment: MFTEquipment dumbbell ] { #category : 'bicep' } MFTExercise class >> hammerCurl [ ^ self newWithEnglishName activates: MFTMuscleGroup arm ] { #category : 'back' } MFTExercise class >> hyperextension [ ^ self newWithEnglishName equipment: MFTEquipment dumbbell ] { #category : 'chest' } MFTExercise class >> inclinePress [ ^ self newWithEnglishName activates: MFTMuscleGroup chest ] { #category : 'back' } MFTExercise class >> latPulldown [ ^ self newWithEnglishName activates: MFTMuscleGroup back; equipment: MFTEquipment cable ] { #category : 'back' } MFTExercise class >> latPullover [ ^ self newWithEnglishName equipment: MFTEquipment dumbbell ] { #category : 'shoulder' } MFTExercise class >> lateralRaise [ ^ self newWithEnglishName activates: MFTMuscleGroup shoulder ] { #category : 'leg' } MFTExercise class >> legExtension [ ^ self newWithEnglishName activates: MFTMuscleGroup leg; equipment: MFTEquipment legExtensionMachine ] { #category : 'back' } MFTExercise class >> legPress [ ^ self newWithEnglishName activates: MFTMuscleGroup leg; equipment: MFTEquipment legPressMachine ] { #category : 'tricep' } MFTExercise class >> lyingFrenchPress [ ^ self newWithEnglishName activates: MFTMuscleGroup arm; equipment: MFTEquipment ezBar ] { #category : 'as yet unclassified' } MFTExercise class >> newWithEnglishName [ "I return a MFTExercise instance for which englishName is set to the calling method selector, as a space-separated string." | exerciseNameFromSender | exerciseNameFromSender := (thisContext sender selector splitCamelCase collect: #asLowercase) joinUsing: Character space. ^ self new englishName: exerciseNameFromSender ] { #category : 'leg' } MFTExercise class >> pecDeck [ ^ self newWithEnglishName activates: MFTMuscleGroup chest; equipment: MFTEquipment pecDeck ] { #category : 'traps' } MFTExercise class >> rearDeltFly [ ^ self newWithEnglishName activates: MFTMuscleGroup shoulder; equipment: MFTEquipment pecDeck ] { #category : 'leg' } MFTExercise class >> seatedLegCurl [ ^ self newWithEnglishName activates: MFTMuscleGroup leg; equipment: MFTEquipment seatedLegCurlMachine ] { #category : 'shoulder' } MFTExercise class >> shoulderPressDumbell [ ^ self new englishName: 'shoulder press (dumbell)'; activates: MFTMuscleGroup shoulder; equipment: MFTEquipment dumbbell ] { #category : 'traps' } MFTExercise class >> shrug [ ^ self newWithEnglishName activates: MFTMuscleGroup back; equipment: MFTEquipment dumbbell ] { #category : 'core' } MFTExercise class >> sitUp [ ^ self new englishName: 'sit-up'; activates: MFTMuscleGroup abdominal ] { #category : 'tricep' } MFTExercise class >> tricepExtension [ ^ self newWithEnglishName activates: MFTMuscleGroup arm; equipment: MFTEquipment cable ] { #category : 'chest' } MFTExercise class >> tricepPressdown [ ^ self newWithEnglishName activates: MFTMuscleGroup arm; equipment: MFTEquipment cable ] { #category : 'comparing' } MFTExercise >> = anObject [ "Answer whether the receiver and anObject represent the same object." self == anObject ifTrue: [ ^ true ]. self class = anObject class ifFalse: [ ^ false ]. ^ equipment = anObject equipment and: [ englishName = anObject englishName ] ] { #category : 'accessing' } MFTExercise >> activates: aMFTMuscleGroup [ activatedMuscleGroups at: aMFTMuscleGroup put: 100 ] { #category : 'accessing' } MFTExercise >> activates: aMFTMuscleGroup percent: aPercentage [ activatedMuscleGroups at: aMFTMuscleGroup put: aPercentage ] { #category : 'accessing' } MFTExercise >> canonicalName [ ^ englishName ] { #category : 'accessing' } MFTExercise >> englishName [ ^ englishName ] { #category : 'accessing' } MFTExercise >> englishName: aString [ englishName := aString ] { #category : 'accessing' } MFTExercise >> equipment [ ^ equipment ] { #category : 'accessing' } MFTExercise >> equipment: aMFTEquipment [ equipment := aMFTEquipment ] { #category : 'accessing' } MFTExercise >> frenchName [ ^ frenchName ] { #category : 'accessing' } MFTExercise >> frenchName: aString [ frenchName := aString ] { #category : 'comparing' } MFTExercise >> hash [ "Answer an integer value that is related to the identity of the receiver." ^ equipment hash bitXor: englishName hash ] { #category : 'initialization' } MFTExercise >> initialize [ super initialize. englishName := String new. frenchName := String new. activatedMuscleGroups := Dictionary new ] { #category : 'accessing' } MFTExercise >> mainActivatedMuscleGroups [ | values maxValue | values := activatedMuscleGroups values ifEmpty: [ ^ nil ]. maxValue := values max. ^ activatedMuscleGroups keys select: [ :group | (activatedMuscleGroups at: group) = maxValue ] ]