Skip to content

Commit

Permalink
Merge pull request #7 from NoxOrg/v7.0.1
Browse files Browse the repository at this point in the history
- added netstandard2.0 support
  • Loading branch information
jan-schutte committed May 6, 2024
2 parents 8e3395f + 7cb1668 commit 185a7aa
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 24 deletions.
11 changes: 6 additions & 5 deletions src/Nox.Cron/Nox.Cron.csproj
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<TargetFrameworks>netstandard2.0;net7.0</TargetFrameworks>
<LangVersion>11.0</LangVersion>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackageId>Nox.Cron</PackageId>
<AssemblyVersion>8.0.0.0</AssemblyVersion>
<FileVersion>8.0.0.0</FileVersion>
<PackageVersion>8.0.0</PackageVersion>
<AssemblyVersion>7.0.1</AssemblyVersion>
<FileVersion>7.0.1</FileVersion>
<PackageVersion>7.0.1</PackageVersion>
<Authors>Andre Sharpe</Authors>
<Company>Creations Unlimited</Company>
<PackageTags>English Cron Extension String Convert</PackageTags>
Expand Down
34 changes: 21 additions & 13 deletions src/Nox.Cron/Parser/CronParser.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using System.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Nox.Cron
{
Expand Down Expand Up @@ -46,7 +49,7 @@ public static CronSchedule ToCronExpression(this string englishPhrase)
// keep lowercase alpha, numbers, colon and plus - ignore rest
for (var i = 0; i < sbPhrase.Length; i++)
{
if (!" +:0123456789abcdefghijklmnopqrstuvwxyz".Contains(sbPhrase[i]))
if (" +:0123456789abcdefghijklmnopqrstuvwxyz".IndexOf(sbPhrase[i]) == -1)
sbPhrase[i] = '_';
}
sbPhrase.Replace("_", "");
Expand Down Expand Up @@ -74,7 +77,8 @@ public static CronSchedule ToCronExpression(this string englishPhrase)

// Replace synonymns
var words = sbPhrase.ToString()
.Split(' ', StringSplitOptions.RemoveEmptyEntries)
.Split(' ')
.Where(s => s.Length > 0)
.Select(x => Synonymn(x))
.ToList();

Expand All @@ -86,7 +90,7 @@ public static CronSchedule ToCronExpression(this string englishPhrase)
}

// if there is a date implied, assume first phrase is a time and vice versa
if (!words[0].StartsWith('['))
if (!words[0].StartsWith("["))
{
if (words.Contains("[T]") && !words.Contains("[D]"))
words.Insert(0, "[D]");
Expand All @@ -104,7 +108,7 @@ public static CronSchedule ToCronExpression(this string englishPhrase)
var everyWordCount = 0;
for (var i = everyStartPos; i < words.Count; i++)
{
if (words[i].StartsWith('[')) break;
if (words[i].StartsWith("[")) break;
everyWordCount++;
sbEvery.Append(words[i]);
sbEvery.Append(' ');
Expand Down Expand Up @@ -160,8 +164,7 @@ public static CronSchedule ToCronExpression(this string englishPhrase)
var everyParts = every.Split(' ').Reverse().ToArray();

var everyPartString = "*/"+
string.Join(',',
everyParts.Skip(1).Reverse().Skip(1).ToArray()
string.Join(",", everyParts.Skip(1).Reverse().Skip(1).ToArray()
);

isEveryHandled = true;
Expand Down Expand Up @@ -342,14 +345,15 @@ public static CronSchedule ToCronExpression(this string englishPhrase)

// handle anything unparsed that may be a time or day-of-month

words = string.Join(' ', words.ToArray())
words = string.Join(" ", words.ToArray())
.Trim()
.Replace("[D]","_")
.Replace("[T]","_")
.Split('_', StringSplitOptions.RemoveEmptyEntries)
.Split('_')
.Select(s => s.Trim())
.Where(s => s.Length > 0)
.ToList();


for (var i = words.Count - 1; i > -1; i--)
{
Expand All @@ -370,10 +374,14 @@ public static CronSchedule ToCronExpression(this string englishPhrase)

if (!string.IsNullOrWhiteSpace(words[i]) && words[i].All(c => Char.IsWhiteSpace(c) || Char.IsDigit(c)))
{
var elements = words[i].Split(' ', StringSplitOptions.RemoveEmptyEntries);
schedule.DayOfMonth = string.Join(',',elements);
var elements = words[i]
.Split(' ')
.Select(s => s.Trim())
.Where(s => s.Length > 0)
.ToList();

schedule.DayOfMonth = string.Join(",", elements);
words.RemoveAt(i);
continue;
}

}
Expand All @@ -395,7 +403,7 @@ public static CronSchedule ToCronExpression(this string englishPhrase)
if (string.IsNullOrWhiteSpace(schedule.DayOfWeek))
schedule.DayOfWeek = "*";

schedule.Unparsed = string.Join(' ',words.ToArray()).Trim();
schedule.Unparsed = string.Join(" ",words.ToArray()).Trim();

// done

Expand Down
12 changes: 6 additions & 6 deletions src/Nox.Cron/Parser/CronSchedule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ public CronSchedule()
{
}

public string Minutes { get; init; } = string.Empty;
public string Hours { get; init; } = string.Empty;
public string DayOfMonth { get; init; } = string.Empty;
public string Months { get; init; } = string.Empty;
public string DayOfWeek { get; init; } = string.Empty;
public string Unparsed { get; init; } = string.Empty;
public string Minutes { get; set; } = string.Empty;
public string Hours { get; set; } = string.Empty;
public string DayOfMonth { get; set; } = string.Empty;
public string Months { get; set; } = string.Empty;
public string DayOfWeek { get; set; } = string.Empty;
public string Unparsed { get; set; } = string.Empty;

public override string ToString() => $"{Minutes} {Hours} {DayOfMonth} {Months} {DayOfWeek}";
public bool IsFullyParsed() => string.IsNullOrWhiteSpace(Unparsed);
Expand Down

0 comments on commit 185a7aa

Please sign in to comment.