Module: CalendarAssistant::HasDuration
- Included in:
- AvailableBlock, Event
- Defined in:
- lib/calendar_assistant/has_duration.rb
Class Method Summary collapse
- .cast_datetime(datetime, time_zone = Time.zone.name) ⇒ Object
- .duration_in_seconds(start_time, end_time) ⇒ Object
Instance Method Summary collapse
- #all_day? ⇒ Boolean
- #contains?(time) ⇒ Boolean
- #cover?(event) ⇒ Boolean
- #current? ⇒ Boolean
- #duration ⇒ Object
- #duration_in_seconds ⇒ Object
- #end_date ⇒ Object
- #end_time ⇒ Object
- #future? ⇒ Boolean
- #overlaps_end_of?(event) ⇒ Boolean
- #overlaps_start_of?(event) ⇒ Boolean
- #past? ⇒ Boolean
- #start_date ⇒ Object
- #start_time ⇒ Object
Class Method Details
.cast_datetime(datetime, time_zone = Time.zone.name) ⇒ Object
8 9 10 11 |
# File 'lib/calendar_assistant/has_duration.rb', line 8 def self.cast_datetime(datetime, time_zone = Time.zone.name) return datetime if datetime.is_a?(Google::Apis::CalendarV3::EventDateTime) Google::Apis::CalendarV3::EventDateTime.new(date_time: datetime.in_time_zone(time_zone).to_datetime) end |
.duration_in_seconds(start_time, end_time) ⇒ Object
3 4 5 6 |
# File 'lib/calendar_assistant/has_duration.rb', line 3 def self.duration_in_seconds start_time, end_time (end_time.to_datetime - start_time.to_datetime).days.to_i end |
Instance Method Details
#all_day? ⇒ Boolean
13 14 15 |
# File 'lib/calendar_assistant/has_duration.rb', line 13 def all_day? start.try(:date) || self.end.try(:date) end |
#contains?(time) ⇒ Boolean
98 99 100 |
# File 'lib/calendar_assistant/has_duration.rb', line 98 def contains? time start_time <= time && time < end_time end |
#cover?(event) ⇒ Boolean
37 38 39 |
# File 'lib/calendar_assistant/has_duration.rb', line 37 def cover?(event) event.start_date >= start_date && event.end_date <= end_date end |
#current? ⇒ Boolean
25 26 27 |
# File 'lib/calendar_assistant/has_duration.rb', line 25 def current? !(past? || future?) end |
#duration ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/calendar_assistant/has_duration.rb', line 81 def duration if all_day? days = (end_date - start_date).to_i return "#{days}d" end p = ActiveSupport::Duration.build(duration_in_seconds).parts s = [] s << "#{p[:hours]}h" if p.has_key?(:hours) s << "#{p[:minutes]}m" if p.has_key?(:minutes) s.join(" ") end |
#duration_in_seconds ⇒ Object
94 95 96 |
# File 'lib/calendar_assistant/has_duration.rb', line 94 def duration_in_seconds HasDuration.duration_in_seconds start_time, end_time end |
#end_date ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/calendar_assistant/has_duration.rb', line 73 def end_date if all_day? self.end.to_date else end_time.to_date end end |
#end_time ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/calendar_assistant/has_duration.rb', line 65 def end_time if all_day? end_date.beginning_of_day else self.end.date_time end end |
#future? ⇒ Boolean
29 30 31 32 33 34 35 |
# File 'lib/calendar_assistant/has_duration.rb', line 29 def future? if all_day? start_date > Date.today else start_time > Time.now end end |
#overlaps_end_of?(event) ⇒ Boolean
45 46 47 |
# File 'lib/calendar_assistant/has_duration.rb', line 45 def overlaps_end_of?(event) event.start_date < start_date && event.end_date >= start_date end |
#overlaps_start_of?(event) ⇒ Boolean
41 42 43 |
# File 'lib/calendar_assistant/has_duration.rb', line 41 def overlaps_start_of?(event) event.start_date <= end_date && event.end_date > end_date end |
#past? ⇒ Boolean
17 18 19 20 21 22 23 |
# File 'lib/calendar_assistant/has_duration.rb', line 17 def past? if all_day? Date.today >= end_date else Time.now >= end_time end end |
#start_date ⇒ Object
57 58 59 60 61 62 63 |
# File 'lib/calendar_assistant/has_duration.rb', line 57 def start_date if all_day? start.to_date else start_time.to_date end end |
#start_time ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/calendar_assistant/has_duration.rb', line 49 def start_time if all_day? start_date.beginning_of_day else start.date_time end end |