[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