From 6077384a17b0d669c22aa6199260263c869d5c8e Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 3 Jun 2020 21:21:52 +0600 Subject: [PATCH] fill documentation and optimize SchedulerBuilder#build and createSimpleScheduler functions --- .../insanusmokrassar/krontab/StringParser.kt | 28 ++-------- .../krontab/builder/SchedulerBuilder.kt | 55 ++++++++++--------- .../krontab/internal/CronDateTime.kt | 36 ++++++++++++ .../krontab/internal/CronDateTimeScheduler.kt | 10 ++++ 4 files changed, 80 insertions(+), 49 deletions(-) diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt index d4959c8..af5f0d7 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/StringParser.kt @@ -35,6 +35,8 @@ import com.insanusmokrassar.krontab.internal.* * * "0/5 * * * *" for every five seconds triggering * * "0/15 30 * * *" for every 15th seconds in a half of each hour * * "1 2 3 4 5" for triggering in near first second of second minute of third hour of fourth day of may + * + * @see com.insanusmokrassar.krontab.internal.createKronScheduler */ fun createSimpleScheduler(incoming: String): KronScheduler { val (secondsSource, minutesSource, hoursSource, dayOfMonthSource, monthSource) = incoming.split(" ") @@ -45,27 +47,7 @@ fun createSimpleScheduler(incoming: String): KronScheduler { val dayOfMonthParsed = parseDaysOfMonth(dayOfMonthSource) val monthParsed = parseMonths(monthSource) - val resultCronDateTimes = mutableListOf(CronDateTime()) - - secondsParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(seconds = currentTime) - } - - minutesParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(minutes = currentTime) - } - - hoursParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(hours = currentTime) - } - - dayOfMonthParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(dayOfMonth = currentTime) - } - - monthParsed ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(month = currentTime) - } - - return CronDateTimeScheduler(resultCronDateTimes.toList()) + return createKronScheduler( + secondsParsed, minutesParsed, hoursParsed, dayOfMonthParsed, monthParsed + ) } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/SchedulerBuilder.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/SchedulerBuilder.kt index 161f16d..57d4aec 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/SchedulerBuilder.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/builder/SchedulerBuilder.kt @@ -1,10 +1,16 @@ package com.insanusmokrassar.krontab.builder -import com.insanusmokrassar.krontab.internal.CronDateTimeScheduler import com.insanusmokrassar.krontab.KronScheduler +import com.insanusmokrassar.krontab.internal.* import com.insanusmokrassar.krontab.internal.CronDateTime +import com.insanusmokrassar.krontab.internal.CronDateTimeScheduler import com.insanusmokrassar.krontab.internal.fillWith +/** + * Will help to create an instance of [KronScheduler] + * + * @see com.insanusmokrassar.krontab.createSimpleScheduler + */ fun buildSchedule(settingsBlock: SchedulerBuilder.() -> Unit): KronScheduler { val builder = SchedulerBuilder() @@ -36,6 +42,9 @@ class SchedulerBuilder( } ?: builderValue } + /** + * Starts an seconds block + */ fun seconds(block: SecondsBuilder.() -> Unit) { seconds = callAndReturn( seconds, @@ -44,6 +53,9 @@ class SchedulerBuilder( ) } + /** + * Starts an minutes block + */ fun minutes(block: MinutesBuilder.() -> Unit) { minutes = callAndReturn( minutes, @@ -52,6 +64,9 @@ class SchedulerBuilder( ) } + /** + * Starts an hours block + */ fun hours(block: HoursBuilder.() -> Unit) { hours = callAndReturn( hours, @@ -60,6 +75,9 @@ class SchedulerBuilder( ) } + /** + * Starts an days of month block + */ fun dayOfMonth(block: DaysOfMonthBuilder.() -> Unit) { dayOfMonth = callAndReturn( dayOfMonth, @@ -68,6 +86,9 @@ class SchedulerBuilder( ) } + /** + * Starts an months block + */ fun months(block: MonthsBuilder.() -> Unit) { month = callAndReturn( month, @@ -76,29 +97,11 @@ class SchedulerBuilder( ) } - fun build(): KronScheduler { - val resultCronDateTimes = mutableListOf(CronDateTime()) - - seconds ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(seconds = currentTime) - } - - minutes ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(minutes = currentTime) - } - - hours ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(hours = currentTime) - } - - dayOfMonth ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(dayOfMonth = currentTime) - } - - month ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> - previousCronDateTime.copy(month = currentTime) - } - - return CronDateTimeScheduler(resultCronDateTimes.toList()) - } + /** + * @return Completely built and independent [KronScheduler] + * + * @see com.insanusmokrassar.krontab.createSimpleScheduler + * @see com.insanusmokrassar.krontab.internal.createKronScheduler + */ + fun build(): KronScheduler = createKronScheduler(seconds, minutes, hours, dayOfMonth, month) } diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt index 9f09b0a..4a04474 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTime.kt @@ -1,5 +1,6 @@ package com.insanusmokrassar.krontab.internal +import com.insanusmokrassar.krontab.KronScheduler import com.insanusmokrassar.krontab.utils.clamp import com.soywiz.klock.DateTime import com.soywiz.klock.DateTimeSpan @@ -86,3 +87,38 @@ internal fun CronDateTime.toNearDateTime(relativelyTo: DateTime = DateTime.now() return current } + +/** + * @return [KronScheduler] (in fact [CronDateTimeScheduler]) based on incoming data + */ +internal fun createKronScheduler( + seconds: Array? = null, + minutes: Array? = null, + hours: Array? = null, + dayOfMonth: Array? = null, + month: Array? = null +): KronScheduler { + val resultCronDateTimes = mutableListOf(CronDateTime()) + + seconds ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> + previousCronDateTime.copy(seconds = currentTime) + } + + minutes ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> + previousCronDateTime.copy(minutes = currentTime) + } + + hours ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> + previousCronDateTime.copy(hours = currentTime) + } + + dayOfMonth ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> + previousCronDateTime.copy(dayOfMonth = currentTime) + } + + month ?.fillWith(resultCronDateTimes) { previousCronDateTime: CronDateTime, currentTime: Byte -> + previousCronDateTime.copy(month = currentTime) + } + + return CronDateTimeScheduler(resultCronDateTimes.toList()) +} diff --git a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTimeScheduler.kt b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTimeScheduler.kt index 01d6245..8c96701 100644 --- a/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTimeScheduler.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/krontab/internal/CronDateTimeScheduler.kt @@ -6,6 +6,16 @@ import com.soywiz.klock.DateTime /** * Cron-oriented realisation of [KronScheduler] + * + * @see com.insanusmokrassar.krontab.AnyTimeScheduler + * @see com.insanusmokrassar.krontab.EverySecondScheduler + * @see com.insanusmokrassar.krontab.EveryMinuteScheduler + * @see com.insanusmokrassar.krontab.EveryHourScheduler + * @see com.insanusmokrassar.krontab.EveryDayOfMonthScheduler + * @see com.insanusmokrassar.krontab.EveryMonthScheduler + * + * @see com.insanusmokrassar.krontab.builder.buildSchedule + * @see com.insanusmokrassar.krontab.builder.SchedulerBuilder */ internal data class CronDateTimeScheduler internal constructor( internal val cronDateTimes: List