Ruby HTTP JSON fetch with timeouts

Ruby
require 'net/http'
require 'json'

def fetch_json(url, open_timeout: 3, read_timeout: 5)
  uri = URI.parse(url)
  raise ArgumentError, 'only http(s) URLs are supported' unless uri.is_a?(URI::HTTP)
  response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https',
                             open_timeout: open_timeout, read_timeout: read_timeout) do |http|
    http.request(Net::HTTP::Get.new(uri))
  end
  raise %Q(HTTP #{response.code}) unless response.is_a?(Net::HTTPSuccess)
  JSON.parse(response.body)
rescue JSON::ParserError => error
  raise ArgumentError, %Q(invalid JSON: #{error.message})
end