class Carendar::CalendarDay

Attributes

day[R]
items[R]

Public Class Methods

new(day, items) click to toggle source
# File lib/carendar.rb, line 37
def initialize(day, items)
  @day = day
  @items = items.map do |item|
    CalendarItem.new(item[:starts_at], item[:ends_at], item[:options] || {})
  end
  @items.sort_by!(&:start_min)
  @items.each do |item|
    item.overlapping_with_earlier = @items.select do |other|
      other.start_min < item.start_min && other.end_min > item.start_min
    end
    item.overlapping_with_later = []
    item.offset_right = 0
  end

  @items.each do |item|
    item.overlapping_with_earlier.each do |overlapper|
      overlapper.overlapping_with_later << item
    end
  end

  @items.each do |item|
    item.offset_left = if item.overlapping_with_earlier.any?
       item.overlapping_with_earlier.last.offset_left + 1
    else
      0
    end
  end
  @items.reverse.each do |item|
    item.offset_right = if item.overlapping_with_later.present?
       item.overlapping_with_later.first.offset_right + 1
    else
      0
    end
  end

end