accept_language 2.0.2 → 2.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25f4296b38885118c1d127873d887a138bbfb6615ec0dc3d2db826e14e96e7d7
4
- data.tar.gz: 9f2fac2c3818c94c5b7c7bc6d95655e3fefcb54c5ec5a3ba4ef28d05213fa00f
3
+ metadata.gz: a5c9dad0529da52e9c0fa650e2825c788a673ecf57c7158a9e160797079607c9
4
+ data.tar.gz: b9e7430c21121d7fb111cf6159f27bb8690e6728dbf8e8ecdd410ce9bbae4a58
5
5
  SHA512:
6
- metadata.gz: b138c701a374afec0e26b9560570b3f48490a1da1e79f42daa768aa03f038f969f4670e4af57a97c109192410df0b8c66bc39bcc33f7362cc7440be6d243b0e6
7
- data.tar.gz: 4a149d54102620ef411b1c1966f159840e3dec65cf5a2e33e5e045154e1234ee759be0b6ddda4cc8577f778a62e753f96642e49c5fc99e22760e6335a9bfb7aa
6
+ metadata.gz: 2dc2b91a4809e88dadef537c951a00bec5adda83a6f80e9717a7ca4651352c606c94dc00a4b5a439668555c6942a92e5de26c985b8c11dc433aed7dde414d710
7
+ data.tar.gz: 1178cd443cd3c731a90347a9ad2b97cfe9f57084b234c98c1570d2ee8546e59112f0415e992e92bb342301bc3bd2861ac53739eefa55fc3967c64f0e7b086f09
data/README.md CHANGED
@@ -29,7 +29,7 @@ gem "accept_language"
29
29
  And then execute:
30
30
 
31
31
  ```sh
32
- bundle
32
+ bundle install
33
33
  ```
34
34
 
35
35
  Or install it yourself as:
@@ -90,6 +90,11 @@ class ApplicationController < ActionController::Base
90
90
  end
91
91
  ```
92
92
 
93
+ ## Read more
94
+
95
+ * [Language negotiation with Ruby](https://dev.to/cyri_/language-negotiation-with-ruby-5166)
96
+ * [Rubyで、言語交渉](https://qiita.com/cyril/items/45dc233edb7be9d614e7)
97
+
93
98
  ## Versioning
94
99
 
95
100
  __AcceptLanguage__ uses [Semantic Versioning 2.0.0](https://semver.org/)
@@ -8,17 +8,19 @@ module AcceptLanguage
8
8
  # Matcher.new("da" => 1.0, "en-GB" => 0.8, "en" => 0.7).call(:ug, :kk, :ru, :en) # => :en
9
9
  # Matcher.new("da" => 1.0, "en-GB" => 0.8, "en" => 0.7).call(:fr, :en, :"en-GB") # => :"en-GB"
10
10
  class Matcher
11
+ WILDCARD = "*"
12
+
11
13
  attr_reader :excluded_langtags, :preferred_langtags
12
14
 
13
15
  # @param [Hash<String, BigDecimal>] languages_range A list of accepted
14
16
  # languages with their respective qualities.
15
17
  def initialize(**languages_range)
16
- @excluded_langtags = Set[]
18
+ @excluded_langtags = ::Set[]
17
19
  langtags = []
18
20
 
19
21
  languages_range.select do |langtag, quality|
20
22
  if quality.zero?
21
- @excluded_langtags << langtag unless langtag.eql?("*")
23
+ @excluded_langtags << langtag unless wildcard?(langtag)
22
24
  else
23
25
  level = (quality * 1_000).to_i
24
26
  langtags[level] = langtag
@@ -37,7 +39,7 @@ module AcceptLanguage
37
39
  available_langtags = drop_unacceptable(*available_langtags)
38
40
 
39
41
  preferred_langtags.each do |preferred_tag|
40
- if preferred_tag.eql?("*")
42
+ if wildcard?(preferred_tag)
41
43
  langtag = any_other_langtag(*available_langtags)
42
44
  return langtag unless langtag.nil?
43
45
  else
@@ -54,7 +56,7 @@ module AcceptLanguage
54
56
 
55
57
  def any_other_langtag(*available_langtags)
56
58
  available_langtags.find do |available_langtag|
57
- langtags = preferred_langtags - ["*"]
59
+ langtags = preferred_langtags - [WILDCARD]
58
60
 
59
61
  langtags.none? do |langtag|
60
62
  available_langtag.match?(/\A#{langtag}/i)
@@ -63,10 +65,10 @@ module AcceptLanguage
63
65
  end
64
66
 
65
67
  def drop_unacceptable(*available_langtags)
66
- available_langtags.inject(Set[]) do |langtags, available_langtag|
68
+ available_langtags.inject(::Set[]) do |langtags, available_langtag|
67
69
  next langtags if unacceptable?(available_langtag)
68
70
 
69
- langtags + Set[available_langtag]
71
+ langtags + ::Set[available_langtag]
70
72
  end
71
73
  end
72
74
 
@@ -75,6 +77,10 @@ module AcceptLanguage
75
77
  langtag.match?(/\A#{excluded_langtag}/i)
76
78
  end
77
79
  end
80
+
81
+ def wildcard?(value)
82
+ value.eql?(WILDCARD)
83
+ end
78
84
  end
79
85
  end
80
86
 
@@ -1,11 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bigdecimal"
4
+
3
5
  module AcceptLanguage
4
6
  # @note Parser for Accept-Language header fields.
5
7
  # @example
6
8
  # Parser.new("da, en-GB;q=0.8, en;q=0.7") # => #<AcceptLanguage::Parser:0x00007 @languages_range={"da"=>0.1e1, "en-GB"=>0.8e0, "en"=>0.7e0}>
7
9
  # @see https://tools.ietf.org/html/rfc2616#section-14.4
8
10
  class Parser
11
+ DEFAULT_QUALITY = BigDecimal("1")
12
+ SEPARATOR = ","
13
+ SPACE = " "
14
+ SUFFIX = ";q="
15
+
9
16
  attr_reader :languages_range
10
17
 
11
18
  # @param [String] field The Accept-Language header field to parse.
@@ -30,16 +37,15 @@ module AcceptLanguage
30
37
  # @return [Hash<String, BigDecimal>] A list of accepted languages with their
31
38
  # respective qualities.
32
39
  def import(field)
33
- field.delete(" ").split(",").inject({}) do |hash, lang|
34
- tag, quality = lang.split(/;q=/i)
40
+ field.delete(SPACE).split(SEPARATOR).inject({}) do |hash, lang|
41
+ tag, quality = lang.split(SUFFIX)
35
42
  next hash if tag.nil?
36
43
 
37
- quality = quality.nil? ? BigDecimal("1") : BigDecimal(quality)
44
+ quality = quality.nil? ? DEFAULT_QUALITY : BigDecimal(quality)
38
45
  hash.merge(tag => quality)
39
46
  end
40
47
  end
41
48
  end
42
49
  end
43
50
 
44
- require "bigdecimal"
45
51
  require_relative "matcher"
@@ -14,4 +14,4 @@ module AcceptLanguage
14
14
  end
15
15
  end
16
16
 
17
- require_relative "accept_language/parser"
17
+ require_relative File.join("accept_language", "parser")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: accept_language
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-08 00:00:00.000000000 Z
11
+ date: 2022-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -175,7 +175,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
175
175
  requirements:
176
176
  - - ">="
177
177
  - !ruby/object:Gem::Version
178
- version: 2.7.5
178
+ version: 2.7.6
179
179
  required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  requirements:
181
181
  - - ">="