$30 off During Our Annual Pro Sale. View Details »

Recurring Events with Montrose

Recurring Events with Montrose

Introduction to the Montrose gem for modeling recurring events in Ruby. Learn more: http://bit.ly/1U3RDA7

Ross Kaffenberger

February 09, 2016
Tweet

More Decks by Ross Kaffenberger

Other Decks in Programming

Transcript

  1. RECURRING EVENTS
    NYC.rb, every month, 2nd Tuesday, at 7pm
    Ross Kaffenberger
    with Montrose

    View Slide

  2. @rossta
    2

    View Slide

  3. 3

    View Slide

  4. WEPLAY 2008

    View Slide

  5. WEPLAY 2008

    View Slide

  6. ESTIMATE 4 days

    View Slide

  7. ACTUAL 4 WEEKS

    View Slide

  8. HARD PROBLEMS

    View Slide

  9. CHALLENGE MODELING RECURRENCE
    “every Friday 13th, forever” # in Ruby

    View Slide

  10. CHALLENGE MODELING RECURRENCE
    * ice_cube
    * recurrence
    * runt
    something_better???

    View Slide

  11. # enumerable, e.g.
    r.each do |time|
    puts time
    end
    WISH LIST

    View Slide

  12. # queryable, e.g.
    r.include?(time)
    r.events
    r.until(time)
    WISH LIST

    View Slide

  13. # serializable, e.g.
    r.to_json
    r.to_yml
    r.to_ical
    WISH LIST

    View Slide

  14. # easy-to-use
    # ???
    WISH LIST

    View Slide

  15. API-DRIVEN

    View Slide

  16. INSPIRATION rfc5545 - iCAl Spec
    Every Friday the 13th, forever:
    RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13

    View Slide

  17. INSPIRATION DATA STRUCTURE
    { every: :month, on: { friday: 13 } }

    View Slide

  18. INSPIRATION HTTP.rb
    “easy-to-use client library
    for making requests from
    Ruby. It uses a simple method
    chaining system…”

    View Slide

  19. INTRODUCING MONTROSE
    “easy-to-use library for
    DEFINING RECURRING EVENTS IN
    Ruby. It uses a simple method
    chaining system…”
    gem install montrose

    View Slide

  20. Montrose.minutely
    Montrose.daily
    Montrose.monthly
    # etc.
    MONTROSE EXAMPLES
    github.com/rossta/montrose

    View Slide

  21. Montrose.weekly(on: :monday, at: "10:30 am")
    => #
    MONTROSE EXAMPLES
    github.com/rossta/montrose

    View Slide

  22. Montrose.monthly.
    starting(1.year.from_now).
    on(friday: 13).
    repeat(5)
    MONTROSE CHAINABLE
    github.com/rossta/montrose

    View Slide

  23. # 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

    View Slide

  24. r = Montrose.monthly.repeat(3)
    r.map(&:to_date)
    => [Tue, 09 Feb 2016, Wed, 09 Mar 2016, ...]
    MONTROSE ENUMERABLE
    github.com/rossta/montrose

    View Slide

  25. 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

    View Slide

  26. class EventSeries < ActiveRecord::Base
    serialize :recurrence, Montrose::Recurrence
    end
    MONTROSE SERIALIZABLE
    github.com/rossta/montrose

    View Slide

  27. MONTROSE NYC.RB
    Montrose.monthly.
    day(tuesday: [2]).
    at("7pm")
    github.com/rossta/montrose

    View Slide

  28. NEXT STEPS
    github.com/rossta/montrose

    View Slide

  29. rossta/montrose
    @rossta
    http://empex.co
    Empire City Elixir Conf
    rossta.net

    View Slide