Tento druh problému je takové minové pole okrajových případů, že bych vždy delegoval logiku na něco jako IceCube (https://github.com/seejohnrun/ice_cube ). Je vyroben tak, aby se vypořádal s těmito druhy opakujících se plánů, a přichází se snadnou podporou pro serializaci atd. I když to vyžaduje trochu přehodnocení toho, jak věci děláte, důrazně bych jej doporučil používat.