class Browser::AcceptLanguage

Attributes

part[R]

Public Class Methods

languages() click to toggle source
# File lib/browser/accept_language.rb, line 5
def self.languages
  @languages ||= YAML.load_file(Browser.root.join("languages.yml"))
end
new(part) click to toggle source
# File lib/browser/accept_language.rb, line 22
def initialize(part)
  @part = part
end
parse(accept_language) click to toggle source
# File lib/browser/accept_language.rb, line 9
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.with_index {|al, idx| [-al.quality, idx] }
end

Public Instance Methods

code() click to toggle source
# File lib/browser/accept_language.rb, line 34
def code
  @code ||= begin
    code = part[/\A([^-;]+)/, 1]
    code&.downcase
  end
end
full() click to toggle source
# File lib/browser/accept_language.rb, line 26
def full
  @full ||= [code, region].compact.join("-")
end
name() click to toggle source
# File lib/browser/accept_language.rb, line 30
def name
  self.class.languages[full] || self.class.languages[code]
end
quality() click to toggle source
# File lib/browser/accept_language.rb, line 48
def quality
  @quality ||= begin
    Float(quality_value || 1.0)
  rescue ArgumentError
    0.1
  end
end
region() click to toggle source
# File lib/browser/accept_language.rb, line 41
def region
  @region ||= begin
    region = part[/\A(?:.*?)-([^;-]+)/, 1]
    region&.upcase
  end
end

Private Instance Methods

quality_value() click to toggle source
# File lib/browser/accept_language.rb, line 56
        def quality_value
  qvalue = part[/;q=([\d.]+)/, 1]
  qvalue = "0.0" if /\A0\.0?\z/.match?(qvalue)
  qvalue = qvalue.squeeze(".") if qvalue
  qvalue
end