From 8e20191b693b9b1c91d487f58c455150b004719a Mon Sep 17 00:00:00 2001 From: Lars Henrik Mai Date: Thu, 10 Jul 2014 13:25:25 +0200 Subject: split class into multiple files and use new baikal server instance --- sublab_calendar.rb | 121 ----------------------------------------------------- 1 file changed, 121 deletions(-) delete mode 100644 sublab_calendar.rb (limited to 'sublab_calendar.rb') diff --git a/sublab_calendar.rb b/sublab_calendar.rb deleted file mode 100644 index eab3759..0000000 --- a/sublab_calendar.rb +++ /dev/null @@ -1,121 +0,0 @@ -require 'rubygems' -require 'bundler/setup' - -require 'date' -require 'active_support/core_ext/date_and_time/calculations' -require 'icalendar/recurrence' -require 'open-uri' -require 'json' - -class SublabCalendar - - URL = "https://sublab.org:5232/calendars/events" - - class Event < SimpleDelegator - - BASIC_ATTRIBUTES = [:summary, :dtstart, :dtend] - - def to_h - BASIC_ATTRIBUTES.inject({}) {|hsh, attr| hsh[attr] = send(attr).to_s; hsh } - end - - def to_json(*args) - to_h.to_json(*args) - end - - def to_s - "<#{self.class} #{self.to_h}>" - end - - def inspect - to_s - end - - def recurring? - ! rrule.empty? - end - - def occurrences_this_month - return nil unless recurring? - occurrences_between(*this_month).map {|occ| Occurrence.new(occ, self) } - end - - private - - def this_month - [Date.today.beginning_of_month, Date.today.end_of_month] - end - - end - - class Occurrence < SimpleDelegator - - attr_reader :event - - def initialize(occurrence, event) - @event = event - super(occurrence) - end - - def to_h - { - summary: summary, - start: start_time, - end: end_time - } - end - - def inspect - to_s - end - - def summary - event.summary - end - - def description - event.description - end - - def to_s - "<#{self.class} #{self.to_h}>" - end - - end - - attr_reader :calendar - - def initialize(ical) - @calendar = Icalendar.parse(ical).first - end - - def self.load(url=URL) - ical = open(url, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE}) - new(ical) - end - - def events - calendar.events.map(&method(:readable)) - end - - def future - calendar.events.select {|ev| ev.dtstart >= DateTime.now}.map(&method(:readable)) - end - - def past - calendar.events.select {|ev| ev.dtstart < DateTime.now}.map(&method(:readable)) - end - - def recurring - events.select(&:"recurring?") - end - - def next(count=1) - future.take(count) - end - - def readable(event) - Event.new(event) - end - -end -- cgit v1.2.1