Skip to content

Instantly share code, notes, and snippets.

@pwood
Created July 1, 2016 07:58
Show Gist options
  • Save pwood/d5eb8d9e7a81d3a4f2aea90d15c77101 to your computer and use it in GitHub Desktop.
Save pwood/d5eb8d9e7a81d3a4f2aea90d15c77101 to your computer and use it in GitHub Desktop.
//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"))
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