From 3b3158199f147646348fae0008d3f63062967a87 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Tue, 10 Mar 2009 19:58:23 +0100 Subject: Introducing Occurrence Wrapper for Chaos Calendar events. --- lib/chaos_calendar.rb | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 lib/chaos_calendar.rb (limited to 'lib') diff --git a/lib/chaos_calendar.rb b/lib/chaos_calendar.rb new file mode 100644 index 0000000..22ad934 --- /dev/null +++ b/lib/chaos_calendar.rb @@ -0,0 +1,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 -- cgit v1.3