Module: Philiprehberger::HeaderKit::AcceptLanguage
- Defined in:
- lib/philiprehberger/header_kit/accept_language.rb
Overview
Parses Accept-Language headers into structured language entries with quality values.
Constant Summary collapse
- QUALITY_PATTERN =
/\Aq\z/i
Class Method Summary collapse
-
.negotiate(header, available) ⇒ String?
Negotiate the best language match from available languages.
-
.parse(header) ⇒ Array<Hash>
Parse an Accept-Language header string.
Class Method Details
.negotiate(header, available) ⇒ String?
Negotiate the best language match from available languages.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/philiprehberger/header_kit/accept_language.rb', line 25 def self.negotiate(header, available) return nil if available.nil? || available.empty? return available.first if header.nil? || header.strip.empty? parsed = parse(header) return nil if parsed.empty? parsed.each do |entry| next if entry[:quality] <= 0.0 match = find_match(entry[:language], available) return match if match end nil end |
.parse(header) ⇒ Array<Hash>
Parse an Accept-Language header string.
13 14 15 16 17 18 |
# File 'lib/philiprehberger/header_kit/accept_language.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 |