KOTLIN_LIB Telegram 579
Konfeature — библиотека на Kotlin для работы с удалённой конфигурацией фич

Работа с удалённой конфигурацией стала стандартной частью процесса разработки почти любого приложения. В зависимости от сложности могут потребоваться:

* удобный синтаксис для объявления элементов конфигурации
* возможность разделять конфигурацию по разным файлам для разных фич
* возможность использовать локальную конфигурацию на этапе активной разработки фич
* поддержка нескольких источников данных для удалённой конфигурации
* возможность просматривать список всех конфигураций и изменять их значения в целях отладки
* логирование значения и его источника при обращении к конфигурации, а также не‐критичных ошибок

Мы постарались учесть все эти требования при разработке Konfeature.

Установка


repositories {
mavenCentral()
}

dependencies {
implementation("com.redmadrobot.konfeature:konfeature:<версия>")
}


Использование

FeatureConfig

Определяет набор элементов конфигурации с помощью делегатов:

* by toggle(...) — для Boolean
* by value(...) — для остальных типов


class ProfileFeatureConfig : FeatureConfig(
name = "profile_feature_config",
description = "Конфигурация фич для профиля"
) {
val isProfileFeatureEnabled: Boolean by toggle(
key = "profile_feature",
description = "показывать точку входа в профиль",
defaultValue = false,
)

val profileFeatureTitle: String by value(
key = "profile_feature_title",
description = "заголовок кнопки профиля",
defaultValue = "Feature number nine",
sourceSelectionStrategy = SourceSelectionStrategy.Any
)

val profileButtonAppearDuration: Long by value(
key = "profile_button_appear_duration",
description = "длительность появления кнопки профиля в мс",
defaultValue = 200,
sourceSelectionStrategy = SourceSelectionStrategy.Any
)
}


Регистрация конфигурации:


val profileFeatureConfig = ProfileFeatureConfig()
val konfeatureInstance = konfeature {
register(profileFeatureConfig)
}


FeatureSource

Абстракция источника значений:


interface FeatureSource {
val name: String
fun get(key: String): Any?
}


Пример для FirebaseRemoteConfig:


class FirebaseFeatureSource(
private val remoteConfig: FirebaseRemoteConfig
) : FeatureSource {
override val name: String = "FirebaseRemoteConfig"

override fun get(key: String): Any? {
return remoteConfig
.getValue(key)
.takeIf { source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE }
?.let { value ->
value.getOrNull { asBoolean() }
?: value.getOrNull { asString() }
?: value.getOrNull { asLong() }
?: value.getOrNull { asDouble() }
}
}

private fun FirebaseRemoteConfigValue.getOrNull(getter: FirebaseRemoteConfigValue.() -> Any?): Any? {
return try {
getter()
} catch (error: IllegalArgumentException) {
null
}
}
}


Добавление источника:


val konfeatureInstance = konfeature {
addSource(FirebaseFeatureSource(remoteConfig))
register(profileFeatureConfig)
}


SourceSelectionStrategy

Позволяет гибко выбирать, из каких источников запрашивать значение:


public interface SourceSelectionStrategy {
fun select(names: Set<String>): Set<String>

companion object {
val None: SourceSelectionStrategy = SourceSelectionStrategy { emptySet() }
val Any: SourceSelectionStrategy = SourceSelectionStrategy { it }
fun anyOf(vararg sources: String): SourceSelectionStrategy = SourceSelectionStrategy { sources.toSet() }
}
}


Предопределённые стратегии:

* None — всегда использовать только defaultValue
* Any — разрешает брать значения из любого источника
* anyOf("Source1", …) — только из указанных источников


https://github.com/RedMadRobot/Konfeature

✍️ @kotlin_lib
👍3



tgoop.com/kotlin_lib/579
Create:
Last Update:

Konfeature — библиотека на Kotlin для работы с удалённой конфигурацией фич

Работа с удалённой конфигурацией стала стандартной частью процесса разработки почти любого приложения. В зависимости от сложности могут потребоваться:

* удобный синтаксис для объявления элементов конфигурации
* возможность разделять конфигурацию по разным файлам для разных фич
* возможность использовать локальную конфигурацию на этапе активной разработки фич
* поддержка нескольких источников данных для удалённой конфигурации
* возможность просматривать список всех конфигураций и изменять их значения в целях отладки
* логирование значения и его источника при обращении к конфигурации, а также не‐критичных ошибок

Мы постарались учесть все эти требования при разработке Konfeature.

Установка


repositories {
mavenCentral()
}

dependencies {
implementation("com.redmadrobot.konfeature:konfeature:<версия>")
}


Использование

FeatureConfig

Определяет набор элементов конфигурации с помощью делегатов:

* by toggle(...) — для Boolean
* by value(...) — для остальных типов


class ProfileFeatureConfig : FeatureConfig(
name = "profile_feature_config",
description = "Конфигурация фич для профиля"
) {
val isProfileFeatureEnabled: Boolean by toggle(
key = "profile_feature",
description = "показывать точку входа в профиль",
defaultValue = false,
)

val profileFeatureTitle: String by value(
key = "profile_feature_title",
description = "заголовок кнопки профиля",
defaultValue = "Feature number nine",
sourceSelectionStrategy = SourceSelectionStrategy.Any
)

val profileButtonAppearDuration: Long by value(
key = "profile_button_appear_duration",
description = "длительность появления кнопки профиля в мс",
defaultValue = 200,
sourceSelectionStrategy = SourceSelectionStrategy.Any
)
}


Регистрация конфигурации:


val profileFeatureConfig = ProfileFeatureConfig()
val konfeatureInstance = konfeature {
register(profileFeatureConfig)
}


FeatureSource

Абстракция источника значений:


interface FeatureSource {
val name: String
fun get(key: String): Any?
}


Пример для FirebaseRemoteConfig:


class FirebaseFeatureSource(
private val remoteConfig: FirebaseRemoteConfig
) : FeatureSource {
override val name: String = "FirebaseRemoteConfig"

override fun get(key: String): Any? {
return remoteConfig
.getValue(key)
.takeIf { source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE }
?.let { value ->
value.getOrNull { asBoolean() }
?: value.getOrNull { asString() }
?: value.getOrNull { asLong() }
?: value.getOrNull { asDouble() }
}
}

private fun FirebaseRemoteConfigValue.getOrNull(getter: FirebaseRemoteConfigValue.() -> Any?): Any? {
return try {
getter()
} catch (error: IllegalArgumentException) {
null
}
}
}


Добавление источника:


val konfeatureInstance = konfeature {
addSource(FirebaseFeatureSource(remoteConfig))
register(profileFeatureConfig)
}


SourceSelectionStrategy

Позволяет гибко выбирать, из каких источников запрашивать значение:


public interface SourceSelectionStrategy {
fun select(names: Set<String>): Set<String>

companion object {
val None: SourceSelectionStrategy = SourceSelectionStrategy { emptySet() }
val Any: SourceSelectionStrategy = SourceSelectionStrategy { it }
fun anyOf(vararg sources: String): SourceSelectionStrategy = SourceSelectionStrategy { sources.toSet() }
}
}


Предопределённые стратегии:

* None — всегда использовать только defaultValue
* Any — разрешает брать значения из любого источника
* anyOf("Source1", …) — только из указанных источников


https://github.com/RedMadRobot/Konfeature

✍️ @kotlin_lib

BY Kotlin


Share with your friend now:
tgoop.com/kotlin_lib/579

View MORE
Open in Telegram


Telegram News

Date: |

As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail. How to build a private or public channel on Telegram? Administrators Read now Write your hashtags in the language of your target audience.
from us


Telegram Kotlin
FROM American