From a36fd1a30ad630213bf46addfe040a2e9dfff102 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 11:43:45 +0600 Subject: [PATCH 1/8] start 0.2.4 --- CHANGELOG.md | 2 ++ build.gradle | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0524856..728ccff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ * Coroutines `1.3.2` -> `1.3.3` * Klock `1.7.3` -> `1.8.6` +### 0.2.4 + ### 0.2.3 * Updates in libraries: diff --git a/build.gradle b/build.gradle index 735b4cd..3878027 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ plugins { id "org.jetbrains.dokka" version "$dokka_version" } -project.version = "0.2.3" +project.version = "0.2.4" project.group = "com.insanusmokrassar" apply from: "publish.gradle" From 5c452d58b7bf5b41541407c36b66d5c0cae350e5 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 11:50:17 +0600 Subject: [PATCH 2/8] update libraries --- CHANGELOG.md | 4 ++++ gradle.properties | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 728ccff..859dd49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ ### 0.2.4 +* Updates in libraries: + * Klock `1.11.3` -> `1.11.14` + * Coroutines `1.3.7` -> `1.3.8` + ### 0.2.3 * Updates in libraries: diff --git a/gradle.properties b/gradle.properties index 4da145e..bc62003 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,11 +1,11 @@ kotlin.code.style=official kotlin_version=1.3.72 -kotlin_coroutines_version=1.3.7 +kotlin_coroutines_version=1.3.8 dokka_version=0.10.1 gradle_bintray_plugin_version=1.8.4 -klockVersion=1.11.3 +klockVersion=1.11.14 kotlin.incremental.multiplatform=true From 5358bfdb4710b4688b21f1a14f2ccf145331c778 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 13:16:56 +0600 Subject: [PATCH 3/8] add support of ranges in strings --- CHANGELOG.md | 1 + .../krontab/builder/TimeBuilder.kt | 10 ++++++++ .../krontab/internal/Parser.kt | 4 ++++ .../krontab/utils/StringParseTest.kt | 23 +++++++++++++++++-- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 859dd49..5d25e7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * Updates in libraries: * Klock `1.11.3` -> `1.11.14` * Coroutines `1.3.7` -> `1.3.8` +* Ranges support was included. Now it is possible to correctly use syntax `0-5` in strings schedules ### 0.2.3 diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/TimeBuilder.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/TimeBuilder.kt index f20a809..d0653f4 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/TimeBuilder.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/TimeBuilder.kt @@ -81,6 +81,16 @@ sealed class TimeBuilder ( */ @Suppress("unused") infix fun upTo(endIncluding: Int): Array = this from 0 upTo endIncluding + /** + * Will fill up this timeline from [this] up to [endIncluding] + */ + @Suppress("MemberVisibilityCanBePrivate") + infix operator fun Int.rangeTo(endIncluding: Int) = upTo(endIncluding) + /** + * Shortcut for "[from] 0 [rangeTo] [endIncluding]" + */ + @Suppress("MemberVisibilityCanBePrivate") + infix operator fun rangeTo(endIncluding: Int) = (this from 0) rangeTo endIncluding internal fun build() = result ?.map { it.toByte() } ?.toTypedArray() } diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/Parser.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/Parser.kt index dd152eb..d3b9492 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/Parser.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/Parser.kt @@ -7,6 +7,10 @@ private fun createSimpleScheduler(from: String, dataRange: IntRange): Array { + val splitted = it.split("-") + (splitted.first().toInt().clamp(dataRange) .. splitted[1].toInt().clamp(dataRange)).toList() + } it.contains("/") -> { val (start, step) = it.split("/") val startNum = (if (start.isEmpty() || start == "*") { diff --git a/src/commonTest/kotlin/com/insanusmokrassar/krontab/utils/StringParseTest.kt b/src/commonTest/kotlin/com/insanusmokrassar/krontab/utils/StringParseTest.kt index 406852a..383788a 100644 --- a/src/commonTest/kotlin/com/insanusmokrassar/krontab/utils/StringParseTest.kt +++ b/src/commonTest/kotlin/com/insanusmokrassar/krontab/utils/StringParseTest.kt @@ -1,12 +1,12 @@ package com.insanusmokrassar.krontab.utils import com.insanusmokrassar.krontab.buildSchedule -import com.insanusmokrassar.krontab.builder.buildSchedule -import com.insanusmokrassar.krontab.createSimpleScheduler import com.soywiz.klock.DateTime import kotlinx.coroutines.* import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.takeWhile +import kotlin.math.max +import kotlin.math.min import kotlin.test.Test import kotlin.test.assertEquals @@ -60,4 +60,23 @@ class StringParseTest { } } } + @Test + fun testThatFlowIsCorrectlyWorkEverySeveralSecondsRangeBuiltOnString() { + val rangesEnds = listOf(0 to 5, 30 to 35) + val kronScheduler = buildSchedule("${rangesEnds.joinToString(",") { "${it.first}-${it.second}" }} * * * *") + + val flow = kronScheduler.asFlow() + + runTest { + val ranges = rangesEnds.map { it.first .. it.second }.flatten().toMutableList() + val expectedCollects = rangesEnds.sumBy { it.second - it.first + 1 } + var collected = 0 + + flow.takeWhile { ranges.isNotEmpty() }.collect { + ranges.remove(it.seconds) + collected++ + } + assertEquals(expectedCollects, collected) + } + } } From 0d19d80d48a287f4070d33bfaa5580ea407662a8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 14:18:18 +0600 Subject: [PATCH 4/8] buildSchedule hotfix --- .../kotlin/com/insanusmokrassar/krontab/StringParser.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt index fffb1a3..b8b41ee 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt @@ -13,7 +13,7 @@ import com.insanusmokrassar.krontab.internal.* * * And each one have next format: * - * `{number},{number},...` + * `{number}[,{number},...]` or `*` * * and {number} here is one of * @@ -53,6 +53,6 @@ fun createSimpleScheduler(incoming: String): KronScheduler { } /** - * + * Shortcut for [createSimpleScheduler] */ fun buildSchedule(incoming: String): KronScheduler = createSimpleScheduler(incoming) \ No newline at end of file From 12d2d82c71e0a6622d73e0d73bb12fb18f823b0f Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 14:18:57 +0600 Subject: [PATCH 5/8] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d25e7a..2206b6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ * Updates in libraries: * Klock `1.11.3` -> `1.11.14` * Coroutines `1.3.7` -> `1.3.8` -* Ranges support was included. Now it is possible to correctly use syntax `0-5` in strings schedules +* Ranges support were included. Now it is possible to correctly use syntax `0-5` in strings schedules ### 0.2.3 From 5cc9c8278e2a97df81a4e416cb2983ba61dc639c Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 14:25:30 +0600 Subject: [PATCH 6/8] removing of unnecessary code --- .../krontab/internal/CronDateTime.kt | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt index 4a04474..bf173c8 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt @@ -28,30 +28,6 @@ internal data class CronDateTime( } internal val klockDayOfMonth = dayOfMonth ?.plus(1) - - companion object { - /** - * Using [clamp] extension for checking every parameter to be ensure that they are all correct - * @param month 0-11 - * @param dayOfMonth 0-31 - * @param hours 0-23 - * @param minutes 0-59 - * @param seconds 0-59 - */ - fun create( - month: Int? = null, - dayOfMonth: Int? = null, - hours: Int? = null, - minutes: Int? = null, - seconds: Int? = null - ) = CronDateTime( - month ?.clamp(monthRange) ?.toByte(), - dayOfMonth ?.clamp(dayOfMonthRange) ?.toByte(), - hours ?.clamp(hoursRange) ?.toByte(), - minutes ?.clamp(minutesRange) ?.toByte(), - seconds ?.clamp(secondsRange) ?.toByte() - ) - } } /** From 990b0d101100db0fda02dca9f6516c5825ebaee8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 15:23:44 +0600 Subject: [PATCH 7/8] fixes in docs and refactor --- .../com/insanusmokrassar/krontab/Executes.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/Executes.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/Executes.kt index 55acf5b..aab03af 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/Executes.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/Executes.kt @@ -7,7 +7,7 @@ import kotlinx.coroutines.delay /** * Execute [block] once at the [KronScheduler.next] time and return result of [block] calculation. * - * WARNING!!! If you want to launch it in parallel, you must do this explicit. + * WARNING!!! If you want to launch it in parallel, you must do this explicitly. */ suspend inline fun KronScheduler.doOnce(noinline block: suspend () -> T): T { delay((next() - DateTime.now()).millisecondsLong) @@ -15,12 +15,13 @@ suspend inline fun KronScheduler.doOnce(noinline block: suspend () -> T): T } /** - * Will [createSimpleScheduler] using [scheduleConfig] and call [doOnce] on it + * Will [buildSchedule] using [scheduleConfig] and call [doOnce] on it + * @see buildSchedule */ suspend inline fun doOnce( scheduleConfig: String, noinline block: suspend () -> T -) = createSimpleScheduler(scheduleConfig).doOnce(block) +) = buildSchedule(scheduleConfig).doOnce(block) /** * Will execute [block] while it will return true as a result of its calculation @@ -30,12 +31,14 @@ suspend inline fun KronScheduler.doWhile(noinline block: suspend () -> Boolean) } /** - * Will [createSimpleScheduler] using [scheduleConfig] and call [doWhile] with [block] + * Will [buildSchedule] using [scheduleConfig] and call [doWhile] with [block] + * + * @see buildSchedule */ suspend inline fun doWhile( scheduleConfig: String, noinline block: suspend () -> Boolean -) = createSimpleScheduler(scheduleConfig).doWhile(block) +) = buildSchedule(scheduleConfig).doWhile(block) /** * Will execute [block] without any checking of result @@ -45,9 +48,11 @@ suspend inline fun KronScheduler.doInfinity(noinline block: suspend () -> Unit) true } /** - * Will [createSimpleScheduler] using [scheduleConfig] and call [doInfinity] with [block] + * Will [buildSchedule] using [scheduleConfig] and call [doInfinity] with [block] + * + * @see buildSchedule */ suspend inline fun doInfinity( scheduleConfig: String, noinline block: suspend () -> Unit -) = createSimpleScheduler(scheduleConfig).doInfinity(block) +) = buildSchedule(scheduleConfig).doInfinity(block) From 65477bb0bce30eee1e03f239fb21b956b61607ea Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 Jul 2020 23:52:46 +0600 Subject: [PATCH 8/8] Update gradle wrapper version --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d66d2a1..1204836 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -# Tue May 21 17:58:54 HKT 2019 +# Fri Jul 24 23:52:00 +06 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip