Skip to content

Commit

Permalink
Const values not captured
Browse files Browse the repository at this point in the history
  • Loading branch information
krystian-panek-vmltech committed Oct 28, 2022
1 parent 7506216 commit 3f74c76
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 12 deletions.
22 changes: 18 additions & 4 deletions plugin/src/main/kotlin/io/wttech/gradle/config/Definition.kt
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,27 @@ open class Definition(val name: String, val project: Project) {
fun getProp(propName: String) = findProp(propName)
?: throw ConfigException("Prop '$propName' is not defined!")

/**
* All values without type coercion applied
*/
var values: Map<String, Any?>
get() = props.associate { it.name to it.value() }.toSortedMap()
set(vs) { vs.forEach { (k, v) -> findProp(k)?.valueSet(v) } }

/**
* All values except constants without type coercion applied
*/
private val valuesCaptured get() = props.filter { it.captured }.associate { it.name to it.value() }.toSortedMap()

private var valueSaveFilter: (Prop) -> Boolean = { true }

fun valueSaveFilter(predicate: (Prop) -> Boolean) {
this.valueSaveFilter = predicate
}

/**
* All values but with type coercion applied
*/
val valuesSaved: Map<String, Any?> get() = valuesSaved(valueSaveFilter)

fun valuesSaved(propFilter: (Prop) -> Boolean) = props.filter(propFilter).associate { it.name to it.valueSaved() }.toSortedMap()
Expand Down Expand Up @@ -153,7 +164,8 @@ open class Definition(val name: String, val project: Project) {
captureValues()
if (debug.get()) printValues()
validateValues()
saveValues()
saveCapturedValues()
saveValuesUsingSavers()
}

internal fun finalize() {
Expand Down Expand Up @@ -259,13 +271,15 @@ open class Definition(val name: String, val project: Project) {
section.save(target)
}

@Suppress("TooGenericExceptionCaught")
private fun saveValues() {
private fun saveCapturedValues() {
outputCapturedFile.get().asFile.let { file ->
logger.info("Config '$name' is saving captured values to file '$file'")
fileManager.writeYml(file, values)
fileManager.writeYml(file, valuesCaptured)
}
}

@Suppress("TooGenericExceptionCaught")
private fun saveValuesUsingSavers() {
if (valueSavers.isNotEmpty()) {
logger.info("Config '$name' is saving values additionally (${valueSavers.size})'")
valueSavers.forEach { valueSaver ->
Expand Down
12 changes: 6 additions & 6 deletions plugin/src/main/kotlin/io/wttech/gradle/config/Group.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,22 +47,22 @@ class Group(val definition: Definition, val name: String) {
props.add(project.provider { StringProp(this, name).apply(options) })
}

fun stringConst(name: String, value: String?) = stringProp(name) { const(); valueSet(value) }
fun stringConst(name: String, valueProvider: () -> String?) = stringProp(name) { const(); value.set(project.provider(valueProvider)) }
fun stringConst(name: String, value: String?) = stringProp(name) { valueSet(value); const(); }
fun stringConst(name: String, valueProvider: () -> String?) = stringProp(name) { value.set(project.provider(valueProvider)); const(); }

fun listProp(name: String, options: ListProp.() -> Unit = {}) {
props.add(project.provider { ListProp(this, name).apply(options) })
}

fun listConst(name: String, value: Any?) = listProp(name) { const(); valueSet(value) }
fun listConst(name: String, valueProvider: () -> List<String>?) = listProp(name) { const(); value.set(project.provider(valueProvider)) }
fun listConst(name: String, value: Any?) = listProp(name) { valueSet(value); const(); }
fun listConst(name: String, valueProvider: () -> List<String>?) = listProp(name) { value.set(project.provider(valueProvider)); const(); }

fun mapProp(name: String, options: MapProp.() -> Unit = {}) {
props.add(project.provider { MapProp(this, name).apply(options) })
}

fun mapConst(name: String, value: Any?) = mapProp(name) { const(); valueSet(value) }
fun mapConst(name: String, valueProvider: () -> Map<String, Any?>?) = mapProp(name) { const(); value.set(project.provider(valueProvider)) }
fun mapConst(name: String, value: Any?) = mapProp(name) { valueSet(value); const() }
fun mapConst(name: String, valueProvider: () -> Map<String, Any?>?) = mapProp(name) { value.set(project.provider(valueProvider)); const(); }

override fun equals(other: Any?): Boolean {
if (this === other) return true
Expand Down
6 changes: 4 additions & 2 deletions plugin/src/main/kotlin/io/wttech/gradle/config/Prop.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import io.wttech.gradle.config.prop.ListProp
import io.wttech.gradle.config.prop.MapProp
import io.wttech.gradle.config.prop.StringProp
import io.wttech.gradle.config.util.removeCommonWords
import java.util.*

abstract class Prop(val group: Group, val name: String) {

Expand Down Expand Up @@ -39,9 +38,12 @@ abstract class Prop(val group: Group, val name: String) {
visible.set(project.provider { predicate() })
}

internal var captured = true

fun const() {
captured = false
visible.set(false)
visible.finalizeValue()
enabled.set(false)
}

val enabled = project.objects.property(Boolean::class.java).convention(true)
Expand Down

0 comments on commit 3f74c76

Please sign in to comment.