diff options
Diffstat (limited to 'lib/sublab_calendar/calendar.rb')
-rw-r--r-- | lib/sublab_calendar/calendar.rb | 41 |
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 |