def fetch_size(uri)
return File.size(get_file_uri_path(uri)) if file_uri? uri
uri = URI.parse uri unless URI::Generic === uri
raise ArgumentError, 'uri is not an HTTP URI' unless URI::HTTP === uri
response = request uri, Net::HTTP::Head
case response
when Net::HTTPOK then
else
raise FetchError.new("bad response #{response.message} #{response.code}", uri)
end
if response['content-length'] then
return response['content-length'].to_i
else
response = http.get uri.request_uri
return response.body.size
end
rescue SocketError, SystemCallError, Timeout::Error => e
raise FetchError.new("#{e.message} (#{e.class})\n\tfetching size", uri)
end