Compare commits

..

18 Commits
0.4.0 ... 0.4.2

9 changed files with 156 additions and 35 deletions

View File

@@ -1,5 +1,21 @@
# Changelog
## 0.4.2
* Versions
* `Kotlin`: `1.4.20` -> `1.4.21`
* `Klock`: `2.0.1` -> `2.0.3`
* `CronDateTimeScheduler` now is deprecated and will be set up as `internal` in future
## 0.4.1
* Versions:
* `Coroutines`: `1.4.1` -> `1.4.2`
* `Klock`: `2.0.0` -> `2.0.1`
* `CronDateTimeScheduler` now is public
* New functions for `CronDateTimeScheduler`
* Add `CollectionKronScheduler`. It will give opportunity to unite several schedulers in one
## 0.4.0
**BREAKING CHANGES**

View File

@@ -1,6 +1,6 @@
# krontab
[ ![Download](https://api.bintray.com/packages/insanusmokrassar/InsanusMokrassar/krontab-mpp/images/download.svg) ](https://bintray.com/insanusmokrassar/InsanusMokrassar/krontab-mpp/_latestVersion)
[![Download](https://api.bintray.com/packages/insanusmokrassar/InsanusMokrassar/krontab-mpp/images/download.svg) ](https://bintray.com/insanusmokrassar/InsanusMokrassar/krontab-mpp/_latestVersion)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/dev.inmo/krontab/badge.svg)](https://maven-badges.herokuapp.com/maven-central/dev.inmo/krontab)
[![Build Status](https://travis-ci.com/InsanusMokrassar/krontab.svg?branch=master)](https://travis-ci.com/InsanusMokrassar/krontab)
@@ -44,7 +44,7 @@ implementation "dev.inmo:krontab:$krontab_version"
Next version is the latest currently for the library:
[ ![Download](https://api.bintray.com/packages/insanusmokrassar/InsanusMokrassar/krontab/images/download.svg) ](https://bintray.com/insanusmokrassar/InsanusMokrassar/krontab/_latestVersion)
[ ![Download](https://api.bintray.com/packages/insanusmokrassar/InsanusMokrassar/krontab-mpp/images/download.svg) ](https://bintray.com/insanusmokrassar/InsanusMokrassar/krontab-mpp/_latestVersion)
For old version of Gradle, instead of `implementation` word developers must use `compile`.

View File

@@ -16,7 +16,7 @@ plugins {
id "org.jetbrains.dokka" version "$dokka_version"
}
project.version = "0.4.0"
project.version = "0.4.2"
project.group = "dev.inmo"
apply from: "publish.gradle"

View File

@@ -1,42 +1,45 @@
dokka {
outputFormat = 'html'
dokkaHtml {
String dokkaOutputDirectoryPath = null
switch (true) {
case project.hasProperty("DOKKA_PATH"):
outputDirectory = project.property("DOKKA_PATH").toString()
dokkaOutputDirectoryPath = project.property("DOKKA_PATH").toString()
break
case System.getenv("DOKKA_PATH") != null:
outputDirectory = System.getenv("DOKKA_PATH")
dokkaOutputDirectoryPath = System.getenv("DOKKA_PATH")
break
}
if (dokkaOutputDirectoryPath != null) {
File outputDirectoryFile = new File(dokkaOutputDirectoryPath)
outputDirectoryFile.mkdirs()
outputDirectory = outputDirectoryFile
}
multiplatform {
global {
perPackageOption {
prefix = "dev.inmo"
skipDeprecated = true
includeNonPublic = true
reportUndocumented = true
}
moduleName.set("kdocs")
dokkaSourceSets {
configureEach {
skipDeprecated.set(true)
includeNonPublic.set(true)
reportUndocumented.set(true)
sourceLink {
path = "./"
url = "https://github.com/InsanusMokrassar/krontab/blob/master/"
lineSuffix = "#L"
localDirectory.set(file("./"))
remoteUrl.set(new URL("https://github.com/InsanusMokrassar/krontab/blob/master/"))
remoteLineSuffix.set("#L")
}
}
common {
targets = ["JVM", "JS"]
named("commonMain") {
sourceRoot { path = "src/commonMain" }
}
js {
targets = ["JS"]
sourceRoot { path = "src/jsMain" }
}
jvm {
targets = ["JVM"]
sourceRoot { path = "src/jvmMain" }
}
//
// named("jsMain") {
// sourceRoot { path = "src/jsMain" }
// }
//
// named("jvmMain") {
// sourceRoot { path = "src/jvmMain" }
// }
}
}

View File

@@ -3,15 +3,15 @@ org.gradle.parallel=true
kotlin.js.generate.externals=true
kotlin.incremental=true
kotlin.incremental.js=true
kotlin.incremental.multiplatform=true
kotlin_version=1.4.20
kotlin_coroutines_version=1.4.1
kotlin_version=1.4.21
kotlin_coroutines_version=1.4.2
dokka_version=0.10.1
dokka_version=1.4.20
klockVersion=2.0.0
klockVersion=2.0.3
github_release_plugin_version=2.2.12
kotlin.incremental.multiplatform=true

View File

@@ -3,6 +3,9 @@ apply plugin: 'maven-publish'
task javadocsJar(type: Jar) {
classifier = 'javadoc'
}
task sourceJar (type : Jar) {
classifier = 'sources'
}
afterEvaluate {
project.publishing.publications.all {
@@ -10,6 +13,7 @@ afterEvaluate {
groupId "${project.group}"
if (it.name.contains('kotlinMultiplatform')) {
artifactId = "${project.name}"
artifact sourceJar
} else {
artifactId = "${project.name}-$name"
}

View File

@@ -0,0 +1,25 @@
package dev.inmo.krontab.collection
import dev.inmo.krontab.KronScheduler
@Suppress("NOTHING_TO_INLINE")
inline fun CollectionKronScheduler.includeAll(kronSchedulers: List<KronScheduler>) {
kronSchedulers.forEach {
include(it)
}
}
@Suppress("NOTHING_TO_INLINE")
inline fun CollectionKronScheduler.includeAll(vararg kronSchedulers: KronScheduler) {
includeAll(kronSchedulers.toList())
}
operator fun KronScheduler.plus(kronScheduler: KronScheduler): CollectionKronScheduler {
return CollectionKronScheduler().apply {
includeAll(this, kronScheduler)
}
}
operator fun CollectionKronScheduler.plusAssign(kronScheduler: KronScheduler) {
include(kronScheduler)
}

View File

@@ -0,0 +1,53 @@
package dev.inmo.krontab.collection
import com.soywiz.klock.DateTime
import dev.inmo.krontab.KronScheduler
import dev.inmo.krontab.anyCronDateTime
import dev.inmo.krontab.internal.*
import dev.inmo.krontab.internal.CronDateTimeScheduler
import dev.inmo.krontab.internal.merge
import dev.inmo.krontab.internal.toNearDateTime
/**
* This scheduler will be useful in case you want to unite several different [KronScheduler]s
*/
data class CollectionKronScheduler internal constructor(
internal val schedulers: MutableList<KronScheduler>
) : KronScheduler {
internal constructor() : this(mutableListOf())
/**
* Add [kronScheduler] into its [schedulers] list
*
* * When [kronScheduler] is [CronDateTimeScheduler] it will merge all [CronDateTimeScheduler]s from [schedulers] list
* and this [kronScheduler] using [merge] function
* * When [kronScheduler] is [CollectionKronScheduler] it this instance will include all [kronScheduler]
* [schedulers]
* * Otherwise [kronScheduler] will be added to [schedulers] list
*/
fun include(kronScheduler: KronScheduler) {
when (kronScheduler) {
is CronDateTimeScheduler -> {
val resultCronDateTimes = mutableListOf(kronScheduler)
schedulers.removeAll {
if (it is CronDateTimeScheduler) {
resultCronDateTimes.add(it)
} else {
false
}
}
schedulers.add(
merge(resultCronDateTimes)
)
}
is CollectionKronScheduler -> kronScheduler.schedulers.forEach {
include(it)
}
else -> schedulers.add(kronScheduler)
}
}
override suspend fun next(relatively: DateTime): DateTime {
return schedulers.minOfOrNull { it.next(relatively) } ?: anyCronDateTime.toNearDateTime(relatively)
}
}

View File

@@ -17,7 +17,8 @@ import dev.inmo.krontab.anyCronDateTime
* @see dev.inmo.krontab.builder.buildSchedule
* @see dev.inmo.krontab.builder.SchedulerBuilder
*/
internal data class CronDateTimeScheduler internal constructor(
@Deprecated("This class will get internal status in future")
data class CronDateTimeScheduler internal constructor(
internal val cronDateTimes: List<CronDateTime>
) : KronScheduler {
/**
@@ -30,3 +31,22 @@ internal data class CronDateTimeScheduler internal constructor(
}
}
/**
* @return New instance of [CronDateTimeScheduler] with all unique [CronDateTimeScheduler.cronDateTimes] of
* [kronDateTimeSchedulers] included
*/
@Suppress("NOTHING_TO_INLINE")
fun merge(kronDateTimeSchedulers: List<CronDateTimeScheduler>) = CronDateTimeScheduler(
kronDateTimeSchedulers.flatMap { it.cronDateTimes }.distinct()
)
/**
* @return Vararg shortcyut for [merge]
*/
@Suppress("NOTHING_TO_INLINE")
inline fun merge(vararg kronDateTimeSchedulers: CronDateTimeScheduler) = merge(kronDateTimeSchedulers.toList())
/**
* Use [merge] operation to internalcreate new [CronDateTimeScheduler] with all [CronDateTimeScheduler.cronDateTimes]
*/
@Suppress("NOTHING_TO_INLINE")
inline fun CronDateTimeScheduler.plus(other: CronDateTimeScheduler) = merge(this, other)