Skip to content

Commit a5cfa1f

Browse files
authored
feature: KTX property delegation custom labels (#1066)
- Add default values to property delegates to allow for custom naming.
1 parent 2877ca0 commit a5cfa1f

16 files changed

+77
-60
lines changed

ktx/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class Cat : ParseObject() {
6565
class Cat : ParseObject() {
6666

6767
var name: String by stringAttribute() // That's it
68+
var legs: Int by intAttribute("cat-legs")
6869

6970
}
7071
```

ktx/src/main/java/com/parse/ktx/delegates/BooleanParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import kotlin.reflect.KProperty
88
/**
99
* A [Boolean] property delegation for [ParseObject].
1010
*/
11-
class BooleanParseDelegate {
11+
class BooleanParseDelegate(private val name: String?) {
1212

1313
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): Boolean {
14-
return parseObject.getBoolean(property.name)
14+
return parseObject.getBoolean(name ?: property.name)
1515
}
1616

1717
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: Boolean) {
18-
parseObject.put(property.name, value)
18+
parseObject.put(name ?: property.name, value)
1919
}
2020

2121
}
@@ -24,4 +24,4 @@ class BooleanParseDelegate {
2424
* Returns a [Boolean] property delegate for [ParseObject]s. This uses [ParseObject.getBoolean]
2525
* and [ParseObject.put].
2626
*/
27-
inline fun booleanAttribute() = BooleanParseDelegate()
27+
inline fun booleanAttribute(name: String? = null) = BooleanParseDelegate(name)

ktx/src/main/java/com/parse/ktx/delegates/BytesParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import kotlin.reflect.KProperty
99
/**
1010
* A [ByteArray] property delegation for [ParseObject].
1111
*/
12-
class BytesParseDelegate {
12+
class BytesParseDelegate(private val name: String?) {
1313

1414
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): ByteArray? {
15-
return parseObject.getBytes(property.name)
15+
return parseObject.getBytes(name ?: property.name)
1616
}
1717

1818
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: ByteArray?) {
19-
parseObject.putOrIgnore(property.name, value)
19+
parseObject.putOrIgnore(name ?:property.name, value)
2020
}
2121

2222
}
@@ -25,4 +25,4 @@ class BytesParseDelegate {
2525
* Returns a [ByteArray] property delegate for [ParseObject]s. This uses [ParseObject.getBytes]
2626
* and [ParseObject.putOrIgnore].
2727
*/
28-
inline fun bytesAttribute() = BytesParseDelegate()
28+
inline fun bytesAttribute(name: String? = null) = BytesParseDelegate(name)

ktx/src/main/java/com/parse/ktx/delegates/DoubleParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import kotlin.reflect.KProperty
88
/**
99
* A [Double] property delegation for [ParseObject].
1010
*/
11-
class DoubleParseDelegate {
11+
class DoubleParseDelegate(private val name: String?) {
1212

1313
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): Double {
14-
return parseObject.getDouble(property.name)
14+
return parseObject.getDouble(name ?: property.name)
1515
}
1616

1717
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: Double) {
18-
parseObject.put(property.name, value)
18+
parseObject.put(name ?: property.name, value)
1919
}
2020

2121
}
@@ -24,4 +24,4 @@ class DoubleParseDelegate {
2424
* Returns a [Double] property delegate for [ParseObject]s. This uses [ParseObject.getDouble]
2525
* and [ParseObject.put].
2626
*/
27-
inline fun doubleAttribute() = DoubleParseDelegate()
27+
inline fun doubleAttribute(name: String? = null) = DoubleParseDelegate(name)

ktx/src/main/java/com/parse/ktx/delegates/EnumParseDelegate.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,22 @@ import kotlin.reflect.KProperty
1111
* This implementation save enum's name in lower case on parse-server and when try retrieve it
1212
* convert again to upper case to find correspondent local enum.
1313
*/
14-
class EnumParseDelegate<T : Enum<T>>(private val default: T?, private val enumClass: Class<T>) {
14+
class EnumParseDelegate<T : Enum<T>>(
15+
private val name: String?,
16+
private val default: T?,
17+
private val enumClass: Class<T>
18+
) {
1519

1620
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): T {
1721
return try {
18-
java.lang.Enum.valueOf(enumClass, parseObject.getString(property.name)!!.toUpperCase())
22+
java.lang.Enum.valueOf(enumClass, parseObject.getString(name ?: property.name)!!.toUpperCase())
1923
} catch (e: Exception) {
2024
default ?: throw e
2125
}
2226
}
2327

2428
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, t: T) {
25-
parseObject.put(property.name, t.name.toLowerCase())
29+
parseObject.put(name ?: property.name, t.name.toLowerCase())
2630
}
2731

2832
}
@@ -31,4 +35,10 @@ class EnumParseDelegate<T : Enum<T>>(private val default: T?, private val enumCl
3135
* Returns a [Enum] property delegate for [ParseObject]s. This uses custom implementation for get
3236
* to retrieve a local version of the your enum and [ParseObject.put].
3337
*/
34-
inline fun <reified T : Enum<T>> enumAttribute(default: T? = null) = EnumParseDelegate(default, T::class.java)
38+
inline fun <reified T : Enum<T>> enumAttribute(default: T? = null) = EnumParseDelegate(null, default, T::class.java)
39+
40+
/**
41+
* Returns a [Enum] property delegate for [ParseObject]s. This uses custom implementation for get
42+
* to retrieve a local version of the your enum and [ParseObject.put].
43+
*/
44+
inline fun <reified T : Enum<T>> enumAttribute(name: String? = null, default: T? = null) = EnumParseDelegate(name, default, T::class.java)

ktx/src/main/java/com/parse/ktx/delegates/FloatParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import kotlin.reflect.KProperty
88
/**
99
* A [Float] property delegation for [ParseObject].
1010
*/
11-
class FloatParseDelegate {
11+
class FloatParseDelegate(private val name: String?) {
1212

1313
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): Float {
14-
return parseObject.getDouble(property.name).toFloat()
14+
return parseObject.getDouble(name ?: property.name).toFloat()
1515
}
1616

1717
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: Float) {
18-
parseObject.put(property.name, value)
18+
parseObject.put(name ?: property.name, value)
1919
}
2020

2121
}
@@ -24,4 +24,4 @@ class FloatParseDelegate {
2424
* Returns a [Float] property delegate for [ParseObject]s. This uses a custom implementation for get
2525
* and [ParseObject.put].
2626
*/
27-
inline fun floatAttribute() = FloatParseDelegate()
27+
inline fun floatAttribute(name: String? = null) = FloatParseDelegate(name)

ktx/src/main/java/com/parse/ktx/delegates/IntParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import kotlin.reflect.KProperty
88
/**
99
* A [Int] property delegation for [ParseObject].
1010
*/
11-
class IntParseDelegate {
11+
class IntParseDelegate(private val name: String?) {
1212

1313
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): Int {
14-
return parseObject.getInt(property.name)
14+
return parseObject.getInt(name ?: property.name)
1515
}
1616

1717
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: Int) {
18-
parseObject.put(property.name, value)
18+
parseObject.put(name ?:property.name, value)
1919
}
2020

2121
}
@@ -24,4 +24,4 @@ class IntParseDelegate {
2424
* Returns a [Int] property delegate for [ParseObject]s. This uses [ParseObject.getInt]
2525
* and [ParseObject.put].
2626
*/
27-
inline fun intAttribute() = IntParseDelegate()
27+
inline fun intAttribute(name: String? = null) = IntParseDelegate(name)

ktx/src/main/java/com/parse/ktx/delegates/JsonArrayParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ import kotlin.reflect.KProperty
1010
/**
1111
* A [JSONArray] property delegation for [ParseObject].
1212
*/
13-
class JsonArrayParseDelegate {
13+
class JsonArrayParseDelegate(private val name: String?) {
1414

1515
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): JSONArray? {
16-
return parseObject.getJSONArray(property.name)
16+
return parseObject.getJSONArray(name ?: property.name)
1717
}
1818

1919
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: JSONArray?) {
20-
parseObject.putOrIgnore(property.name, value)
20+
parseObject.putOrIgnore(name ?: property.name, value)
2121
}
2222

2323
}
@@ -26,4 +26,4 @@ class JsonArrayParseDelegate {
2626
* Returns a [JSONArray] property delegate for [ParseObject]s. This uses [ParseObject.getDouble]
2727
* and [ParseObject.putOrIgnore].
2828
*/
29-
inline fun jsonArrayAttribute() = JsonArrayParseDelegate()
29+
inline fun jsonArrayAttribute(name: String? = null) = JsonArrayParseDelegate(name)

ktx/src/main/java/com/parse/ktx/delegates/JsonObjectParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ import kotlin.reflect.KProperty
1010
/**
1111
* A [JSONObject] property delegation for [ParseObject].
1212
*/
13-
class JsonObjectParseDelegate {
13+
class JsonObjectParseDelegate(private val name: String?) {
1414

1515
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): JSONObject? {
16-
return parseObject.getJSONObject(property.name)
16+
return parseObject.getJSONObject(name ?: property.name)
1717
}
1818

1919
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: JSONObject?) {
20-
parseObject.putOrIgnore(property.name, value)
20+
parseObject.putOrIgnore(name ?: property.name, value)
2121
}
2222

2323
}
@@ -26,4 +26,4 @@ class JsonObjectParseDelegate {
2626
* Returns a [JSONObject] property delegate for [ParseObject]s. This uses [ParseObject.getJSONObject]
2727
* and [ParseObject.putOrIgnore].
2828
*/
29-
fun jsonObjectAttribute() = JsonObjectParseDelegate()
29+
fun jsonObjectAttribute(name: String? = null) = JsonObjectParseDelegate(name)

ktx/src/main/java/com/parse/ktx/delegates/ListParseDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import kotlin.reflect.KProperty
99
/**
1010
* A [List] property delegation for [ParseObject].
1111
*/
12-
class ListParseDelegate<T> {
12+
class ListParseDelegate<T>(private val name: String?) {
1313

1414
operator fun getValue(parseObject: ParseObject, property: KProperty<*>): MutableList<T>? {
15-
return parseObject.getList<T>(property.name) as? MutableList<T>
15+
return parseObject.getList<T>(name ?: property.name) as? MutableList<T>
1616
}
1717

1818
operator fun setValue(parseObject: ParseObject, property: KProperty<*>, value: MutableList<T>?) {
19-
parseObject.putOrIgnore(property.name, value)
19+
parseObject.putOrIgnore(name ?: property.name, value)
2020
}
2121

2222
}
@@ -25,4 +25,4 @@ class ListParseDelegate<T> {
2525
* Returns a [List] property delegate for [ParseObject]s. This uses [ParseObject.getList]
2626
* and [ParseObject.putOrIgnore].
2727
*/
28-
inline fun <T> listAttribute() = ListParseDelegate<T>()
28+
inline fun <T> listAttribute(name: String? = null) = ListParseDelegate<T>(null)

0 commit comments

Comments
 (0)