Merge pull request #21 from mgifos/bug/20-schedule-refs

Workouts definitions can be referenced within a same week. #20
master
Nikola Petkov 8 years ago committed by GitHub
commit 7ba9176db9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      src/main/scala/com.github.mgifos.workouts/model/WeeklyPlan.scala
  2. 17
      src/test/scala/com/github/mgifos/workouts/WeekPlanSpec.scala
  3. 1
      src/test/scala/com/github/mgifos/workouts/model/WorkoutSpec.scala

@ -10,15 +10,14 @@ class WeeklyPlan(csv: Array[Byte]) {
private lazy val processed: Seq[Option[Workout]] = { private lazy val processed: Seq[Option[Workout]] = {
def weekPlan(week: Week, acc: Seq[Option[Workout]]): Seq[Option[Workout]] = Seq.tabulate(7) { weekDayNo => def weekPlan(week: Week, previousWeeks: Seq[Option[Workout]]): Seq[Option[Workout]] = Seq.tabulate(7) { weekDayNo =>
val maybeDayText = week.lift(weekDayNo + 1).flatMap(text => Option(text.trim).filter(_.nonEmpty)) week.lift(weekDayNo + 1).flatMap(text => Option(text.trim).filter(_.nonEmpty))
maybeDayText.map { dayText => }.foldLeft(Seq.empty[Option[Workout]])((acc, maybeDayText) => acc :+ maybeDayText.map { dayText =>
Workout.parseDef(dayText) match { Workout.parseDef(dayText) match {
case Right(definition) => definition case Right(definition) => definition
case Left(_) => onlyDefs(acc).find(_.name == dayText).map(_.toRef).getOrElse(WorkoutNote(dayText)) case Left(_) => onlyDefs(previousWeeks ++ acc).find(_.name == dayText).map(_.toRef).getOrElse(WorkoutNote(dayText))
}
}
} }
})
def loop(weeks: List[Week], acc: Seq[Option[Workout]]): Seq[Option[Workout]] = weeks match { def loop(weeks: List[Week], acc: Seq[Option[Workout]]): Seq[Option[Workout]] = weeks match {
case Nil => acc case Nil => acc

@ -0,0 +1,17 @@
package com.github.mgifos.workouts
import com.github.mgifos.workouts.model._
import org.scalatest.{ FlatSpec, Matchers }
class WeekPlanSpec extends FlatSpec with Matchers {
val runFast = "running: run-fast\n- warmup: 10:00\n- repeat: 2\n - run: 1500m @ 4:30-5:00\n - recover: 01:30 @ z2\n- cooldown: lap-button"
val runSlow = "running: run-slow\n- warmup: 10:00\n- run: 5km @ z2\n- cooldown: lap-button"
val testPlan = s"""1,"$runFast",,run-fast,,run-fast,,,\n2,,run-fast,"$runSlow",run-fast,,run-slow,,"""
"WeekPlan" should "detect workout definitions and references properly" in {
val plan = new WeeklyPlan(testPlan.getBytes)
plan.get.flatten should have size 7
plan.workouts should have size 2
}
}

@ -40,7 +40,6 @@ class WorkoutSpec extends FlatSpec with Matchers {
testNames.foreach { testName => testNames.foreach { testName =>
val x = Workout.parseDef(testWO.replace("run-fast", testName)) val x = Workout.parseDef(testWO.replace("run-fast", testName))
println(x)
x.right.get.name should be(testName) x.right.get.name should be(testName)
} }
} }

Loading…
Cancel
Save