module MongoidOccurrenceViews::Event::Occurrence

Constants

SCHEDULE_DURATION

Public Class Methods

included(base) click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 6
def self.included(base)
  base.include MongoidOccurrenceViews::Event::HasOccurrenceScopes
  base.extend ClassMethods
end

Public Instance Methods

all_day() click to toggle source
Calls superclass method
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 41
def all_day
  return super unless dtstart.present? && dtend.present?
  return super unless super.nil?

  dtstart.to_i == dtstart.beginning_of_day.to_i &&
    dtend.to_i == dtend.end_of_day.to_i
end
Also aliased as: all_day?
all_day?()
Alias for: all_day
recurring?() click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 50
def recurring?
  schedule.present?
end
schedule_dtend() click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 54
def schedule_dtend
  read_attribute(:schedule_dtend) || (dtstart.try(:to_time) || Time.now) + SCHEDULE_DURATION
end

Private Instance Methods

adjust_dates_for_all_day() click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 64
def adjust_dates_for_all_day
  return unless all_day?

  write_attribute(:dtstart, dtstart.try(:beginning_of_day))
  write_attribute(:dtend, dtend.try(:end_of_day))
end
assign_daily_occurrences() click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 71
def assign_daily_occurrences
  self.daily_occurrences = daily_occurrences_from_schedule + daily_occurrences_from_date_range
end
daily_occurrences_from_date_range() click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 86
def daily_occurrences_from_date_range
  return [] if recurring?

  date_range = Range.new(dtstart.to_date, dtend.to_date)
  is_single_day = (date_range.first == date_range.last)

  date_range.map do |date|
    occurence_dtstart = is_single_day || date == date_range.first ? dtstart : date.beginning_of_day
    occurence_dtend = is_single_day || date == date_range.last ? dtend : date.end_of_day

    relations['daily_occurrences'].klass.new(
      dtstart: occurence_dtstart,
      dtend: occurence_dtend
    )
  end.compact
end
daily_occurrences_from_schedule() click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 75
def daily_occurrences_from_schedule
  return [] unless recurring?

  schedule.occurrences(schedule_dtend).map do |occurrence|
    relations['daily_occurrences'].klass.new(
      dtstart: occurrence.start_time,
      dtend: occurrence.end_time.change(hour: dtend.hour, min: dtend.minute)
    )
  end.compact
end
nil_schedule() click to toggle source
# File lib/mongoid_occurrence_views/event/occurrence.rb, line 60
def nil_schedule
  self.schedule = nil
end