rack-user-locale 0.0.5 → 0.1.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0c4e00a7465d3f7c676c1a3b472b5cd078ac1b890c73c23f1cb64c27ecb05894
4
+ data.tar.gz: dae9ce1f81036483f82de4af343afc7c81100537a7861752139c1a74ec42cc11
5
+ SHA512:
6
+ metadata.gz: f63d485dd1d5e57ef7111354ace7930fbc4e0e24e521c9d5334a0d5392043440dc5e10ba009e0696091766ff441096fbcbe7f20cab7f159a76e83b22a0bd212d
7
+ data.tar.gz: 4e29c8b32cecc1aaa87643779f2240a0e46ef2b06eb4a6e0c9df0981b4ec22d0db9f7cac374333d0eca2061633f47b23b8650c69a6e14a31917c08c0349665d2
@@ -0,0 +1,25 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.5
3
+
4
+ # Use double quotes ALL THE TIME!!!
5
+ Style/StringLiterals:
6
+ EnforcedStyle: double_quotes
7
+
8
+ # Disable Style/Documentation because...
9
+ Style/Documentation:
10
+ Enabled: false
11
+
12
+ # Increase line length to 120
13
+ Metrics/LineLength:
14
+ Max: 120
15
+
16
+ # Exclude class and method length for test
17
+ Metrics/BlockLength:
18
+ Exclude:
19
+ - "test/**/*"
20
+ Metrics/ClassLength:
21
+ Exclude:
22
+ - "test/**/*"
23
+ Metrics/MethodLength:
24
+ Exclude:
25
+ - "test/**/*"
@@ -0,0 +1 @@
1
+ 2.5.1
@@ -0,0 +1 @@
1
+ language: ruby
data/Gemfile CHANGED
@@ -1,19 +1,19 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
5
4
 
6
- gem "rack"
7
5
  gem "i18n"
6
+ gem "rack"
8
7
 
9
8
  # Add dependencies to develop your gem here.
10
9
  # Include everything needed to run rake, tests, features, etc.
11
10
  group :development do
12
- gem "bundler"
13
- gem 'debugger'
14
- gem "jeweler"
15
- gem "minitest"
16
- gem "rack-test"
17
- gem "turn"
18
- gem "yard"
11
+ gem "bundler", "~> 1.16"
12
+ gem "byebug"
13
+ gem "jeweler", "~> 2.3"
14
+ gem "minitest", "~> 5.0"
15
+ gem "minitest-fail-fast", "~> 0.1"
16
+ gem "minitest-reporters", "1.3.0" # locking as current issue with 1.3.1
17
+ gem "rack-test", "~> 1.1"
18
+ gem "yard", "~> 0.9"
19
19
  end
@@ -1,44 +1,85 @@
1
1
  GEM
2
- remote: http://rubygems.org/
2
+ remote: https://rubygems.org/
3
3
  specs:
4
- ansi (1.4.3)
5
- columnize (0.3.6)
6
- debugger (1.3.0)
7
- columnize (>= 0.3.1)
8
- debugger-linecache (~> 1.1.1)
9
- debugger-ruby_core_source (~> 1.1.7)
10
- debugger-linecache (1.1.2)
11
- debugger-ruby_core_source (>= 1.1.1)
12
- debugger-ruby_core_source (1.1.7)
13
- git (1.2.5)
14
- i18n (0.6.1)
15
- jeweler (1.8.4)
16
- bundler (~> 1.0)
4
+ addressable (2.4.0)
5
+ ansi (1.5.0)
6
+ builder (3.2.3)
7
+ byebug (10.0.2)
8
+ concurrent-ruby (1.0.5)
9
+ descendants_tracker (0.0.4)
10
+ thread_safe (~> 0.3, >= 0.3.1)
11
+ faraday (0.9.2)
12
+ multipart-post (>= 1.2, < 3)
13
+ git (1.5.0)
14
+ github_api (0.16.0)
15
+ addressable (~> 2.4.0)
16
+ descendants_tracker (~> 0.0.4)
17
+ faraday (~> 0.8, < 0.10)
18
+ hashie (>= 3.4)
19
+ mime-types (>= 1.16, < 3.0)
20
+ oauth2 (~> 1.0)
21
+ hashie (3.6.0)
22
+ highline (2.0.0)
23
+ i18n (1.1.0)
24
+ concurrent-ruby (~> 1.0)
25
+ jeweler (2.3.9)
26
+ builder
27
+ bundler
17
28
  git (>= 1.2.5)
29
+ github_api (~> 0.16.0)
30
+ highline (>= 1.6.15)
31
+ nokogiri (>= 1.5.10)
32
+ psych
18
33
  rake
19
34
  rdoc
20
- json (1.7.6)
21
- minitest (4.5.0)
22
- rack (1.5.1)
23
- rack-test (0.6.2)
24
- rack (>= 1.0)
25
- rake (10.0.3)
26
- rdoc (3.12)
27
- json (~> 1.4)
28
- turn (0.9.6)
35
+ semver2
36
+ jwt (1.5.6)
37
+ mime-types (2.99.3)
38
+ mini_portile2 (2.3.0)
39
+ minitest (5.11.3)
40
+ minitest-fail-fast (0.1.0)
41
+ minitest (~> 5)
42
+ minitest-reporters (1.3.0)
29
43
  ansi
30
- yard (0.8.3)
44
+ builder
45
+ minitest (>= 5.0)
46
+ ruby-progressbar
47
+ multi_json (1.13.1)
48
+ multi_xml (0.6.0)
49
+ multipart-post (2.0.0)
50
+ nokogiri (1.8.4)
51
+ mini_portile2 (~> 2.3.0)
52
+ oauth2 (1.4.0)
53
+ faraday (>= 0.8, < 0.13)
54
+ jwt (~> 1.0)
55
+ multi_json (~> 1.3)
56
+ multi_xml (~> 0.5)
57
+ rack (>= 1.2, < 3)
58
+ psych (3.0.2)
59
+ rack (2.0.5)
60
+ rack-test (1.1.0)
61
+ rack (>= 1.0, < 3)
62
+ rake (12.3.1)
63
+ rdoc (6.0.4)
64
+ ruby-progressbar (1.10.0)
65
+ semver2 (3.4.2)
66
+ thread_safe (0.3.6)
67
+ yard (0.9.16)
31
68
 
32
69
  PLATFORMS
33
70
  ruby
34
71
 
35
72
  DEPENDENCIES
36
- bundler
37
- debugger
73
+ bundler (~> 1.16)
74
+ byebug
38
75
  i18n
39
- jeweler
40
- minitest
76
+ jeweler (~> 2.3)
77
+ minitest (~> 5.0)
78
+ minitest-fail-fast (~> 0.1)
79
+ minitest-reporters (= 1.3.0)
41
80
  rack
42
- rack-test
43
- turn
44
- yard
81
+ rack-test (~> 1.1)
82
+ yard (~> 0.9)
83
+
84
+ BUNDLED WITH
85
+ 1.16.3
data/Rakefile CHANGED
@@ -1,38 +1,38 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- require 'rubygems'
4
- require 'bundler'
3
+ require "rubygems"
4
+ require "bundler"
5
5
  begin
6
6
  Bundler.setup(:default, :development)
7
7
  rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
8
+ warn e.message
9
+ warn "Run `bundle install` to install missing gems"
10
10
  exit e.status_code
11
11
  end
12
- require 'rake'
12
+ require "rake"
13
13
 
14
- require 'jeweler'
14
+ require "jeweler"
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
17
  gem.name = "rack-user-locale"
18
18
  gem.homepage = "http://github.com/sleepingstu/rack-user-locale"
19
19
  gem.license = "MIT"
20
- gem.summary = %Q{Rack module for getting and setting a user's locale}
21
- gem.description = %Q{A Rack module for getting and setting a user's locale via a cookie or browser default language.}
22
- gem.email = "stuart.chinery@headlondon.com"
20
+ gem.summary = %(Rack module for getting and setting a user's locale)
21
+ gem.description = %(A Rack module for getting and setting a user's locale via a cookie or browser default language.)
22
+ gem.email = "stuart.chinery@gmail.com"
23
23
  gem.authors = ["Stuart Chinery", "Dave Hrycyszyn"]
24
24
  # dependencies defined in Gemfile
25
25
  end
26
26
  Jeweler::RubygemsDotOrgTasks.new
27
27
 
28
- require 'rake/testtask'
28
+ require "rake/testtask"
29
29
  Rake::TestTask.new(:test) do |test|
30
- test.libs << 'lib' << 'test'
31
- test.pattern = 'test/**/test_*.rb'
30
+ test.libs << "lib" << "test"
31
+ test.pattern = "test/**/*_test.rb"
32
32
  test.verbose = true
33
33
  end
34
34
 
35
- task :default => :test
35
+ task default: :test
36
36
 
37
- require 'yard'
38
- YARD::Rake::YardocTask.new
37
+ require "yard"
38
+ YARD::Rake::YardocTask.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.1.0
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "i18n"
2
4
 
3
5
  module Rack
4
6
  class UserLocale
5
-
6
7
  # TODO: Write notes
7
8
  #
8
9
  def initialize(app, options = {})
9
- @app, @options = app, {
10
- :accepted_locales => []
11
- }.merge(options)
10
+ @app = app
11
+ @options = {
12
+ accepted_locales: []
13
+ }.merge(options)
12
14
  end
13
15
 
14
16
  # TODO: Write notes
@@ -18,16 +20,12 @@ module Rack
18
20
  @request = Rack::Request.new(@env)
19
21
  set_locale
20
22
 
21
- if @request.post? || @request.put? || @request.delete?
22
- @app.call(env)
23
- else
24
- status, headers, body = @app.call(@env)
25
- response = Rack::Response.new(body, status, headers)
26
- response.set_cookie("user-locale", {
27
- :value => I18n.locale,
28
- :path => "/"}) if get_cookie_locale != I18n.locale.to_s
29
- response.finish
30
- end
23
+ @app.call(env) && return if @request.post? || @request.put? || @request.delete?
24
+
25
+ status, headers, body = @app.call(@env)
26
+ response = Rack::Response.new(body, status, headers)
27
+ response.set_cookie("user-locale", value: I18n.locale, path: "/") if cookie_locale != I18n.locale.to_s
28
+ response.finish
31
29
  end
32
30
 
33
31
  private
@@ -35,38 +33,40 @@ module Rack
35
33
  # TODO: Write notes
36
34
  #
37
35
  def set_locale
38
- new_locale = check_accepted? ? accepted_locale(locale.to_sym, get_default_locale) : locale.to_sym
36
+ new_locale = check_accepted? ? accepted_locale(locale.to_sym, default_locale) : locale.to_sym
39
37
  I18n.locale = @env["rack.locale"] = new_locale
40
38
  end
41
39
 
42
40
  # TODO: Write notes
43
41
  #
44
42
  def accepted_locale(locale, other_locale = nil)
45
- locale = @options[:accepted_locales].include?(locale) ? locale : other_locale
43
+ @options[:accepted_locales].include?(locale) ? locale : other_locale
46
44
  end
47
45
 
48
46
  # TODO: Write notes
49
47
  #
50
48
  def locale
51
- get_cookie_locale || get_browser_locale || get_default_locale
49
+ cookie_locale || browser_locale || default_locale
52
50
  end
53
51
 
54
52
  # TODO: Write notes
55
53
  #
56
- def get_cookie_locale
54
+ def cookie_locale
57
55
  @request.cookies["user-locale"]
58
56
  end
59
57
 
60
58
  # TODO: Write notes
61
59
  #
62
- def get_browser_locale
60
+ def browser_locale
63
61
  accept_lang = @env["HTTP_ACCEPT_LANGUAGE"]
64
62
  return if accept_lang.nil?
65
63
 
66
- langs = accept_lang.split(",").map { |l|
67
- l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
68
- l.split(';q=')
69
- }.sort { |a, b| b[1] <=> a[1] }
64
+ langs = accept_lang.split(",").map do |l|
65
+ l += ";q=1.0" unless l =~ /;q=\d+\.\d+$/
66
+ l.split(";q=")
67
+ end
68
+
69
+ langs.sort! { |a, b| b[1] <=> a[1] }
70
70
 
71
71
  if check_accepted?
72
72
  langs.each do |lang|
@@ -75,25 +75,26 @@ module Rack
75
75
  end
76
76
  end
77
77
 
78
- return split_lang(langs.first.first)
78
+ split_lang(langs.first.first)
79
79
  end
80
80
 
81
81
  # TODO: Write notes
82
82
  #
83
83
  def split_lang(lang)
84
- lang.split("-").first unless lang.nil?
84
+ return if lang.nil?
85
+ lang.split("-").first
85
86
  end
86
87
 
87
88
  # TODO: Write notes
88
89
  #
89
- def get_default_locale
90
+ def default_locale
90
91
  I18n.default_locale
91
92
  end
92
93
 
93
94
  # TODO: Write notes
94
95
  #
95
96
  def check_accepted?
96
- @options[:accepted_locales].count > 0
97
+ @options[:accepted_locales].count.positive?
97
98
  end
98
99
  end
99
100
  end
@@ -2,22 +2,27 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: rack-user-locale 0.1.0 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
- s.name = "rack-user-locale"
8
- s.version = "0.0.5"
8
+ s.name = "rack-user-locale".freeze
9
+ s.version = "0.1.0"
9
10
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Stuart Chinery", "Dave Hrycyszyn"]
12
- s.date = "2013-09-13"
13
- s.description = "A Rack module for getting and setting a user's locale via a cookie or browser default language."
14
- s.email = "stuart.chinery@headlondon.com"
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Stuart Chinery".freeze, "Dave Hrycyszyn".freeze]
14
+ s.date = "2018-08-15"
15
+ s.description = "A Rack module for getting and setting a user's locale via a cookie or browser default language.".freeze
16
+ s.email = "stuart.chinery@gmail.com".freeze
15
17
  s.extra_rdoc_files = [
16
18
  "LICENSE.txt",
17
19
  "README.md"
18
20
  ]
19
21
  s.files = [
20
22
  ".document",
23
+ ".rubocop.yml",
24
+ ".ruby-version",
25
+ ".travis.yml",
21
26
  "Gemfile",
22
27
  "Gemfile.lock",
23
28
  "LICENSE.txt",
@@ -26,49 +31,52 @@ Gem::Specification.new do |s|
26
31
  "VERSION",
27
32
  "lib/rack-user-locale.rb",
28
33
  "rack-user-locale.gemspec",
34
+ "test/basic_rack_app.rb",
29
35
  "test/helper.rb",
30
- "test/test_rack-user-locale.rb"
36
+ "test/rack-user-locale_test.rb"
31
37
  ]
32
- s.homepage = "http://github.com/sleepingstu/rack-user-locale"
33
- s.licenses = ["MIT"]
34
- s.require_paths = ["lib"]
35
- s.rubygems_version = "1.8.24"
36
- s.summary = "Rack module for getting and setting a user's locale"
38
+ s.homepage = "http://github.com/sleepingstu/rack-user-locale".freeze
39
+ s.licenses = ["MIT".freeze]
40
+ s.rubygems_version = "2.7.6".freeze
41
+ s.summary = "Rack module for getting and setting a user's locale".freeze
37
42
 
38
43
  if s.respond_to? :specification_version then
39
- s.specification_version = 3
44
+ s.specification_version = 4
40
45
 
41
46
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
- s.add_runtime_dependency(%q<rack>, [">= 0"])
43
- s.add_runtime_dependency(%q<i18n>, [">= 0"])
44
- s.add_development_dependency(%q<bundler>, [">= 0"])
45
- s.add_development_dependency(%q<debugger>, [">= 0"])
46
- s.add_development_dependency(%q<jeweler>, [">= 0"])
47
- s.add_development_dependency(%q<minitest>, [">= 0"])
48
- s.add_development_dependency(%q<rack-test>, [">= 0"])
49
- s.add_development_dependency(%q<turn>, [">= 0"])
50
- s.add_development_dependency(%q<yard>, [">= 0"])
47
+ s.add_runtime_dependency(%q<i18n>.freeze, [">= 0"])
48
+ s.add_runtime_dependency(%q<rack>.freeze, [">= 0"])
49
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 1.16"])
50
+ s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
51
+ s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3"])
52
+ s.add_development_dependency(%q<minitest>.freeze, ["~> 5.0"])
53
+ s.add_development_dependency(%q<minitest-fail-fast>.freeze, ["~> 0.1"])
54
+ s.add_development_dependency(%q<minitest-reporters>.freeze, ["= 1.3.0"])
55
+ s.add_development_dependency(%q<rack-test>.freeze, ["~> 1.1"])
56
+ s.add_development_dependency(%q<yard>.freeze, ["~> 0.9"])
51
57
  else
52
- s.add_dependency(%q<rack>, [">= 0"])
53
- s.add_dependency(%q<i18n>, [">= 0"])
54
- s.add_dependency(%q<bundler>, [">= 0"])
55
- s.add_dependency(%q<debugger>, [">= 0"])
56
- s.add_dependency(%q<jeweler>, [">= 0"])
57
- s.add_dependency(%q<minitest>, [">= 0"])
58
- s.add_dependency(%q<rack-test>, [">= 0"])
59
- s.add_dependency(%q<turn>, [">= 0"])
60
- s.add_dependency(%q<yard>, [">= 0"])
58
+ s.add_dependency(%q<i18n>.freeze, [">= 0"])
59
+ s.add_dependency(%q<rack>.freeze, [">= 0"])
60
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.16"])
61
+ s.add_dependency(%q<byebug>.freeze, [">= 0"])
62
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3"])
63
+ s.add_dependency(%q<minitest>.freeze, ["~> 5.0"])
64
+ s.add_dependency(%q<minitest-fail-fast>.freeze, ["~> 0.1"])
65
+ s.add_dependency(%q<minitest-reporters>.freeze, ["= 1.3.0"])
66
+ s.add_dependency(%q<rack-test>.freeze, ["~> 1.1"])
67
+ s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
61
68
  end
62
69
  else
63
- s.add_dependency(%q<rack>, [">= 0"])
64
- s.add_dependency(%q<i18n>, [">= 0"])
65
- s.add_dependency(%q<bundler>, [">= 0"])
66
- s.add_dependency(%q<debugger>, [">= 0"])
67
- s.add_dependency(%q<jeweler>, [">= 0"])
68
- s.add_dependency(%q<minitest>, [">= 0"])
69
- s.add_dependency(%q<rack-test>, [">= 0"])
70
- s.add_dependency(%q<turn>, [">= 0"])
71
- s.add_dependency(%q<yard>, [">= 0"])
70
+ s.add_dependency(%q<i18n>.freeze, [">= 0"])
71
+ s.add_dependency(%q<rack>.freeze, [">= 0"])
72
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.16"])
73
+ s.add_dependency(%q<byebug>.freeze, [">= 0"])
74
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3"])
75
+ s.add_dependency(%q<minitest>.freeze, ["~> 5.0"])
76
+ s.add_dependency(%q<minitest-fail-fast>.freeze, ["~> 0.1"])
77
+ s.add_dependency(%q<minitest-reporters>.freeze, ["= 1.3.0"])
78
+ s.add_dependency(%q<rack-test>.freeze, ["~> 1.1"])
79
+ s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
72
80
  end
73
81
  end
74
82
 
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class BasicRackApp
4
+ def call(_env)
5
+ [200, { "Content-Type" => "text/plain" }, "Hello World"]
6
+ end
7
+ end
@@ -1,30 +1,33 @@
1
- require 'rubygems'
2
- require 'bundler'
1
+ # frozen_string_literal: true
2
+
3
+ require "rubygems"
4
+ require "bundler"
3
5
  require "rack/test"
4
- require "debugger"
5
6
 
6
7
  begin
7
8
  Bundler.setup(:default, :development)
8
9
  rescue Bundler::BundlerError => e
9
- $stderr.puts e.message
10
- $stderr.puts "Run `bundle install` to install missing gems"
10
+ warn e.message
11
+ warn "Run `bundle install` to install missing gems"
11
12
  exit e.status_code
12
13
  end
13
- require 'minitest/autorun'
14
14
 
15
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
+ require "minitest/autorun"
16
+ require "minitest/fail_fast"
17
+ require "minitest/reporters"
18
+ require "minitest/spec"
19
+
20
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
16
21
  $LOAD_PATH.unshift(File.dirname(__FILE__))
17
- require 'rack-user-locale'
18
- begin; require 'turn/autorun'; rescue LoadError; end
22
+ require "rack-user-locale"
19
23
 
20
- class MiniTest::Unit::TestCase
24
+ class Minitest::Test
25
+ extend Minitest::Spec::DSL
21
26
  include Rack::Test::Methods
22
27
  end
23
28
 
24
- class BasicRackApp
25
- def call(env)
26
- [200, {'Content-Type' => 'text/plain'}, 'Hello World']
27
- end
28
- end
29
-
30
- MiniTest::Unit.autorun
29
+ Minitest::Reporters.use!(
30
+ Minitest::Reporters::SpecReporter.new,
31
+ ENV,
32
+ Minitest.backtrace_filter
33
+ )
@@ -0,0 +1,232 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "helper"
4
+ require "basic_rack_app"
5
+ require "byebug"
6
+
7
+ class RackUserLocaleTest < Minitest::Test
8
+ describe Rack::UserLocale do
9
+ before do
10
+ I18n.enforce_available_locales = false
11
+ end
12
+
13
+ describe "without accepted_locales set" do
14
+ before do
15
+ def app
16
+ Rack::Builder.new do
17
+ use Rack::UserLocale
18
+
19
+ run BasicRackApp.new
20
+ end
21
+ end
22
+
23
+ I18n.default_locale = :en
24
+ I18n.locale = :en
25
+ end
26
+
27
+ it "should have I18n.locale set to :en" do
28
+ assert_equal :en, I18n.locale
29
+ end
30
+
31
+ describe "when a locale cookie is set" do
32
+ before do
33
+ get "http://example.com/", {}, "HTTP_COOKIE" => "user-locale=be"
34
+ end
35
+
36
+ it "should have I18n.locale set to :be" do
37
+ assert_equal :be, I18n.locale
38
+ end
39
+
40
+ it "should not set a cookie in the response" do
41
+ assert_equal nil, last_response["Set-Cookie"]
42
+ end
43
+ end
44
+
45
+ describe "when from HTTP_ACCEPT_LANGUAGE headers" do
46
+ describe "with a single locale" do
47
+ before do
48
+ get "http://example.com/", {}, "HTTP_ACCEPT_LANGUAGE" => "fr-be", "SCRIPT_NAME" => "/"
49
+ end
50
+
51
+ it "should have I18n.locale set to :fr" do
52
+ assert_equal :fr, I18n.locale
53
+ end
54
+
55
+ it "should set a cookie in the response" do
56
+ assert_equal "user-locale=fr; path=/", last_response["Set-Cookie"]
57
+ end
58
+ end
59
+
60
+ describe "with an multiple locales" do
61
+ before do
62
+ get "http://example.com/", {},
63
+ "HTTP_ACCEPT_LANGUAGE" => "de-DE;q=0.8,de;q=0.8,no-NO;q=1.0,no;q=0.7,ru-RU;q=0.7,sv-SE;q=0.4,sv;q=0.3,nl-BE;q=0.9",
64
+ "SCRIPT_NAME" => "/"
65
+ end
66
+
67
+ it "should have I18n.locale set to :no" do
68
+ assert_equal :no, I18n.locale
69
+ end
70
+
71
+ it "should set a cookie in the response" do
72
+ assert_equal "user-locale=no; path=/", last_response["Set-Cookie"]
73
+ end
74
+ end
75
+ end
76
+
77
+ describe "when both a cooke and HTTP_ACCEPT_LANGUAGE headers are set" do
78
+ before do
79
+ get "http://example.com/", {}, "HTTP_COOKIE" => "user-locale=af",
80
+ "HTTP_ACCEPT_LANGUAGE" => "ar-sa", "SCRIPT_NAME" => "/"
81
+ end
82
+
83
+ it "should have I18n.locale set to :af" do
84
+ assert_equal :af, I18n.locale
85
+ end
86
+
87
+ it "should not set a cookie in the response" do
88
+ assert_equal nil, last_response["Set-Cookie"]
89
+ end
90
+ end
91
+
92
+ describe "when nothing is changed" do
93
+ before do
94
+ get "http://example.com/", {}, "SCRIPT_NAME" => "/"
95
+ end
96
+
97
+ it "should have I18n.locale set to :en" do
98
+ assert_equal :en, I18n.locale
99
+ end
100
+
101
+ it "should set a cookie in the response" do
102
+ assert_equal "user-locale=en; path=/", last_response["Set-Cookie"]
103
+ end
104
+ end
105
+ end
106
+
107
+ describe "with accepted_locales set" do
108
+ before do
109
+ def app
110
+ Rack::Builder.new do
111
+ use Rack::UserLocale, accepted_locales: %i[en es fr de ja nl]
112
+
113
+ run BasicRackApp.new
114
+ end
115
+ end
116
+
117
+ I18n.default_locale = :en
118
+ I18n.locale = :en
119
+ end
120
+
121
+ it "should have I18n.locale set to :en" do
122
+ assert_equal :en, I18n.locale
123
+ end
124
+
125
+ describe "when a locale cookie is set" do
126
+ before do
127
+ get "http://example.com/", {}, "HTTP_COOKIE" => "user-locale=es", "SCRIPT_NAME" => "/"
128
+ end
129
+
130
+ it "should have I18n.locale set to :es" do
131
+ assert_equal :es, I18n.locale
132
+ end
133
+
134
+ it "should not set a cookie in the response" do
135
+ assert_equal nil, last_response["Set-Cookie"]
136
+ end
137
+ end
138
+
139
+ describe "when from HTTP_ACCEPT_LANGUAGE headers" do
140
+ describe "with an accepted locale" do
141
+ before do
142
+ get "http://example.com/", {}, "HTTP_ACCEPT_LANGUAGE" => "fr-be", "SCRIPT_NAME" => "/"
143
+ end
144
+
145
+ it "should have I18n.locale set to :fr" do
146
+ assert_equal :fr, I18n.locale
147
+ end
148
+
149
+ it "should set a cookie in the response" do
150
+ assert_equal "user-locale=fr; path=/", last_response["Set-Cookie"]
151
+ end
152
+ end
153
+
154
+ describe "with an multiple locales" do
155
+ describe "at different weights" do
156
+ before do
157
+ get "http://example.com/", {},
158
+ "HTTP_ACCEPT_LANGUAGE" => "de-DE;q=0.8,de;q=0.8,no-NO;q=0.7,no;q=0.7,ru-RU;q=0.7,sv-SE;q=0.4,sv;q=0.3,nl-BE;q=0.9",
159
+ "SCRIPT_NAME" => "/"
160
+ end
161
+
162
+ it "should have I18n.locale set to :nl" do
163
+ assert_equal :nl, I18n.locale
164
+ end
165
+
166
+ it "should set a cookie in the response" do
167
+ assert_equal "user-locale=nl; path=/", last_response["Set-Cookie"]
168
+ end
169
+ end
170
+
171
+ describe "at the same weight" do
172
+ before do
173
+ get "http://example.com/", {},
174
+ "HTTP_ACCEPT_LANGUAGE" => "fr,en,ja", "SCRIPT_NAME" => "/"
175
+ end
176
+
177
+ it "should have I18n.locale set to :fr" do
178
+ assert_equal :fr, I18n.locale
179
+ end
180
+
181
+ it "should set a cookie in the response" do
182
+ assert_equal "user-locale=fr; path=/", last_response["Set-Cookie"]
183
+ end
184
+ end
185
+ end
186
+
187
+ describe "without an accepted locale" do
188
+ before do
189
+ get "http://example.com/", {}, "HTTP_ACCEPT_LANGUAGE" => "ar-sa", "SCRIPT_NAME" => "/"
190
+ end
191
+
192
+ it "should have I18n.locale set to :en" do
193
+ assert_equal :en, I18n.locale
194
+ end
195
+
196
+ it "should set a cookie in the response" do
197
+ assert_equal "user-locale=en; path=/", last_response["Set-Cookie"]
198
+ end
199
+ end
200
+ end
201
+
202
+ describe "when both a cooke and HTTP_ACCEPT_LANGUAGE headers are set" do
203
+ before do
204
+ get "http://example.com/", {}, "HTTP_COOKIE" => "user-locale=ja",
205
+ "HTTP_ACCEPT_LANGUAGE" => "fr-be", "SCRIPT_NAME" => "/"
206
+ end
207
+
208
+ it "should have I18n.locale set to :ja" do
209
+ assert_equal :ja, I18n.locale
210
+ end
211
+
212
+ it "should not set a cookie in the response" do
213
+ assert_equal nil, last_response["Set-Cookie"]
214
+ end
215
+ end
216
+
217
+ describe "when nothing is changed" do
218
+ before do
219
+ get "http://example.com/", {}, "SCRIPT_NAME" => "/"
220
+ end
221
+
222
+ it "should have I18n.locale set to :en" do
223
+ assert_equal :en, I18n.locale
224
+ end
225
+
226
+ it "should set a cookie in the response" do
227
+ assert_equal "user-locale=en; path=/", last_response["Set-Cookie"]
228
+ end
229
+ end
230
+ end
231
+ end
232
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-user-locale
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Stuart Chinery
@@ -10,162 +9,161 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-09-13 00:00:00.000000000 Z
12
+ date: 2018-08-15 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
- name: rack
15
+ name: i18n
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - ">="
21
19
  - !ruby/object:Gem::Version
22
20
  version: '0'
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - ">="
29
26
  - !ruby/object:Gem::Version
30
27
  version: '0'
31
28
  - !ruby/object:Gem::Dependency
32
- name: i18n
29
+ name: rack
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ! '>='
32
+ - - ">="
37
33
  - !ruby/object:Gem::Version
38
34
  version: '0'
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ! '>='
39
+ - - ">="
45
40
  - !ruby/object:Gem::Version
46
41
  version: '0'
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: bundler
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - "~>"
53
47
  - !ruby/object:Gem::Version
54
- version: '0'
48
+ version: '1.16'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - "~>"
61
54
  - !ruby/object:Gem::Version
62
- version: '0'
55
+ version: '1.16'
63
56
  - !ruby/object:Gem::Dependency
64
- name: debugger
57
+ name: byebug
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ! '>='
60
+ - - ">="
69
61
  - !ruby/object:Gem::Version
70
62
  version: '0'
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ! '>='
67
+ - - ">="
77
68
  - !ruby/object:Gem::Version
78
69
  version: '0'
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: jeweler
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
- - - ! '>='
74
+ - - "~>"
85
75
  - !ruby/object:Gem::Version
86
- version: '0'
76
+ version: '2.3'
87
77
  type: :development
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
- - - ! '>='
81
+ - - "~>"
93
82
  - !ruby/object:Gem::Version
94
- version: '0'
83
+ version: '2.3'
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: minitest
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
- - - ! '>='
88
+ - - "~>"
101
89
  - !ruby/object:Gem::Version
102
- version: '0'
90
+ version: '5.0'
103
91
  type: :development
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
- - - ! '>='
95
+ - - "~>"
109
96
  - !ruby/object:Gem::Version
110
- version: '0'
97
+ version: '5.0'
111
98
  - !ruby/object:Gem::Dependency
112
- name: rack-test
99
+ name: minitest-fail-fast
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
- - - ! '>='
102
+ - - "~>"
117
103
  - !ruby/object:Gem::Version
118
- version: '0'
104
+ version: '0.1'
119
105
  type: :development
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
- - - ! '>='
109
+ - - "~>"
125
110
  - !ruby/object:Gem::Version
126
- version: '0'
111
+ version: '0.1'
127
112
  - !ruby/object:Gem::Dependency
128
- name: turn
113
+ name: minitest-reporters
129
114
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
115
  requirements:
132
- - - ! '>='
116
+ - - '='
133
117
  - !ruby/object:Gem::Version
134
- version: '0'
118
+ version: 1.3.0
135
119
  type: :development
136
120
  prerelease: false
137
121
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
122
  requirements:
140
- - - ! '>='
123
+ - - '='
141
124
  - !ruby/object:Gem::Version
142
- version: '0'
125
+ version: 1.3.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: rack-test
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '1.1'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '1.1'
143
140
  - !ruby/object:Gem::Dependency
144
141
  name: yard
145
142
  requirement: !ruby/object:Gem::Requirement
146
- none: false
147
143
  requirements:
148
- - - ! '>='
144
+ - - "~>"
149
145
  - !ruby/object:Gem::Version
150
- version: '0'
146
+ version: '0.9'
151
147
  type: :development
152
148
  prerelease: false
153
149
  version_requirements: !ruby/object:Gem::Requirement
154
- none: false
155
150
  requirements:
156
- - - ! '>='
151
+ - - "~>"
157
152
  - !ruby/object:Gem::Version
158
- version: '0'
153
+ version: '0.9'
159
154
  description: A Rack module for getting and setting a user's locale via a cookie or
160
155
  browser default language.
161
- email: stuart.chinery@headlondon.com
156
+ email: stuart.chinery@gmail.com
162
157
  executables: []
163
158
  extensions: []
164
159
  extra_rdoc_files:
165
160
  - LICENSE.txt
166
161
  - README.md
167
162
  files:
168
- - .document
163
+ - ".document"
164
+ - ".rubocop.yml"
165
+ - ".ruby-version"
166
+ - ".travis.yml"
169
167
  - Gemfile
170
168
  - Gemfile.lock
171
169
  - LICENSE.txt
@@ -174,34 +172,31 @@ files:
174
172
  - VERSION
175
173
  - lib/rack-user-locale.rb
176
174
  - rack-user-locale.gemspec
175
+ - test/basic_rack_app.rb
177
176
  - test/helper.rb
178
- - test/test_rack-user-locale.rb
177
+ - test/rack-user-locale_test.rb
179
178
  homepage: http://github.com/sleepingstu/rack-user-locale
180
179
  licenses:
181
180
  - MIT
181
+ metadata: {}
182
182
  post_install_message:
183
183
  rdoc_options: []
184
184
  require_paths:
185
185
  - lib
186
186
  required_ruby_version: !ruby/object:Gem::Requirement
187
- none: false
188
187
  requirements:
189
- - - ! '>='
188
+ - - ">="
190
189
  - !ruby/object:Gem::Version
191
190
  version: '0'
192
- segments:
193
- - 0
194
- hash: 1351284199224301544
195
191
  required_rubygems_version: !ruby/object:Gem::Requirement
196
- none: false
197
192
  requirements:
198
- - - ! '>='
193
+ - - ">="
199
194
  - !ruby/object:Gem::Version
200
195
  version: '0'
201
196
  requirements: []
202
197
  rubyforge_project:
203
- rubygems_version: 1.8.24
198
+ rubygems_version: 2.7.6
204
199
  signing_key:
205
- specification_version: 3
200
+ specification_version: 4
206
201
  summary: Rack module for getting and setting a user's locale
207
202
  test_files: []
@@ -1,220 +0,0 @@
1
- require "helper"
2
-
3
- describe "RackUserLocale" do
4
- describe "without accepted_locales set" do
5
- before do
6
- def app
7
- app = Rack::Builder.new {
8
- use Rack::UserLocale
9
-
10
- run BasicRackApp.new
11
- }
12
- end
13
-
14
- I18n.default_locale = :en
15
- end
16
-
17
- it "should have I18n.locale set to :en initially" do
18
- assert_equal :en, I18n.locale
19
- end
20
-
21
- describe "when a locale cookie is set" do
22
- before do
23
- get "http://example.com/", {}, "HTTP_COOKIE" => "user-locale=be"
24
- end
25
-
26
- it "should have I18n.locale set to :be" do
27
- assert_equal :be, I18n.locale
28
- end
29
-
30
- it "should not set a cookie in the response" do
31
- assert_equal nil, last_response["Set-Cookie"]
32
- end
33
- end
34
-
35
- describe "when from HTTP_ACCEPT_LANGUAGE headers" do
36
- describe "with a single locale" do
37
- before do
38
- get "http://example.com/", {}, { "HTTP_ACCEPT_LANGUAGE" => "fr-be", "SCRIPT_NAME" => "/" }
39
- end
40
-
41
- it "should have I18n.locale set to :fr" do
42
- assert_equal :fr, I18n.locale
43
- end
44
-
45
- it "should set a cookie in the response" do
46
- assert_equal "user-locale=fr; path=/", last_response["Set-Cookie"]
47
- end
48
- end
49
-
50
- describe "with an multiple locales" do
51
- before do
52
- get "http://example.com/", {}, {
53
- "HTTP_ACCEPT_LANGUAGE" => "de-DE;q=0.8,de;q=0.8,no-NO;q=1.0,no;q=0.7,ru-RU;q=0.7,sv-SE;q=0.4,sv;q=0.3,nl-BE;q=0.9",
54
- "SCRIPT_NAME" => "/" }
55
- end
56
-
57
- it "should have I18n.locale set to :no" do
58
- assert_equal :no, I18n.locale
59
- end
60
-
61
- it "should set a cookie in the response" do
62
- assert_equal "user-locale=no; path=/", last_response["Set-Cookie"]
63
- end
64
- end
65
- end
66
-
67
- describe "when both a cooke and HTTP_ACCEPT_LANGUAGE headers are set" do
68
- before do
69
- get "http://example.com/", {}, { "HTTP_COOKIE" => "user-locale=af",
70
- "HTTP_ACCEPT_LANGUAGE" => "ar-sa", "SCRIPT_NAME" => "/" }
71
- end
72
-
73
- it "should have I18n.locale set to :af" do
74
- assert_equal :af, I18n.locale
75
- end
76
-
77
- it "should not set a cookie in the response" do
78
- assert_equal nil, last_response["Set-Cookie"]
79
- end
80
- end
81
-
82
- describe "when nothing is changed" do
83
- before do
84
- get "http://example.com/", {}, { "SCRIPT_NAME" => "/" }
85
- end
86
-
87
- it "should have I18n.locale set to :en" do
88
- assert_equal :en, I18n.locale
89
- end
90
-
91
- it "should set a cookie in the response" do
92
- assert_equal "user-locale=en; path=/", last_response["Set-Cookie"]
93
- end
94
- end
95
- end
96
-
97
- describe "with accepted_locales set" do
98
- before do
99
- def app
100
- app = Rack::Builder.new {
101
- use Rack::UserLocale, :accepted_locales => [:en, :es, :fr, :de, :ja, :nl]
102
-
103
- run BasicRackApp.new
104
- }
105
- end
106
-
107
- I18n.default_locale = :en
108
- end
109
-
110
- it "should have I18n.locale set to :en initially" do
111
- assert_equal :en, I18n.locale
112
- end
113
-
114
- describe "when a locale cookie is set" do
115
- before do
116
- get "http://example.com/", {}, { "HTTP_COOKIE" => "user-locale=es", "SCRIPT_NAME" => "/" }
117
- end
118
-
119
- it "should have I18n.locale set to :es" do
120
- assert_equal :es, I18n.locale
121
- end
122
-
123
- it "should not set a cookie in the response" do
124
- assert_equal nil, last_response["Set-Cookie"]
125
- end
126
- end
127
-
128
- describe "when from HTTP_ACCEPT_LANGUAGE headers" do
129
- describe "with an accepted locale" do
130
- before do
131
- get "http://example.com/", {}, { "HTTP_ACCEPT_LANGUAGE" => "fr-be", "SCRIPT_NAME" => "/" }
132
- end
133
-
134
- it "should have I18n.locale set to :fr" do
135
- assert_equal :fr, I18n.locale
136
- end
137
-
138
- it "should set a cookie in the response" do
139
- assert_equal "user-locale=fr; path=/", last_response["Set-Cookie"]
140
- end
141
- end
142
-
143
- describe "with an multiple locales" do
144
- describe "at different weights" do
145
- before do
146
- get "http://example.com/", {}, {
147
- "HTTP_ACCEPT_LANGUAGE" => "de-DE;q=0.8,de;q=0.8,no-NO;q=0.7,no;q=0.7,ru-RU;q=0.7,sv-SE;q=0.4,sv;q=0.3,nl-BE;q=0.9",
148
- "SCRIPT_NAME" => "/" }
149
- end
150
-
151
- it "should have I18n.locale set to :nl" do
152
- assert_equal :nl, I18n.locale
153
- end
154
-
155
- it "should set a cookie in the response" do
156
- assert_equal "user-locale=nl; path=/", last_response["Set-Cookie"]
157
- end
158
- end
159
-
160
- describe "at the same weight" do
161
- before do
162
- get "http://example.com/", {}, {
163
- "HTTP_ACCEPT_LANGUAGE" => "fr,en,ja", "SCRIPT_NAME" => "/" }
164
- end
165
-
166
- it "should have I18n.locale set to :fr" do
167
- assert_equal :fr, I18n.locale
168
- end
169
-
170
- it "should set a cookie in the response" do
171
- assert_equal "user-locale=fr; path=/", last_response["Set-Cookie"]
172
- end
173
- end
174
- end
175
-
176
- describe "without an accepted locale" do
177
- before do
178
- get "http://example.com/", {}, { "HTTP_ACCEPT_LANGUAGE" => "ar-sa", "SCRIPT_NAME" => "/" }
179
- end
180
-
181
- it "should have I18n.locale set to :en" do
182
- assert_equal :en, I18n.locale
183
- end
184
-
185
- it "should set a cookie in the response" do
186
- assert_equal "user-locale=en; path=/", last_response["Set-Cookie"]
187
- end
188
- end
189
- end
190
-
191
- describe "when both a cooke and HTTP_ACCEPT_LANGUAGE headers are set" do
192
- before do
193
- get "http://example.com/", {}, { "HTTP_COOKIE" => "user-locale=ja",
194
- "HTTP_ACCEPT_LANGUAGE" => "fr-be", "SCRIPT_NAME" => "/" }
195
- end
196
-
197
- it "should have I18n.locale set to :ja" do
198
- assert_equal :ja, I18n.locale
199
- end
200
-
201
- it "should not set a cookie in the response" do
202
- assert_equal nil, last_response["Set-Cookie"]
203
- end
204
- end
205
-
206
- describe "when nothing is changed" do
207
- before do
208
- get "http://example.com/", {}, { "SCRIPT_NAME" => "/" }
209
- end
210
-
211
- it "should have I18n.locale set to :en" do
212
- assert_equal :en, I18n.locale
213
- end
214
-
215
- it "should set a cookie in the response" do
216
- assert_equal "user-locale=en; path=/", last_response["Set-Cookie"]
217
- end
218
- end
219
- end
220
- end