Skip to content

Commit e80e233

Browse files
Adds initial set-up for model delegation
1 parent 02178ec commit e80e233

File tree

5 files changed

+93
-0
lines changed

5 files changed

+93
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package nl.elements.objectstore
2+
3+
import nl.elements.objectstore.model.StringItem
4+
import kotlin.properties.ReadWriteProperty
5+
6+
abstract class ObjectStoreModel(
7+
internal val store: ObjectStore
8+
) {
9+
/**
10+
* Clear all items in this store
11+
*/
12+
fun clear() {
13+
store.keys.forEach(store::remove)
14+
}
15+
16+
/**
17+
* Delegate an item with type string
18+
* @param default default string value
19+
* @param key custom key
20+
*/
21+
protected fun stringPref(
22+
default: String = "",
23+
key: String? = null
24+
): ReadWriteProperty<ObjectStoreModel, String> = StringItem(default, key)
25+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package nl.elements.objectstore.model
2+
3+
import nl.elements.objectstore.ObjectStoreModel
4+
import kotlin.properties.ReadWriteProperty
5+
6+
abstract class AbstractItem<T : Any?> : ReadWriteProperty<ObjectStoreModel, T>, ItemKey {
7+
abstract override val key: String?
8+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package nl.elements.objectstore.model
2+
3+
interface ItemKey {
4+
val key: String?
5+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package nl.elements.objectstore.model
2+
3+
import nl.elements.objectstore.ObjectStoreModel
4+
import kotlin.reflect.KProperty
5+
6+
internal class StringItem(
7+
val default: String,
8+
override val key: String?
9+
) : AbstractItem<String>() {
10+
11+
override fun getValue(model: ObjectStoreModel, property: KProperty<*>): String {
12+
val realKey = key ?: property.name
13+
14+
return if (model.store.contains(realKey)) {
15+
model.store.get(realKey)
16+
} else {
17+
default
18+
}
19+
}
20+
21+
override fun setValue(model: ObjectStoreModel, property: KProperty<*>, value: String) {
22+
model.store[key ?: property.name] = value
23+
}
24+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package nl.elements.objectstore
2+
3+
import nl.elements.objectstore.stores.MemoryStore
4+
import org.junit.Test
5+
import kotlin.test.assertEquals
6+
7+
class ObjectStoreModelTest {
8+
9+
@Test
10+
fun `Test Store Model with MemoryStore`() {
11+
val model = InMemoryModel()
12+
13+
val newValue = "Test"
14+
15+
assertEquals("", model.name)
16+
17+
model.name = newValue
18+
19+
assertEquals(newValue, model.name)
20+
assertEquals(DEFAULT_VALUE, model.nameWithDefault)
21+
}
22+
23+
companion object {
24+
class InMemoryModel : ObjectStoreModel(MemoryStore()) {
25+
var name by stringPref()
26+
var nameWithDefault by stringPref(DEFAULT_VALUE)
27+
}
28+
29+
const val DEFAULT_VALUE = "default"
30+
}
31+
}

0 commit comments

Comments
 (0)