scala/ScalaBook/chapter-09/src/main/scala/scalabook/path/Paths.scala

package scalabook.path

import java.io.File

object Paths {
  val PathSep = File.pathSeparator
  
  def fromEnv(varName: String) = System.getenv(varName) match {
    case null => new Paths(Nil)
    case paths => new Paths(paths.split(PathSep).toList.map(Path(_)))
  }

  def fromEnv(varName: Symbol): Paths = fromEnv(varName.name)

  def fromPath(path: String) = new Paths(List(Path(path)))

  def fromPath(path: Path) = new Paths(List(path))
}

final class Paths(val elements: List[Path]) {
  def +(those: Paths) = new Paths(elements ::: those.elements)

  def +(that: Path) = new Paths(elements ::: List(that))

  def size = elements.size

  def foreach(f: Path => Unit) = elements foreach f

  def filter(f: Path => Boolean) = elements filter f

  def map[U](f: Path => U) = elements map f

  def flatMap[U](f: Path => Iterable[U]): List[U] = elements flatMap f

  override def toString = elements.mkString(Paths.PathSep)
}