firebase-kotlin-sdk
firebase-kotlin-sdk copied to clipboard
Firestore customizable encoding for where clauses and update methods
Fixes #604 and trumps #605
This solution extends all update methods in Firestore to support more advanced update methods. String fields and FieldPaths can now be used interchangably and custom serializer can be passed.
documentRef.update("field" to "value, "otherField" to 1)
becomes
documentRef.update {
// specifying build settings is optional
buildSettings = {}
"field" to "value"
FieldPath("otherField") to 1
"customField".to(CustomValueSerializer(), customValue)
}
Note that the existing vararg pairs can still be used.
Similar support has been added to where
clauses as well as startAt
/endAt
/etc:
query.startAt {
add(value)
addWithStrategy(CustomValueSerializer(), customValue)
}
There is a small regression on the existing update methods in that
public fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair<String, Any?>, buildSettings: EncodeSettings.Builder.() -> Unit)
changed to public fun update(documentRef: DocumentReference, buildSettings: EncodeSettings.Builder.() -> Unit, vararg fieldsAndValues: Pair<String, Any?>)
due to Kotlin not being able to figure out which update method to use.
Furthermore, I've split the Firestore tests into a few different files and extended them so they clean up all data after completion.
Lastly, I discovered bug #613 and fixed it