Skip to content

Commit 096d5cd

Browse files
committed
chore: 🚚 split koin modules by feature (#22)
1 parent 3d3bdf0 commit 096d5cd

File tree

8 files changed

+66
-29
lines changed

8 files changed

+66
-29
lines changed

app/src/main/java/es/ffgiraldez/comicsearch/ComicApplication.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,21 @@ package es.ffgiraldez.comicsearch
22

33
import android.app.Application
44
import com.facebook.stetho.Stetho
5-
import es.ffgiraldez.comicsearch.di.comicContext
5+
import es.ffgiraldez.comicsearch.comics.di.comicModule
6+
import es.ffgiraldez.comicsearch.navigation.di.navigationModule
7+
import es.ffgiraldez.comicsearch.query.search.di.searchModule
8+
import es.ffgiraldez.comicsearch.query.sugestion.di.suggestionModule
69
import org.koin.android.ext.android.startKoin
710

811
class ComicApplication : Application() {
912
override fun onCreate() {
1013
super.onCreate()
11-
startKoin(this, listOf(comicContext))
14+
startKoin(this, listOf(
15+
navigationModule,
16+
comicModule,
17+
searchModule,
18+
suggestionModule
19+
))
1220
Stetho.initializeWithDefaults(this)
1321
}
1422
}
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,8 @@
1-
package es.ffgiraldez.comicsearch.di
1+
package es.ffgiraldez.comicsearch.comics.di
22

33
import android.arch.persistence.room.Room
44
import es.ffgiraldez.comicsearch.comics.data.network.ComicVineApi
55
import es.ffgiraldez.comicsearch.comics.data.storage.ComicDatabase
6-
import es.ffgiraldez.comicsearch.navigation.Navigator
7-
import es.ffgiraldez.comicsearch.query.search.data.SearchLocalDataSource
8-
import es.ffgiraldez.comicsearch.query.search.data.SearchRemoteDataSource
9-
import es.ffgiraldez.comicsearch.query.search.data.SearchRepository
10-
import es.ffgiraldez.comicsearch.query.search.presentation.SearchViewModel
11-
import es.ffgiraldez.comicsearch.query.sugestion.data.SuggestionLocalDataSource
12-
import es.ffgiraldez.comicsearch.query.sugestion.data.SuggestionRemoteDataSource
13-
import es.ffgiraldez.comicsearch.query.sugestion.data.SuggestionRepository
14-
import es.ffgiraldez.comicsearch.query.sugestion.presentation.SuggestionViewModel
156
import okhttp3.OkHttpClient
167
import okhttp3.logging.HttpLoggingInterceptor
178
import org.koin.dsl.context.ParameterProvider
@@ -23,7 +14,7 @@ import retrofit2.converter.gson.GsonConverterFactory
2314
const val ACTIVITY_PARAM: String = "activity"
2415
const val CONTEXT_PARAM: String = "context"
2516

26-
val comicContext = applicationContext {
17+
val comicModule = applicationContext {
2718
factory {
2819
val okHttp = OkHttpClient.Builder()
2920
.addInterceptor(HttpLoggingInterceptor()
@@ -39,16 +30,4 @@ val comicContext = applicationContext {
3930
.create(ComicVineApi::class.java)
4031
}
4132
bean { params: ParameterProvider -> Room.databaseBuilder(params[CONTEXT_PARAM], ComicDatabase::class.java, "comics").build() }
42-
43-
factory { SearchLocalDataSource(get({ it.values })) }
44-
factory { SearchRemoteDataSource(get()) }
45-
factory { SearchRepository(get({ it.values }), get()) }
46-
factory { SearchViewModel(get()) }
47-
48-
factory { SuggestionLocalDataSource(get({ it.values })) }
49-
factory { SuggestionRemoteDataSource(get()) }
50-
factory { SuggestionRepository(get({ it.values }), get()) }
51-
factory { SuggestionViewModel(get({ it.values })) }
52-
53-
factory { params -> Navigator(params[ACTIVITY_PARAM]) }
5433
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package es.ffgiraldez.comicsearch.navigation.di
2+
3+
import es.ffgiraldez.comicsearch.navigation.Navigator
4+
import org.koin.dsl.module.applicationContext
5+
6+
const val ACTIVITY_PARAM: String = "activity"
7+
const val CONTEXT_PARAM: String = "context"
8+
9+
val navigationModule = applicationContext {
10+
factory { params -> Navigator(params[ACTIVITY_PARAM]) }
11+
}

app/src/main/java/es/ffgiraldez/comicsearch/platform/LiveDataExt.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.arch.lifecycle.LiveData
44
import android.arch.lifecycle.Observer
55
import io.reactivex.BackpressureStrategy
66
import io.reactivex.Flowable
7-
import io.reactivex.Observable
87
import io.reactivex.android.MainThreadDisposable
98

109
fun <T> LiveData<T>.toFlowable(): Flowable<T> =

app/src/main/java/es/ffgiraldez/comicsearch/query/base/ui/QueryActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import android.os.Bundle
55
import android.support.v7.app.AppCompatActivity
66
import es.ffgiraldez.comicsearch.R
77
import es.ffgiraldez.comicsearch.databinding.QueryActivityBinding
8-
import es.ffgiraldez.comicsearch.di.ACTIVITY_PARAM
9-
import es.ffgiraldez.comicsearch.di.CONTEXT_PARAM
8+
import es.ffgiraldez.comicsearch.navigation.di.ACTIVITY_PARAM
9+
import es.ffgiraldez.comicsearch.navigation.di.CONTEXT_PARAM
1010
import es.ffgiraldez.comicsearch.navigation.Navigator
1111
import es.ffgiraldez.comicsearch.query.search.presentation.SearchViewModel
1212
import es.ffgiraldez.comicsearch.query.sugestion.presentation.SuggestionViewModel
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package es.ffgiraldez.comicsearch.query.search.di
2+
3+
import es.ffgiraldez.comicsearch.query.search.data.SearchLocalDataSource
4+
import es.ffgiraldez.comicsearch.query.search.data.SearchRemoteDataSource
5+
import es.ffgiraldez.comicsearch.query.search.data.SearchRepository
6+
import es.ffgiraldez.comicsearch.query.search.presentation.SearchViewModel
7+
import org.koin.dsl.module.applicationContext
8+
9+
val searchModule = applicationContext {
10+
factory { SearchLocalDataSource(get({ it.values })) }
11+
factory { SearchRemoteDataSource(get()) }
12+
factory { SearchRepository(get({ it.values }), get()) }
13+
factory { SearchViewModel(get()) }
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package es.ffgiraldez.comicsearch.query.sugestion.di
2+
3+
import es.ffgiraldez.comicsearch.query.sugestion.data.SuggestionLocalDataSource
4+
import es.ffgiraldez.comicsearch.query.sugestion.data.SuggestionRemoteDataSource
5+
import es.ffgiraldez.comicsearch.query.sugestion.data.SuggestionRepository
6+
import es.ffgiraldez.comicsearch.query.sugestion.presentation.SuggestionViewModel
7+
import org.koin.dsl.module.applicationContext
8+
9+
val suggestionModule = applicationContext {
10+
factory { SuggestionLocalDataSource(get({ it.values })) }
11+
factory { SuggestionRemoteDataSource(get()) }
12+
factory { SuggestionRepository(get({ it.values }), get()) }
13+
factory { SuggestionViewModel(get({ it.values })) }
14+
}

app/src/test/java/es/ffgiraldez/comicsearch/di/TestContextResolution.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ import android.app.Activity
44
import android.arch.core.executor.testing.InstantTaskExecutorRule
55
import android.content.Context
66
import com.nhaarman.mockito_kotlin.mock
7+
import es.ffgiraldez.comicsearch.comics.di.comicModule
8+
import es.ffgiraldez.comicsearch.navigation.di.ACTIVITY_PARAM
9+
import es.ffgiraldez.comicsearch.navigation.di.CONTEXT_PARAM
10+
import es.ffgiraldez.comicsearch.navigation.di.navigationModule
11+
import es.ffgiraldez.comicsearch.query.search.di.searchModule
12+
import es.ffgiraldez.comicsearch.query.sugestion.di.suggestionModule
713
import org.junit.Rule
814
import org.junit.Test
915
import org.junit.rules.TestRule
@@ -15,10 +21,16 @@ class TestContextResolution : KoinTest {
1521

1622
@get:Rule
1723
var rule: TestRule = InstantTaskExecutorRule()
24+
1825
@Test
1926
fun `dry run`() {
2027
// start Koin
21-
startKoin(listOf(comicContext))
28+
startKoin(listOf(
29+
navigationModule,
30+
comicModule,
31+
searchModule,
32+
suggestionModule
33+
))
2234
// dry run of given module list
2335
dryRun(defaultParameters = {
2436
mapOf(

0 commit comments

Comments
 (0)