summaryrefslogtreecommitdiff
path: root/lib/chaos_calendar.rb
blob: 22ad9342a0f6210e967ffb47bc304c1a8e73f05e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
require 'vpim/repo'

class Occurrence
  def initialize start, event, node
    @dtstart = start
    @event = event
    @node = node
  end
  attr_reader :dtstart, :event, :node
end

class ChaosCalendar
  def initialize
    @calendar = {}
  end

  def push cal, node
    Vpim::Icalendar.decode( cal ).each { |c| c.events.each { |e| @calendar[e] = node } }
  end

  def occurrences start_time, end_time
    occurr = []
    @calendar.each { |e, node|
      if e.occurs_in?( start_time, end_time )
        e.occurences( end_time ) { |t|
          occurr << Occurrence.new(t,e,node) if (t + (e.duration || 0)) >= start_time
        }
      end
    }

    return occurr.sort { |lhs, rhs| lhs.dtstart <=> rhs.dtstart }
  end

end