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: |

The channel also called on people to turn out for illegal assemblies and listed the things that participants should bring along with them, showing prior planning was in the works for riots. The messages also incited people to hurl toxic gas bombs at police and MTR stations, he added. As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. Find your optimal posting schedule and stick to it. The peak posting times include 8 am, 6 pm, and 8 pm on social media. Try to publish serious stuff in the morning and leave less demanding content later in the day. 6How to manage your Telegram channel? In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013.
from us


Telegram Kotlin
FROM American