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