pbogut / recurring_events

Elixir library for dealing with recurring events
MIT License
26 stars 8 forks source link

Creating a struct to hold the RRule and allow composition #5

Open tlvenn opened 6 years ago

tlvenn commented 6 years ago

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 ?

pbogut commented 6 years ago

I like the idea, need to think about it.

tlvenn commented 6 years ago

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

pbogut commented 6 years ago

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

tlvenn commented 6 years ago

this could be a decent start i guess:

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

pbogut commented 6 years ago

Whats the benefit over simple map?

tlvenn commented 6 years ago

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