fugit 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fugit might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d32bc8cbff08c0ca8fe2c2037454ca76c208878f26d71398cd46a93729958248
4
- data.tar.gz: ce7d21ce4265c59def186f0e28271def0b74724c99c46814443182039f26cba1
3
+ metadata.gz: 85c52688755255cf02f4dde422a66df260a9e9b1e13d7aebc08ff48e4c3fd158
4
+ data.tar.gz: bf29e925bda6258e55e25208cfacff5ad82dfd9bd28683bb65c79ec95c5e37f1
5
5
  SHA512:
6
- metadata.gz: fe8facb5f36dd89ec4e03994c6474f3a6e8de371f05322b8c7983d2d9d8769889b475e35a2d0bcc74fb04b59f96ca857a16ffb6a3db50db41a36beff48c57c39
7
- data.tar.gz: d928deee88172c20c15e6960bddfd30b77f3eb7fb0e0edd322baa9ce54932fe476afc7a21985fe3cc65dff3507acd29540f88b51ae27f3e458d060f083a11628
6
+ metadata.gz: 6754049a51e4886bd806fe7d97ea64e5e0fc74851c579a7e8d46b7b42dedaa08aea04a9a8bec2f6c560df8a5cf57977dfdc6f8f33a73675dad885ad95b22c73f
7
+ data.tar.gz: 03b507d208bee88cae70f7d85875e931600576a2e048fd8523d8c7ed58b8d34ea40423ff93be04cab42e73bb67ed5580e41e89e0bae1363c9a624a8865979d4f
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
  # CHANGELOG.md
3
3
 
4
4
 
5
+ ## fugit 1.11.0 released 2024-04-24
6
+
7
+ * Revert gh-86 ban on `every 27 hours` / `* */27 * * *` for gh-103
8
+
9
+
10
+ ## fugit 1.10.1 released 2024-02-29
11
+
12
+ * Fix on Ruby 2.2.6 thanks to @aunghtain, gh-93
13
+
14
+
5
15
  ## fugit 1.10.0 released 2024-02-22
6
16
 
7
17
  * Implement `Fugit::Cron#within(time_start, time_end)`
data/CREDITS.md CHANGED
@@ -1,7 +1,11 @@
1
1
 
2
2
  # fugit credits
3
3
 
4
- * Marcos Belluci, https://github.com/delbetu, gh-88 , 1st and last nat
4
+ * Michael Scrivo, https://github.com/mscrivo, gh-103
5
+ * Benjamin Darcet, https://github.com/bdarcet gh-95 gh-96 et-orbi #rweek
6
+ * https://github.com/franckduche gh-95 gh-96 et-orbi #rweek
7
+ * https://hithub.com/aunghtain, gh-93, include oneliner vs Ruby 2.6.6
8
+ * Marcos Belluci, https://github.com/delbetu, gh-88, 1st and last nat
5
9
  * Michael Reinsch, https://github.com/mreinsch, gh-84 and gh-85
6
10
  * Marc Anguera, https://github.com/markets, gh-70 and Sidekiq-Cron
7
11
  * ski-nine, https://github.com/ski-nine, gh-81
data/README.md CHANGED
@@ -34,13 +34,14 @@ The intersection of those two projects is where fugit is born:
34
34
  ### Projects using fugit
35
35
 
36
36
  * [arask](https://github.com/Ebbe/arask) - "Automatic RAils taSKs" uses fugit to parse cron strings
37
- * [sidekiq-cron](https://github.com/ondrejbartas/sidekiq-cron) - recent versions of Sidekiq-Cron use fugit to parse cron strings
37
+ * [sidekiq-cron](https://github.com/ondrejbartas/sidekiq-cron) - uses fugit to parse cron strings since version 1.0.0, it was using rufus-scheduler previously
38
38
  * [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler) - as seen above
39
39
  * [flor](https://github.com/floraison/flor) - used in the [cron](https://github.com/floraison/flor/blob/master/doc/procedures/cron.md) procedure
40
40
  * [que-scheduler](https://github.com/hlascelles/que-scheduler) - a reliable job scheduler for [que](https://github.com/chanks/que)
41
41
  * [serial_scheduler](https://github.com/grosser/serial_scheduler) - ruby task scheduler without threading
42
42
  * [delayed_cron_job](https://github.com/codez/delayed_cron_job) - an extension to Delayed::Job that allows you to set cron expressions for your jobs
43
43
  * [GoodJob](https://github.com/bensheldon/good_job) - a multithreaded, Postgres-based, Active Job backend for Ruby on Rails
44
+ * [Solid Queue](https://github.com/rails/solid_queue) - a DB-based queuing backend for Active Job, designed with simplicity and performance in mind
44
45
  * ...
45
46
 
46
47
  ## `Fugit.parse(s)`
@@ -140,6 +141,8 @@ c = Fugit.parse_cron('0 12 * * mon#2')
140
141
 
141
142
  # `#next` and `#prev` return Enumerable instances
142
143
  #
144
+ # These two methods are available since fugit 1.10.0.
145
+ #
143
146
  c.next(Time.parse('2024-02-16 12:00:00'))
144
147
  .take(3)
145
148
  .map(&:to_s)
@@ -157,6 +160,8 @@ c.prev(Time.parse('2024-02-16 12:00:00'))
157
160
  # instances that correspond to the occurrences of the cron within
158
161
  # the time range
159
162
  #
163
+ # This method is available since fugit 1.10.0.
164
+ #
160
165
  c.within(Time.parse('2024-02-16 12:00')..Time.parse('2024-08-01 12:00'))
161
166
  .map(&:to_s)
162
167
  # => [ '2024-03-11 12:00:00',
@@ -251,6 +256,8 @@ p Fugit.parse_cron('59 6 1-7& * 2&').next_time('2020-03-15').to_s
251
256
 
252
257
  Fugit understands `0 5 * * 1#1` or `0 5 * * mon#1` as "each first Monday of the month, at 05:00".
253
258
 
259
+ The hash extension can only be used in the day-of-week field.
260
+
254
261
  ```ruby
255
262
  '0 5 * * 1#1' #
256
263
  '0 5 * * mon#1' # the first Monday of the month at 05:00
@@ -273,6 +280,8 @@ Fugit understands `0 5 * * 1#1` or `0 5 * * mon#1` as "each first Monday of the
273
280
 
274
281
  Fugit, since 1.1.10, also understands cron strings like "`9 0 * * sun%2`" which can be read as "every other Sunday at 9am".
275
282
 
283
+ The modulo extension can only be used in the day-of-week field.
284
+
276
285
  For odd Sundays, one can write `9 0 * * sun%2+1`.
277
286
 
278
287
  It can be combined, as in `9 0 * * sun%2,tue%3+2`
data/fugit.gemspec CHANGED
@@ -41,7 +41,7 @@ Time tools for flor and the floraison project. Cron parsing and occurrence compu
41
41
  # this dependency appears in 'et-orbi'
42
42
 
43
43
  s.add_runtime_dependency 'raabro', '~> 1.4'
44
- s.add_runtime_dependency 'et-orbi', '~> 1', '>= 1.2.7'
44
+ s.add_runtime_dependency 'et-orbi', '~> 1', '>= 1.2.11'
45
45
 
46
46
  s.add_development_dependency 'rspec', '~> 3.8'
47
47
  s.add_development_dependency 'chronic', '~> 0.10'
data/lib/fugit/cron.rb CHANGED
@@ -264,6 +264,8 @@ module Fugit
264
264
  "please fill an issue at https://git.io/fjJC9"
265
265
  ) if (i += 1) > MAX_ITERATION_COUNT
266
266
 
267
+ #tt = t.time;
268
+ #puts " #{tt.strftime('%F %T %:z %A')} #{tt.rweek} #{tt.rweek % 2}"
267
269
  (ifrom == t.to_i) && (t.inc(1); next)
268
270
  month_match?(t) || (t.inc_month; next)
269
271
  day_match?(t) || (t.inc_day; next)
@@ -307,6 +309,8 @@ module Fugit
307
309
  "please fill an issue at https://git.io/fjJCQ"
308
310
  ) if (i += 1) > MAX_ITERATION_COUNT
309
311
 
312
+ #tt = t.time;
313
+ #puts " #{tt.strftime('%F %T %:z %A')} #{tt.rweek} #{tt.rweek % 4}"
310
314
  month_match?(t) || (t.dec_month; next)
311
315
  day_match?(t) || (t.dec_day; next)
312
316
  hour_match?(t) || (t.dec_hour; next)
@@ -320,16 +324,23 @@ module Fugit
320
324
 
321
325
  # Used by Fugit::Cron#next and Fugit::Cron#prev
322
326
  #
323
- class CronIterator include ::Enumerable
327
+ class CronIterator
328
+ include ::Enumerable
329
+
324
330
  attr_reader :cron, :start, :current, :direction
331
+
325
332
  def initialize(cron, direction, start)
333
+
326
334
  @cron = cron
327
335
  @start = start
328
336
  @current = start.dup
329
337
  @direction = direction
330
338
  end
339
+
331
340
  def each
341
+
332
342
  loop do
343
+
333
344
  yield(@current = @cron.send(@direction, @current))
334
345
  end
335
346
  end
@@ -558,7 +569,10 @@ module Fugit
558
569
 
559
570
  sta, edn, sla = r
560
571
 
561
- return false if sla && sla > max
572
+ #return false if sla && sla > max
573
+ #
574
+ # let it go, "* */24 * * *" and "* */27 * * *" are okay
575
+ # gh-86 and gh-103
562
576
 
563
577
  edn = max if sla && edn.nil?
564
578
 
@@ -258,7 +258,7 @@ module Fugit
258
258
  when Numeric then add_numeric(a)
259
259
  when Fugit::Duration then add_duration(a)
260
260
  when String then add_duration(self.class.parse(a))
261
- when ::Time, EtOrbi::EoTime then add_to_time(a)
261
+ when ::Time, ::EtOrbi::EoTime then add_to_time(a)
262
262
  else fail ArgumentError.new(
263
263
  "cannot add #{a.class} instance to a Fugit::Duration")
264
264
  end
data/lib/fugit/parse.rb CHANGED
@@ -29,8 +29,25 @@ module Fugit
29
29
 
30
30
  def do_parse(s, opts={})
31
31
 
32
- parse(s, opts) ||
33
- fail(ArgumentError.new("found no time information in #{s.inspect}"))
32
+ opts[:at] = opts[:in] if opts.has_key?(:in)
33
+
34
+ result = nil
35
+ errors = []
36
+
37
+ %i[ cron duration nat at ]
38
+ .each { |k|
39
+ begin
40
+ result ||= (opts[k] != false && self.send("do_parse_#{k}", s))
41
+ rescue => err
42
+ errors << err
43
+ end }
44
+
45
+ return result if result
46
+
47
+ raise(
48
+ errors.find { |r| r.class != ArgumentError } ||
49
+ errors.first ||
50
+ ArgumentError.new("found no time information in #{s.inspect}"))
34
51
  end
35
52
 
36
53
  def parse_cronish(s, opts={})
data/lib/fugit.rb CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Fugit
5
5
 
6
- VERSION = '1.10.0'
6
+ VERSION = '1.11.0'
7
7
  end
8
8
 
9
9
  require 'time'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fugit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-22 00:00:00.000000000 Z
11
+ date: 2024-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: raabro
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '1'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 1.2.7
36
+ version: 1.2.11
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '1'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 1.2.7
46
+ version: 1.2.11
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  requirements: []
119
- rubygems_version: 3.2.33
119
+ rubygems_version: 3.4.10
120
120
  signing_key:
121
121
  specification_version: 4
122
122
  summary: time tools for flor