i18n-tasks 0.8.6 → 0.8.7

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
  SHA1:
3
- metadata.gz: a70e643cadbeb135db42081bdf2b9ea9ed7d5163
4
- data.tar.gz: 99b5ba4d17e4d93b646895172faa2a74d982d006
3
+ metadata.gz: 0b7283fc75cd948d4e33223d13c310da41c71249
4
+ data.tar.gz: a0cbd7255e3306869faec54d994c26659e9c2334
5
5
  SHA512:
6
- metadata.gz: 15800850eefad7aea706c8275ac804976bff7047d84d13c1ee3a1b33b53e91215ac55515e5c74b7d93b02dd9bb764ce34a4076f88668899620dad141e87a8a65
7
- data.tar.gz: 55820e43acb2cc6e033fee27cc0abc19cfe945c1334ba18aed67c5b03c27a96adba8ca0b6dc89c79ee4e1b5f2da36367a7c0b2914604c6de494a41302dad5633
6
+ metadata.gz: 50b79a50af3669c354a7c7ebc8acbf6ae6587bb344048b92d89656ab1474b241121ae9794637399ca4a47ec4abe9d383a0b25681aa6c0e26c43e18743c004295
7
+ data.tar.gz: ec135b8e1b5638443228fe9d0ec4144876b6e3c8e9fc85cffea9b7c38c1cf6e4d8f79d00c8d9cb2ad2123cfb30a3909bf6ddb6bce186c94f1112e341f043c0bc
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.8.7
2
+
3
+ * New interpolation value for `add-missing -v`: `%{key}`. [Stijn Mathysen](https://github.com/stijnster) [#164](https://github.com/glebm/i18n-tasks/pull/164)
4
+ * When adding keys from non-default locales, merge base locale first, then the others. [#162](https://github.com/glebm/i18n-tasks/issues/162)
5
+
1
6
  ## 0.8.6
2
7
 
3
8
  * Report missing keys found in source in all the locales. [#162](https://github.com/glebm/i18n-tasks/issues/162)
data/README.md CHANGED
@@ -24,7 +24,7 @@ i18n-tasks can be used with any project using the ruby [i18n gem][i18n-gem] (def
24
24
  Add i18n-tasks to the Gemfile:
25
25
 
26
26
  ```ruby
27
- gem 'i18n-tasks', '~> 0.8.6'
27
+ gem 'i18n-tasks', '~> 0.8.7'
28
28
  ```
29
29
 
30
30
  Copy the default [configuration file](#configuration):
@@ -72,7 +72,7 @@ $ i18n-tasks add-missing --help
72
72
  Usage: i18n-tasks add-missing [options] [locale ...]
73
73
  -l, --locales Comma-separated list of locale(s) to process. Default: all. Special: base.
74
74
  -f, --format Output format: terminal-table, yaml, json, keys, inspect. Default: terminal-table.
75
- -v, --value Value. Interpolates: %{value}, %{human_key}, %{value_or_human_key}. Default: %{value_or_human_key}.
75
+ -v, --value Value. Interpolates: %{value}, %{human_key}, %{value_or_human_key}, %{key}. Default: %{value_or_human_key}.
76
76
  -h, --help Display this help message.
77
77
  ```
78
78
 
@@ -124,18 +124,21 @@ $ i18n-tasks normalize -p
124
124
 
125
125
  ### Compose tasks
126
126
 
127
- `i18n-tasks` also provides composable tasks for reading, writing and manipulating locale data.
128
-
129
- For example, `add-missing` implemented with `missing`, `tree-set-value` and `data-merge`:
127
+ `i18n-tasks` also provides composable tasks for reading, writing and manipulating locale data. Examples below.
130
128
 
129
+ `add-missing` implemented with `missing`, `tree-set-value` and `data-merge`:
131
130
  ```console
132
- $ i18n-tasks missing -fyaml fr | i18n-tasks tree-set-value 'TRME %{value}' | i18n-tasks data-merge
131
+ $ i18n-tasks missing -f yaml fr | i18n-tasks tree-set-value 'TRME %{value}' | i18n-tasks data-merge
133
132
  ```
134
133
 
135
- Another example, `remove-unused` implemented with `unused` and `data-remove`:
134
+ `remove-unused` implemented with `unused` and `data-remove` (sans the confirmation):
135
+ ```console
136
+ $ i18n-tasks unused -f yaml | i18n-tasks data-remove
137
+ ```
136
138
 
137
- ```bash
138
- $ i18n-tasks unused -fyaml | i18n-tasks data-remove
139
+ Remove all keys in `fr` but not `en` from `fr`:
140
+ ```console
141
+ $ i18n-tasks missing -t diff -f yaml en | i18n-tasks tree-rename-key en fr | i18n-tasks data-remove
139
142
  ```
140
143
 
141
144
  See the full list of tasks with `i18n-tasks --help`.
File without changes
File without changes
@@ -22,7 +22,7 @@ en:
22
22
  out_format: 'Output format: %{valid_text}'
23
23
  pattern_router: 'Use pattern router: keys moved per config data.write'
24
24
  strict: Do not infer dynamic key usage such as `t("category.\#{category.name}")`
25
- value: 'Value. Interpolates: %{value}, %{human_key}, %{value_or_human_key}'
25
+ value: 'Value. Interpolates: %{value}, %{human_key}, %{value_or_human_key}, %{key}'
26
26
  desc:
27
27
  add_missing: add missing keys to locale data
28
28
  config: display i18n-tasks configuration
@@ -21,7 +21,7 @@ ru:
21
21
  out_format: "Формат вывода: %{valid_text}. %{default_text}."
22
22
  pattern_router: "Использовать pattern_router: ключи распределятся по файлам согласно data.write"
23
23
  strict: Не угадывать динамические использования ключей, например `t("category.#{category.key}")`
24
- value: "Значение, интерполируется с %{value}, %{human_key}, %{value_or_human_key}"
24
+ value: "Значение, интерполируется с %{value}, %{human_key}, %{value_or_human_key}, %{key}"
25
25
  desc:
26
26
  add_missing: "добавить недостающие ключи к переводам"
27
27
  config: "показать конфигурацию"
@@ -34,11 +34,11 @@ TEXT
34
34
  s.require_paths = ['lib']
35
35
 
36
36
  s.add_dependency 'erubis'
37
- s.add_dependency 'activesupport'
37
+ s.add_dependency 'activesupport', '>= 2.3.18'
38
38
  s.add_dependency 'easy_translate', '>= 0.5.0'
39
- s.add_dependency 'term-ansicolor'
39
+ s.add_dependency 'term-ansicolor', '>= 1.3.2'
40
40
  s.add_dependency 'terminal-table', '>= 1.5.1'
41
- s.add_dependency 'highline'
41
+ s.add_dependency 'highline', '>= 1.7.3'
42
42
  s.add_dependency 'i18n'
43
43
  s.add_development_dependency 'axlsx', '~> 2.0'
44
44
  s.add_development_dependency 'bundler', '~> 1.3'
@@ -47,10 +47,22 @@ module I18n::Tasks
47
47
  args: [:locales, :out_format, arg(:value) + [{default: '%{value_or_human_key}'}]]
48
48
 
49
49
  def add_missing(opt = {})
50
- forest = i18n.missing_keys(opt).set_each_value!(opt[:value])
50
+ added = i18n.empty_forest
51
+ locales = (opt[:locales] || i18n.locales)
52
+ if locales[0] == i18n.base_locale
53
+ # Merge base locale first, as this may affect the value for the other locales
54
+ forest = i18n.missing_keys({locales: [locales[0]]}.update(opt.slice(:types, :base_locale))).
55
+ set_each_value!(opt[:value])
56
+ i18n.data.merge! forest
57
+ added.merge! forest
58
+ locales = locales[1..-1]
59
+ end
60
+ forest = i18n.missing_keys({locales: locales}.update(opt.slice(:types, :base_locale))).
61
+ set_each_value!(opt[:value])
51
62
  i18n.data.merge! forest
52
- log_stderr t('i18n_tasks.add_missing.added', count: forest.leaves.count)
53
- print_forest forest, opt
63
+ added.merge! forest
64
+ log_stderr t('i18n_tasks.add_missing.added', count: added.leaves.count)
65
+ print_forest added, opt
54
66
  end
55
67
  end
56
68
  end
@@ -36,11 +36,18 @@ module I18n::Tasks
36
36
  if vals == %w(all) || vals.blank?
37
37
  context.locales
38
38
  else
39
- vals.map { |v| v == 'base' ? context.base_locale : v }
39
+ move_base_locale_to_front! vals.map { |v| v == 'base' ? context.base_locale : v }, context.base_locale
40
40
  end.tap do |locales|
41
41
  locales.each { |locale| validate! locale }
42
42
  end
43
43
  end
44
+
45
+ def move_base_locale_to_front!(locales, base_locale)
46
+ if (pos = locales.index(base_locale)) && pos > 0
47
+ locales[pos], locales[0] = locales[0], locales[pos]
48
+ end
49
+ locales
50
+ end
44
51
  end
45
52
  end
46
53
  end
@@ -147,10 +147,12 @@ module I18n::Tasks
147
147
  value_proc ||= proc { |node|
148
148
  node_value = node.value
149
149
  human_key = ActiveSupport::Inflector.humanize(node.key.to_s)
150
+ full_key = node.full_key
150
151
  StringInterpolation.interpolate_soft(
151
152
  val_pattern,
152
153
  value: node_value,
153
154
  human_key: human_key,
155
+ key: full_key,
154
156
  value_or_human_key: node_value.presence || human_key
155
157
  )
156
158
  }
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
  module I18n
3
3
  module Tasks
4
- VERSION = '0.8.6'
4
+ VERSION = '0.8.7'
5
5
  end
6
6
  end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Data commands' do
4
+ delegate :run_cmd, to: :TestCodebase
5
+
6
+ describe '#add_missing' do
7
+ describe 'adds the missing keys to base locale first, then to other locales' do
8
+ around do |ex|
9
+ TestCodebase.setup(
10
+ 'config/i18n-tasks.yml' => {base_locale: 'en', locales: %w(es fr)}.to_yaml,
11
+ 'config/locales/es.yml' => {'es' => {'a' => 'A'}}.to_yaml)
12
+ TestCodebase.in_test_app_dir { ex.call }
13
+ TestCodebase.teardown
14
+ end
15
+
16
+ it 'with -v argument' do
17
+ run_cmd 'add-missing', '-vTRME'
18
+ expect(YAML.load_file('config/locales/en.yml')).to eq('en' => {'a' => 'TRME'})
19
+ expect(YAML.load_file('config/locales/fr.yml')).to eq('fr' => {'a' => 'TRME'})
20
+ end
21
+ end
22
+ end
23
+ end
@@ -211,6 +211,17 @@ RSpec.describe 'i18n-tasks' do
211
211
  expect(YAML.load_file('config/locales/en.yml')['en']['present_in_es_but_not_en']['a']).to eq 'TRME ES_TEXT'
212
212
  }
213
213
  end
214
+
215
+ it '--value with %{key}' do
216
+ in_test_app_dir {
217
+ expect(YAML.load_file('config/locales/es.yml')['es']['missing_in_es']).to be_nil
218
+ }
219
+ run_cmd 'add-missing', '-v', 'TRME %{key}'
220
+ in_test_app_dir {
221
+ expect(YAML.load_file('config/locales/es.yml')['es']['missing_in_es']['a']).to eq 'TRME es.missing_in_es.a'
222
+ expect(YAML.load_file('config/locales/en.yml')['en']['present_in_es_but_not_en']['a']).to eq 'TRME en.present_in_es_but_not_en.a'
223
+ }
224
+ end
214
225
  end
215
226
 
216
227
  describe 'config' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.8.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-02 00:00:00.000000000 Z
11
+ date: 2015-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: erubis
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 2.3.18
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: '0'
40
+ version: 2.3.18
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: easy_translate
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 1.3.2
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 1.3.2
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: terminal-table
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 1.7.3
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 1.7.3
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: i18n
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -264,6 +264,7 @@ files:
264
264
  - lib/i18n/tasks/used_keys.rb
265
265
  - lib/i18n/tasks/version.rb
266
266
  - spec/commands/data_commands_spec.rb
267
+ - spec/commands/missing_commands_spec.rb
267
268
  - spec/commands/tree_commands_spec.rb
268
269
  - spec/conservative_router_spec.rb
269
270
  - spec/file_system_data_spec.rb
@@ -320,12 +321,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
320
321
  version: '0'
321
322
  requirements: []
322
323
  rubyforge_project:
323
- rubygems_version: 2.4.8
324
+ rubygems_version: 2.4.5
324
325
  signing_key:
325
326
  specification_version: 4
326
327
  summary: Manage localization and translation with the awesome power of static analysis
327
328
  test_files:
328
329
  - spec/commands/data_commands_spec.rb
330
+ - spec/commands/missing_commands_spec.rb
329
331
  - spec/commands/tree_commands_spec.rb
330
332
  - spec/conservative_router_spec.rb
331
333
  - spec/file_system_data_spec.rb
@@ -355,3 +357,4 @@ test_files:
355
357
  - spec/support/test_codebase.rb
356
358
  - spec/support/trees.rb
357
359
  - spec/used_keys_spec.rb
360
+ has_rdoc: