diff options
author | Lars Henrik Mai <lars.mai@kontinui.de> | 2014-09-21 18:18:21 +0200 |
---|---|---|
committer | Lars Henrik Mai <lars.mai@kontinui.de> | 2014-09-21 18:24:51 +0200 |
commit | 0740cac0afa46fbc87062eef7003ff653bd5208a (patch) | |
tree | ff47df8d43aa2f4b2fb43f3dc103f4c1f739c603 /lib/sublab_calendar/calendar.rb | |
parent | 1955959b3bbd997a6a7f585f0293a295c019c935 (diff) |
make Event and Occurrence sortable and adds some convenience
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 |