Compare commits
No commits in common. "e82fb280abc6f1b7156dbcf3e1be10b128f5fc84" and "377809383d616ee669d71c7634c7399e58ab8c0b" have entirely different histories.
e82fb280ab
...
377809383d
@ -2,7 +2,7 @@ package com.cubetiqs.libra.moneyutils
|
|||||||
|
|
||||||
open class Money(
|
open class Money(
|
||||||
var value: Double,
|
var value: Double,
|
||||||
@SpecialString(trim = true, upperCase = true) private var currency: String = "USD"
|
private var currency: String = "USD"
|
||||||
) : StdMoney {
|
) : StdMoney {
|
||||||
|
|
||||||
//////////////////// - PROPERTIES - ////////////////////
|
//////////////////// - PROPERTIES - ////////////////////
|
||||||
@ -12,7 +12,7 @@ open class Money(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getMoneyCurrency(): String {
|
override fun getMoneyCurrency(): String {
|
||||||
return this.currency
|
return this.currency.toUpperCase()
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////// - GENERIC - ////////////////////
|
//////////////////// - GENERIC - ////////////////////
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
package com.cubetiqs.libra.moneyutils
|
|
||||||
|
|
||||||
fun StdMoney.addMoney(value: Double, currency: String): StdMoney {
|
|
||||||
return this + Money.create(value, currency)
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package com.cubetiqs.libra.moneyutils
|
|
||||||
|
|
||||||
fun StdMoney.exchangeTo(currency: String): StdMoney {
|
|
||||||
return MoneyExchangeUtils.exchange(this, currency)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun StdMoney.isMatchedCurrency(currency: String) = this.getMoneyCurrency().equals(currency, ignoreCase = true)
|
|
@ -1,12 +1,13 @@
|
|||||||
package com.cubetiqs.libra.moneyutils
|
package com.cubetiqs.libra.moneyutils
|
||||||
|
|
||||||
operator fun StdMoney.unaryMinus() = (-getMoneyValue())
|
operator fun Money.unaryMinus() = (-getMoneyValue())
|
||||||
operator fun StdMoney.unaryPlus() = (+getMoneyValue())
|
operator fun Money.unaryPlus() = (+getMoneyValue())
|
||||||
operator fun Money.inc() = Money(value++)
|
operator fun Money.inc() = Money(value++)
|
||||||
operator fun Money.dec() = Money(value--)
|
operator fun Money.dec() = Money(value--)
|
||||||
operator fun StdMoney.plus(other: StdMoney) = Money(getMoneyValue() + other.getMoneyValue())
|
operator fun Money.plus(other: Money) = Money(value + other.value)
|
||||||
operator fun StdMoney.times(other: StdMoney) = Money(getMoneyValue() * other.getMoneyValue())
|
operator fun Money.times(other: Money) = Money(value * other.value)
|
||||||
operator fun StdMoney.div(other: StdMoney) = Money(getMoneyValue() / other.getMoneyValue())
|
operator fun Money.div(other: Money) = Money(value / other.value)
|
||||||
operator fun Money.timesAssign(other: StdMoney) {
|
operator fun Money.timesAssign(other: Money) {
|
||||||
this.value = this.getMoneyValue() * other.getMoneyValue()
|
this.value = this.value * other.value
|
||||||
}
|
}
|
||||||
|
operator fun Money.not() = this.value != this.value
|
@ -1,5 +0,0 @@
|
|||||||
package com.cubetiqs.libra.moneyutils
|
|
||||||
|
|
||||||
@Target(AnnotationTarget.FIELD)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
annotation class SpecialString(val value: String = "", val upperCase: Boolean = true, val trim: Boolean = true)
|
|
@ -1,37 +0,0 @@
|
|||||||
package com.cubetiqs.libra.moneyutils
|
|
||||||
|
|
||||||
import java.lang.reflect.Field
|
|
||||||
|
|
||||||
class SpecialStringProcessor: ISerializer {
|
|
||||||
override fun <T> serialize(data: T?): T? {
|
|
||||||
if (data == null) return null
|
|
||||||
val clazz = data.javaClass
|
|
||||||
clazz.declaredFields.forEach {
|
|
||||||
it.isAccessible = true
|
|
||||||
if (it.isAnnotationPresent(SpecialString::class.java) && it.genericType == String::class.java) {
|
|
||||||
val annotationValues = it.getAnnotation(SpecialString::class.java)
|
|
||||||
var value = it.get(data).toString()
|
|
||||||
if (annotationValues.trim) {
|
|
||||||
value = value.trim()
|
|
||||||
}
|
|
||||||
if (annotationValues.upperCase) {
|
|
||||||
value = value.toUpperCase()
|
|
||||||
}
|
|
||||||
it.set(data, value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getSerializeKey(field: Field): String {
|
|
||||||
val annotationValue = field.getAnnotation(SpecialString::class.java).value
|
|
||||||
return if (annotationValue.isEmpty()) {
|
|
||||||
field.name
|
|
||||||
} else annotationValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ISerializer {
|
|
||||||
fun <T> serialize(data: T?): T?
|
|
||||||
}
|
|
@ -20,6 +20,5 @@ interface StdMoney {
|
|||||||
*
|
*
|
||||||
* @return String
|
* @return String
|
||||||
*/
|
*/
|
||||||
@SpecialString
|
|
||||||
fun getMoneyCurrency(): String
|
fun getMoneyCurrency(): String
|
||||||
}
|
}
|
@ -2,21 +2,20 @@ import com.cubetiqs.libra.moneyutils.Money
|
|||||||
import com.cubetiqs.libra.moneyutils.MoneyConfig
|
import com.cubetiqs.libra.moneyutils.MoneyConfig
|
||||||
import com.cubetiqs.libra.moneyutils.MoneyCurrency
|
import com.cubetiqs.libra.moneyutils.MoneyCurrency
|
||||||
import com.cubetiqs.libra.moneyutils.MoneyExchangeUtils
|
import com.cubetiqs.libra.moneyutils.MoneyExchangeUtils
|
||||||
import com.cubetiqs.libra.moneyutils.SpecialStringProcessor
|
import com.cubetiqs.libra.moneyutils.plus
|
||||||
|
import com.cubetiqs.libra.moneyutils.times
|
||||||
|
import com.cubetiqs.libra.moneyutils.timesAssign
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class MoneyTests {
|
class MoneyTests {
|
||||||
@Test
|
@Test
|
||||||
fun money_operator_test() {
|
fun money_operator_test() {
|
||||||
// val money = Money(10.0)
|
val money = Money(10.0)
|
||||||
// val money2 = Money(20.0)
|
val money2 = Money(20.0)
|
||||||
// money *= money
|
money *= money
|
||||||
// println((money + money2) * money2)
|
println((money + money2) * money2)
|
||||||
// Assert.assertEquals(100.0, money.value, 0.0)
|
Assert.assertEquals(100.0, money.value, 0.0)
|
||||||
|
|
||||||
val test = SpecialStringProcessor().serialize(Money(1.0, " usd "))
|
|
||||||
println(test)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -48,7 +47,7 @@ class MoneyTests {
|
|||||||
.setDeliEqual('=')
|
.setDeliEqual('=')
|
||||||
.setDeliSplit(';')
|
.setDeliSplit(';')
|
||||||
|
|
||||||
MoneyConfig.parse("USD:1,KHR=4000,EUR=0.99")
|
MoneyConfig.parse("USD=1,KHR=4000,EUR=0.99")
|
||||||
|
|
||||||
val moneyUsd = Money.ONE
|
val moneyUsd = Money.ONE
|
||||||
val moneyKhr = Money.create(20000.0, MoneyCurrency.KHR)
|
val moneyKhr = Money.create(20000.0, MoneyCurrency.KHR)
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
import org.junit.Test
|
|
||||||
|
|
||||||
class ObjectTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun builder_object_test() {
|
|
||||||
val person = Person
|
|
||||||
.builder()
|
|
||||||
.name("Sambo Chea")
|
|
||||||
.id(10)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
println(person)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data class Person(val id: Long? = null, val name: String? = null) {
|
|
||||||
companion object {
|
|
||||||
fun builder(): PersonBuilder {
|
|
||||||
return PersonBuilder()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PersonBuilder {
|
|
||||||
private var id: Long? = null
|
|
||||||
private var name: String? = null
|
|
||||||
|
|
||||||
fun id(id: Long?) = apply { this.id = id }
|
|
||||||
fun name(name: String?) = apply { this.name = name }
|
|
||||||
|
|
||||||
fun build(): Person {
|
|
||||||
return Person(id, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user