Skip to content

Commit f957dea

Browse files
Adds additional items to the model
1 parent c6ab0ee commit f957dea

File tree

8 files changed

+141
-47
lines changed

8 files changed

+141
-47
lines changed

library/src/androidTest/java/nl/elements/objectstore/PreferencesStoreTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class PreferencesStoreTest {
2828
val key = "contains"
2929
val name = "Danny"
3030

31-
store.set(key, name)
31+
store[key] = name
3232

3333
assertTrue(store.contains(key))
3434
}
@@ -92,7 +92,7 @@ class PreferencesStoreTest {
9292
val key = "name"
9393
val value = "Danny"
9494

95-
store.set(key, value)
95+
store[key] = value
9696

9797
val actual = store.keys
9898

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,86 @@
11
package nl.elements.objectstore
22

3-
import nl.elements.objectstore.model.StringItem
4-
import nl.elements.objectstore.model.StringNullableItem
3+
import nl.elements.objectstore.model.AnyItem
4+
import nl.elements.objectstore.model.AnyNullableItem
55
import kotlin.properties.ReadWriteProperty
66

77
abstract class ObjectStoreModel(
88
internal val store: ObjectStore
99
) {
1010
/**
11-
* Clear all items in this store
11+
* Clears all items in this store
1212
*/
1313
fun clear() {
1414
store.keys.forEach(store::remove)
1515
}
1616

1717
/**
18-
* Delegate an item with string
18+
* Delegate a string item
1919
* @param default value
2020
* @param key custom key (optional)
2121
*/
2222
protected fun stringItem(
2323
default: String = "",
2424
key: String? = null
25-
): ReadWriteProperty<ObjectStoreModel, String> = StringItem(default, key)
25+
): ReadWriteProperty<ObjectStoreModel, String> = AnyItem(default, key)
2626

2727
/**
28-
* Delegate an item with nullable string
28+
* Delegate a nullable string item
2929
* @param default value
3030
* @param key custom key (optional)
3131
*/
3232
protected fun nullableStringItem(
3333
default: String? = null,
3434
key: String? = null
35-
): ReadWriteProperty<ObjectStoreModel, String?> = StringNullableItem(default, key)
35+
): ReadWriteProperty<ObjectStoreModel, String?> = AnyNullableItem(default, key)
36+
37+
/**
38+
* Delegate a boolean item
39+
* @param default value
40+
* @param key custom key (optional)
41+
*/
42+
protected fun booleanItem(
43+
default: Boolean = false,
44+
key: String? = null
45+
): ReadWriteProperty<ObjectStoreModel, Boolean> = AnyItem(default, key)
46+
47+
/**
48+
* Delegate a nullable boolean item
49+
* @param default value
50+
* @param key custom key (optional)
51+
*/
52+
protected fun booleanNullabeItem(
53+
default: Boolean? = null,
54+
key: String? = null
55+
): ReadWriteProperty<ObjectStoreModel, Boolean?> = AnyNullableItem(default, key)
56+
57+
/**
58+
* Delegate an int item
59+
* @param default value
60+
* @param key custom key (optional)
61+
*/
62+
protected fun intItem(
63+
default: Int = 0,
64+
key: String? = null
65+
): ReadWriteProperty<ObjectStoreModel, Int> = AnyItem(default, key)
66+
67+
/**
68+
* Delegate a long item
69+
* @param default value
70+
* @param key custom key (optional)
71+
*/
72+
protected fun longItem(
73+
default: Long = 0L,
74+
key: String? = null
75+
): ReadWriteProperty<ObjectStoreModel, Long> = AnyItem(default, key)
76+
77+
/**
78+
* Delegate a float item
79+
* @param default value
80+
* @param key custom key (optional)
81+
*/
82+
protected fun floatItem(
83+
default: Float = 0F,
84+
key: String? = null
85+
): ReadWriteProperty<ObjectStoreModel, Float> = AnyItem(default, key)
3686
}

library/src/main/java/nl/elements/objectstore/model/AbstractItem.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@ import nl.elements.objectstore.ObjectStoreModel
44
import kotlin.properties.ReadWriteProperty
55

66
abstract class AbstractItem<T : Any?> : ReadWriteProperty<ObjectStoreModel, T>, ItemKey {
7-
abstract override val key: String?
7+
}
8+
9+
abstract class NullableAbstractItem<T : Any?> : ReadWriteProperty<ObjectStoreModel, T?>, ItemKey {
810
}

library/src/main/java/nl/elements/objectstore/model/StringItem.kt renamed to library/src/main/java/nl/elements/objectstore/model/AnyItem.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,21 @@ package nl.elements.objectstore.model
33
import nl.elements.objectstore.ObjectStoreModel
44
import kotlin.reflect.KProperty
55

6-
internal class StringItem(
7-
val default: String,
6+
internal class AnyItem<T : Any>(
7+
val default: T,
88
override val key: String?
9-
) : AbstractItem<String>() {
9+
) : AbstractItem<T>() {
1010

11-
override fun getValue(thisRef: ObjectStoreModel, property: KProperty<*>): String {
12-
val realKey = key ?: property.name
13-
14-
return if (thisRef.store.contains(realKey)) {
15-
thisRef.store.get(realKey) ?: default
16-
} else {
17-
default
11+
override fun getValue(thisRef: ObjectStoreModel, property: KProperty<*>): T =
12+
(key ?: property.name).let { key ->
13+
if (thisRef.store.contains(key)) {
14+
thisRef.store[key] ?: default
15+
} else {
16+
default
17+
}
1818
}
19-
}
2019

21-
override fun setValue(thisRef: ObjectStoreModel, property: KProperty<*>, value: String) {
20+
override fun setValue(thisRef: ObjectStoreModel, property: KProperty<*>, value: T) {
2221
thisRef.store[key ?: property.name] = value
2322
}
2423
}

library/src/main/java/nl/elements/objectstore/model/StringNullableItem.kt renamed to library/src/main/java/nl/elements/objectstore/model/AnyNullableItem.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,21 @@ package nl.elements.objectstore.model
33
import nl.elements.objectstore.ObjectStoreModel
44
import kotlin.reflect.KProperty
55

6-
internal class StringNullableItem(
7-
val default: String?,
6+
internal class AnyNullableItem<T : Any>(
7+
val default: T?,
88
override val key: String?
9-
) : AbstractItem<String?>() {
9+
) : NullableAbstractItem<T>() {
1010

11-
override fun getValue(thisRef: ObjectStoreModel, property: KProperty<*>): String? {
12-
val realKey = key ?: property.name
13-
14-
return if (thisRef.store.contains(realKey)) {
15-
thisRef.store.get(realKey)
16-
} else {
17-
default
11+
override fun getValue(thisRef: ObjectStoreModel, property: KProperty<*>): T? =
12+
(key ?: property.name).let { key ->
13+
if (thisRef.store.contains(key)) {
14+
thisRef.store[key] ?: default
15+
} else {
16+
default
17+
}
1818
}
19-
}
2019

21-
override fun setValue(thisRef: ObjectStoreModel, property: KProperty<*>, value: String?) {
20+
override fun setValue(thisRef: ObjectStoreModel, property: KProperty<*>, value: T?) {
2221
thisRef.store[key ?: property.name] = value
2322
}
2423
}

library/src/main/java/nl/elements/objectstore/stores/PreferencesStore.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ class PreferencesStore(
4242
override fun contains(key: String): Boolean = preferences.contains(key)
4343

4444
override fun remove(key: String) {
45-
if (preferences.edit().remove(key).commit())
45+
if (preferences.edit().remove(key).commit()) {
4646
emit(Removed(key))
47+
}
4748
}
4849

4950
fun toPreferences(): SharedPreferences = StorePreferences(this, preferences)

library/src/test/java/nl/elements/objectstore/InMemoryStoreTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class InMemoryStoreTest {
2121
val key = "key"
2222
val value = "Danny"
2323

24-
store.set(key, value)
24+
store[key] = value
2525

2626
assertTrue(store.contains(key))
2727
}
@@ -85,7 +85,7 @@ class InMemoryStoreTest {
8585
val key = "name"
8686
val value = "Danny"
8787

88-
store.set(key, value)
88+
store[key] = value
8989

9090
val actual = store.keys
9191

library/src/test/java/nl/elements/objectstore/ObjectStoreModelTest.kt

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,78 @@ package nl.elements.objectstore
33
import nl.elements.objectstore.stores.MemoryStore
44
import org.junit.Test
55
import kotlin.test.assertEquals
6+
import kotlin.test.assertFalse
7+
import kotlin.test.assertNull
8+
import kotlin.test.assertTrue
69

710
class ObjectStoreModelTest {
811

912
@Test
1013
fun `Test Store Model with MemoryStore`() {
1114
val model = InMemoryModel()
1215

13-
val newValue = "Test"
14-
1516
assertEquals("", model.name)
17+
assertEquals(DEFAULT_STRING_VALUE, model.nameDefault)
18+
19+
assertNull(model.nameNull)
20+
assertEquals(DEFAULT_STRING_VALUE, model.nameNullDefault)
21+
22+
assertFalse(model.isOpen)
23+
assertFalse(model.isOpenDefault)
24+
25+
assertNull(model.isClosedNull)
26+
assertEquals(DEFAULT_BOOLEAN_VALUE, model.isClosedNullDefault)
27+
28+
assertEquals(0, model.int)
29+
assertEquals(DEFAULT_INT_VALUE, model.intDefault)
30+
31+
assertEquals(0, model.long)
32+
assertEquals(DEFAULT_LONG_VALUE, model.longDefault)
33+
34+
assertEquals(0F, model.float)
35+
assertEquals(DEFAULT_FLOAT_VALUE, model.floatDefault)
36+
}
1637

17-
model.name = newValue
38+
@Test
39+
fun `Test Store Model with MemoryStore to change values`() {
40+
val model = InMemoryModel()
1841

19-
assertEquals(newValue, model.name)
20-
assertEquals(DEFAULT_VALUE, model.nameWithDefault)
42+
model.isOpen = true
43+
model.name = "Test"
2144

22-
assertEquals(null, model.nameNull)
23-
assertEquals(DEFAULT_VALUE, model.nameNullWithDefault)
45+
assertTrue(model.isOpen)
46+
assertEquals("Test", model.name)
2447
}
2548

49+
2650
companion object {
2751
class InMemoryModel : ObjectStoreModel(MemoryStore()) {
2852
var name by stringItem()
29-
var nameWithDefault by stringItem(DEFAULT_VALUE)
53+
var nameDefault by stringItem(DEFAULT_STRING_VALUE)
3054

3155
var nameNull by nullableStringItem()
32-
var nameNullWithDefault by nullableStringItem(DEFAULT_VALUE)
56+
var nameNullDefault by nullableStringItem(DEFAULT_STRING_VALUE)
57+
58+
var isOpen by booleanItem()
59+
var isOpenDefault by booleanItem(false)
60+
61+
var isClosedNull by booleanNullabeItem()
62+
var isClosedNullDefault by booleanNullabeItem(DEFAULT_BOOLEAN_VALUE)
63+
64+
var int by intItem()
65+
var intDefault by intItem(DEFAULT_INT_VALUE)
66+
67+
var long by longItem()
68+
var longDefault by longItem(DEFAULT_LONG_VALUE)
69+
70+
var float by floatItem()
71+
var floatDefault by floatItem(DEFAULT_FLOAT_VALUE)
3372
}
3473

35-
const val DEFAULT_VALUE = "default"
74+
const val DEFAULT_STRING_VALUE = "default"
75+
const val DEFAULT_BOOLEAN_VALUE = true
76+
const val DEFAULT_INT_VALUE = 42
77+
const val DEFAULT_LONG_VALUE = 42L
78+
const val DEFAULT_FLOAT_VALUE = 42F
3679
}
3780
}

0 commit comments

Comments
 (0)