Skip to content

stupacki/MultiFunctions

Repository files navigation

Multi-Functions

Multi Functions is an extension library written in Kotlin for processing and binding multiple data to a single operation. It extends the standard libraries of Kotlin and can be used alongside them without interference.

Download the Latest Version

Using Gradle with Groovy DSL

Root Project build.gradle:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Module build.gradle:

dependencies {
    implementation 'com.github.stupacki:MultiFunctions:<insert version>'
}

Using Gradle with Kotlin DSL and Dependency Resolution Management

settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        ...
        maven { url = uri("https://jitpack.io") }
    }
}

libs.versions.toml:

[versions]
multifunctions = "<insert version>"

[libraries]
multifunctions = { module = "com.github.stupacki:MultiFunctions", version.ref = "multifunctions" }

Module build.gradle.kts:

dependencies {
    implementation(libs.multifunctions)
}

What is this Library About?

Multi Functions is designed to simplify the process of binding multiple data values to a single operation, avoiding deep hierarchy structures in your code. It provides several utility functions to handle multiple nullable and non-nullable values efficiently.

Examples

Multi Let

Bind multiple data values to a single operation without deep hierarchy structures. All values passed to the function can be nullable.

import io.multifunctions.let

val apiResult = Quad(
    userApi.get(userId),
    ordersApi.get(userId),
    favoritesApi.get(userId),
    notesApi.get(userId),
)

apiResult.let { user, orders, favorites, notes ->
    HttpResult.renderPage(
        user = user,
        orders = orders,
        favorites = favorites,
        notes = notes,
    )
}

Multi LetCheckNull

If you don't want to deal with null values within your let operations, use letCheckNull.

val apiResult = Pair(
    userApi.get(userId),
    ordersApi.get(userId),
)

apiResult.letCheckNull { user, orders ->
    HttpResult.renderPage(
        user = user,
        orders = orders,
    )
}

Multi Map

Use Multi Map for data table tests. For example, testing a function Calculate.xPlusY(x: Int?, y: Int?) with multiple test data:

val testData = listOf(
    Triple(1, 1, 2),
    Triple(-1, 1, 0),
    Triple(-1, -1, -2),
    Triple(0, 0, 0),
)

testData.map { xData, yData, expectedResult ->
    Calculate.xPlusY(x = xData, y = yData) shouldBe expectedResult
}

For non-nullable values, use mapCheckNull:

import io.multifunctions.mapCheckNull

val testData = listOf(
    Triple(1, 1, 2),
    Triple(-1, 1, 0),
    Triple(-1, -1, -2),
    Triple(0, 0, 0),
)

testData.mapCheckNull { xData, yData, expectedResult ->
    Calculate.xPlusY(x = xData, y = yData) shouldBe expectedResult
}

License

Distributed under the Apache 2.0 License. Copyright © 2017 Benny Schneider

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages