Skip to content

Commit

Permalink
in memory implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
alyssaruth committed Mar 8, 2024
1 parent e5c176b commit 7615d97
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 29 deletions.
28 changes: 28 additions & 0 deletions src/main/kotlin/dartzee/preferences/AbstractPreferenceService.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package dartzee.preferences

abstract class AbstractPreferenceService {
abstract fun <T : Any> delete(preference: Preference<T>)

protected abstract fun <T> getRaw(preference: Preference<T>): String

abstract fun <T : Any> save(preference: Preference<T>, value: T)

@Suppress("UNCHECKED_CAST")
fun <T : Any> get(preference: Preference<T>, useDefault: Boolean = false): T {
if (useDefault) {
return preference.default
}

val raw = getRaw(preference)
return when (val desiredType = preference.default::class) {
Boolean::class -> raw.toBoolean() as T
Double::class -> raw.toDouble() as T
Int::class -> raw.toInt() as T
String::class -> raw as T
else ->
throw TypeCastException(
"Unhandled type [${desiredType}] for preference ${preference.name}"
)
}
}
}
22 changes: 3 additions & 19 deletions src/main/kotlin/dartzee/preferences/DefaultPreferenceService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package dartzee.preferences
import dartzee.utils.NODE_PREFERENCES
import java.util.prefs.Preferences

class DefaultPreferenceService : IPreferenceService {
class DefaultPreferenceService : AbstractPreferenceService() {
private val preferences = Preferences.userRoot().node(NODE_PREFERENCES)

override fun <T : Any> delete(preference: Preference<T>) {
Expand All @@ -14,22 +14,6 @@ class DefaultPreferenceService : IPreferenceService {
preferences.put(preference.name, value.toString())
}

@Suppress("UNCHECKED_CAST")
override fun <T : Any> get(preference: Preference<T>, useDefault: Boolean): T {
if (useDefault) {
return preference.default
}

val raw = preferences.get(preference.name, preference.default.toString())
return when (val desiredType = preference.default::class) {
Boolean::class -> raw.toBoolean() as T
Double::class -> raw.toDouble() as T
Int::class -> raw.toInt() as T
String::class -> raw as T
else ->
throw TypeCastException(
"Unhandled type [${desiredType}] for preference ${preference.name}"
)
}
}
override fun <T> getRaw(preference: Preference<T>): String =
preferences.get(preference.name, preference.default.toString())
}
9 changes: 0 additions & 9 deletions src/main/kotlin/dartzee/preferences/IPreferenceService.kt

This file was deleted.

16 changes: 16 additions & 0 deletions src/test/kotlin/dartzee/preferences/InMemoryPreferenceService.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package dartzee.preferences

class InMemoryPreferenceService : AbstractPreferenceService() {
private val hmPreferences = mutableMapOf<String, String>()

override fun <T : Any> delete(preference: Preference<T>) {
hmPreferences.remove(preference.name)
}

override fun <T> getRaw(preference: Preference<T>) =
hmPreferences.getOrDefault(preference.name, preference.default.toString())

override fun <T : Any> save(preference: Preference<T>, value: T) {
hmPreferences[preference.name] = value.toString()
}
}
6 changes: 5 additions & 1 deletion src/test/kotlin/dartzee/preferences/PreferenceServiceTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@ private val INT_PREF = Preference("fake_int", 20)
private val DOUBLE_PREF = Preference("fake_double", 2.5)
private val BOOLEAN_PREF = Preference("fake_boolean", false)

class InMemoryPreferenceServiceTest : AbstractTest(), PreferenceServiceTest {
override val implementation = InMemoryPreferenceService()
}

class DefaultPreferenceServiceTest : AbstractTest(), PreferenceServiceTest {
override val implementation = DefaultPreferenceService()
}

interface PreferenceServiceTest {
val implementation: IPreferenceService
val implementation: AbstractPreferenceService

@AfterEach
fun afterEach() {
Expand Down

0 comments on commit 7615d97

Please sign in to comment.