Skip to content
This repository was archived by the owner on Apr 25, 2020. It is now read-only.

Commit 80b62d7

Browse files
committed
Remove dep to maybe, add keys with default value
1 parent 7c47a02 commit 80b62d7

File tree

6 files changed

+89
-49
lines changed

6 files changed

+89
-49
lines changed

pom.xml

+3-6
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,7 @@
7878
<artifactId>scala-library</artifactId>
7979
<version>${scala.version}</version>
8080
</dependency>
81-
<dependency>
82-
<groupId>com.ckkloverdos</groupId>
83-
<artifactId>maybe</artifactId>
84-
<version>0.5.0</version>
85-
</dependency>
81+
8682
<dependency>
8783
<groupId>junit</groupId>
8884
<artifactId>junit</artifactId>
@@ -131,8 +127,9 @@
131127
<plugin>
132128
<groupId>net.alchim31.maven</groupId>
133129
<artifactId>scala-maven-plugin</artifactId>
134-
<version>3.0.1</version>
130+
<version>3.1.0</version>
135131
<configuration>
132+
<recompileMode>incremental</recompileMode>
136133
<scalaVersion>${scala.version}</scalaVersion>
137134
<charset>${project.build.sourceEncoding}</charset>
138135
<args>

src/main/scala/com/ckkloverdos/env/Env.scala

+24-5
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,37 @@
1616

1717
package com.ckkloverdos.env
1818

19-
import com.ckkloverdos.maybe.{NoVal, Maybe}
2019
import com.ckkloverdos.key._
2120

2221
final class Env private[env](private[env] val map: Map[TypedKey[_], Any]) extends EnvBase[Env] {
2322

2423
protected def newEnv(map: Map[TypedKey[_], Any]): Env = new Env(map)
2524

26-
def +[T : Manifest](key: TypedKey[T], value: T): Env = new Env(map + (key -> value))
27-
28-
def +[T : Manifest](kv: (TypedKey[T], T)): Env = new Env(map + kv)
25+
def +[T : Manifest](
26+
key: TypedKeyOnly[T],
27+
value: T
28+
): Env = {
2929

30-
def +(kv: (String, Env)): Env = this + (EnvKey(kv._1), kv._2)
30+
new Env(map + (key -> value))
31+
}
32+
33+
def +[T : Manifest](
34+
key: TypedKeyWithDefault[T],
35+
value: Option[T]
36+
): Env = {
37+
38+
new Env(map + (key -> value.getOrElse(key.default)))
39+
}
40+
41+
def +[T : Manifest](
42+
key: TypedKeyWithDefault[T],
43+
value: T
44+
): Env = {
45+
46+
new Env(map + (key -> value))
47+
}
48+
49+
def +[T : Manifest](kv: (TypedKeyOnly[T], T)): Env = new Env(map + kv)
3150

3251
def ++(other: EnvBase[_]): Env = new Env(other.map ++ map)
3352

src/main/scala/com/ckkloverdos/env/EnvKey.scala

+6-3
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616

1717
package com.ckkloverdos.env
1818

19-
import com.ckkloverdos.key.TypedKeySkeleton
19+
import com.ckkloverdos.key.TypedKeyWithDefault
2020

2121
/**
22-
* A typed key for an [[com.ckkloverdos.env.Env]].
22+
* A typed key for an [[com.ckkloverdos.env.Env]] with a default value of an empty `Env`.
2323
*
2424
* @author Christos KK Loverdos <loverdos@gmail.com>
2525
*/
2626

27-
case class EnvKey(override val name: String) extends TypedKeySkeleton[Env](name)
27+
case class EnvKey(
28+
override val name: String,
29+
override val default: Env = Env()
30+
) extends TypedKeyWithDefault(name, default)

src/main/scala/com/ckkloverdos/key/typedkey.scala

+13-17
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
package com.ckkloverdos.key
1818

1919
import com.ckkloverdos.env.Env
20-
import com.ckkloverdos.maybe.Maybe
21-
import com.ckkloverdos.key.TypedKey.FromEnvTypedKey
2220

2321
/**
2422
* A key with a specific type attached.
@@ -31,9 +29,10 @@ import com.ckkloverdos.key.TypedKey.FromEnvTypedKey
3129
trait TypedKey[T] extends Ordered[TypedKey[_]]{
3230
def name: String
3331
def keyType: Manifest[T]
32+
def providesDefaultValue: Boolean
3433
}
3534

36-
abstract class TypedKeySkeleton[T: Manifest](val name: String) extends TypedKey[T] {
35+
sealed abstract class TypedKeySkeleton[T: Manifest](val name: String) extends TypedKey[T] {
3736
def keyType = manifest[T]
3837

3938
override def hashCode = (31 * name.## + keyType.##)
@@ -47,22 +46,19 @@ abstract class TypedKeySkeleton[T: Manifest](val name: String) extends TypedKey[
4746
case _ => false
4847
}
4948

50-
// override def toString =
51-
// {
52-
// val cname = getClass.getName
53-
// val shortName = cname.substring(cname.lastIndexOf('.') + 1)
54-
// "%s[%s](%s)".format(shortName, keyType, name)
55-
// }
49+
override def toString = {
50+
val cname = getClass.getName
51+
val shortName = cname.substring(cname.lastIndexOf('.') + 1)
52+
"%s[%s](%s)".format(shortName, keyType, name)
53+
}
54+
55+
def providesDefaultValue = false
5656

5757
def compare(that: TypedKey[_]) = this.name compareTo that.name
5858
}
5959

60-
object TypedKey {
61-
final class FromEnvTypedKey[T: Manifest](key: TypedKey[T]) {
62-
def from(env: Env): Maybe[T] = env.get(key)
63-
}
60+
class TypedKeyOnly[T: Manifest](override val name: String) extends TypedKeySkeleton[T](name)
6461

65-
implicit def typedKeyWithFrom[T: Manifest](key: TypedKey[T]): FromEnvTypedKey[T] = {
66-
new FromEnvTypedKey(key)
67-
}
68-
}
62+
class TypedKeyWithDefault[T: Manifest](override val name: String, val default: T) extends TypedKeySkeleton[T](name) {
63+
override def providesDefaultValue = true
64+
}

src/main/scala/com/ckkloverdos/key/typedkeyimpl.scala

+40-14
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,43 @@
1616

1717
package com.ckkloverdos.key
1818

19-
final case class ByteKey (override val name: String) extends TypedKeySkeleton[Byte] (name)
20-
final case class BooleanKey(override val name: String) extends TypedKeySkeleton[Boolean](name)
21-
final case class ShortKey (override val name: String) extends TypedKeySkeleton[Short] (name)
22-
final case class CharKey (override val name: String) extends TypedKeySkeleton[Char] (name)
23-
final case class IntKey (override val name: String) extends TypedKeySkeleton[Int] (name)
24-
final case class LongKey (override val name: String) extends TypedKeySkeleton[Long] (name)
25-
final case class FloatKey (override val name: String) extends TypedKeySkeleton[Float] (name)
26-
final case class DoubleKey (override val name: String) extends TypedKeySkeleton[Double] (name)
27-
28-
final case class StringKey (override val name: String) extends TypedKeySkeleton[String] (name)
29-
30-
final case class ListKey [T: Manifest](override val name: String) extends TypedKeySkeleton[List[T]](name)
31-
final case class ArrayKey[T: Manifest](override val name: String) extends TypedKeySkeleton[Array[T]](name)
32-
final case class SetKey [T: Manifest](override val name: String) extends TypedKeySkeleton[Set[T]](name)
19+
final case class ByteKey (override val name: String) extends TypedKeyOnly[Byte] (name)
20+
final case class BooleanKey(override val name: String) extends TypedKeyOnly[Boolean](name)
21+
final case class ShortKey (override val name: String) extends TypedKeyOnly[Short] (name)
22+
final case class CharKey (override val name: String) extends TypedKeyOnly[Char] (name)
23+
final case class IntKey (override val name: String) extends TypedKeyOnly[Int] (name)
24+
final case class LongKey (override val name: String) extends TypedKeyOnly[Long] (name)
25+
final case class FloatKey (override val name: String) extends TypedKeyOnly[Float] (name)
26+
final case class DoubleKey (override val name: String) extends TypedKeyOnly[Double] (name)
27+
final case class StringKey (override val name: String) extends TypedKeyOnly[String] (name)
28+
29+
final case class ListKey [T: Manifest](override val name: String) extends TypedKeyOnly[List[T]](name)
30+
final case class ArrayKey[T: Manifest](override val name: String) extends TypedKeyOnly[Array[T]](name)
31+
final case class SetKey [T: Manifest](override val name: String) extends TypedKeyOnly[Set[T]](name)
32+
33+
final case class ByteKeyDefault(override val name: String, override val default: Byte)
34+
extends TypedKeyWithDefault[Byte](name, default)
35+
36+
final case class BooleanKeyDefault(override val name: String, override val default: Boolean)
37+
extends TypedKeyWithDefault[Boolean](name, default)
38+
39+
final case class ShortKeyDefault(override val name: String, override val default: Short)
40+
extends TypedKeyWithDefault[Short](name, default)
41+
42+
final case class CharKeyDefault(override val name: String, override val default: Char)
43+
extends TypedKeyWithDefault[Char](name, default)
44+
45+
final case class IntKeyDefault(override val name: String, override val default: Int)
46+
extends TypedKeyWithDefault[Int](name, default)
47+
48+
final case class LongKeyDefault(override val name: String, override val default: Long)
49+
extends TypedKeyWithDefault[Long](name, default)
50+
51+
final case class FloatKeyDefault(override val name: String, override val default: Float)
52+
extends TypedKeyWithDefault[Float](name, default)
53+
54+
final case class DoubleKeyDefault(override val name: String, override val default: Double)
55+
extends TypedKeyWithDefault[Double](name, default)
56+
57+
final case class StringKeyDefault(override val name: String, override val default: String)
58+
extends TypedKeyWithDefault[String](name, default)

src/test/scala/com/ckkloverdos/env/EnvTest.scala

+3-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ package com.ckkloverdos.env
1717

1818
import org.junit.Assert
1919
import org.junit.Test
20-
import com.ckkloverdos.maybe.Just
2120
import com.ckkloverdos.key.{DoubleKey, IntKey, StringKey}
2221

2322
/**
@@ -50,19 +49,19 @@ class EnvTest {
5049
@Test
5150
def testStringKey: Unit = {
5251
val strValue = env.get(key1_str)
53-
Assert.assertEquals(Just(val1_str), strValue)
52+
Assert.assertEquals(Some(val1_str), strValue)
5453
}
5554

5655
@Test
5756
def testIntKey: Unit = {
5857
val intValue = env.get(key2_int)
59-
Assert.assertEquals(Just(val2_int), intValue)
58+
Assert.assertEquals(Some(val2_int), intValue)
6059
}
6160

6261
@Test
6362
def testDoubleKey: Unit = {
6463
val doubleValue = env.get(key5_double)
65-
Assert.assertEquals(Just(val5_double), doubleValue)
64+
Assert.assertEquals(Some(val5_double), doubleValue)
6665
}
6766

6867
@Test

0 commit comments

Comments
 (0)