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) }
    .reject {|al| al.quality.zero? }
    .sort_by(&:quality)
    .reverse
end

def code

def code
  @code ||= begin
    code = part[/\A([^-;]+)/, 1]
    code.downcase if code
  end
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(quality_value || 1.0)
end

def quality_value

def quality_value
  qvalue = part[/;q=([\d.]+)/, 1]
  qvalue =~ /\A0\.0?\z/ ? "0.0" : qvalue
end

def region

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