Fixed and updated for advanced parse with json and add provider for exchange rate for money config
This commit is contained in:
parent
faf80ba967
commit
36599b5fb5
@ -50,9 +50,14 @@ object MoneyConfig {
|
||||
|
||||
val rates = config.split(getProperties().deliSplit)
|
||||
rates.map { i ->
|
||||
val temp = i.split(getProperties().deliEqual)
|
||||
val temp = i
|
||||
// remove the quote from string
|
||||
.replace("\"", "")
|
||||
.split(getProperties().deliEqual)
|
||||
if (temp.size == 2) {
|
||||
val currency = temp[0].toUpperCase().trim()
|
||||
val currency = temp[0]
|
||||
.toUpperCase()
|
||||
.trim()
|
||||
val value = temp[1].toDouble()
|
||||
if (MoneyConfig.config.containsKey(currency)) {
|
||||
MoneyConfig.config.replace(currency, value)
|
||||
@ -74,6 +79,29 @@ object MoneyConfig {
|
||||
}
|
||||
}
|
||||
|
||||
fun appendRate(provider: MoneyExchangeProvider) = apply {
|
||||
val currency = provider.getCurrency()
|
||||
val rate = provider.getRate()
|
||||
this.appendRate(currency, rate)
|
||||
}
|
||||
|
||||
/**
|
||||
* Json Format must be, example below
|
||||
*
|
||||
* {
|
||||
* "USD": 1,
|
||||
* "EUR": 0.99,
|
||||
* "...": ...
|
||||
* }
|
||||
*/
|
||||
fun fromJson(configJson: String, clearAllStates: Boolean = false) {
|
||||
val transformValues = configJson
|
||||
.removePrefix("{")
|
||||
.removeSuffix("}")
|
||||
|
||||
parse(transformValues, clearAllStates)
|
||||
}
|
||||
|
||||
// all currencies with its rate
|
||||
fun getConfig() = config
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.cubetiqs.money
|
||||
|
||||
interface MoneyExchangeProvider {
|
||||
fun getRate(currency: StdMoney.Currency): Double
|
||||
fun getCurrency(): String
|
||||
fun getRate(): Double
|
||||
}
|
@ -12,16 +12,15 @@ class MoneyTests {
|
||||
// .setDeliSplit(',')
|
||||
// .build()
|
||||
|
||||
val properties = buildMoneyConfigProperties {
|
||||
setDeliEqual(':')
|
||||
setDeliSplit(',')
|
||||
}
|
||||
|
||||
applyMoneyConfig {
|
||||
setProperties(properties)
|
||||
setProperties(buildMoneyConfigProperties {
|
||||
setDeliEqual(':')
|
||||
setDeliSplit(',')
|
||||
})
|
||||
// parse("USD:1,KHR:4000")
|
||||
appendRate("usd", 1.0)
|
||||
appendRate("khr", 4000.0)
|
||||
// appendRate("usd", 1.0)
|
||||
// appendRate("khr", 4000.0)
|
||||
fromJson(MyBatchRates.getJsonRates())
|
||||
}
|
||||
|
||||
// Is valid for money config?
|
||||
@ -33,4 +32,12 @@ class MoneyTests {
|
||||
// Is correct exchange?
|
||||
Assert.assertEquals(8000.0, moneyKhr.getMoneyValue(), 0.0)
|
||||
}
|
||||
|
||||
object MyBatchRates {
|
||||
fun getJsonRates(): String {
|
||||
return """
|
||||
{"USD": 1.0,"KHR": 4000.0}
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user