Class: Artic::Calendar

Inherits:
Object
  • Object
show all
Defined in:
lib/artic/calendar.rb

Overview

A calendar keeps track of both your availabilities and your occupations.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCalendar

Initializes the calendar.



16
17
18
19
# File 'lib/artic/calendar.rb', line 16

def initialize
  @availabilities = Collection::AvailabilityCollection.new
  @occupations = Collection::OccupationCollection.new
end

Instance Attribute Details

#availabilitiesCollection::AvailabilityCollection (readonly)



13
14
15
# File 'lib/artic/calendar.rb', line 13

def availabilities
  @availabilities
end

#occupationsObject (readonly)

Returns the value of attribute occupations.



13
# File 'lib/artic/calendar.rb', line 13

attr_reader :availabilities, :occupations

Instance Method Details

#available_slots_on(dow_or_date) ⇒ Object

Returns the slots available on the given day of the week or date, including any slots that might be occupied on the given date.

If the passed argument is an instance of Date but no availabilities have been defined for that specific date, returns any availabilities defined for that day of the week.

Examples:

calendar.available_slots_on(:monday) # => #<Artic::Collection::AvailabilityCollection>
calendar.available_slots_on(Date.tomorrow) # => #<Artic::Collection::AvailabilityCollection>

Parameters:

  • dow_or_date (Date|Symbol)

    a day of the week or date

Returns:

  • Collection::AvailabilityCollection

See Also:



37
38
39
40
41
42
43
44
45
# File 'lib/artic/calendar.rb', line 37

def available_slots_on(dow_or_date)
  # rubocop:disable Metrics/LineLength
  if !availabilities.identifier?(dow_or_date) && dow_or_date.is_a?(Date) && availabilities.identifier?(dow_or_date.strftime('%A').downcase)
    return available_slots_on(dow_or_date.strftime('%A').downcase)
  end
  # rubocop:enable Metrics/LineLength

  availabilities.normalize dow_or_date
end

#free_slots_on(date) ⇒ Object

Returns the slots free on the given date, computed by calling Occupation#bisect on each of the availability slots.

Parameters:

  • date (Date)

Returns:

  • Collection::AvailabilityCollection

See Also:



55
56
57
58
59
60
61
62
# File 'lib/artic/calendar.rb', line 55

def free_slots_on(date)
  normalized_occupations = occupations.normalize(date)
  availabilities = available_slots_on(date).flat_map do |availability|
    normalized_occupations.bisect(availability)
  end

  Collection::AvailabilityCollection.new availabilities
end