class RackHttpAcceptLanguage::Parser

Attributes

http_accept_language[R]

Public Class Methods

new(http_accept_language) click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 6
def initialize(http_accept_language)
  @http_accept_language = http_accept_language
end

Public Instance Methods

preferred_language() click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 10
def preferred_language
  return nil if early_return?
  order_languages_by_qvalue.first
end
preferred_languages() click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 15
def preferred_languages
  return nil if early_return?
  order_languages_by_qvalue
end

Private Instance Methods

early_return?() click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 22
def early_return?
  http_accept_language.nil? || http_accept_language == '*'
end
handle_language(language, qvalue, memo) click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 44
def handle_language(language, qvalue, memo)
  language = language.strip.downcase.gsub(/-[a-z0-9]+$/i, &:upcase)
  qvalue = qvalue ? qvalue.to_f : 1.0

  if memo[qvalue].nil?
    memo[qvalue] = [language]
  else
    memo[qvalue] << language
  end
end
order_languages_by_qvalue() click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 26
def order_languages_by_qvalue
  order_languages_by_qvalue_hash.values.flatten
end
order_languages_by_qvalue_hash() click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 34
def order_languages_by_qvalue_hash
  @order_languages_by_qvalue ||=
    split_languages.each_with_object({}) do |language_with_qvalue, memo|
      language, qvalue = language_with_qvalue.split(';q=')
      next if language == '*'

      handle_language(language, qvalue, memo)
    end.sort.reverse.to_h
end
split_languages() click to toggle source
# File lib/rack-http-accept-language/parser.rb, line 30
def split_languages
  @split_languages ||= http_accept_language.to_s.split(',')
end