Class: Availability::CalendarFetcher

Inherits:
Object
  • Object
show all
Defined in:
lib/availability/calendar_fetcher.rb

Overview

Downloads private calendar feeds with bounded redirects, timeouts, and size.

Constant Summary collapse

MAX_REDIRECTS =
5
MAX_BYTES =
20 * 1024 * 1024

Instance Method Summary collapse

Constructor Details

#initialize(open_timeout: 10, read_timeout: 30) ⇒ CalendarFetcher

Returns a new instance of CalendarFetcher.



15
16
17
18
# File 'lib/availability/calendar_fetcher.rb', line 15

def initialize(open_timeout: 10, read_timeout: 30)
  @open_timeout = open_timeout
  @read_timeout = read_timeout
end

Instance Method Details

#fetch(url, label: 'Calendar', redirects_left: MAX_REDIRECTS) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/availability/calendar_fetcher.rb', line 20

def fetch(url, label: 'Calendar', redirects_left: MAX_REDIRECTS)
  uri = URI.parse(CalendarUrl.normalize(url))
  validate_uri!(uri, label)
  response, body = request(uri, label)
  handle_response(response, body, uri, label, redirects_left)
rescue FetchError
  raise
rescue URI::InvalidURIError
  raise FetchError, "#{label} has an invalid URL"
rescue Timeout::Error, SocketError, SystemCallError, OpenSSL::SSL::SSLError => e
  raise FetchError, "#{label} download failed (#{e.class})"
end