summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sublab_calendar.rb23
-rw-r--r--lib/sublab_calendar/calendar.rb48
-rw-r--r--lib/sublab_calendar/event.rb39
-rw-r--r--lib/sublab_calendar/occurrence.rb38
-rw-r--r--sublab_calendar.rb121
5 files changed, 148 insertions, 121 deletions
diff --git a/lib/sublab_calendar.rb b/lib/sublab_calendar.rb
new file mode 100644
index 0000000..66de90d
--- /dev/null
+++ b/lib/sublab_calendar.rb
@@ -0,0 +1,23 @@
+require 'rubygems'
+require 'bundler/setup'
+
+require 'date'
+require 'active_support/core_ext/date_and_time/calculations'
+require 'icalendar/recurrence'
+require 'httpclient'
+require 'httpi'
+require 'json'
+
+require 'sublab_calendar/calendar'
+require 'sublab_calendar/event'
+require 'sublab_calendar/occurrence'
+
+module SublabCalendar
+
+ URL = "https://dav.nashipur.org/cal.php/calendars/sublars/events?export"
+ USER = "sublars"
+ PASS = "sublars14"
+
+ HTTPI.adapter = :httpclient
+
+end
diff --git a/lib/sublab_calendar/calendar.rb b/lib/sublab_calendar/calendar.rb
new file mode 100644
index 0000000..e136ff5
--- /dev/null
+++ b/lib/sublab_calendar/calendar.rb
@@ -0,0 +1,48 @@
+module SublabCalendar
+
+ class Calendar
+
+ attr_reader :calendar
+
+ def initialize(ical)
+ @calendar = Icalendar.parse(ical).first
+ end
+
+ def self.load(url=URL)
+ request = HTTPI::Request.new
+ request.url = URL
+ request.auth.digest(USER, PASS)
+ request.auth.ssl.verify_mode = :none
+ response = HTTPI.get(request)
+
+ ical = response.body
+ 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)
+ SublabCalendar::Event.new(event)
+ end
+
+ end
+
+end
diff --git a/lib/sublab_calendar/event.rb b/lib/sublab_calendar/event.rb
new file mode 100644
index 0000000..d350d51
--- /dev/null
+++ b/lib/sublab_calendar/event.rb
@@ -0,0 +1,39 @@
+module SublabCalendar
+
+ 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.next_month.beginning_of_month]
+ end
+
+ end
+end
diff --git a/lib/sublab_calendar/occurrence.rb b/lib/sublab_calendar/occurrence.rb
new file mode 100644
index 0000000..fad58a8
--- /dev/null
+++ b/lib/sublab_calendar/occurrence.rb
@@ -0,0 +1,38 @@
+module SublabCalendar
+
+ 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
+
+end
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