Sha256: a802dc0e1a14e5d33d13e4068d366a7335988dbf1b61962dedaed39e3dd87825
Contents?: true
Size: 1.02 KB
Versions: 3
Compression:
Stored size: 1.02 KB
Contents
require "accept_headers/language" require "accept_headers/negotiatable" module AcceptHeaders class Language class Negotiator include Negotiatable LANGUAGE_PATTERN = /^\s*(?<primary_tag>[\w]{1,8}|\*)(?:\s*\-\s*(?<subtag>[\w]{1,8}|\*))?\s*$/ private def parse(original_header) header = original_header.dup header.sub!(/\AAccept-Language:\s*/, '') header.strip! return [Language.new] if header.empty? languages = [] header.split(',').each do |entry| language_arr = entry.split(';', 2) next if language_arr[0].nil? language_range = LANGUAGE_PATTERN.match(language_arr[0]) next if language_range.nil? begin languages << Language.new( language_range[:primary_tag], language_range[:subtag], q: parse_q(language_arr[1]) ) rescue Error next end end languages.sort! { |x,y| y <=> x } end end end end
Version data entries
3 entries across 3 versions & 1 rubygems