rossta / montrose

Recurring events library for Ruby. Enumerable recurrence objects and convenient chainable interface.
https://rossta.net/montrose/
MIT License
821 stars 53 forks source link

Infinite loop when missing `until` parameter (and trying to `.count` the number of events) #154

Open Tao-Galasse opened 1 year ago

Tao-Galasse commented 1 year ago

Hello @rossta ! šŸ‘‹

First of all, thanks for your gem :)

I encountered a bug where montrose get stucked in an infinite loop in this scenario :

Montrose.every(:week, interval: 1, starts: Time.zone.today).events.count

I know it seems strange to not give the until parameter, but I encountered this in a context where it was a variable which was not always initialized and its value was nil, resulting in the following :

Montrose.every(:week, interval: 1, starts: Time.zone.today, until: nil).events.count

In my application, I have to count the number of dates generated with the recurrence parameters, which is why there is the count method used in the end (and it is this one causing the error).

I know the count method is not a Montrose method, so maybe you can't do something on your side to fix this ; but I was wondering if montrose should return an error if no end_date is given ?

I noticed the starts parameter could be omitted, and the current_date would be used by default. But you obviously cannot have a default end_date, because it makes no sense.

Do you think the gem should return an error, or at least a warning or something, if there is no end given for the recurrence ? šŸ¤”

Thanks for your time and your thoughts on this šŸ™‚

rossta commented 10 months ago

It's a good question and an interesting idea. I can understand how raising an error on infinite loop for a subset of Enumerable methods would be useful. I don't immediately know of the best approach but I'd consider a patch with tests.