module MongoidOccurrences::Occurrence::HasDailyOccurrences

Public Instance Methods

daily_occurrences() click to toggle source
# File lib/mongoid_occurrences/occurrence/has_daily_occurrences.rb, line 4
def daily_occurrences
  adjust_dates_for_all_day!
  daily_occurrences_from_schedule + daily_occurrences_from_date_range
end

Private Instance Methods

build_daily_occurrence(dtstart, dtend, occurrence_id, operator) click to toggle source
# File lib/mongoid_occurrences/occurrence/has_daily_occurrences.rb, line 36
def build_daily_occurrence(dtstart, dtend, occurrence_id, operator)
  MongoidOccurrences::DailyOccurrence.new(dtstart: dtstart, dtend: dtend, occurrence_id: occurrence_id, operator: operator)
end
daily_occurrences_from_date_range() click to toggle source
# File lib/mongoid_occurrences/occurrence/has_daily_occurrences.rb, line 22
def daily_occurrences_from_date_range
  return [] unless dtstart? && dtend?
  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|
    occurrence_dtstart = is_single_day || date == date_range.first ? dtstart : date.beginning_of_day
    occurrence_dtend = is_single_day || date == date_range.last ? dtend : date.end_of_day
    build_daily_occurrence(occurrence_dtstart, occurrence_dtend, id, operator)
  end
end
daily_occurrences_from_schedule() click to toggle source
# File lib/mongoid_occurrences/occurrence/has_daily_occurrences.rb, line 11
def daily_occurrences_from_schedule
  return [] unless dtstart? && dtend?
  return [] unless recurring?
  schedule.occurrences(schedule_dtend).map do |occurrence|
    occurrence_dtstart = occurrence.start_time.in_time_zone(Time.zone).change(hour: dtstart.hour, min: dtstart.minute)
    occurrence_dtend = occurrence.end_time.in_time_zone(Time.zone).change(hour: dtend.hour, min: dtend.minute)

    build_daily_occurrence(occurrence_dtstart, occurrence_dtend, id, operator)
  end
end