socialcast-http_accept_language 2.0.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .rvmrc
6
+ log/*.log
7
+ tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ guard 'rspec', :cli => "-fd", :version => 2 do
4
+ watch(%r{^spec/.+_spec\.rb$})
5
+ watch(%r{^lib/(.+)\.rb$}) { "spec" }
6
+ watch('spec/spec_helper.rb') { "spec" }
7
+ end
8
+
data/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # HttpAcceptLanguage
2
+
3
+ A small effort in making a plugin which helps you detect the users preferred language, as sent by the HTTP header.
4
+
5
+ Since version 2.0, this gem is Rack middleware.
6
+
7
+ ## Features
8
+
9
+ * Splits the http-header into languages specified by the user
10
+ * Returns empty array if header is illformed.
11
+ * Corrects case to xx-XX
12
+ * Sorted by priority given, as much as possible.
13
+ * Gives you the most important language
14
+ * Gives compatible languages
15
+
16
+ See also: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
17
+
18
+ ## Example
19
+
20
+ When using in Rails:
21
+
22
+ ``` ruby
23
+ class SomeController < ApplicationController
24
+
25
+ def some_action
26
+
27
+ http_accept_language.user_preferred_languages # => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ]
28
+ available = %w{en en-US nl-BE}
29
+ http_accept_language.preferred_language_from(available) # => 'nl-BE'
30
+
31
+ http_accept_language.user_preferred_languages # => [ 'en-GB']
32
+ available = %w{en-US}
33
+ http_accept_language.compatible_language_from(available) # => 'en-US'
34
+
35
+ end
36
+
37
+ end
38
+ ```
39
+
40
+ Older versions of Rails (pre 3.0) might need to include the middleware manually.
41
+
42
+ Usage in any Rack application, simple add the middleware:
43
+
44
+ ``` ruby
45
+ require 'http_accept_language'
46
+ use HttpAcceptLanguage::Middleware
47
+ run YourAwesomeApp
48
+ ```
49
+
50
+ Then you can access it:
51
+
52
+ ``` ruby
53
+ class YourAwesomeApp
54
+
55
+ def self.call(env)
56
+ available = %w(en en-US nl-BE)
57
+ language = env.http_accept_language.preferred_language_from(available)
58
+ [ 200, {}, ["Oh, you speak #{language}!"]]
59
+ end
60
+
61
+ end
62
+ ```
63
+
64
+ ## Available methods
65
+
66
+ * **user_preferred_languages**:
67
+ Returns a sorted array based on user preference in HTTP_ACCEPT_LANGUAGE, sanitized and all.
68
+ * **preferred_language_from**:
69
+ Finds the locale specifically requested by the browser
70
+ * **compatible_language_from**:
71
+ Returns the first of the user_preferred_languages that is compatible with the available locales.
72
+ Ignores region.
73
+ * **sanitize_available_locales**:
74
+ Returns a supplied list of available locals without any extra application info
75
+ that may be attached to the locale for storage in the application.
76
+ * **language_region_compatible_from**:
77
+ Returns the first of the user preferred languages that is
78
+ also found in available languages. Finds best fit by matching on
79
+ primary language first and secondarily on region. If no matching region is
80
+ found, return the first language in the group matching that primary language.
81
+
82
+ ## Installation
83
+
84
+
85
+ ### Without Bundler
86
+
87
+ Install the gem `http_accept_language`
88
+
89
+ ### With Bundler
90
+
91
+ Add the gem to your Gemfile:
92
+
93
+ ``` ruby
94
+ gem 'http_accept_language'
95
+ ```
96
+
97
+ Run `bundle install` to install it.
98
+
99
+ ---
100
+
101
+ Released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ require 'cucumber/rake/task'
7
+ Cucumber::Rake::Task.new(:cucumber)
8
+
9
+ Cucumber::Rake::Task.new(:wip, "Run features tagged with @wip") do |t|
10
+ t.profile = "wip"
11
+ end
12
+
13
+ task :default => [:spec, :cucumber, :wip]
data/cucumber.yml ADDED
@@ -0,0 +1,2 @@
1
+ default: --format progress --strict --tags ~@wip
2
+ wip: --format pretty --wip --tags @wip
@@ -0,0 +1,29 @@
1
+ @rails
2
+ Feature: Rails Integration
3
+
4
+ To use http_accept_language inside a Rails application, just add it to your
5
+ Gemfile and run `bundle install`.
6
+
7
+ It is automatically added to your middleware.
8
+
9
+ Scenario: Installing
10
+ When I generate a new Rails app
11
+ And I add http_accept_language to my Gemfile
12
+ And I run `rake middleware`
13
+ Then the output should contain "use HttpAcceptLanguage::Middleware"
14
+
15
+ Scenario: Using
16
+ Given I have installed http_accept_language
17
+ When I generate the following controller:
18
+ """
19
+ class LanguagesController < ApplicationController
20
+
21
+ def index
22
+ languages = http_accept_language.user_preferred_languages
23
+ render :text => "Languages: #{languages.join(' : ')}"
24
+ end
25
+
26
+ end
27
+ """
28
+ When I access that action with the HTTP_ACCEPT_LANGUAGE header "en-us,en-gb;q=0.8,en;q=0.6,es-419"
29
+ Then the response should contain "Languages: en-US : es-419 : en-GB : en"
@@ -0,0 +1,37 @@
1
+ Before "@rails" do
2
+ @rails = RailsDriver.new
3
+ end
4
+
5
+ When /^I generate a new Rails app$/ do
6
+ @rails.generate_rails
7
+ end
8
+
9
+ When /^I add http_accept_language to my Gemfile$/ do
10
+ @rails.append_gemfile
11
+ end
12
+
13
+ Given /^I have installed http_accept_language$/ do
14
+ @rails.install_gem
15
+ end
16
+
17
+ When /^I generate the following controller:$/ do |string|
18
+ @rails.generate_controller "languages", string
19
+ end
20
+
21
+ When /^I access that action with the HTTP_ACCEPT_LANGUAGE header "(.*?)"$/ do |header|
22
+ @rails.with_rails_running do
23
+ @rails.request_with_http_accept_language_header(header, "/languages")
24
+ end
25
+ end
26
+
27
+ Then /^the response should contain "(.*?)"$/ do |output|
28
+ @rails.output_should_contain(output)
29
+ end
30
+
31
+ When /^I run `rake middleware`$/ do
32
+ @rails.bundle_exec("rake middleware")
33
+ end
34
+
35
+ Then /^the output should contain "(.*?)"$/ do |expected|
36
+ @rails.assert_partial_output(expected, @rails.all_output)
37
+ end
@@ -0,0 +1,93 @@
1
+ require 'aruba/api'
2
+
3
+ class RailsDriver
4
+ include Aruba::Api
5
+
6
+ def initialize
7
+ @aruba_io_wait_seconds = 10
8
+ # @announce_stdout = true
9
+ # @announce_stderr = true
10
+ # @announce_cmd = true
11
+ # @announce_dir = true
12
+ # @announce_env = true
13
+ end
14
+
15
+ def app_name
16
+ "foobar"
17
+ end
18
+
19
+ def install_gem
20
+ if app_exists?
21
+ cd app_name
22
+ else
23
+ generate_rails
24
+ append_gemfile
25
+ end
26
+ end
27
+
28
+ def app_exists?
29
+ in_current_dir do
30
+ File.exist?("#{app_name}/Gemfile")
31
+ end
32
+ end
33
+
34
+ def bundle_exec(cmd)
35
+ run_simple "bundle exec #{cmd}"
36
+ end
37
+
38
+ def generate_rails
39
+ # install rails with as few things as possible, for speed!
40
+ bundle_exec "rails new #{app_name} --force --skip-git --skip-active-record --skip-sprockets --skip-javascript --skip-test-unit --old-style-hash"
41
+ cd app_name
42
+ end
43
+
44
+ def append_gemfile
45
+ # Specifiy a path so cucumber will use the unreleased version of the gem
46
+ append_to_file "Gemfile", "gem 'http_accept_language', :path => '#{gem_path}'"
47
+ end
48
+
49
+ def gem_path
50
+ File.expand_path('../../../', __FILE__)
51
+ end
52
+
53
+ def generate_controller(name, content)
54
+ bundle_exec "rails generate resource #{name} --force"
55
+ write_file "app/controllers/#{name}_controller.rb", content
56
+ end
57
+
58
+ def request_with_http_accept_language_header(header, path)
59
+ run_simple "curl --retry 10 -H 'Accept-language: #{header}' #{File.join(host, path)} -o #{response}"
60
+ run_simple "cat out.html"
61
+ end
62
+
63
+ def host
64
+ "http://localhost:13000"
65
+ end
66
+
67
+ def with_rails_running
68
+ start_rails
69
+ yield
70
+ ensure
71
+ stop_rails
72
+ end
73
+
74
+ def start_rails
75
+ bundle_exec "rails server -p 13000 -d"
76
+ end
77
+
78
+ def stop_rails
79
+ in_current_dir do
80
+ `cat tmp/pids/server.pid | xargs kill -9`
81
+ end
82
+ end
83
+
84
+ def response
85
+ File.expand_path(File.join(current_dir, 'out.html'))
86
+ end
87
+
88
+ def output_should_contain(expected)
89
+ actual = File.open(response, 'r:utf-8').read
90
+ actual.should include expected
91
+ end
92
+
93
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/http_accept_language/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "socialcast-http_accept_language"
6
+ s.version = HttpAcceptLanguage::VERSION
7
+ s.authors = ["iain", "phene"]
8
+ s.email = ["iain@iain.nl", "geoff@socialcast.com"]
9
+ s.homepage = "https://github.com/socialcast/http_accept_language"
10
+ s.summary = %q{Find out which locale the user preferes by reading the languages they specified in their browser}
11
+ s.description = %q{Find out which locale the user preferes by reading the languages they specified in their browser}
12
+
13
+ s.rubyforge_project = "http_accept_language"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency 'rake'
21
+ s.add_development_dependency 'rspec'
22
+ s.add_development_dependency 'rack-test'
23
+ s.add_development_dependency 'guard-rspec'
24
+ s.add_development_dependency 'rails', '>= 3.2.6'
25
+ s.add_development_dependency 'cucumber'
26
+ s.add_development_dependency 'aruba'
27
+ end
@@ -0,0 +1,4 @@
1
+ require 'http_accept_language/version'
2
+ require 'http_accept_language/parser'
3
+ require 'http_accept_language/middleware'
4
+ require 'http_accept_language/railtie' if defined?(Rails::Railtie)
@@ -0,0 +1,16 @@
1
+ module HttpAcceptLanguage
2
+ class Middleware
3
+
4
+ def initialize(app)
5
+ @app = app
6
+ end
7
+
8
+ def call(env)
9
+ def env.http_accept_language
10
+ @http_accept_language ||= Parser.new(self['HTTP_ACCEPT_LANGUAGE'])
11
+ end
12
+ @app.call(env)
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,104 @@
1
+ module HttpAcceptLanguage
2
+
3
+ class Parser
4
+
5
+ attr_accessor :header
6
+
7
+ def initialize(header)
8
+ @header = header
9
+ end
10
+
11
+ # Returns a sorted array based on user preference in HTTP_ACCEPT_LANGUAGE.
12
+ # Browsers send this HTTP header, so don't think this is holy.
13
+ #
14
+ # Example:
15
+ #
16
+ # request.user_preferred_languages
17
+ # # => [ 'nl-NL', 'nl-BE', 'nl', 'en-US', 'en' ]
18
+ #
19
+ def user_preferred_languages
20
+ @user_preferred_languages ||= header.gsub(/\s+/, '').split(/,/).collect do |l|
21
+ l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
22
+ l.split(/;q=/)
23
+ end.sort do |x,y|
24
+ raise "Not correctly formatted" unless x.first =~ /^[a-z\-0-9]+$/i
25
+ y.last.to_f <=> x.last.to_f
26
+ end.collect do |l|
27
+ l.first.downcase.gsub(/-[a-z0-9]+$/i) { |x| x.upcase }
28
+ end
29
+ rescue # Just rescue anything if the browser messed up badly.
30
+ []
31
+ end
32
+
33
+ # Sets the user languages preference, overiding the browser
34
+ #
35
+ def user_preferred_languages=(languages)
36
+ @user_preferred_languages = languages
37
+ end
38
+
39
+ # Finds the locale specifically requested by the browser.
40
+ #
41
+ # Example:
42
+ #
43
+ # request.preferred_language_from I18n.available_locales
44
+ # # => 'nl'
45
+ #
46
+ def preferred_language_from(array)
47
+ (user_preferred_languages & array.collect { |i| i.to_s }).first
48
+ end
49
+
50
+ # Returns the first of the user_preferred_languages that is compatible
51
+ # with the available locales. Ignores region.
52
+ #
53
+ # Example:
54
+ #
55
+ # request.compatible_language_from I18n.available_locales
56
+ #
57
+ def compatible_language_from(available_languages)
58
+ user_preferred_languages.map do |x| #en-US
59
+ available_languages.find do |y| # en
60
+ y = y.to_s
61
+ x == y || x.split('-', 2).first == y.split('-', 2).first
62
+ end
63
+ end.compact.first
64
+ end
65
+
66
+ # Returns a supplied list of available locals without any extra application info
67
+ # that may be attached to the locale for storage in the application.
68
+ #
69
+ # Example:
70
+ # [ja_JP-x1, en-US-x4, en_UK-x5, fr-FR-x3] => [ja-JP, en-US, en-UK, fr-FR]
71
+ #
72
+ def sanitize_available_locales(available_languages)
73
+ available_languages.map do |avail|
74
+ split_locale = avail.split(/[_-]/)
75
+
76
+ split_locale.map do |e|
77
+ e unless e.match(/x|[0-9*]/)
78
+ end.compact.join("-")
79
+ end
80
+ end
81
+
82
+ # Returns the first of the user preferred languages that is
83
+ # also found in available languages. Finds best fit by matching on
84
+ # primary language first and secondarily on region. If no matching region is
85
+ # found, return the first language in the group matching that primary language.
86
+ #
87
+ # Example:
88
+ #
89
+ # request.language_region_compatible(available_languages)
90
+ #
91
+ def language_region_compatible_from(available_languages)
92
+ available_languages = sanitize_available_locales(available_languages)
93
+ user_preferred_languages.map do |x| #en-US
94
+ lang_group = available_languages.select do |y| # en
95
+ y = y.to_s
96
+ x.split('-', 2).first == y.split('-', 2).first
97
+ end
98
+ lang_group.find{|l| l == x} || lang_group.first #en-US, en-UK
99
+ end.compact.first
100
+ end
101
+
102
+ end
103
+
104
+ end
@@ -0,0 +1,20 @@
1
+ module HttpAcceptLanguage
2
+ class Railtie < ::Rails::Railtie
3
+
4
+ initializer "http_accept_language.add_middleware" do |app|
5
+ app.middleware.use Middleware
6
+
7
+ ActiveSupport.on_load :action_controller do
8
+ include EasyAccess
9
+ end
10
+ end
11
+
12
+ end
13
+
14
+ module EasyAccess
15
+ def http_accept_language
16
+ env.http_accept_language
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,3 @@
1
+ module HttpAcceptLanguage
2
+ VERSION = '2.0.0.pre2'
3
+ end
@@ -0,0 +1,49 @@
1
+ require 'http_accept_language'
2
+ require 'rack/test'
3
+ require 'json'
4
+
5
+ class TestRackApp
6
+
7
+ def call(env)
8
+ request = Rack::Request.new(env)
9
+ http_accept_language = env.http_accept_language
10
+ result = {
11
+ :user_preferred_languages => http_accept_language.user_preferred_languages,
12
+ }
13
+ if request.params['preferred']
14
+ result[:preferred_language_from] = http_accept_language.preferred_language_from(request.params['preferred'])
15
+ end
16
+ [ 200, {}, [ JSON.generate(result) ]]
17
+ end
18
+
19
+ end
20
+
21
+ describe "Rack integration" do
22
+ include Rack::Test::Methods
23
+
24
+ def app
25
+ Rack::Builder.new do
26
+ use HttpAcceptLanguage::Middleware
27
+ run TestRackApp.new
28
+ end.to_app
29
+ end
30
+
31
+ it "decodes the HTTP_ACCEPT_LANGUAGE header" do
32
+ request_with_header 'en-us,en-gb;q=0.8,en;q=0.6,es-419'
33
+ r['user_preferred_languages'].should eq %w{en-US es-419 en-GB en}
34
+ end
35
+
36
+ it "finds the first available language" do
37
+ request_with_header 'en-us,en-gb;q=0.8,en;q=0.6,es-419', :preferred => %w(en en-GB)
38
+ r['preferred_language_from'].should eq 'en-GB'
39
+ end
40
+
41
+ def request_with_header(header, params = {})
42
+ get "/", params, 'HTTP_ACCEPT_LANGUAGE' => header
43
+ end
44
+
45
+ def r
46
+ JSON.parse(last_response.body)
47
+ end
48
+
49
+ end
@@ -0,0 +1,56 @@
1
+ require 'http_accept_language/parser'
2
+
3
+ describe HttpAcceptLanguage::Parser do
4
+
5
+ def parser
6
+ @parser ||= HttpAcceptLanguage::Parser.new('en-us,en-gb;q=0.8,en;q=0.6,es-419')
7
+ end
8
+
9
+ it "should return empty array" do
10
+ parser.header = nil
11
+ parser.user_preferred_languages.should eq []
12
+ end
13
+
14
+ it "should properly split" do
15
+ parser.user_preferred_languages.should eq %w{en-US es-419 en-GB en}
16
+ end
17
+
18
+ it "should ignore jambled header" do
19
+ parser.header = 'odkhjf89fioma098jq .,.,'
20
+ parser.user_preferred_languages.should eq []
21
+ end
22
+
23
+ it "should properly respect whitespace" do
24
+ parser.header = 'en-us, en-gb; q=0.8,en;q = 0.6,es-419'
25
+ parser.user_preferred_languages.should eq %w{en-US es-419 en-GB en}
26
+ end
27
+
28
+ it "should find first available language" do
29
+ parser.preferred_language_from(%w{en en-GB}).should eq "en-GB"
30
+ end
31
+
32
+ it "should find first compatible language" do
33
+ parser.compatible_language_from(%w{en-hk}).should eq "en-hk"
34
+ parser.compatible_language_from(%w{en}).should eq "en"
35
+ end
36
+
37
+ it "should find first compatible from user preferred" do
38
+ parser.header = 'en-us,de-de'
39
+ parser.compatible_language_from(%w{de en}).should eq 'en'
40
+ end
41
+
42
+ it "should accept symbols as available languages" do
43
+ parser.header = 'en-us'
44
+ parser.compatible_language_from([:"en-HK"]).should eq :"en-HK"
45
+ end
46
+
47
+ it "should sanitize available language names" do
48
+ parser.sanitize_available_locales(%w{en_UK-x3 en-US-x1 ja_JP-x2 pt-BR-x5}).should eq ["en-UK", "en-US", "ja-JP", "pt-BR"]
49
+ end
50
+
51
+ it "should find most compatible language from user preferred" do
52
+ parser.header = 'ja,en-gb,en-us,fr-fr'
53
+ parser.language_region_compatible_from(%w{en-UK en-US ja-JP}).should eq "ja-JP"
54
+ end
55
+
56
+ end
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: socialcast-http_accept_language
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0.pre2
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - iain
9
+ - phene
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-08-23 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: rspec
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rack-test
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: guard-rspec
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: rails
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: 3.2.6
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: 3.2.6
95
+ - !ruby/object:Gem::Dependency
96
+ name: cucumber
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: aruba
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ description: Find out which locale the user preferes by reading the languages they
128
+ specified in their browser
129
+ email:
130
+ - iain@iain.nl
131
+ - geoff@socialcast.com
132
+ executables: []
133
+ extensions: []
134
+ extra_rdoc_files: []
135
+ files:
136
+ - .gitignore
137
+ - .rspec
138
+ - Gemfile
139
+ - Guardfile
140
+ - README.md
141
+ - Rakefile
142
+ - cucumber.yml
143
+ - features/rails_integration.feature
144
+ - features/steps/rails.rb
145
+ - features/support/rails_driver.rb
146
+ - http_accept_language.gemspec
147
+ - lib/http_accept_language.rb
148
+ - lib/http_accept_language/middleware.rb
149
+ - lib/http_accept_language/parser.rb
150
+ - lib/http_accept_language/railtie.rb
151
+ - lib/http_accept_language/version.rb
152
+ - spec/middleware_spec.rb
153
+ - spec/parser_spec.rb
154
+ homepage: https://github.com/socialcast/http_accept_language
155
+ licenses: []
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ! '>'
170
+ - !ruby/object:Gem::Version
171
+ version: 1.3.1
172
+ requirements: []
173
+ rubyforge_project: http_accept_language
174
+ rubygems_version: 1.8.24
175
+ signing_key:
176
+ specification_version: 3
177
+ summary: Find out which locale the user preferes by reading the languages they specified
178
+ in their browser
179
+ test_files:
180
+ - features/rails_integration.feature
181
+ - features/steps/rails.rb
182
+ - features/support/rails_driver.rb
183
+ - spec/middleware_spec.rb
184
+ - spec/parser_spec.rb