class Browser::AcceptLanguage

def self.languages

def self.languages
  @languages ||= YAML.load_file(Browser.root.join("languages.yml"))
end

def self.parse(accept_language)

def self.parse(accept_language)
  return [] unless accept_language
  accept_language
    .split(",")
    .map {|string| string.squeeze(" ").strip }
    .map {|part| new(part) }
    .sort_by(&:quality)
    .reverse
end

def code

def code
  @code ||= part[/\A([^-;]+)/, 1]
end

def full

def full
  @full ||= [code, region].compact.join("-")
end

def initialize(part)

def initialize(part)
  @part = part
end

def name

def name
  self.class.languages[full] || self.class.languages[code]
end

def quality

def quality
  @quality ||= Float(part[/;q=([\d.]+)/, 1] || 1.0)
end

def region

def region
  @region ||= begin
    region = part[/\A(?:.*?)-([^;-]+)/, 1]
    region.upcase if region
  end
end