Skip to content

Commit

Permalink
1) fromFileOrNull 2) ifNot
Browse files Browse the repository at this point in the history
  • Loading branch information
akoren committed Feb 7, 2018
1 parent 7bfb3ad commit c12d662
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 8 deletions.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#Fri Apr 21 08:48:38 BST 2017
#Wed Feb 07 19:56:24 MSK 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
Expand Down
18 changes: 15 additions & 3 deletions src/main/kotlin/com/natpryce/konfig/konfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -184,11 +184,20 @@ class ConfigurationProperties(
}

/**
* Load from optional file
* Load from optional file, returns EmptyConfiguration if file is not found
*/
@JvmStatic
fun fromOptionalFile(file: File) = if (file.exists()) fromFile(file) else EmptyConfiguration

fun fromFileOrEmpty(file: File) = if (file.exists()) fromFile(file) else EmptyConfiguration


/**
* Load from optional file, returns EmptyConfiguration if file is not found
*/
@JvmStatic
fun fromFileOrNull(file: File) = if (file.exists()) fromFile(file) else null



private fun load(input: InputStream?, location: Location, errorMessageFn: () -> String) =
(input ?: throw Misconfiguration(errorMessageFn())).use {
ConfigurationProperties(Properties().apply { load(input) }, location)
Expand Down Expand Up @@ -291,6 +300,9 @@ class Override(

infix fun Configuration.overriding(defaults: Configuration?) = if (defaults == null) this else Override(this, defaults)

infix fun Configuration.ifNot(betterConf: Configuration?) = betterConf ?: this


fun search(first: Configuration, vararg rest: Configuration) = rest.fold(first, ::Override)

/**
Expand Down
47 changes: 43 additions & 4 deletions src/test/kotlin/com/natpryce/konfig/konfig_tests.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import org.junit.Test
import java.io.File
import java.util.*
import kotlin.test.assertFalse
import kotlin.test.assertNull
import kotlin.test.assertTrue


Expand Down Expand Up @@ -153,10 +154,24 @@ class OverridingAndFallingBack {

val config = overrides overriding defaults

val sosoConfig = defaults ifNot null
val bestConfig = defaults ifNot overrides

val x = Key("x", stringType)
val y = Key("y", stringType)
val z = Key("z", stringType)

@Test
fun overrides_properties_if_not() {
assertThat(sosoConfig[x], equalTo("x"))
assertThat(sosoConfig[y], equalTo("y"))

assertThat(bestConfig[x], equalTo("XX"))
assertFalse(bestConfig.contains(y))
assertThat(bestConfig[z], equalTo("ZZ"))
}


@Test
fun overrides_default_properties() {
assertThat(config[x], equalTo("XX"))
Expand Down Expand Up @@ -298,6 +313,14 @@ class FromResources {
assertThat(config[a], equalTo(1))
assertThat(config[b], equalTo("two"))
}
}


class FromFile {

val a = Key("a", intType)
val b = Key("b", stringType)


@Test
fun can_load_from_file() {
Expand All @@ -306,19 +329,35 @@ class FromResources {
assertThat(config[a], equalTo(1))
assertThat(config[b], equalTo("two"))
}

@Test
fun can_load_from_optional_file() {
val config = ConfigurationProperties.fromOptionalFile(File("src/test/resources/com/natpryce/konfig/example.properties"))
val config = ConfigurationProperties.fromFileOrEmpty(File("src/test/resources/com/natpryce/konfig/example.properties"))

assertThat(config[a], equalTo(1))
assertThat(config[b], equalTo("two"))
}

@Test
fun should_return_empty_config_when_load_from_optional_file_thats_not_present() {
val config = ConfigurationProperties.fromOptionalFile(File("not.available.file"))
val config = ConfigurationProperties.fromFileOrEmpty(File("not.available.file"))

assertThat(config, equalTo<Configuration>(EmptyConfiguration))
}
}


@Test
fun can_load_from_optional_file_2() {
val config = ConfigurationProperties.fromFileOrNull(File("src/test/resources/com/natpryce/konfig/example.properties")) ?: throw NullPointerException("Config should be loaded")

assertThat(config[a], equalTo(1))
assertThat(config[b], equalTo("two"))
}

@Test
fun should_return_null_when_load_from_optional_file_thats_not_present() {
val config = ConfigurationProperties.fromFileOrNull(File("not.available.file"))

assertNull(config)
}
}

0 comments on commit c12d662

Please sign in to comment.