class VacationRentalsIcalAdapters::Adapters::CsvBookedDaysAdapter
CSV Booked Days response format should be similar to:
2016-12-08,2016-12-09,2016-12-15
Public Instance Methods
applicable?(body:, source:)
click to toggle source
# File lib/vacation_rentals_ical_adapters/adapters/csv_booked_days_adapter.rb, line 10 def applicable?(body:, source:) return false if source.nil? source.split(".").last == "booked_days" end
to_ical(body)
click to toggle source
# File lib/vacation_rentals_ical_adapters/adapters/csv_booked_days_adapter.rb, line 15 def to_ical(body) events = parse_events(body) VacationRentalsIcalAdapters::IcalConverter.to_ical(events) end
Private Instance Methods
extract_ranges(body)
click to toggle source
# File lib/vacation_rentals_ical_adapters/adapters/csv_booked_days_adapter.rb, line 31 def extract_ranges(body) return [] if body.nil? merge_booked_days body.strip.split(",").map(&:to_date) end
merge_booked_days(days)
click to toggle source
# File lib/vacation_rentals_ical_adapters/adapters/csv_booked_days_adapter.rb, line 37 def merge_booked_days(days) ranges = [] days_length = days.length current_start_date = nil previous_end_date = nil days.each_with_index do |day, index| current_start_date ||= day if previous_end_date && day > previous_end_date.advance(days: 1) ranges << { start_date: current_start_date, end_date: previous_end_date.advance(days: 1) } current_start_date = day previous_end_date = day else previous_end_date = day end if index + 1 == days_length ranges << { start_date: current_start_date, end_date: previous_end_date.advance(days: 1) } end end ranges end
parse_events(body)
click to toggle source
# File lib/vacation_rentals_ical_adapters/adapters/csv_booked_days_adapter.rb, line 22 def parse_events(body) extract_ranges(body).map do |range| VacationRentalsIcalAdapters::Event.new( start_date: range[:start_date].iso8601, end_date: range[:end_date].iso8601 ) end end