Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ The full documentation is available [here](https://docs.uandcode.com/container).
Add the following line to your `build.gradle` file:

```
implementation "com.elveum:container:3.1.0"
implementation "com.elveum:container:3.1.1"
```

## Core Concepts
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ internal class FlowDependencyStoreImpl<T>(
) : FlowDependencyStore {

private var scope: CoroutineScope? = null
private var recomposeFunction: RecomposeFunction = {}
private var recomposeFunction: RecomposeFunction = RecomposeFunction {}

private var debounceReloadJob: Job? = null
private val debounceFlow = MutableSharedFlow<Unit>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public suspend fun <T> LazyFlowSubject<T>.newSimpleLoad(
metadata: ContainerMetadata = EmptyMetadata,
valueLoader: SimpleValueLoader<T>,
): T {
val multipleLoader: ValueLoader<T> = {
val multipleLoader: ValueLoader<T> = ValueLoader {
emit(valueLoader(), metadata, isLastValue = true)
}
val flow = newLoad(config, valueLoader = multipleLoader)
Expand All @@ -99,7 +99,7 @@ public fun <T> LazyFlowSubject<T>.newSimpleAsyncLoad(
metadata: ContainerMetadata = EmptyMetadata,
valueLoader: SimpleValueLoader<T>
) {
val multipleLoader: ValueLoader<T> = {
val multipleLoader: ValueLoader<T> = ValueLoader {
emit(valueLoader(), metadata, isLastValue = true)
}
newAsyncLoad(config, valueLoader = multipleLoader)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class LazyFlowSubjectImplIntegrationTest {
@Test
fun listen_withinTimeout_holdsLatestLoadedValue() = runFlowTest {
var index = 0
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
emit("v${++index}")
}
val spyLoader = spyk(loader)
Expand All @@ -156,7 +156,7 @@ class LazyFlowSubjectImplIntegrationTest {
@Test
fun listen_afterTimeout_startsLoadingFromScratch() = runFlowTest {
var index = 0
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
emit("v${++index}")
}
val spyLoader = spyk(loader)
Expand Down Expand Up @@ -184,7 +184,7 @@ class LazyFlowSubjectImplIntegrationTest {
fun listen_whichIsCalledTwice_startsLoadingOnlyOnce() = runFlowTest {
var index = 0
var loaderCalls = 0
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
loaderCalls++
delay(100)
emit("v${++index}")
Expand All @@ -211,7 +211,7 @@ class LazyFlowSubjectImplIntegrationTest {
fun listen_whichIsCalledTwiceOnSameInstance_startsLoadingOnlyOnce() = runFlowTest {
var index = 0
var loaderCalls = 0
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
loaderCalls++
delay(100)
emit("v${++index}")
Expand All @@ -238,7 +238,7 @@ class LazyFlowSubjectImplIntegrationTest {
@Test
fun listen_withCancellationOfNotAllCollectors_holdsCachedValue() = runFlowTest {
var index = 0
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
emit("v${++index}")
}
val spyLoader = spyk(loader)
Expand Down Expand Up @@ -269,8 +269,8 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_startsNewLoadWithPendingStatus() = runFlowTest {
val loader1: ValueLoader<String> = { emit("111") }
val loader2: ValueLoader<String> = {
val loader1: ValueLoader<String> = ValueLoader { emit("111") }
val loader2: ValueLoader<String> = ValueLoader {
delay(100)
emit("222")
}
Expand All @@ -291,9 +291,9 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_loadsNewValue() = runFlowTest {
val loader1: ValueLoader<String> = { emit("111") }
val loader1: ValueLoader<String> = ValueLoader { emit("111") }
var loader2Calls = 0
val loader2: ValueLoader<String> = {
val loader2: ValueLoader<String> = ValueLoader {
loader2Calls++
delay(100)
emit("222")
Expand All @@ -315,9 +315,9 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_withSilentMode_loadsNewValueWithoutPendingStatus() = runFlowTest {
val loader1: ValueLoader<String> = { emit("111") }
val loader1: ValueLoader<String> = ValueLoader { emit("111") }
var loader2Calls = 0
val loader2: ValueLoader<String> = {
val loader2: ValueLoader<String> = ValueLoader {
loader2Calls++
delay(100)
emit("222")
Expand All @@ -339,11 +339,11 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_cancelsPreviousLoad() = runFlowTest {
val loader1: ValueLoader<String> = {
val loader1: ValueLoader<String> = ValueLoader {
delay(100)
emit("111")
}
val loader2: ValueLoader<String> = {
val loader2: ValueLoader<String> = ValueLoader {
delay(100)
emit("222")
}
Expand All @@ -368,15 +368,15 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_returnsFlowThatEmitsAllValuesOfNewUpload() = runFlowTest {
val loader1: ValueLoader<String> = {
val loader1: ValueLoader<String> = ValueLoader {
emit("11")
emit("12")
}
val loader2: ValueLoader<String> = {
val loader2: ValueLoader<String> = ValueLoader {
emit("21")
emit("22")
}
val loader3: ValueLoader<String> = {
val loader3: ValueLoader<String> = ValueLoader {
emit("31")
emit("32")
}
Expand All @@ -397,15 +397,15 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_withCancelledLoad_returnsFlowThatFailsWithException() = runFlowTest {
val defaultLoader: ValueLoader<String> = {
val defaultLoader: ValueLoader<String> = ValueLoader {
emit("1")
}
val loader1: ValueLoader<String> = {
val loader1: ValueLoader<String> = ValueLoader {
emit("21")
delay(100)
emit("22")
}
val loader2: ValueLoader<String> = {
val loader2: ValueLoader<String> = ValueLoader {
emit("3")
}
val subject = createLazyFlowSubject(defaultLoader)
Expand All @@ -425,10 +425,10 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_withFailedLoad_returnsFlowThatAlsoFails() = runFlowTest {
val defaultLoader: ValueLoader<String> = {
val defaultLoader: ValueLoader<String> = ValueLoader {
emit("1")
}
val loader1: ValueLoader<String> = {
val loader1: ValueLoader<String> = ValueLoader {
emit("2")
throw IllegalArgumentException()
}
Expand All @@ -445,8 +445,8 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_withFailedLoad_emitsErrorToFlowReturnedByListenMethod() = runFlowTest {
val loader1: ValueLoader<String> = { delay(100) }
val loader2: ValueLoader<String> = {
val loader1: ValueLoader<String> = ValueLoader { delay(100) }
val loader2: ValueLoader<String> = ValueLoader {
delay(10)
emit("222")
delay(10)
Expand All @@ -470,11 +470,11 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun newLoad_afterNewLoad_usesLastLoader() = runFlowTest {
val loader1: ValueLoader<String> = {
val loader1: ValueLoader<String> = ValueLoader {
delay(10)
emit("111")
}
val loader2: ValueLoader<String> = {
val loader2: ValueLoader<String> = ValueLoader {
delay(10)
emit("222")
}
Expand Down Expand Up @@ -575,7 +575,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun updateWith_cancelsLoadingAndEmitsNewValueImmediately() = runFlowTest {
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
delay(10)
emit("111")
}
Expand All @@ -594,7 +594,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun updateWith_emitsNewValue() = runFlowTest {
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
delay(10)
emit("111")
}
Expand All @@ -613,7 +613,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun updateWithMapper_cancelsLoadingAndEmitsNewValueImmediately() = runFlowTest {
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
delay(10)
emit("111")
}
Expand All @@ -632,7 +632,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun updateWithMapper_emitsNewValue() = runFlowTest {
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
delay(10)
emit("111")
}
Expand All @@ -651,7 +651,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun updateWithMapper_withReturningSameValue_doesNotReEmitIt() = runFlowTest {
val loader: ValueLoader<String> = {
val loader: ValueLoader<String> = ValueLoader {
delay(10)
emit("111")
}
Expand Down Expand Up @@ -717,7 +717,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun activeCollectorsCount_with1ActiveCollectors_returns1() = runFlowTest {
val loader: ValueLoader<String> = { emit("111") }
val loader: ValueLoader<String> = ValueLoader { emit("111") }
val subject = createLazyFlowSubject(loader)

subject.listen().startCollecting()
Expand All @@ -727,7 +727,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun activeCollectorsCount_with2Collectors_returns2() = runFlowTest {
val loader: ValueLoader<String> = { emit("111") }
val loader: ValueLoader<String> = ValueLoader { emit("111") }
val subject = createLazyFlowSubject(loader)

subject.listen().startCollecting()
Expand All @@ -738,7 +738,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun activeCollectorsCount_with2CollectorsOnSameFlow_returns2() = runFlowTest {
val loader: ValueLoader<String> = { emit("111") }
val loader: ValueLoader<String> = ValueLoader { emit("111") }
val subject = createLazyFlowSubject(loader)

val flow = subject.listen()
Expand All @@ -750,7 +750,7 @@ class LazyFlowSubjectImplIntegrationTest {

@Test
fun activeCollectorsCount_afterCancellation_decreasesNumberOfCollectors() = runFlowTest {
val loader: ValueLoader<String> = { emit("111") }
val loader: ValueLoader<String> = ValueLoader { emit("111") }
val subject = createLazyFlowSubject(loader)

val state1 = subject.listen().startCollecting() // 1 active collector
Expand Down
2 changes: 1 addition & 1 deletion gradle-public.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ android.nonTransitiveRClass=true

# Maven Central publishing coordinates
GROUP=com.elveum
VERSION_NAME=3.1.0
VERSION_NAME=3.1.1

# POM metadata
POM_DESCRIPTION=A library for simplifying state management and data loading in Android applications
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[versions]
agp = "9.0.1"
kotlin = "2.3.10"
kotlin = "2.2.21"
ksp = "2.3.5"
dokka = "2.2.0"
coroutines = "1.10.2"
Expand Down
2 changes: 1 addition & 1 deletion skills/container-store/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@ discovers skills (e.g. `~/.agents/skills/` for Codex), or paste
| `references/api.md` | Every public import, `StoreResult` / `LoadRequest` semantics, typical operations |
| `references/patterns.md` | Layer-by-layer patterns: data sources, repositories, ViewModels, Compose, DI, scoping |

The skill matches library version `3.1.0`.
The skill matches library version `3.1.1`.
4 changes: 2 additions & 2 deletions skills/container-store/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ directly — no decompilation or dependency tree inspection needed.

## Dependency Setup

Maven coordinates: `com.elveum:store:3.1.0` (transitively brings
Maven coordinates: `com.elveum:store:3.1.1` (transitively brings
`com.elveum:container`, whose types are part of the public API).

```toml
# gradle/libs.versions.toml
[versions]
store = "3.1.0"
store = "3.1.1"
[libraries]
store = { module = "com.elveum:store", version.ref = "store" }
```
Expand Down
2 changes: 1 addition & 1 deletion store/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ the hood.
Add the following line to your `build.gradle` file:

```
implementation "com.elveum:store:3.1.0"
implementation "com.elveum:store:3.1.1"
```

The `store` artifact depends on `com.elveum:container`, so the Container
Expand Down
Loading