You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
... it seems to be intended, but just now it triggered a bug for me:
Montrose.every(:second).events.next de facto returns a time in past, because it will always return a time that has sub second time set to 0.
For example if you have a daily trigger Montrose.every(:day).at('18:00:00') and you run events.next at 15.01.2020 18:00:00.500 (half a second past 18:00:00), it returns 15.01.2020 18:00:00.000 which is in past (at least if you care about sub second precision).
Is this a bug? Shouldn't events.next never return a time in the past?
Edit: A workaround I just implemented is to do Montrose::Recurrence.new(recurrence).take(3).find { |time| time >= Time.current }.
The text was updated successfully, but these errors were encountered:
Montrose doesn't support sub-second recurrence. When a recurrence is initialized, the start time for the recurrence interval is zero'd out to the current second.
The issue you are describing will only exist when a recurrence is initialized at less than a second after a time which overlaps with the recurrence rules, as you have illustrated.
Is this a bug?
Probably, though I'd consider it minor. A simple patch with tests to address the issue is welcome.
Shouldn't events.next never return a time in the past?
We do generally want to support events.next returning time in the past (since the start timestamp may be explicitly set in the past) though I understand what you mean in the context of this issue.
A workaround...
Your workaround may lead to subtle bugs as well, since Time.current is evaluated anew each time your find block is run.
According to this line in the specs ...
montrose/spec/montrose/frequency/secondly_spec.rb
Line 16 in 2487a31
Montrose.every(:second).events.next
de facto returns a time in past, because it will always return a time that has sub second time set to0
.For example if you have a daily trigger
Montrose.every(:day).at('18:00:00')
and you runevents.next
at15.01.2020 18:00:00.500
(half a second past 18:00:00), it returns15.01.2020 18:00:00.000
which is in past (at least if you care about sub second precision).Is this a bug? Shouldn't
events.next
never return a time in the past?Edit: A workaround I just implemented is to do
Montrose::Recurrence.new(recurrence).take(3).find { |time| time >= Time.current }
.The text was updated successfully, but these errors were encountered: