Module: Philiprehberger::HeaderKit::AcceptEncoding

Defined in:
lib/philiprehberger/header_kit/accept_encoding.rb

Overview

Parses Accept-Encoding headers into structured encoding entries with quality values.

Constant Summary collapse

QUALITY_PATTERN =
/\Aq\z/i

Class Method Summary collapse

Class Method Details

.build(encodings) ⇒ String

Build an Accept-Encoding header string from an array of encoding hashes.

Parameters:

  • encodings (Array<Hash>)

    each with :encoding and optional :quality

Returns:

  • (String)

    formatted Accept-Encoding header value



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/philiprehberger/header_kit/accept_encoding.rb', line 57

def self.build(encodings)
  return '' if encodings.nil? || encodings.empty?

  parts = encodings.map do |entry|
    encoding = entry[:encoding]
    quality = entry[:quality]

    if quality && quality < 1.0
      "#{encoding};q=#{format_quality(quality)}"
    else
      encoding
    end
  end

  parts.join(', ')
end

.parse(header) ⇒ Array<Hash>

Parse an Accept-Encoding header string.

Parameters:

  • header (String)

    the Accept-Encoding header value

Returns:

  • (Array<Hash>)

    sorted by quality descending, each with :encoding, :quality



13
14
15
16
17
18
# File 'lib/philiprehberger/header_kit/accept_encoding.rb', line 13

def self.parse(header)
  return [] if header.nil? || header.strip.empty?

  entries = header.split(',').map { |entry| parse_entry(entry.strip) }
  entries.compact.sort_by { |e| [-e[:quality], entries.index(e)] }
end