×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
RECURRING EVENTS NYC.rb, every month, 2nd Tuesday, at 7pm Ross Kaffenberger with Montrose
Slide 2
Slide 2 text
@rossta 2
Slide 3
Slide 3 text
3
Slide 4
Slide 4 text
WEPLAY 2008
Slide 5
Slide 5 text
WEPLAY 2008
Slide 6
Slide 6 text
ESTIMATE 4 days
Slide 7
Slide 7 text
ACTUAL 4 WEEKS
Slide 8
Slide 8 text
HARD PROBLEMS
Slide 9
Slide 9 text
CHALLENGE MODELING RECURRENCE “every Friday 13th, forever” # in Ruby
Slide 10
Slide 10 text
CHALLENGE MODELING RECURRENCE * ice_cube * recurrence * runt something_better???
Slide 11
Slide 11 text
# enumerable, e.g. r.each do |time| puts time end WISH LIST
Slide 12
Slide 12 text
# queryable, e.g. r.include?(time) r.events r.until(time) WISH LIST
Slide 13
Slide 13 text
# serializable, e.g. r.to_json r.to_yml r.to_ical WISH LIST
Slide 14
Slide 14 text
# easy-to-use # ??? WISH LIST
Slide 15
Slide 15 text
API-DRIVEN
Slide 16
Slide 16 text
INSPIRATION rfc5545 - iCAl Spec Every Friday the 13th, forever: RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13
Slide 17
Slide 17 text
INSPIRATION DATA STRUCTURE { every: :month, on: { friday: 13 } }
Slide 18
Slide 18 text
INSPIRATION HTTP.rb “easy-to-use client library for making requests from Ruby. It uses a simple method chaining system…”
Slide 19
Slide 19 text
INTRODUCING MONTROSE “easy-to-use library for DEFINING RECURRING EVENTS IN Ruby. It uses a simple method chaining system…” gem install montrose
Slide 20
Slide 20 text
Montrose.minutely Montrose.daily Montrose.monthly # etc. MONTROSE EXAMPLES github.com/rossta/montrose
Slide 21
Slide 21 text
Montrose.weekly(on: :monday, at: "10:30 am") => # MONTROSE EXAMPLES github.com/rossta/montrose
Slide 22
Slide 22 text
Montrose.monthly. starting(1.year.from_now). on(friday: 13). repeat(5) MONTROSE CHAINABLE github.com/rossta/montrose
Slide 23
Slide 23 text
# Every 3 hours Montrose.hourly.interval(3) Montrose.every(3.hours) Montrose.r(every: 3.hours) Montrose.recurrence(every: :hour, interval: 3) MONTROSE FLEXIBLE github.com/rossta/montrose
Slide 24
Slide 24 text
r = Montrose.monthly.repeat(3) r.map(&:to_date) => [Tue, 09 Feb 2016, Wed, 09 Mar 2016, ...] MONTROSE ENUMERABLE github.com/rossta/montrose
Slide 25
Slide 25 text
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 COMPOSABLE github.com/rossta/montrose
Slide 26
Slide 26 text
class EventSeries < ActiveRecord::Base serialize :recurrence, Montrose::Recurrence end MONTROSE SERIALIZABLE github.com/rossta/montrose
Slide 27
Slide 27 text
MONTROSE NYC.RB Montrose.monthly. day(tuesday: [2]). at("7pm") github.com/rossta/montrose
Slide 28
Slide 28 text
NEXT STEPS github.com/rossta/montrose
Slide 29
Slide 29 text
rossta/montrose @rossta http://empex.co Empire City Elixir Conf rossta.net