require 'date' module CalendarHelpers FORMATS = { time_only: "%H:%M", date_only: "%a. %d.%m", date_string_short: "%e. %b %Y", log: "%Y-%m-%d %H:%M" } class Event # TODO i18n weekdays, group dates def initialize(args={}) @summary = args.fetch("summary") @start_time = DateTime.parse(args.fetch("start")) @end_time = DateTime.parse(args.fetch("end")) end def summary @summary end def start_time @start_time.strftime(FORMATS[:time_only]) end def end_time @end_time.strftime(FORMATS[:time_only]) end def date @start_time.strftime(FORMATS[:date_only]) end end def week_schedule events = data.calendar-week.map {|atts| Event.new(atts) } events.group_by {|ev| ev.date } end def events_on(datetime) date = datetime.to_date events = data.calendar.select do |hsh| ev_date = DateTime.parse(hsh['start']).to_date ev_date == date end events.map {|atts| Event.new(atts)} end def current_week monday = week_start(Date.parse("2014-11-18")) (monday..monday + 6).to_a end def week_start(date, offset_from_sunday=1) date - (date.wday - offset_from_sunday) % 7 end end