[DRE-commits] [ruby-http-accept-language] 01/04: Imported Upstream version 2.0.2

Nitesh A Jain niteshjain-guest at moszumanska.debian.org
Fri Oct 24 21:00:22 UTC 2014


This is an automated email from the git hooks/post-receive script.

niteshjain-guest pushed a commit to branch master
in repository ruby-http-accept-language.

commit d9c980e0e8dbe2a15a1e6f4c9726d38cba244677
Author: Nitesh A Jain <niteshjain92 at gmail.com>
Date:   Sat Oct 25 02:21:10 2014 +0530

    Imported Upstream version 2.0.2
---
 lib/http_accept_language/parser.rb  | 66 ++++++++++++++++++++-----------------
 lib/http_accept_language/railtie.rb |  2 +-
 lib/http_accept_language/version.rb |  2 +-
 metadata.yml                        | 36 ++++++++++----------
 spec/parser_spec.rb                 |  9 +++++
 5 files changed, 64 insertions(+), 51 deletions(-)

diff --git a/lib/http_accept_language/parser.rb b/lib/http_accept_language/parser.rb
index 61ca16e..f7e4086 100644
--- a/lib/http_accept_language/parser.rb
+++ b/lib/http_accept_language/parser.rb
@@ -1,7 +1,5 @@
 module HttpAcceptLanguage
-
   class Parser
-
     attr_accessor :header
 
     def initialize(header)
@@ -17,20 +15,26 @@ module HttpAcceptLanguage
     #   # => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ]
     #
     def user_preferred_languages
-      @user_preferred_languages ||= header.gsub(/\s+/, '').split(/,/).collect do |l|
-        l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
-          l.split(';q=')
-      end.sort do |x,y|
-        raise "Not correctly formatted" unless x.first =~ /^[a-z\-0-9]+$/i
-        y.last.to_f <=> x.last.to_f
-      end.collect do |l|
-        l.first.downcase.gsub(/-[a-z0-9]+$/i) { |x| x.upcase }
+      @user_preferred_languages ||= begin
+        header.to_s.gsub(/\s+/, '').split(',').map do |language|
+          locale, quality = language.split(';q=')
+          raise ArgumentError, 'Not correctly formatted' unless locale =~ /^[a-z\-0-9]+|\*$/i
+
+          locale  = locale.downcase.gsub(/-[a-z0-9]+$/i, &:upcase) # Uppercase territory
+          locale  = nil if locale == '*' # Ignore wildcards
+
+          quality = quality ? quality.to_f : 1.0
+
+          [locale, quality]
+        end.sort do |(_, left), (_, right)|
+          right <=> left
+        end.map(&:first).compact
+      rescue ArgumentError # Just rescue anything if the browser messed up badly.
+        []
       end
-    rescue # Just rescue anything if the browser messed up badly.
-      []
     end
 
-    # Sets the user languages preference, overiding the browser
+    # Sets the user languages preference, overriding the browser
     #
     def user_preferred_languages=(languages)
       @user_preferred_languages = languages
@@ -44,7 +48,7 @@ module HttpAcceptLanguage
     #   # => 'nl'
     #
     def preferred_language_from(array)
-      (user_preferred_languages & array.collect { |i| i.to_s }).first
+      (user_preferred_languages & array.map(&:to_s)).first
     end
 
     # Returns the first of the user_preferred_languages that is compatible
@@ -55,10 +59,13 @@ module HttpAcceptLanguage
     #   request.compatible_language_from I18n.available_locales
     #
     def compatible_language_from(available_languages)
-      user_preferred_languages.map do |x| #en-US
-        available_languages.find do |y| # en
-          y = y.to_s
-          x == y || x.split('-', 2).first == y.split('-', 2).first
+      user_preferred_languages.map do |preferred| #en-US
+        preferred = preferred.downcase
+        preferred_language = preferred.split('-', 2).first
+
+        available_languages.find do |available| # en
+          available = available.to_s.downcase
+          preferred == available || preferred_language == available.split('-', 2).first
         end
       end.compact.first
     end
@@ -70,12 +77,8 @@ module HttpAcceptLanguage
     # [ja_JP-x1, en-US-x4, en_UK-x5, fr-FR-x3] => [ja-JP, en-US, en-UK, fr-FR]
     #
     def sanitize_available_locales(available_languages)
-      available_languages.map do |avail|
-        split_locale = avail.split(/[_-]/)
-
-        split_locale.map do |e|
-          e unless e.start_with?("x")
-        end.compact.join("-")
+      available_languages.map do |available|
+        available.to_s.split(/[_-]/).reject { |part| part.start_with?("x") }.join("-")
       end
     end
 
@@ -90,15 +93,16 @@ module HttpAcceptLanguage
     #
     def language_region_compatible_from(available_languages)
       available_languages = sanitize_available_locales(available_languages)
-      user_preferred_languages.map do |x| #en-US
-        lang_group = available_languages.select do |y| # en
-          y = y.to_s
-          x.split('-', 2).first == y.split('-', 2).first
+      user_preferred_languages.map do |preferred| #en-US
+        preferred = preferred.downcase
+        preferred_language = preferred.split('-', 2).first
+
+        lang_group = available_languages.select do |available| # en
+          preferred_language == available.downcase.split('-', 2).first
         end
-        lang_group.find{|l| l == x} || lang_group.first #en-US, en-UK
+        
+        lang_group.find { |lang| lang.downcase == preferred } || lang_group.first #en-US, en-UK
       end.compact.first
     end
-
   end
-
 end
diff --git a/lib/http_accept_language/railtie.rb b/lib/http_accept_language/railtie.rb
index a63575a..587f8a9 100644
--- a/lib/http_accept_language/railtie.rb
+++ b/lib/http_accept_language/railtie.rb
@@ -11,7 +11,7 @@ module HttpAcceptLanguage
 
   module EasyAccess
     def http_accept_language
-      @http_accept_language ||= request.env["http_accept_language.parser"] || Parser.new("")
+      @http_accept_language ||= request.env["http_accept_language.parser"] || Parser.new(request.env["HTTP_ACCEPT_LANGUAGE"])
     end
   end
 end
diff --git a/lib/http_accept_language/version.rb b/lib/http_accept_language/version.rb
index 91b09d7..f56cc9d 100644
--- a/lib/http_accept_language/version.rb
+++ b/lib/http_accept_language/version.rb
@@ -1,3 +1,3 @@
 module HttpAcceptLanguage
-  VERSION = '2.0.1'
+  VERSION = '2.0.2'
 end
diff --git a/metadata.yml b/metadata.yml
index 2f94df7..2287646 100644
--- a/metadata.yml
+++ b/metadata.yml
@@ -1,7 +1,7 @@
 --- !ruby/object:Gem::Specification
 name: http_accept_language
 version: !ruby/object:Gem::Version
-  version: 2.0.1
+  version: 2.0.2
   prerelease: 
 platform: ruby
 authors:
@@ -9,11 +9,11 @@ authors:
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2014-01-23 00:00:00.000000000 Z
+date: 2014-07-31 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: rake
-  requirement: &70170956089980 !ruby/object:Gem::Requirement
+  requirement: &70189984251240 !ruby/object:Gem::Requirement
     none: false
     requirements:
     - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
         version: '0'
   type: :development
   prerelease: false
-  version_requirements: *70170956089980
+  version_requirements: *70189984251240
 - !ruby/object:Gem::Dependency
   name: rspec
-  requirement: &70170956089500 !ruby/object:Gem::Requirement
+  requirement: &70189984250560 !ruby/object:Gem::Requirement
     none: false
     requirements:
     - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
         version: '0'
   type: :development
   prerelease: false
-  version_requirements: *70170956089500
+  version_requirements: *70189984250560
 - !ruby/object:Gem::Dependency
   name: rack-test
-  requirement: &70170956089040 !ruby/object:Gem::Requirement
+  requirement: &70189984250020 !ruby/object:Gem::Requirement
     none: false
     requirements:
     - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
         version: '0'
   type: :development
   prerelease: false
-  version_requirements: *70170956089040
+  version_requirements: *70189984250020
 - !ruby/object:Gem::Dependency
   name: guard-rspec
-  requirement: &70170956088400 !ruby/object:Gem::Requirement
+  requirement: &70189984249400 !ruby/object:Gem::Requirement
     none: false
     requirements:
     - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
         version: '0'
   type: :development
   prerelease: false
-  version_requirements: *70170956088400
+  version_requirements: *70189984249400
 - !ruby/object:Gem::Dependency
   name: rails
-  requirement: &70170956087580 !ruby/object:Gem::Requirement
+  requirement: &70189984248760 !ruby/object:Gem::Requirement
     none: false
     requirements:
     - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
         version: 3.2.6
   type: :development
   prerelease: false
-  version_requirements: *70170956087580
+  version_requirements: *70189984248760
 - !ruby/object:Gem::Dependency
   name: cucumber
-  requirement: &70170956086760 !ruby/object:Gem::Requirement
+  requirement: &70189984248160 !ruby/object:Gem::Requirement
     none: false
     requirements:
     - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
         version: '0'
   type: :development
   prerelease: false
-  version_requirements: *70170956086760
+  version_requirements: *70189984248160
 - !ruby/object:Gem::Dependency
   name: aruba
-  requirement: &70170956102360 !ruby/object:Gem::Requirement
+  requirement: &70189984247480 !ruby/object:Gem::Requirement
     none: false
     requirements:
     - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
         version: '0'
   type: :development
   prerelease: false
-  version_requirements: *70170956102360
+  version_requirements: *70189984247480
 description: Find out which locale the user preferes by reading the languages they
   specified in their browser
 email:
@@ -129,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
       version: '0'
       segments:
       - 0
-      hash: -678950536422287391
+      hash: 3432813774343238940
 required_rubygems_version: !ruby/object:Gem::Requirement
   none: false
   requirements:
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
       version: '0'
       segments:
       - 0
-      hash: -678950536422287391
+      hash: 3432813774343238940
 requirements: []
 rubyforge_project: http_accept_language
 rubygems_version: 1.8.6
diff --git a/spec/parser_spec.rb b/spec/parser_spec.rb
index 1f334fa..b5a519f 100644
--- a/spec/parser_spec.rb
+++ b/spec/parser_spec.rb
@@ -44,10 +44,19 @@ describe HttpAcceptLanguage::Parser do
     parser.compatible_language_from([:"en-HK"]).should eq :"en-HK"
   end
 
+  it "should accept and ignore wildcards" do
+    parser.header = 'en-US,en,*'
+    parser.compatible_language_from([:"en-US"]).should eq :"en-US"
+  end
+
   it "should sanitize available language names" do
     parser.sanitize_available_locales(%w{en_UK-x3 en-US-x1 ja_JP-x2 pt-BR-x5 es-419-x4}).should eq ["en-UK", "en-US", "ja-JP", "pt-BR", "es-419"]
   end
 
+  it "should accept available language names as symbols and return them as strings" do
+    parser.sanitize_available_locales([:en, :"en-US", :ca, :"ca-ES"]).should eq ["en", "en-US", "ca", "ca-ES"]
+  end
+
   it "should find most compatible language from user preferred" do
     parser.header = 'ja,en-gb,en-us,fr-fr'
     parser.language_region_compatible_from(%w{en-UK en-US ja-JP}).should eq "ja-JP"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-http-accept-language.git



More information about the Pkg-ruby-extras-commits mailing list