Method: HTTPX::AltSvc.parse

Defined in:
lib/httpx/altsvc.rb

.parse(altsvc) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/httpx/altsvc.rb', line 51

def parse(altsvc)
  return enum_for(__method__, altsvc) unless block_given?

  scanner = StringScanner.new(altsvc)
  until scanner.eos?
    alt_origin = scanner.scan(/[^=]+=("[^"]+"|[^;,]+)/)

    alt_params = []
    loop do
      alt_param = scanner.scan(/[^=]+=("[^"]+"|[^;,]+)/)
      alt_params << alt_param.strip if alt_param
      scanner.skip(/;/)
      break if scanner.eos? || scanner.scan(/ *, */)
    end
    alt_params = Hash[alt_params.map { |field| field.split("=") }]
    yield(parse_altsvc_origin(alt_origin), alt_params)
  end
end