" I represent a log of workouts. " Class { #name : 'MFTWorkoutLogBook', #superclass : 'MFTObject', #instVars : [ 'workoutLogs' ], #category : 'MyFitnessTracker-Core-Logging', #package : 'MyFitnessTracker-Core', #tag : 'Logging' } { #category : 'initialization' } MFTWorkoutLogBook >> canonicalName [ ^ workoutLogs size asString , ' workouts logged' ] { #category : 'adding' } MFTWorkoutLogBook >> durationSinceLastWorkout [ ^ workoutLogs ifEmpty: [ nil ] ifNotEmpty: [ DateAndTime now - workoutLogs last finish ] ] { #category : 'initialization' } MFTWorkoutLogBook >> initialize [ super initialize. workoutLogs := OrderedCollection new ] { #category : 'adding' } MFTWorkoutLogBook >> lastLogForExercise: aMFTExercise [ "Answer the most recent workout log during which this exercise was performed." | lastLog | lastLog := (workoutLogs select: [ :workout | workout exercises includes: aMFTExercise ]) ifEmpty: [ ^ nil ] ifNotEmpty: [ :logs | logs detectMax: #finish ]. ^ lastLog ] { #category : 'adding' } MFTWorkoutLogBook >> lastLogForPrescription: aMFTWorkoutPrescription [ "Answer the most recent workout log for this workout prescription." | lastLog | lastLog := (workoutLogs select: [ :log | log prescription = aMFTWorkoutPrescription ]) ifEmpty: [ ^ nil ] ifNotEmpty: [ :logs | logs detectMax: #finish ]. ^ lastLog ] { #category : 'adding' } MFTWorkoutLogBook >> logWorkout: aMFTWorkoutLog [ workoutLogs addLast: aMFTWorkoutLog ] { #category : 'removing' } MFTWorkoutLogBook >> removeWorkoutLog: aMFTWorkoutLog [ workoutLogs remove: aMFTWorkoutLog ] { #category : 'as yet unclassified' } MFTWorkoutLogBook >> workoutLogIsInProgress [ ^ workoutLogs ifEmpty: [ false ] ifNotEmpty: [ workoutLogs last finish isNil ] ] { #category : 'initialization' } MFTWorkoutLogBook >> workoutLogs [ ^ workoutLogs ]