Created
July 1, 2016 07:58
-
-
Save pwood/d5eb8d9e7a81d3a4f2aea90d15c77101 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//scalastyle:off | |
trait ConfigurationProvider { | |
def apply(key: String): Option[String] | |
} | |
object NullConfigurationProvider extends ConfigurationProvider { | |
override def apply(key: String): Option[String] = None | |
} | |
abstract class ChainedConfigurationProvider(next: ConfigurationProvider = NullConfigurationProvider) extends ConfigurationProvider { | |
override def apply(key: String): Option[String] = { | |
get(key) match { | |
case None => next(key) | |
case Some(value) => Some(value) | |
} | |
} | |
def get(key: String): Option[String] | |
} | |
class MapConfigurationProvider(data: Map[String, String], next: ConfigurationProvider = NullConfigurationProvider) extends ChainedConfigurationProvider(next) { | |
override def get(key: String): Option[String] = data.get(key) | |
} | |
var defaults = Map("a" -> "default", "b" -> "default") | |
var overridden = Map("a" -> "override") | |
var defaultCP = new MapConfigurationProvider(defaults) | |
var overridenCP = new MapConfigurationProvider(overridden, defaultCP) | |
// Some(override) | |
println(overridenCP("a")) | |
// Some(default) | |
println(overridenCP("b")) | |
// None | |
println(overridenCP("c")) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait ConfigurationProvider { | |
def apply(key: String): Option[String] | |
} | |
class MapConfigurationProvider(data: Map[String, String]) extends ConfigurationProvider{ | |
override def apply(key: String): Option[String] = data.get(key) | |
} | |
class Configuration(configurations: Seq[ConfigurationProvider]) extends ConfigurationProvider { | |
override def apply(key: String): Option[String] = { | |
configurations.find(_(key).isDefined) match { | |
case Some(cp) => cp(key) | |
case None => None | |
} | |
} | |
} | |
var defaults = Map("a" -> "default", "b" -> "default") | |
var overridden = Map("a" -> "override") | |
var defaultCP = new MapConfigurationProvider(defaults) | |
var overridenCP = new MapConfigurationProvider(overridden) | |
var cp = new Configuration(Seq(overridenCP, defaultCP)) | |
// Some(override) | |
println(cp("a")) | |
// Some(default) | |
println(cp("b")) | |
// None | |
println(cp("c")) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment