summaryrefslogtreecommitdiff
path: root/lib/sublab_calendar/calendar.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sublab_calendar/calendar.rb')
-rw-r--r--lib/sublab_calendar/calendar.rb41
1 files changed, 35 insertions, 6 deletions
diff --git a/lib/sublab_calendar/calendar.rb b/lib/sublab_calendar/calendar.rb
index e136ff5..0f95816 100644
--- a/lib/sublab_calendar/calendar.rb
+++ b/lib/sublab_calendar/calendar.rb
@@ -4,6 +4,15 @@ module SublabCalendar
attr_reader :calendar
+ PERIODS = {
+ future: ->(ev) { ev.dtstart >= DateTime.now },
+ past: ->(ev) { ev.dtstart < DateTime.now },
+ this_month: ->(ev) {
+ ev.dtstart >= DateTime.now.beginning_of_month &&
+ ev.dtstart < DateTime.now.end_of_month
+ }
+ }
+
def initialize(ical)
@calendar = Icalendar.parse(ical).first
end
@@ -23,16 +32,24 @@ module SublabCalendar
calendar.events.map(&method(:readable))
end
- def future
- calendar.events.select {|ev| ev.dtstart >= DateTime.now}.map(&method(:readable))
+ PERIODS.each do |name, selector|
+ define_method "#{name}_events" do # def future_events
+ calendar.events. # calendar.events.
+ select(&selector). # select(&PERIODS[:future]).
+ map(&method(:readable)) # map(&method(:readable))
+ end # end
end
- def past
- calendar.events.select {|ev| ev.dtstart < DateTime.now}.map(&method(:readable))
+ def recurring
+ events.select(&:recurring?)
end
- def recurring
- events.select(&:"recurring?")
+ def non_recurring
+ events.reject(&:recurring?)
+ end
+
+ def all_day
+ events.select(&:all_day?)
end
def next(count=1)
@@ -43,6 +60,18 @@ module SublabCalendar
SublabCalendar::Event.new(event)
end
+ def everything_this_month
+ normal = events.
+ select(&PERIODS[:this_month]).
+ reject(&:recurring?).
+ map(&method(:readable)).
+ flatten
+
+ occs = recurring.map(&:occurrences_this_month).flatten
+
+ EventList.new(normal + occs)
+ end
+
end
end