From 0890131e88dad54e13dfda85e4e60ffb9e3d8df5 Mon Sep 17 00:00:00 2001 From: Rocky Madden Date: Tue, 7 Jan 2014 12:54:09 -0700 Subject: Implicit clean up. --- .../com/rockymadden/stringmetric/cli/package.scala | 28 +++++++++++----------- .../rockymadden/stringmetric/cli/PackageSpec.scala | 20 +++++++--------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/cli/src/main/scala/com/rockymadden/stringmetric/cli/package.scala b/cli/src/main/scala/com/rockymadden/stringmetric/cli/package.scala index 8292d02..ac47462 100755 --- a/cli/src/main/scala/com/rockymadden/stringmetric/cli/package.scala +++ b/cli/src/main/scala/com/rockymadden/stringmetric/cli/package.scala @@ -1,16 +1,14 @@ package com.rockymadden.stringmetric -/** - * Provides core CLI functionality. Note that some things might look sloppy (e.g. access modifiers, broad imports, - * repetitive imports, etc), but are required because of the way scalascript is ultimately compiled. - */ + +// Some things might look sloppy (e.g. access modifiers, broad imports, repetitive imports, etc), but are required +// because of the way "scalascript" is ultimately compiled. package object cli { import scala.language.implicitConversions implicit def optionStringToArray(os: OptionString): Array[String] = - if (os.get.length == 0) Array.empty[String] - else os.get.split(" ") + if (os.get.length == 0) Array.empty[String] else os.get.split(" ") implicit def optionStringToBigDecimal(os: OptionString): BigDecimal = BigDecimal(os.get) implicit def optionStringToBigInt(os: OptionString): BigInt = BigInt(os.get) implicit def optionStringToDouble(os: OptionString): Double = os.get.toDouble @@ -19,27 +17,29 @@ package object cli { implicit def optionStringToLong(os: OptionString): Long = os.get.toLong implicit def optionStringToShort(os: OptionString): Short = os.get.toShort implicit def optionStringToString(os: OptionString): String = os.get - implicit def stringToOptionString(s: String): OptionString = OptionString(s) - implicit def arrayOfStringToOptionMap(stringArray: Array[String]): OptionMap = OptionMap(stringArray) - final val Ls = sys.props("line.separator") - final val Tab = " " + val Ls = sys.props("line.separator") + val Tab = " " class OptionString(val get: String) + object OptionString { + implicit def fromString(s: String): OptionString = OptionString(s) + def apply(s: String): OptionString = new OptionString(s) } type OptionMap = Map[Symbol, OptionString] + object OptionMap { - def apply(args: Array[String]): OptionMap = apply(args: _*) + def apply(as: Array[String]): OptionMap = apply(as: _*) - def apply(varargs: String*): OptionMap = { + def apply(as: String*): OptionMap = { @annotation.tailrec def next(om: OptionMap, a: List[String]): OptionMap = { val double = """^(--[a-zA-Z0-9]+)(=[a-zA-Z0-9\.\-_]+)?""".r @@ -67,7 +67,7 @@ package object cli { } } - next(Map.empty[Symbol, OptionString], varargs.toList) + next(Map.empty[Symbol, OptionString], as.toList) } } @@ -78,7 +78,7 @@ package object cli { protected val execute: (OptionMap => String) ) { def main(args: Array[String]): Unit = { - val opts: OptionMap = args + val opts = OptionMap(args) try if (opts.contains('h) || opts.contains('help)) { diff --git a/cli/src/test/scala/com/rockymadden/stringmetric/cli/PackageSpec.scala b/cli/src/test/scala/com/rockymadden/stringmetric/cli/PackageSpec.scala index ac31a4d..44550dc 100755 --- a/cli/src/test/scala/com/rockymadden/stringmetric/cli/PackageSpec.scala +++ b/cli/src/test/scala/com/rockymadden/stringmetric/cli/PackageSpec.scala @@ -3,51 +3,49 @@ package com.rockymadden.stringmetric.cli object PackageSpec extends org.specs2.mutable.SpecificationWithJUnit { "OptionMap apply()" should { "return populated Map with single valid double dashed option" in { - val opts: OptionMap = Array("--help") + val opts = OptionMap("--help") (opts('help): String) must beEqualTo("") } "return populated Map with multiple valid double dashed opts" in { - val opts: OptionMap = Array("--help", "--test=test") + val opts = OptionMap("--help", "--test=test") (opts('help): String) must beEqualTo("") (opts('test): String) must beEqualTo("test") } "return empty Map with invalid double dashed opts" in { - val opts: OptionMap = Array("--help#", "--test%=test") + val opts = OptionMap("--help#", "--test%=test") opts.keysIterator.length must beEqualTo(0) } "return populated Map with single valid single dashed option" in { - val opts: OptionMap = Array("-h") + val opts = OptionMap("-h") (opts('h): String) must beEqualTo("") } "return populated Map multiple valid single dashed opts" in { - val opts: OptionMap = Array("-h", "-i") + val opts = OptionMap("-h", "-i") (opts('h): String) must beEqualTo("") (opts('i): String) must beEqualTo("") } "return empty Map with invalid single dashed opts" in { - val opts: OptionMap = Array("-h-i", "-i#gloo") + val opts = OptionMap("-h-i", "-i#gloo") opts.keysIterator.length must beEqualTo(0) } "return single key populated Map with single nameless option" in { - val opts: OptionMap = Array("filename0") + val opts = OptionMap("filename0") (opts('dashless): String).count(_ == ' ') must beEqualTo(0) } "return single key populated Map with multiple single nameless opts" in { - val opts: OptionMap = Array("filename0", "filename1", "filename2") + val opts = OptionMap("filename0", "filename1", "filename2") (opts('dashless): String).count(_ == ' ') must beEqualTo(2) } "return populated Map with mixed opts" in { - val opts: OptionMap = Array( - "-q", "--help", "--test=test", "-go", "filename0", "filename1", "filename2" - ) + val opts = OptionMap("-q", "--help", "--test=test", "-go", "filename0", "filename1", "filename2") (opts('q): String) must beEqualTo("") (opts('help): String) must beEqualTo("") -- cgit v1.2.3