Skip to content

Commit 344a63f

Browse files
committed
Store resolved variables by key instead of id
1 parent 320aa15 commit 344a63f

File tree

4 files changed

+41
-43
lines changed

4 files changed

+41
-43
lines changed

HTTPShortcuts/app/src/main/kotlin/ch/rmy/android/http_shortcuts/scripting/actions/types/SetVariableAction.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ constructor(
3737
)
3838

3939
companion object {
40-
4140
private const val MAX_VARIABLE_LENGTH = 40_000
4241
}
4342
}

HTTPShortcuts/app/src/main/kotlin/ch/rmy/android/http_shortcuts/variables/VariableManager.kt

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,52 @@ class VariableManager(
1616
var globalVariables = globalVariables
1717
private set
1818

19-
private val variablesById: MutableMap<GlobalVariableId, GlobalVariable> = globalVariables.associateBy { it.id }.toMutableMap()
20-
private val variablesByKey: MutableMap<VariableKey, GlobalVariable> = globalVariables.associateBy { it.key }.toMutableMap()
21-
private val variableValuesById = mutableMapOf<String, String>()
19+
private val globalVariablesById: MutableMap<GlobalVariableId, GlobalVariable> = globalVariables.associateBy { it.id }.toMutableMap()
20+
private val globalVariablesByKey: MutableMap<VariableKey, GlobalVariable> = globalVariables.associateBy { it.key }.toMutableMap()
21+
private val variableValuesByKey = mutableMapOf<VariableKey, String>()
2222

2323
init {
2424
preResolvedValues.forEach { (variableKeyOrId, value) ->
2525
val variable = getGlobalVariableByKeyOrId(variableKeyOrId) ?: return@forEach
26-
variableValuesById[variable.id] = encodeValue(variable, value)
26+
variableValuesByKey[variable.key] = encodeValue(variable, value)
2727
}
2828
}
2929

3030
fun getGlobalVariableById(id: GlobalVariableId): GlobalVariable? =
31-
variablesById[id]
31+
globalVariablesById[id]
3232

3333
fun getGlobalVariableByKey(key: VariableKey): GlobalVariable? =
34-
variablesByKey[key]
34+
globalVariablesByKey[key]
3535

3636
fun getGlobalVariableByKeyOrId(keyOrId: VariableKeyOrId): GlobalVariable? =
37-
if (variablesById.containsKey(keyOrId)) {
37+
if (globalVariablesById.containsKey(keyOrId)) {
3838
getGlobalVariableById(keyOrId)
3939
} else {
4040
getGlobalVariableByKey(keyOrId)
4141
}
4242

4343
fun getGlobalVariableValueById(globalVariableId: GlobalVariableId): String? =
44-
variableValuesById[globalVariableId]
44+
getGlobalVariableById(globalVariableId)?.key
45+
?.let { variableKey ->
46+
getVariableValueByKey(variableKey)
47+
}
4548

4649
fun getVariableValueByKey(variableKey: VariableKey): String? =
47-
getGlobalVariableByKey(variableKey)?.id
48-
?.let { variableId ->
49-
getGlobalVariableValueById(variableId)
50-
}
50+
variableValuesByKey[variableKey]
5151

5252
fun getVariableValueByKeyOrId(variableKeyOrId: VariableKeyOrId): String? =
53-
getGlobalVariableByKeyOrId(variableKeyOrId)?.id
54-
?.let { variableId ->
55-
getGlobalVariableValueById(variableId)
53+
getGlobalVariableByKeyOrId(variableKeyOrId)?.key
54+
?.let { variableKey ->
55+
getVariableValueByKey(variableKey)
5656
}
5757

5858
fun setGlobalVariableValue(variable: GlobalVariable, value: String, storeOnly: Boolean = false) {
5959
val newVariable = variable.copy(value = value)
6060
this@VariableManager.globalVariables = this@VariableManager.globalVariables.map { if (it.id == variable.id) newVariable else it }
61-
variablesById[variable.id] = newVariable
62-
variablesByKey[variable.key] = newVariable
61+
globalVariablesById[variable.id] = newVariable
62+
globalVariablesByKey[variable.key] = newVariable
6363
if (!storeOnly) {
64-
variableValuesById[variable.id] = encodeValue(variable, value)
64+
variableValuesByKey[variable.key] = encodeValue(variable, value)
6565
}
6666
}
6767

@@ -73,29 +73,27 @@ class VariableManager(
7373
}
7474

7575
fun getVariableValuesByIds(): Map<GlobalVariableId, String> =
76-
variableValuesById
77-
78-
fun getVariableValuesByKeys(): Map<VariableKey, String> =
79-
variableValuesById
76+
variableValuesByKey
8077
.mapKeys { entry ->
81-
getGlobalVariableById(entry.key)!!.key
78+
getGlobalVariableByKey(entry.key)!!.id
8279
}
8380

84-
fun isResolved(globalVariableId: GlobalVariableId): Boolean =
85-
variableValuesById.containsKey(globalVariableId)
81+
fun getVariableValuesByKeys(): Map<VariableKey, String> =
82+
variableValuesByKey
83+
84+
fun isResolved(variableKey: VariableKey): Boolean =
85+
variableValuesByKey.containsKey(variableKey)
8686

87-
companion object {
88-
internal fun encodeValue(variable: GlobalVariable, value: String) =
89-
value
90-
.runIf(variable.jsonEncode) {
91-
JSONObject.quote(this).drop(1).dropLast(1)
92-
}
93-
.runIf(variable.urlEncode) {
94-
try {
95-
URLEncoder.encode(this, "utf-8")
96-
} catch (_: UnsupportedEncodingException) {
97-
this
98-
}
87+
private fun encodeValue(variable: GlobalVariable, value: String) =
88+
value
89+
.runIf(variable.jsonEncode) {
90+
JSONObject.quote(this).drop(1).dropLast(1)
91+
}
92+
.runIf(variable.urlEncode) {
93+
try {
94+
URLEncoder.encode(this, "utf-8")
95+
} catch (_: UnsupportedEncodingException) {
96+
this
9997
}
100-
}
98+
}
10199
}

HTTPShortcuts/app/src/main/kotlin/ch/rmy/android/http_shortcuts/variables/VariableResolver.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ constructor(
2424
) {
2525
requiredGlobalVariableIds
2626
.filter { globalVariableId ->
27-
!variableManager.isResolved(globalVariableId)
27+
val globalVariable = variableManager.getGlobalVariableById(globalVariableId)
28+
globalVariable != null && !variableManager.isResolved(globalVariable.key)
2829
}
2930
.toSet()
3031
.let { globalVariableIds ->
@@ -44,7 +45,7 @@ constructor(
4445
if (recursionDepth >= MAX_RECURSION_DEPTH) {
4546
return
4647
}
47-
if (variableManager.isResolved(globalVariable.id)) {
48+
if (variableManager.isResolved(globalVariable.key)) {
4849
return
4950
}
5051

HTTPShortcuts/app/src/test/kotlin/ch/rmy/android/http_shortcuts/variables/VariableResolverTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class VariableResolverTest {
176176
listOf(
177177
variable(id = "123", key = "myVariable1", value = "Hello {{789}}"),
178178
variable(id = "456", key = "myVariable2", value = "!!!"),
179-
variable(id = "789", key = "myVariable2", value = "World"),
179+
variable(id = "789", key = "myVariable3", value = "World"),
180180
),
181181
)
182182
VariableResolver(variableTypeFactory)
@@ -206,7 +206,7 @@ class VariableResolverTest {
206206
listOf(
207207
variable(id = "123", key = "myVariable1", value = "Hello {{456}}"),
208208
variable(id = "456", key = "myVariable2", value = "World{{789}}"),
209-
variable(id = "789", key = "myVariable2", value = "!!!"),
209+
variable(id = "789", key = "myVariable3", value = "!!!"),
210210
),
211211
)
212212
VariableResolver(variableTypeFactory)

0 commit comments

Comments
 (0)