cron_calc 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df5dd3a2f576d78996d783668af59a058a4fd9256072dfa25b84760d64e09797
4
- data.tar.gz: 922e53ae27d369035d3b7fff81e1ba624756fa365c30694e6871abc54421473e
3
+ metadata.gz: 65bbd980a990785461ad8513755d5ef1effc8d14f4dac4205bf0381f4489bbcd
4
+ data.tar.gz: 116ac513ff00017a519997d1399748faa95284b2171e6f11c5097a25b10525ee
5
5
  SHA512:
6
- metadata.gz: 85a0d0ea11962ee78495e6c6c8ee40ea9695d20df2635efbb67cdc32502086032b3aa85aaa419b39cc1a736a31c6d1ecc577afd60b571d4e8d120c5adcd922fc
7
- data.tar.gz: aab193b3c8afe9551dd46fe1b9e0061702cc69e3fa739c08c774d5f77ef40dabbd5c90c816b93a1e864d2e05c6c5278eda102c07649c83afd3a43553c5cc5ef8
6
+ metadata.gz: 70d5d114af61a0430a52b8ef0fc06caecc693fe8f632472814f4335543b038ba6c94565069f831ee7486a8633e015e8833c65b6f1ba2814832a7bb5e4352c9fb
7
+ data.tar.gz: cb5b23e742052e1b76035721214c28c2a9ce162b70d7c1d60bb308e378db36318c3e4ceac9e65b4a7dc779c1cc710109880f8b921f00580df77bf5f1cc8d3539
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [0.3.0] - 2023-12-22
2
+
3
+ - Added support for DOWs
4
+
1
5
  ## [0.2.0] - 2023-12-19
2
6
 
3
7
  - Added #next method
data/README.md CHANGED
@@ -21,8 +21,8 @@ Now, you can use one of three methods `#in`, `#next`, `#last` to determine cron
21
21
 
22
22
  ### Using `#in`
23
23
 
24
- Calculates cron job occurrences within a given time period.
25
- @param period [Range] The time period for which to calculate cron job occurrences.
24
+ Calculates cron job occurrences within a given time period.\
25
+ @param period [Range] The time period for which to calculate cron job occurrences.\
26
26
  @return [Array<Time>] An array of Time instances representing each occurrence.
27
27
 
28
28
  ```ruby
@@ -34,10 +34,10 @@ Calculates cron job occurrences within a given time period.
34
34
 
35
35
  ### Using `#next`
36
36
 
37
- Calculates the next 'n' occurrences of the cron job from a given start time.
38
- @param count [Integer] The number of occurrences to calculate. Defaults to `1`.
39
- @param period_start [Time] The start time from which to calculate occurrences. Defaults to `Time.now`.
40
- @param max_years [Integer] The maximum number of years to consider for the period. Defaults to `5`.
37
+ Calculates the next 'n' occurrences of the cron job from a given start time.\
38
+ @param count [Integer] The number of occurrences to calculate. Defaults to `1`.\
39
+ @param period_start [Time] The start time from which to calculate occurrences. Defaults to `Time.now`.\
40
+ @param max_years [Integer] The maximum number of years to consider for the period. Defaults to `5`.\
41
41
  @return [Array<Time>] An array of the next 'n' occurrences.
42
42
 
43
43
  ```ruby
@@ -53,10 +53,10 @@ Calculates the next 'n' occurrences of the cron job from a given start time.
53
53
 
54
54
  ### Using `#last`
55
55
 
56
- Calculates the last 'n' occurrences of the cron job until a given end time.
57
- @param count [Integer] The number of past occurrences to calculate.
58
- @param period_end [Time] The end time until which to calculate occurrences.
59
- @param max_years [Integer] The maximum number of years to consider for the period.
56
+ Calculates the last 'n' occurrences of the cron job until a given end time.\
57
+ @param count [Integer] The number of past occurrences to calculate.\
58
+ @param period_end [Time] The end time until which to calculate occurrences.\
59
+ @param max_years [Integer] The maximum number of years to consider for the period.\
60
60
  @return [Array<Time>] An array of the last 'n' occurrences.
61
61
 
62
62
  ```ruby
@@ -69,7 +69,6 @@ Calculates the last 'n' occurrences of the cron job until a given end time.
69
69
 
70
70
  ## Unsupported features
71
71
 
72
- - DOW (Day of Week) - always require *
73
72
  - Named DOW and months (SUN-SAT, JAN-DEC)
74
73
  - Joining characters , - /
75
74
  - Predefined definitions (@yearly, @monthly, @weekly, @daily, @midnight, @hourly)
data/cron_calc.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ['jakubmizinski@gmail.com']
10
10
 
11
11
  spec.summary = 'Calculates cron job occurrences'
12
- spec.description = 'Calculates cron job occurrences within a specified period \n
12
+ spec.description = 'Calculates cron job occurrences within a specified period
13
13
  or determines next/last "n" occurrences based on a specified time.'
14
14
  spec.homepage = 'https://github.com/mizinsky/cron_calc'
15
15
  spec.license = 'MIT'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CronCalc
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
data/lib/cron_calc.rb CHANGED
@@ -21,7 +21,8 @@ module CronCalc
21
21
  minutes: 0..59,
22
22
  hours: 0..23,
23
23
  days: 1..31,
24
- months: 1..12
24
+ months: 1..12,
25
+ dows: 0..7
25
26
  }.freeze
26
27
 
27
28
  def initialize(cron_string)
@@ -68,12 +69,13 @@ module CronCalc
68
69
 
69
70
  def occurrences(period, count = nil, reverse: false)
70
71
  time_combinations = generate_time_combinations(period, reverse).lazy
72
+ wdays = parse_cron_part(:dows)
71
73
 
72
74
  time_combinations.each_with_object([]) do |(year, month, day, hour, minute), occ|
73
75
  break occ if count && occ.length == count
74
76
 
75
77
  time = Time.new(year, month, day, hour, minute)
76
- occ << time if Date.valid_date?(year, month, day) && period.include?(time)
78
+ occ << time if Date.valid_date?(year, month, day) && period.include?(time) && wdays.include?(time.wday)
77
79
  end
78
80
  end
79
81
 
@@ -92,7 +94,8 @@ module CronCalc
92
94
  minutes: splitted[0],
93
95
  hours: splitted[1],
94
96
  days: splitted[2],
95
- months: splitted[3]
97
+ months: splitted[3],
98
+ dows: splitted[4]
96
99
  }
97
100
  end
98
101
 
@@ -122,7 +125,7 @@ module CronCalc
122
125
 
123
126
  def cron_string_valid?
124
127
  # rubocop:disable Layout/LineLength
125
- regex = %r{\A(\*|([0-5]?\d)(,([0-5]?\d))*|(\*/\d+)|(\d+-\d+)) (\*|([01]?\d|2[0-3])(,([01]?\d|2[0-3]))*|(\*/\d+)|(\d+-\d+)) (\*|([12]?\d|3[01])(,([12]?\d|3[01]))*|(\*/\d+)|(\d+-\d+)) (\*|([1-9]|1[0-2])(,([1-9]|1[0-2]))*|(\*/\d+)|(\d+-\d+)) \*\z}
128
+ regex = %r{\A(\*|([0-5]?\d)(,([0-5]?\d))*|(\*/\d+)|(\d+-\d+)) (\*|([01]?\d|2[0-3])(,([01]?\d|2[0-3]))*|(\*/\d+)|(\d+-\d+)) (\*|([12]?\d|3[01])(,([12]?\d|3[01]))*|(\*/\d+)|(\d+-\d+)) (\*|([1-9]|1[0-2])(,([1-9]|1[0-2]))*|(\*/\d+)|(\d+-\d+)) (\*|([0-6])(,([0-6]))*|(\*/[0-6]+)|([0-6]-[0-6]))\z}
126
129
  # rubocop:enable Layout/LineLength
127
130
  cron_string.match?(regex)
128
131
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cron_calc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Miziński
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-19 00:00:00.000000000 Z
11
+ date: 2023-12-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
- Calculates cron job occurrences within a specified period \n
14
+ Calculates cron job occurrences within a specified period
15
15
  or determines next/last "n" occurrences based on a specified time.
16
16
  email:
17
17
  - jakubmizinski@gmail.com