class OpeningHoursConverter::OpeningHoursDate

Attributes

weekdays[RW]
weekdays_over[RW]
wide_interval[R]

Public Class Methods

new(wide_interval, weekdays) click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 9
def initialize(wide_interval, weekdays)
  if wide_interval.nil? || weekdays.nil? || !wide_interval.is_a?(OpeningHoursConverter::WideInterval)
    raise ArgumentError
  end

  @wide_interval = wide_interval
  @weekdays = weekdays.sort
  @weekdays_over = []
end

Public Instance Methods

add_overwritten_weekday(weekday) click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 111
def add_overwritten_weekday(weekday)
  return if @weekdays_over.include?(weekday)

  @weekdays_over << weekday
  @weekdays_over.sort!
end
add_ph_weekday() click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 107
def add_ph_weekday
  add_weekday(-2)
end
add_weekday(weekday) click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 100
def add_weekday(weekday)
  return if @weekdays.include?(weekday) || @weekdays_over.include?(weekday)

  @weekdays << weekday
  @weekdays.sort!
end
equals(o) click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 126
def equals(o)
  o.instance_of?(OpeningHoursConverter::OpeningHoursDate) && @wide_interval.type == o.wide_interval.type && @wide_interval.equals(o.wide_interval) && o.same_weekdays?(@weekdays)
end
get_weekdays() click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 19
def get_weekdays
  result = ''
  weekdays = @weekdays.concat(@weekdays_over).sort.uniq

  if !weekdays.empty? && weekdays[0] == -2
    result = 'PH'
    weekdays.shift
  end

  if !weekdays.empty? && weekdays.include?(6) && weekdays.include?(0) && (weekdays.include?(5) || weekdays.include?(1))
    start_week_end = 6
    i = weekdays.length - 2
    stop_looking = false

    while !stop_looking && i >= 0
      if weekdays[i] == weekdays[i + 1] - 1
        start_week_end = weekdays[i]
        i -= 1
      else
        stop_looking = true
      end
    end

    i = 1
    stop_looking = false
    end_week_end = 0

    while !stop_looking && i < weekdays.length
      if weekdays[i - 1] == weekdays[i] - 1
        end_week_end = weekdays[i]
        i += 1
      else
        stop_looking = true
      end
    end

    length = 7 - start_week_end + end_week_end + 1

    if length >= 3 && start_week_end > end_week_end
      result += ',' if !result.empty?
      result += "#{OSM_DAYS[start_week_end]}-#{OSM_DAYS[end_week_end]}"

      j = 0
      while j < weekdays.length
        if weekdays[j] <= end_week_end || weekdays[j] >= start_week_end
          weekdays.slice!(j, 1)
        else
          j += 1
        end
      end
    end
  end

  if weekdays.length > 1 || (weekdays.length == 1 && weekdays[0] != -1)
    result += !result.empty? ? ",#{OSM_DAYS[weekdays[0]]}" : OSM_DAYS[weekdays[0]]
    first_in_row = weekdays[0]
    for i in 1...weekdays.length
      if weekdays[i - 1] != weekdays[i] - 1
        if first_in_row != weekdays[i - 1]
          result += if weekdays[i - 1] - first_in_row == 1
                      ",#{OSM_DAYS[weekdays[i - 1]]}"
                    else
                      "-#{OSM_DAYS[weekdays[i - 1]]}"
                    end
        end
        result += ",#{OSM_DAYS[weekdays[i]]}"
        first_in_row = weekdays[i]
      elsif i == weekdays.length - 1
        result += if weekdays[i] - first_in_row == 1
                    ",#{OSM_DAYS[weekdays[i]]}"
                  else
                    "-#{OSM_DAYS[weekdays[i]]}"
                  end
      end
    end
  end

  result = '' if result == 'Mo-Su'
  result
end
same_kind_as?(date) click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 118
def same_kind_as?(date)
  @wide_interval.type == date.wide_interval.type && date.same_weekdays?(@weekdays)
end
same_weekdays?(weekdays) click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 122
def same_weekdays?(weekdays)
  weekdays == @weekdays
end