recurring_events icon indicating copy to clipboard operation
recurring_events copied to clipboard

Creating a struct to hold the RRule and allow composition

Open tlvenn opened this issue 7 years ago • 6 comments

Sorry in advance for creating many issues for you... ;)

Right now the provided API is very adhoc, there is mainly 2 entry points depending if you need a stream or not and there is no struct being used to capture the RRule.

I was wondering if the api could evolve in a way where the starting point is the creation of that struct which then can be piped into functions such as:


rrule = RecurringEvents.new(~D[2016-12-07], %{freq: :daily})

RecurringEvents.all(rrule)
RecurringEvents.between(rrule, from, until)
RecurringEvents.take(rrule, 2)
RecurringEvents.to_string(rrule)

of course it would allow composition such as:

RecurringEvents.new(~D[2016-12-07], %{freq: :daily})
|> between(from, until)
|> take(2)

What do you think ?

tlvenn avatar Feb 02 '18 03:02 tlvenn

I like the idea, need to think about it.

pbogut avatar Feb 02 '18 20:02 pbogut

Great, good to hear. I create another issue regarding support for rruleset which I believe also would benefit from a proper rrule struct.

tlvenn avatar Feb 03 '18 15:02 tlvenn

Do you have any idea how structure like that could look like? Or maybe you can point me to some examples?

pbogut avatar Feb 09 '18 15:02 pbogut

this could be a decent start i guess:

https://github.com/jakubroztocil/rrule/blob/master/lib/rrule.js#L651

tlvenn avatar Feb 10 '18 06:02 tlvenn

Whats the benefit over simple map?

pbogut avatar Feb 10 '18 12:02 pbogut

well it's structured, so you know exactly which fields can exist and you can have default values as well. You can also pattern match on the struct itself to enforce it which is pretty good when designing an API that revolve around manipulating some data

tlvenn avatar Feb 10 '18 12:02 tlvenn