Introduction to the Montrose gem for modeling recurring events in Ruby. Learn more: http://bit.ly/1U3RDA7
RECURRING EVENTSNYC.rb, every month, 2nd Tuesday, at 7pmRoss Kaffenbergerwith Montrose
View Slide
@rossta2
3
WEPLAY 2008
ESTIMATE 4 days
ACTUAL 4 WEEKS
HARD PROBLEMS
CHALLENGE MODELING RECURRENCE“every Friday 13th, forever” # in Ruby
CHALLENGE MODELING RECURRENCE* ice_cube* recurrence* runtsomething_better???
# enumerable, e.g.r.each do |time|puts timeendWISH LIST
# queryable, e.g.r.include?(time)r.eventsr.until(time)WISH LIST
# serializable, e.g.r.to_jsonr.to_ymlr.to_icalWISH LIST
# easy-to-use# ???WISH LIST
API-DRIVEN
INSPIRATION rfc5545 - iCAl SpecEvery Friday the 13th, forever:RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13
INSPIRATION DATA STRUCTURE{ every: :month, on: { friday: 13 } }
INSPIRATION HTTP.rb“easy-to-use client libraryfor making requests fromRuby. It uses a simple methodchaining system…”
INTRODUCING MONTROSE“easy-to-use library forDEFINING RECURRING EVENTS INRuby. It uses a simple methodchaining system…”gem install montrose
Montrose.minutelyMontrose.dailyMontrose.monthly# etc.MONTROSE EXAMPLESgithub.com/rossta/montrose
Montrose.weekly(on: :monday, at: "10:30 am")=> #MONTROSE EXAMPLESgithub.com/rossta/montrose
Montrose.monthly.starting(1.year.from_now).on(friday: 13).repeat(5)MONTROSE CHAINABLEgithub.com/rossta/montrose
# Every 3 hoursMontrose.hourly.interval(3)Montrose.every(3.hours)Montrose.r(every: 3.hours)Montrose.recurrence(every: :hour, interval: 3)MONTROSE FLEXIBLEgithub.com/rossta/montrose
r = Montrose.monthly.repeat(3)r.map(&:to_date)=> [Tue, 09 Feb 2016, Wed, 09 Mar 2016, ...]MONTROSE ENUMERABLEgithub.com/rossta/montrose
r1 = Montrose.every(:week)r2 = Montrose.on(:tuesday, :thursday)r3 = Montrose.at("12 pm")r1.merge(r2).merge(r3).take(4).to_a=> [2016-02-09 12:00:00 -0500,2016-02-11 12:00:00 -0500,...]MONTROSE COMPOSABLEgithub.com/rossta/montrose
class EventSeries < ActiveRecord::Baseserialize :recurrence, Montrose::RecurrenceendMONTROSE SERIALIZABLEgithub.com/rossta/montrose
MONTROSE NYC.RBMontrose.monthly.day(tuesday: [2]).at("7pm")github.com/rossta/montrose
NEXT STEPSgithub.com/rossta/montrose
rossta/montrose@rosstahttp://empex.coEmpire City Elixir Confrossta.net