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

Version Path
accept_headers-0.0.4 lib/accept_headers/language/negotiator.rb
accept_headers-0.0.3 lib/accept_headers/language/negotiator.rb
accept_headers-0.0.2 lib/accept_headers/language/negotiator.rb