diff options
author | Rocky Madden <git@rockymadden.com> | 2014-01-07 12:54:09 -0700 |
---|---|---|
committer | Rocky Madden <git@rockymadden.com> | 2014-01-07 12:54:09 -0700 |
commit | 0890131e88dad54e13dfda85e4e60ffb9e3d8df5 (patch) | |
tree | 4b70ae550ce5623af8e1feb75dba168833da7f77 | |
parent | 27dfe9cbec09b3affb8ce01d8774004c3677dd9a (diff) | |
download | stringmetric-0890131e88dad54e13dfda85e4e60ffb9e3d8df5.tar.gz stringmetric-0890131e88dad54e13dfda85e4e60ffb9e3d8df5.tar.bz2 stringmetric-0890131e88dad54e13dfda85e4e60ffb9e3d8df5.zip |
Implicit clean up.
-rwxr-xr-x | cli/src/main/scala/com/rockymadden/stringmetric/cli/package.scala | 28 | ||||
-rwxr-xr-x | cli/src/test/scala/com/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("") |