Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extract binder from mvicore module #129

Merged
merged 5 commits into from Jul 31, 2020
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions README.md
Expand Up @@ -40,6 +40,11 @@ Add the dependencies:
implementation 'com.github.badoo.mvicore:mvicore:{latest-version}'
```

- Binder (for versions higher than 1.2.4)
```groovy
implementation 'com.github.badoo.mvicore:binder:{latest-version}'
```

- Helper classes for Android:
```groovy
implementation 'com.github.badoo.mvicore:mvicore-android:{latest-version}'
Expand Down
1 change: 1 addition & 0 deletions binder/.gitignore
@@ -0,0 +1 @@
/build
49 changes: 49 additions & 0 deletions binder/build.gradle
@@ -0,0 +1,49 @@
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'kotlin'
apply plugin: 'org.jetbrains.dokka'

group = 'com.github.badoo.mvicore'

buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$rootProject.ext.kotlinVersion"
}
}

repositories {
jcenter()
}

dependencies {
def deps = rootProject.ext.deps

implementation deps('io.reactivex.rxjava2:rxjava')
implementation deps('io.reactivex.rxjava2:rxkotlin')
implementation deps("org.jetbrains.kotlin:kotlin-stdlib-jdk7")

testImplementation deps('junit:junit')
testImplementation deps('org.jetbrains.kotlin:kotlin-test-junit')
testImplementation deps('com.nhaarman:mockito-kotlin')
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

task packageSources(type: Jar, dependsOn: 'classes') {
classifier = 'sources'
from sourceSets.main.allSource
}

task packageJavadoc(type: Jar, dependsOn: javadoc) {
from javadoc.outputDirectory
classifier = 'javadoc'
}

artifacts {
archives packageSources
archives packageJavadoc
}
@@ -1,10 +1,10 @@
package com.badoo.mvicore.binder
package com.badoo.binder

import com.badoo.mvicore.binder.lifecycle.Lifecycle
import com.badoo.mvicore.binder.lifecycle.Lifecycle.Event.BEGIN
import com.badoo.mvicore.binder.lifecycle.Lifecycle.Event.END
import com.badoo.mvicore.consumer.middleware.base.Middleware
import com.badoo.mvicore.consumer.wrapWithMiddleware
import com.badoo.binder.lifecycle.Lifecycle
import com.badoo.binder.lifecycle.Lifecycle.Event.BEGIN
import com.badoo.binder.lifecycle.Lifecycle.Event.END
import com.badoo.binder.middleware.base.Middleware
import com.badoo.binder.middleware.wrapWithMiddleware
import io.reactivex.Observable
import io.reactivex.Observable.wrap
import io.reactivex.ObservableSource
Expand Down
@@ -1,7 +1,7 @@
package com.badoo.mvicore.binder
package com.badoo.binder

import com.badoo.mvicore.connector.Connector
import com.badoo.mvicore.connector.NotNullConnector
import com.badoo.binder.connector.Connector
import com.badoo.binder.connector.NotNullConnector
import io.reactivex.ObservableSource
import io.reactivex.functions.Consumer

Expand Down
@@ -1,4 +1,4 @@
package com.badoo.mvicore.connector
package com.badoo.binder.connector

import io.reactivex.ObservableSource

Expand Down
@@ -1,4 +1,4 @@
package com.badoo.mvicore.connector
package com.badoo.binder.connector

import io.reactivex.Observable
import io.reactivex.Observable.wrap
Expand Down
@@ -1,6 +1,6 @@
package com.badoo.mvicore.binder.lifecycle
package com.badoo.binder.lifecycle

import com.badoo.mvicore.binder.lifecycle.internal.FromObservableSource
import com.badoo.binder.lifecycle.internal.FromObservableSource
import io.reactivex.ObservableSource

interface Lifecycle : ObservableSource<Lifecycle.Event> {
Expand Down
@@ -1,8 +1,8 @@
package com.badoo.mvicore.binder.lifecycle
package com.badoo.binder.lifecycle

import com.badoo.mvicore.binder.lifecycle.Lifecycle.Event
import com.badoo.mvicore.binder.lifecycle.Lifecycle.Event.BEGIN
import com.badoo.mvicore.binder.lifecycle.Lifecycle.Event.END
import com.badoo.binder.lifecycle.Lifecycle.Event
import com.badoo.binder.lifecycle.Lifecycle.Event.BEGIN
import com.badoo.binder.lifecycle.Lifecycle.Event.END
import io.reactivex.subjects.BehaviorSubject

class ManualLifecycle(private val subject : BehaviorSubject<Event> = BehaviorSubject.create()) : Lifecycle by Lifecycle.wrap(subject) {
Expand Down
@@ -1,6 +1,6 @@
package com.badoo.mvicore.binder.lifecycle.internal
package com.badoo.binder.lifecycle.internal

import com.badoo.mvicore.binder.lifecycle.Lifecycle
import com.badoo.binder.lifecycle.Lifecycle
import io.reactivex.ObservableSource

internal class FromObservableSource(
Expand Down
@@ -1,17 +1,17 @@
package com.badoo.mvicore.consumer
package com.badoo.binder.middleware

import com.badoo.mvicore.consumer.middleware.base.Middleware
import com.badoo.mvicore.consumer.middleware.base.StandaloneMiddleware
import com.badoo.mvicore.consumer.middlewareconfig.Middlewares
import com.badoo.mvicore.consumer.middlewareconfig.NonWrappable
import com.badoo.binder.middleware.base.Middleware
import com.badoo.binder.middleware.base.StandaloneMiddleware
import com.badoo.binder.middleware.config.Middlewares
import com.badoo.binder.middleware.config.NonWrappable
import io.reactivex.functions.Consumer

/**
* Wraps a Consumer<T> with Middlewares. The list of Middlewares that will be applied is resolved
* by calling on all available [com.badoo.mvicore.consumer.middlewareconfig.MiddlewareConfiguration]
*
* @param standalone Whether the Consumer<T> is used as a standalone target (true), or as
* part of a [com.badoo.mvicore.binder.Connection] used by [com.badoo.mvicore.binder.Binder].
* part of a [Connection] used by [Binder].
* Defaults to true. In most cases you should not need to override the default value.
* @param name The name for the wrapping. Useful to add MiddlewareConfiguration
* that only applies to named wrappings, or to make them human-readable
Expand Down Expand Up @@ -49,7 +49,7 @@ fun <In> Consumer<In>.wrapWithMiddleware(
"Use wrapWithMiddleware directly",
ReplaceWith(
"wrapWithMiddleware(standalone, name, postfix, wrapperOf)",
"com.badoo.mvicore.consumer.wrapWithMiddleware"
"com.badoo.binder.middleware.wrapWithMiddleware"
)
)
fun <In: Any> Consumer<In>.wrap(
Expand Down
@@ -1,6 +1,6 @@
package com.badoo.mvicore.consumer.middleware.base
package com.badoo.binder.middleware.base

import com.badoo.mvicore.binder.Connection
import com.badoo.binder.Connection
import io.reactivex.functions.Consumer

abstract class Middleware<Out, In>(
Expand Down
@@ -1,6 +1,6 @@
package com.badoo.mvicore.consumer.middleware.base
package com.badoo.binder.middleware.base

import com.badoo.mvicore.binder.Connection
import com.badoo.binder.Connection
import io.reactivex.disposables.Disposable

internal class StandaloneMiddleware<In>(
Expand Down
@@ -1,6 +1,6 @@
package com.badoo.mvicore.consumer.middlewareconfig
package com.badoo.binder.middleware.config

import com.badoo.mvicore.consumer.middleware.base.Middleware
import com.badoo.binder.middleware.base.Middleware
import io.reactivex.functions.Consumer

typealias ConsumerMiddlewareFactory<T> = (Consumer<T>) -> Middleware<Any, T>
@@ -1,6 +1,6 @@
package com.badoo.mvicore.consumer.middlewareconfig
package com.badoo.binder.middleware.config

import com.badoo.mvicore.consumer.middleware.base.Middleware
import com.badoo.binder.middleware.base.Middleware
import io.reactivex.functions.Consumer

data class MiddlewareConfiguration(
Expand Down
@@ -1,4 +1,4 @@
package com.badoo.mvicore.consumer.middlewareconfig
package com.badoo.binder.middleware.config

object Middlewares {
val configurations: MutableList<MiddlewareConfiguration> = mutableListOf()
Expand Down
@@ -0,0 +1,3 @@
package com.badoo.binder.middleware.config

interface NonWrappable
@@ -1,4 +1,4 @@
package com.badoo.mvicore.consumer.middlewareconfig
package com.badoo.binder.middleware.config

interface WrappingCondition {

Expand Down
@@ -1,10 +1,7 @@
package com.badoo.mvicore.binder
package com.badoo.binder

import com.badoo.mvicore.TestConsumer
import com.badoo.mvicore.assertValues
import com.badoo.mvicore.connector.Connector
import io.reactivex.Observable.just
import io.reactivex.Observable.wrap
import com.badoo.binder.connector.Connector
import io.reactivex.Observable
import io.reactivex.ObservableSource
import io.reactivex.subjects.PublishSubject
import org.junit.Test
Expand Down Expand Up @@ -49,8 +46,8 @@ class BinderTest {

object TestConnector: Connector<Int, String> {
override fun invoke(it: ObservableSource<out Int>): ObservableSource<String> =
wrap(it).flatMap {
just(it.toString(), (it + 1).toString())
Observable.wrap(it).flatMap {
Observable.just(it.toString(), (it + 1).toString())
}
}
}
@@ -1,10 +1,7 @@
package com.badoo.mvicore.lifecycle
package com.badoo.binder

import com.badoo.mvicore.TestConsumer
import com.badoo.mvicore.assertValues
import com.badoo.mvicore.binder.Binder
import com.badoo.mvicore.binder.lifecycle.Lifecycle
import com.badoo.mvicore.binder.lifecycle.ManualLifecycle
import com.badoo.binder.lifecycle.Lifecycle
import com.badoo.binder.lifecycle.ManualLifecycle
import com.nhaarman.mockito_kotlin.any
import com.nhaarman.mockito_kotlin.mock
import com.nhaarman.mockito_kotlin.times
Expand Down
@@ -1,4 +1,4 @@
package com.badoo.mvicore
package com.badoo.binder

import io.reactivex.functions.Consumer
import kotlin.test.assertEquals
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.kotlinVersion = '1.3.40'
ext.kotlinVersion = '1.3.72'

repositories {
google()
Expand Down
2 changes: 2 additions & 0 deletions documentation/binder/binder.md
Expand Up @@ -17,6 +17,8 @@ The `Binder` is a tool that can:
- dispose of this subscription when its lifecycle expires
- automatically add `Middlewares` around all inputs (logging and time travel debugging, or your custom one)

!!! warning ""
The `Binder` is now being moved out of MVICore now. If you are using version higher than 1.2.4, you may need to include additional dependency to `com.github.badoo.mvicore:binder`
ShikaSD marked this conversation as resolved.
Show resolved Hide resolved

## Binder creation

Expand Down
@@ -1,9 +1,7 @@
package com.badoo.mvicore.android

import android.arch.lifecycle.LifecycleOwner
import com.badoo.mvicore.binder.Binder
import android.arch.lifecycle.Lifecycle as AndroidLifecycle
import com.badoo.mvicore.binder.lifecycle.Lifecycle as BinderLifecycle
import com.badoo.binder.Binder

abstract class AndroidBindings<T : Any>(
lifecycleOwner: LifecycleOwner
Expand Down
Expand Up @@ -5,7 +5,7 @@ import android.arch.lifecycle.LifecycleObserver
import io.reactivex.ObservableSource
import io.reactivex.subjects.BehaviorSubject
import android.arch.lifecycle.Lifecycle as AndroidLifecycle
import com.badoo.mvicore.binder.lifecycle.Lifecycle as BinderLifecycle
import com.badoo.binder.lifecycle.Lifecycle as BinderLifecycle

abstract class BaseAndroidBinderLifecycle private constructor(
androidLifecycle: AndroidLifecycle,
Expand Down
Expand Up @@ -3,7 +3,7 @@ package com.badoo.mvicore.android.lifecycle
import android.arch.lifecycle.DefaultLifecycleObserver
import android.arch.lifecycle.LifecycleOwner
import android.arch.lifecycle.Lifecycle as AndroidLifecycle
import com.badoo.mvicore.binder.lifecycle.Lifecycle as BinderLifecycle
import com.badoo.binder.lifecycle.Lifecycle as BinderLifecycle


class CreateDestroyBinderLifecycle(
Expand Down
@@ -1,7 +1,7 @@
package com.badoo.mvicore.android.lifecycle

import android.arch.lifecycle.Lifecycle
import com.badoo.mvicore.binder.Binder
import com.badoo.binder.Binder

fun Lifecycle.createDestroy(f: Binder.() -> Unit) {
Binder(CreateDestroyBinderLifecycle(this)).apply(f)
Expand Down
Expand Up @@ -3,7 +3,7 @@ package com.badoo.mvicore.android.lifecycle
import android.arch.lifecycle.DefaultLifecycleObserver
import android.arch.lifecycle.LifecycleOwner
import android.arch.lifecycle.Lifecycle as AndroidLifecycle
import com.badoo.mvicore.binder.lifecycle.Lifecycle as BinderLifecycle
import com.badoo.binder.lifecycle.Lifecycle as BinderLifecycle


class ResumePauseBinderLifecycle(
Expand Down
Expand Up @@ -3,7 +3,7 @@ package com.badoo.mvicore.android.lifecycle
import android.arch.lifecycle.DefaultLifecycleObserver
import android.arch.lifecycle.LifecycleOwner
import android.arch.lifecycle.Lifecycle as AndroidLifecycle
import com.badoo.mvicore.binder.lifecycle.Lifecycle as BinderLifecycle
import com.badoo.binder.lifecycle.Lifecycle as BinderLifecycle


class StartStopBinderLifecycle(
Expand Down
Expand Up @@ -2,12 +2,12 @@ package com.badoo.mvicoredemo

import android.annotation.SuppressLint
import android.app.Application
import com.badoo.binder.middleware.config.MiddlewareConfiguration
import com.badoo.binder.middleware.config.Middlewares
import com.badoo.binder.middleware.config.WrappingCondition
import com.badoo.mvicore.consumer.middleware.LoggingMiddleware
import com.badoo.mvicore.consumer.middleware.PlaybackMiddleware
import com.badoo.mvicore.consumer.middleware.PlaybackMiddleware.RecordStore
import com.badoo.mvicore.consumer.middlewareconfig.MiddlewareConfiguration
import com.badoo.mvicore.consumer.middlewareconfig.Middlewares
import com.badoo.mvicore.consumer.middlewareconfig.WrappingCondition
import com.badoo.mvicore.middleware.DefaultPluginStore
import com.badoo.mvicore.middleware.IdeaPluginMiddleware
import com.badoo.mvicoredemo.di.appscope.component.AppScopedComponent
Expand Down
Expand Up @@ -5,11 +5,11 @@ import android.support.v4.view.GravityCompat
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.view.MenuItem
import com.badoo.binder.Binder
import com.badoo.binder.named
import com.badoo.mvicore.android.lifecycle.CreateDestroyBinderLifecycle
import com.badoo.mvicore.android.lifecycle.ResumePauseBinderLifecycle
import com.badoo.mvicore.android.lifecycle.StartStopBinderLifecycle
import com.badoo.mvicore.binder.Binder
import com.badoo.mvicore.binder.named
import com.badoo.mvicoredemo.R
import init
import io.reactivex.functions.Consumer
Expand Down
@@ -1,10 +1,10 @@
package com.badoo.mvicoredemo.ui.main

import com.badoo.binder.named
import com.badoo.binder.using
import com.badoo.feature1.Feature1
import com.badoo.feature2.Feature2
import com.badoo.mvicore.android.AndroidBindings
import com.badoo.mvicore.binder.named
import com.badoo.mvicore.binder.using
import com.badoo.mvicoredemo.ui.main.analytics.FakeAnalyticsTracker
import com.badoo.mvicoredemo.ui.main.event.UiEventTransformer1
import com.badoo.mvicoredemo.ui.main.event.UiEventTransformer2
Expand Down
@@ -1,6 +1,6 @@
package com.badoo.mvicore.middleware

import com.badoo.mvicore.binder.Connection
import com.badoo.binder.Connection
import com.badoo.mvicore.middleware.data.parse
import com.badoo.mvicore.middleware.gc.QueueWatcher
import com.badoo.mvicore.middleware.gson.MviPluginTypeAdapterFactory
Expand Down
@@ -1,7 +1,7 @@
package com.badoo.mvicore.middleware

import com.badoo.mvicore.binder.Connection
import com.badoo.mvicore.consumer.middleware.base.Middleware
import com.badoo.binder.Connection
import com.badoo.binder.middleware.base.Middleware
import io.reactivex.functions.Consumer

class IdeaPluginMiddleware<Out: Any, In: Any>(
Expand Down