r18n-rails-api 3.2.0 → 4.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2aa895f7f002e9dcdff8ba5045941330e07e7ce1c9cdf7a48a16c2b4204a9007
4
- data.tar.gz: 669562fc19838c73730d102b440b032c058e48bd6570c124f371fcb3609d0ea8
3
+ metadata.gz: '099a10ed8e4a7e10242249f77a27092dae05fad11e08c3ce9753e9c78c5cbf1c'
4
+ data.tar.gz: d46f35406a6f561b1c86fbca7248b8faaa5978133fd8afd33ee6371775f2eab9
5
5
  SHA512:
6
- metadata.gz: 8729f0e5cc0f67756bad45f5d5b8ac9c338cd196df7f03b32a01671d7ad974c0e63ca60e3a5c10fc23960a312879d9af89747cd94fbd01afd00f0702a389f4f9
7
- data.tar.gz: 60f983d9fadfdd661f64e42c4a4ae68a8397e67e1d32c684a820781dbb2e2f9508e20fb63c000bfd374ffb9408bba5c4ffd23339628a3c65d20b769c2a79a7b4
6
+ metadata.gz: e203f84f913425ee61448023acad3bed063bc36b3844a588b61d75ce2c7ad0cb8882f00b939da0ac2ec0d077346ed8f36a888617a47693d39cd660fc5b782dc7
7
+ data.tar.gz: 6f9dcc914c984f762b11beadec8dc220435299f5fad7254bfe2be216dc7be5eef5b2ef071c351304d13c4beb7067eb6fbeed5ea03a0a51378972c015cb0da07b
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Rails I18n compatibility for R18n:
4
4
  * R18n loader for Rails I18n translation format;
5
- * R18n backend.
5
+ * R18n back-end.
6
6
 
7
7
  ## How To
8
8
 
@@ -30,9 +30,9 @@ i18n = R18n::I18n.new('en', R18n::Loader::Rails)
30
30
  i18n.posts(count: 5) #=> "5 posts"
31
31
  ```
32
32
 
33
- ### Backend
33
+ ### Back-end
34
34
 
35
- You can use R18n as a backend for Rails I18n:
35
+ You can use R18n as a back-end for Rails I18n:
36
36
 
37
37
  ```ruby
38
38
  require 'r18n-rails-api'
@@ -58,8 +58,8 @@ I18n.t :users, count: 5 #=> "5 users"
58
58
  ## License
59
59
 
60
60
  R18n is licensed under the GNU Lesser General Public License version 3.
61
- You can read it in LICENSE file or in http://www.gnu.org/licenses/lgpl.html.
61
+ You can read it in LICENSE file or in [www.gnu.org/licenses/lgpl-3.0.html](https://www.gnu.org/licenses/lgpl-3.0.html).
62
62
 
63
63
  ## Author
64
64
 
65
- Andrey “A.I.” Sitnik <andrey@sitnik.ru>
65
+ Andrey “A.I.” Sitnik [andrey@sitnik.ru](mailto:andrey@sitnik.ru)
@@ -31,9 +31,9 @@ module R18n
31
31
 
32
32
  RESERVED_KEYS = %i[scope default separator].freeze
33
33
 
34
- # Find translation in R18n. It didnt use +locale+ argument, only current
35
- # R18n I18n object. Also it doesnt support Proc and variables in +default+
36
- # String option.
34
+ # Find translation in R18n. It didn't use `locale` argument, only current
35
+ # R18n I18n object. Also it doesn't support `Proc` and variables in
36
+ # `default` String option.
37
37
  def translate(locale, key, options = {})
38
38
  return key.map { |k| translate(locale, k, options) } if key.is_a?(Array)
39
39
 
@@ -66,13 +66,13 @@ module R18n
66
66
  end
67
67
  end
68
68
 
69
- # Convert +object+ to String, according to the rules of the current
70
- # R18n locale. It didnt use +locale+ argument, only current R18n I18n
71
- # object. It support Integer, Float, Time, Date and DateTime.
69
+ # Convert `object` to `String`, according to the rules of the current
70
+ # R18n locale. It didn't use `locale` argument, only current R18n I18n
71
+ # object. It support `Integer`, `Float`, `Time`, `Date` and `DateTime`.
72
72
  #
73
- # Support Rails I18n (+:default+, +:short+, +:long+, +:long_ordinal+,
74
- # +:only_day+ and +:only_second+) and R18n (+:full+, +:human+, +:standard+
75
- # and +:month+) time formatters.
73
+ # Support Rails I18n (`:default`, `:short`, `:long`, `:long_ordinal`,
74
+ # `:only_day` and `:only_second`) and R18n (`:full`, `:human`, `:standard`
75
+ # and `:month`) time formatters.
76
76
  def localize(locale, object, format = :default, _options = {})
77
77
  i18n = get_i18n(locale)
78
78
  if format.is_a? Symbol
@@ -105,9 +105,7 @@ module R18n
105
105
  if result.is_a? TranslatedString
106
106
  result.to_s
107
107
  elsif result.is_a? UnpluralizetedTranslation
108
- Utils.hash_map(result.to_hash) do |key, value|
109
- [RailsPlural.from_r18n(key), value]
110
- end
108
+ result.to_hash.map { |k, v| [RailsPlural.from_r18n(k), v] }.to_h
111
109
  elsif result.is_a? Translation
112
110
  translation_to_hash(result)
113
111
  else
@@ -116,18 +114,15 @@ module R18n
116
114
  end
117
115
 
118
116
  def translation_to_hash(translation)
119
- Utils.hash_map(translation.to_hash) do |key, value|
120
- value =
121
- if value.is_a? Hash
122
- translation_to_hash(value)
123
- else
124
- format_value(value)
125
- end
126
- [key.to_sym, value]
127
- end
117
+ translation.to_hash.map do |key, value|
118
+ [
119
+ key.to_sym,
120
+ value.is_a?(Hash) ? translation_to_hash(value) : format_value(value)
121
+ ]
122
+ end.to_h
128
123
  end
129
124
 
130
- # Find translation by <tt>scope.key(params)</tt> in current R18n I18n
125
+ # Find translation by `scope.key(params)` in current R18n I18n
131
126
  # object.
132
127
  def lookup(locale, scope, key, separator, params)
133
128
  keys = (Array(scope) + Array(key))
@@ -51,7 +51,7 @@ module R18n
51
51
  end
52
52
  end
53
53
 
54
- # Pluralization by named variable <tt>%{count}</tt>.
54
+ # Pluralization by named variable `%{count}`.
55
55
  R18n::Filters.add('pl', :named_pluralization) do |content, config, param|
56
56
  if param.is_a?(Hash) && param.key?(:count)
57
57
  hash = content.to_hash
@@ -34,44 +34,45 @@ module R18n
34
34
  class Rails
35
35
  include ::R18n::YamlMethods
36
36
 
37
- # Create new loader for some +backend+ from Rails I18n. Backend must have
38
- # +reload!+, +init_translations+ and +translations+ methods.
37
+ # Create new loader for some `backend` from Rails I18n. Backend must have
38
+ # `reload!`, `init_translations` and `translations` methods.
39
39
  def initialize(backend = ::I18n::Backend::Simple.new)
40
40
  @backend = backend
41
41
  detect_yaml_private_type
42
42
  end
43
43
 
44
- # Array of locales, which has translations in +I18n.load_path+.
44
+ # `Array` of locales, which has translations in `I18n.load_path`.
45
45
  def available
46
46
  reload!
47
47
  @translations.keys.map { |code| R18n.locale(code) }
48
48
  end
49
49
 
50
- # Return Hash with translations for +locale+.
50
+ # Return `Hash` with translations for `locale`.
51
51
  def load(locale)
52
52
  initialize_types
53
53
  reload!
54
54
  @translations[locale.code]
55
55
  end
56
56
 
57
- # Reload backend if <tt>I18n.load_path</tt> is changed.
57
+ # Reload backend if `I18n.load_path` is changed.
58
58
  def reload!
59
59
  return if defined?(@last_path) && @last_path == ::I18n.load_path
60
+
60
61
  @last_path = ::I18n.load_path.clone
61
62
  @backend.reload!
62
63
  @backend.send(:init_translations)
63
64
  @translations =
64
- Utils.hash_map(@backend.send(:translations)) do |locale, values|
65
+ @backend.send(:translations).map do |locale, values|
65
66
  [R18n::Locale.sanitize_code(locale), transform(values)]
66
- end
67
+ end.to_h
67
68
  end
68
69
 
69
- # Return hash for object and <tt>I18n.load_path</tt>.
70
+ # Return hash for object and `I18n.load_path`.
70
71
  def hash
71
72
  ::I18n.load_path.hash
72
73
  end
73
74
 
74
- # Is another +loader+ is also load Rails translations.
75
+ # Is another `loader` is also load Rails translations.
75
76
  def ==(other)
76
77
  self.class == other.class
77
78
  end
@@ -83,15 +84,13 @@ module R18n
83
84
  if value.is_a? Hash
84
85
  if value.empty?
85
86
  value
86
- elsif value.keys.inject(true) { |a, i| a && RailsPlural.is_rails?(i) }
87
+ elsif value.keys.inject(true) { |a, i| a && RailsPlural.rails?(i) }
87
88
  Typed.new(
88
89
  'pl',
89
- R18n::Utils.hash_map(value) do |k, v|
90
- [RailsPlural.to_r18n(k), transform(v)]
91
- end
90
+ value.map { |k, v| [RailsPlural.to_r18n(k), transform(v)] }.to_h
92
91
  )
93
92
  else
94
- Utils.hash_map(value) { |k, v| [k.to_s, transform(v)] }
93
+ value.map { |k, v| [k.to_s, transform(v)] }.to_h
95
94
  end
96
95
  elsif defined?(@private_type_class) && value.is_a?(@private_type_class)
97
96
  Typed.new(value.type_id, value.value)
@@ -20,19 +20,19 @@
20
20
  module R18n
21
21
  # Converter between R18n and Rails I18n plural keys.
22
22
  class RailsPlural
23
- # Check, that +key+ is Rails plural key.
24
- def self.is_rails?(k)
25
- %i[zero one few many other].include? k
23
+ # Check, that `key` is Rails plural key.
24
+ def self.rails?(key)
25
+ %i[zero one few many other].include? key
26
26
  end
27
27
 
28
28
  # Convert Rails I18n plural key to R18n.
29
- def self.to_r18n(k)
30
- { zero: 0, one: 1, few: 2, many: 'n', other: 'n' }[k]
29
+ def self.to_r18n(key)
30
+ { zero: 0, one: 1, few: 2, many: 'n', other: 'n' }[key]
31
31
  end
32
32
 
33
33
  # Convert R18n plural key to Rails I18n.
34
- def self.from_r18n(k)
35
- { 0 => :zero, 1 => :one, 2 => :few, 'n' => :other }[k]
34
+ def self.from_r18n(key)
35
+ { 0 => :zero, 1 => :one, 2 => :few, 'n' => :other }[key]
36
36
  end
37
37
  end
38
38
  end
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
 
26
26
  s.author = 'Andrey Sitnik'
27
27
  s.email = 'andrey@sitnik.ru'
28
- s.homepage = 'https://github.com/ai/r18n/tree/master/r18n-rails-api'
28
+ s.homepage = 'https://github.com/r18n/r18n/tree/master/r18n-rails-api'
29
29
  s.license = 'LGPL-3.0'
30
30
 
31
31
  s.add_dependency 'i18n', '~> 1'
@@ -55,17 +55,14 @@ describe R18n::Backend do
55
55
  end
56
56
 
57
57
  it 'raises error on no translation' do
58
- expect(lambda {
59
- I18n.backend.translate(:en, :missed)
60
- }).to raise_error(::I18n::MissingTranslationData)
58
+ expect { I18n.backend.translate(:en, :missed) }
59
+ .to raise_error(::I18n::MissingTranslationData)
61
60
 
62
- expect(lambda {
63
- I18n.t(:missed)
64
- }).to raise_error(::I18n::MissingTranslationData)
61
+ expect { I18n.t(:missed) }.to raise_error(::I18n::MissingTranslationData)
65
62
  end
66
63
 
67
64
  it 'reloads translations' do
68
- expect(-> { I18n.t(:other) }).to raise_error(::I18n::MissingTranslationData)
65
+ expect { I18n.t(:other) }.to raise_error(::I18n::MissingTranslationData)
69
66
  I18n.load_path << OTHER
70
67
  I18n.reload!
71
68
  expect(I18n.t(:other)).to eq 'Other'
@@ -76,18 +73,19 @@ describe R18n::Backend do
76
73
  expect(I18n.t('in.another').class).to eq Hash
77
74
  end
78
75
 
76
+ ## https://github.com/rubocop-hq/rubocop/issues/7436#issuecomment-578766498
77
+ # rubocop:disable Style/FormatStringToken
79
78
  it 'returns correct unpluralized hash' do
80
79
  expect(I18n.t('users')).to eq(one: '1 user', other: '%{count} users')
81
80
  end
81
+ # rubocop:enable Style/FormatStringToken
82
82
 
83
83
  it 'corrects detect untranslated, whem path is deeper than string' do
84
- expect(lambda {
85
- I18n.t('in.another.level.deeper')
86
- }).to raise_error(::I18n::MissingTranslationData)
84
+ expect { I18n.t('in.another.level.deeper') }
85
+ .to raise_error(::I18n::MissingTranslationData)
87
86
 
88
- expect(lambda {
89
- I18n.t('in.another.level.go.deeper')
90
- }).to raise_error(::I18n::MissingTranslationData)
87
+ expect { I18n.t('in.another.level.go.deeper') }
88
+ .to raise_error(::I18n::MissingTranslationData)
91
89
  end
92
90
 
93
91
  it "doesn't call String methods" do
@@ -95,9 +93,8 @@ describe R18n::Backend do
95
93
  end
96
94
 
97
95
  it "doesn't call object methods" do
98
- expect(lambda {
99
- I18n.t('in.another.level.to_sym')
100
- }).to raise_error(::I18n::MissingTranslationData)
96
+ expect { I18n.t('in.another.level.to_sym') }
97
+ .to raise_error(::I18n::MissingTranslationData)
101
98
  end
102
99
 
103
100
  it 'works deeper pluralization' do
@@ -8,6 +8,7 @@ describe 'Rails filters' do
8
8
  expect(i18n.echo(value: 'Old')).to eq 'Value is Old'
9
9
  end
10
10
 
11
+ # rubocop:disable Style/FormatStringToken
11
12
  it 'pluralizes by variable %{count}' do
12
13
  i18n = R18n::Translation.new(
13
14
  EN, '', locale: EN, translations: {
@@ -24,4 +25,5 @@ describe 'Rails filters' do
24
25
  expect(i18n.users(count: 1)).to eq '1 user'
25
26
  expect(i18n.users(count: 5)).to eq '5 users'
26
27
  end
28
+ # rubocop:enable Style/FormatStringToken
27
29
  end
@@ -22,9 +22,9 @@ describe R18n::Loader::Rails do
22
22
  expect(@loader.load(EN)).to eq(
23
23
  'users' => R18n::Typed.new(
24
24
  'pl',
25
- 0 => 'Zero',
26
- 1 => 'One',
27
- 2 => 'Few',
25
+ 0 => 'Zero',
26
+ 1 => 'One',
27
+ 2 => 'Few',
28
28
  'n' => 'Other'
29
29
  )
30
30
  )
@@ -35,9 +35,9 @@ describe R18n::Loader::Rails do
35
35
  expect(@loader.load(RU)).to eq(
36
36
  'users' => R18n::Typed.new(
37
37
  'pl',
38
- 0 => 'Ноль',
39
- 1 => 'Один',
40
- 2 => 'Несколько',
38
+ 0 => 'Ноль',
39
+ 1 => 'Один',
40
+ 2 => 'Несколько',
41
41
  'n' => 'Много'
42
42
  )
43
43
  )
@@ -46,8 +46,8 @@ describe R18n::Loader::Rails do
46
46
  it 'reloads translations on load_path changes' do
47
47
  I18n.load_path << OTHER
48
48
  expect(@loader.load(RU)).to eq(
49
- 'one' => 'Один',
50
- 'two' => 'Два',
49
+ 'one' => 'Один',
50
+ 'two' => 'Два',
51
51
  'three' => 'Три'
52
52
  )
53
53
  end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- ## https://github.com/stevekinney/pizza/issues/103#issuecomment-136052789
4
- ## https://github.com/docker-library/ruby/issues/45
5
- Encoding.default_external = 'UTF-8'
6
-
7
3
  require 'pp'
8
4
  require 'i18n'
9
5
  require 'active_support'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r18n-rails-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Sitnik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-08 00:00:00.000000000 Z
11
+ date: 2020-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 3.2.0
33
+ version: 4.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 3.2.0
40
+ version: 4.0.0
41
41
  description: |2
42
42
  R18n backend for Rails I18n and R18n filters and loader to support Rails
43
43
  translation format.
@@ -75,7 +75,7 @@ files:
75
75
  - spec/filters_spec.rb
76
76
  - spec/loader_spec.rb
77
77
  - spec/spec_helper.rb
78
- homepage: https://github.com/ai/r18n/tree/master/r18n-rails-api
78
+ homepage: https://github.com/r18n/r18n/tree/master/r18n-rails-api
79
79
  licenses:
80
80
  - LGPL-3.0
81
81
  metadata: {}
@@ -94,8 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  requirements: []
97
- rubyforge_project:
98
- rubygems_version: 2.7.6
97
+ rubygems_version: 3.1.2
99
98
  signing_key:
100
99
  specification_version: 4
101
100
  summary: Rails I18n compatibility for R18n