i18n-tasks 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/Gemfile +2 -1
  4. data/README.md +80 -78
  5. data/bin/i18n-tasks +24 -30
  6. data/config/i18n-tasks.yml +87 -0
  7. data/config/locales/en.yml +95 -0
  8. data/i18n-tasks.gemspec +1 -0
  9. data/lib/i18n/tasks.rb +10 -0
  10. data/lib/i18n/tasks/base_task.rb +6 -2
  11. data/lib/i18n/tasks/command/collection.rb +18 -0
  12. data/lib/i18n/tasks/command/commander.rb +72 -0
  13. data/lib/i18n/tasks/command/commands/data.rb +73 -0
  14. data/lib/i18n/tasks/command/commands/eq_base.rb +20 -0
  15. data/lib/i18n/tasks/command/commands/health.rb +26 -0
  16. data/lib/i18n/tasks/command/commands/meta.rb +35 -0
  17. data/lib/i18n/tasks/command/commands/missing.rb +73 -0
  18. data/lib/i18n/tasks/command/commands/tree.rb +92 -0
  19. data/lib/i18n/tasks/command/commands/usages.rb +70 -0
  20. data/lib/i18n/tasks/command/commands/xlsx.rb +27 -0
  21. data/lib/i18n/tasks/command/dsl.rb +27 -0
  22. data/lib/i18n/tasks/command/dsl/cmd.rb +19 -0
  23. data/lib/i18n/tasks/command/dsl/cmd_opt.rb +19 -0
  24. data/lib/i18n/tasks/command/dsl/enum_opt.rb +26 -0
  25. data/lib/i18n/tasks/command/options/common.rb +48 -0
  26. data/lib/i18n/tasks/command/options/enum_opt.rb +44 -0
  27. data/lib/i18n/tasks/command/options/list_opt.rb +11 -0
  28. data/lib/i18n/tasks/command/options/locales.rb +47 -0
  29. data/lib/i18n/tasks/command/options/trees.rb +101 -0
  30. data/lib/i18n/tasks/command_error.rb +3 -0
  31. data/lib/i18n/tasks/commands.rb +22 -169
  32. data/lib/i18n/tasks/configuration.rb +1 -16
  33. data/lib/i18n/tasks/console_context.rb +1 -1
  34. data/lib/i18n/tasks/data.rb +13 -8
  35. data/lib/i18n/tasks/data/file_formats.rb +29 -18
  36. data/lib/i18n/tasks/data/file_system_base.rb +35 -4
  37. data/lib/i18n/tasks/data/router/conservative_router.rb +18 -11
  38. data/lib/i18n/tasks/data/tree/node.rb +5 -15
  39. data/lib/i18n/tasks/data/tree/nodes.rb +0 -3
  40. data/lib/i18n/tasks/data/tree/siblings.rb +32 -2
  41. data/lib/i18n/tasks/data/tree/traversal.rb +117 -96
  42. data/lib/i18n/tasks/google_translation.rb +25 -25
  43. data/lib/i18n/tasks/html_keys.rb +10 -0
  44. data/lib/i18n/tasks/key_pattern_matching.rb +1 -0
  45. data/lib/i18n/tasks/locale_list.rb +19 -0
  46. data/lib/i18n/tasks/missing_keys.rb +32 -33
  47. data/lib/i18n/tasks/plural_keys.rb +1 -1
  48. data/lib/i18n/tasks/reports/base.rb +4 -9
  49. data/lib/i18n/tasks/reports/spreadsheet.rb +5 -5
  50. data/lib/i18n/tasks/reports/terminal.rb +62 -38
  51. data/lib/i18n/tasks/scanners/base_scanner.rb +5 -4
  52. data/lib/i18n/tasks/slop_command.rb +27 -0
  53. data/lib/i18n/tasks/stats.rb +20 -0
  54. data/lib/i18n/tasks/string_interpolation.rb +14 -0
  55. data/lib/i18n/tasks/unused_keys.rb +0 -10
  56. data/lib/i18n/tasks/version.rb +1 -1
  57. data/spec/commands/data_commands_spec.rb +38 -0
  58. data/spec/commands/tree_commands_spec.rb +68 -0
  59. data/spec/fixtures/app/views/index.html.slim +1 -0
  60. data/spec/google_translate_spec.rb +5 -3
  61. data/spec/i18n_spec.rb +18 -0
  62. data/spec/i18n_tasks_spec.rb +8 -8
  63. data/spec/spec_helper.rb +3 -3
  64. data/spec/support/test_codebase.rb +4 -1
  65. data/spec/used_keys_spec.rb +7 -7
  66. data/templates/config/i18n-tasks.yml +2 -2
  67. metadata +48 -4
  68. data/lib/i18n/tasks/commands_base.rb +0 -107
  69. data/lib/i18n/tasks/fill_tasks.rb +0 -40
@@ -0,0 +1,20 @@
1
+ module I18n::Tasks
2
+ module Stats
3
+ def forest_stats(forest)
4
+ key_count = forest.leaves.count
5
+ locale_count = forest.count
6
+ if key_count.zero?
7
+ {key_count: 0}
8
+ else
9
+ {
10
+ locales: forest.map(&:key).join(', '),
11
+ key_count: key_count,
12
+ locale_count: locale_count,
13
+ per_locale_avg: forest.inject(0) { |sum, f| sum + f.leaves.count } / locale_count,
14
+ key_segments_avg: '%.1f' % (forest.leaves.inject(0) { |sum, node| sum + node.walk_to_root.count - 1 } / key_count.to_f),
15
+ value_chars_avg: forest.leaves.inject(0) { |sum, node| sum + node.value.length } / key_count
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ module I18n::Tasks
2
+ module StringInterpolation
3
+ extend self
4
+
5
+ def interpolate_soft(s, t = {})
6
+ return s unless s
7
+ t.each do |k, v|
8
+ pat = "%{#{k}}"
9
+ s = s.gsub pat, v.to_s if s.include?(pat)
10
+ end
11
+ s
12
+ end
13
+ end
14
+ end
@@ -18,16 +18,6 @@ module I18n
18
18
  !used_key?(depluralize_key(key, locale))
19
19
  }
20
20
  end
21
-
22
- def remove_unused!(locales = nil)
23
- locales ||= self.locales
24
- locales.each do |locale|
25
- unused = unused_tree(locale).key_names.to_set
26
- data[locale] = data[locale].select_keys { |key, value|
27
- !unused.include?(depluralize_key(key, locale))
28
- }
29
- end
30
- end
31
21
  end
32
22
  end
33
23
  end
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
  module I18n
3
3
  module Tasks
4
- VERSION = '0.6.3'
4
+ VERSION = '0.7.0'
5
5
  end
6
6
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Data commands' do
4
+ delegate :run_cmd, to: :TestCodebase
5
+ def en_data
6
+ {'en' => {'a' => '1', 'common' => {'hello' => 'Hello'}}}
7
+ end
8
+
9
+ def en_data_2
10
+ {'en' => {'common' => {'hi' => 'Hi'}}}
11
+ end
12
+
13
+
14
+ before do
15
+ TestCodebase.setup('config/locales/en.yml' => en_data.to_yaml)
16
+ end
17
+
18
+ after do
19
+ TestCodebase.teardown
20
+ end
21
+
22
+ it '#data' do
23
+ expect(JSON.parse(run_cmd :data, format: 'json')).to eq(en_data)
24
+ end
25
+
26
+ it '#data-merge' do
27
+ expect(JSON.parse(run_cmd :data_merge, format: 'json', arguments: [en_data_2.to_json], nostdin: true)).to eq(en_data.deep_merge en_data_2)
28
+ end
29
+
30
+ it '#data-write' do
31
+ expect(JSON.parse(run_cmd :data_write, format: 'json', arguments: [en_data_2.to_json])).to eq(en_data_2)
32
+ end
33
+
34
+ it '#data-remove' do
35
+ to_remove = {'en' => {'common' => {'hello' => ''}}}
36
+ expect(JSON.parse(run_cmd :data_remove, format: 'json', arguments: [to_remove.to_json])).to eq('en' => {'common' => en_data['en']['common'] })
37
+ end
38
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Tree commands' do
4
+ delegate :run_cmd, to: :TestCodebase
5
+ before do
6
+ TestCodebase.setup
7
+ end
8
+
9
+ after do
10
+ TestCodebase.teardown
11
+ end
12
+
13
+ context 'tree-merge' do
14
+ trees = [{'a' => '1', 'b' => '2'}, {'a' => '-1', 'c' => '3'}]
15
+ it trees.map(&:to_json).join(', ') do
16
+ merged = JSON.parse run_cmd(:tree_merge, format: 'json', arguments: trees.map(&:to_json), nostdin: true)
17
+ expect(merged).to eq trees.reduce(:merge)
18
+ end
19
+ end
20
+
21
+ context 'tree-filter' do
22
+ forest = {'a' => '1', 'b' => '2', 'c' => {'a' => '3'}}
23
+ pattern = '{a,c.*}'
24
+ it "-p #{pattern.inspect} #{forest.to_json}" do
25
+ selected = JSON.parse run_cmd(:tree_filter, format: 'json', pattern: pattern, arguments: [forest.to_json])
26
+ expect(selected).to eq(forest.except('b'))
27
+ end
28
+ end
29
+
30
+ context 'tree-subtract' do
31
+ trees = [{'a' => '1', 'b' => '2'}, {'a' => '-1', 'c' => '3'}]
32
+ it trees.map(&:to_json).join(' - ') do
33
+ subtracted = JSON.parse run_cmd(:tree_subtract, format: 'json', arguments: trees.map(&:to_json), nostdin: true)
34
+ expected = {'b' => '2'}
35
+ expect(subtracted).to eq expected
36
+ end
37
+ end
38
+
39
+ context 'tree-rename-key' do
40
+ def forest
41
+ {'a' => {'b' => {'a' => '1'}}}
42
+ end
43
+
44
+ it 'renames root node' do
45
+ renamed = JSON.parse run_cmd(:tree_rename_key, key: 'a', name: 'x', format: 'json', arguments: [forest.to_json])
46
+ expect(renamed).to eq(forest.tap { |f| f['x'] = f.delete('a') })
47
+ end
48
+ it 'renames node' do
49
+ renamed = JSON.parse run_cmd(:tree_rename_key, key: 'a.b', name: 'x', format: 'json', arguments: [forest.to_json])
50
+ expect(renamed).to eq(forest.tap { |f| f['a']['x'] = f['a'].delete('b') })
51
+ end
52
+ it 'renames leaf' do
53
+ renamed = JSON.parse run_cmd(:tree_rename_key, key: 'a.b.a', name: 'x', format: 'json', arguments: [forest.to_json])
54
+ expect(renamed).to eq(forest.tap { |f| f['a']['b']['x'] = f['a']['b'].delete('a') })
55
+ end
56
+ end
57
+
58
+ context 'tree-convert' do
59
+ def forest
60
+ {'x' => '1', 'a' => {'b' => {'a' => '2'}}}
61
+ end
62
+
63
+ it 'converts to keys' do
64
+ keys = run_cmd(:tree_convert, from: 'json', to: 'keys', arguments: [forest.to_json]).split("\n")
65
+ expect(keys.sort).to eq(['a.b.a', 'x'].sort)
66
+ end
67
+ end
68
+ end
@@ -8,6 +8,7 @@ p #{t 'ca.d'} #{t 'ca.f', i: 'world'} #{t 'ca.e', i: 'world'}
8
8
  p #{t 'missing_in_es.a'} #{t 'same_in_es.a'} #{t 'blank_in_es.a'}
9
9
  p = t 'used_but_missing.key'
10
10
  p = t 'missing-key-with-a-dash.key'
11
+ p = t 'missing-key-question?.key'
11
12
  p = t 'x', scope: 'scoped'
12
13
  p = t 'x', scope: [:very, :scoped]
13
14
  p = t 'x', scope: [:scoped, code]
@@ -16,10 +16,10 @@ describe 'Google Translation' do
16
16
  describe 'real world test' do
17
17
  delegate :i18n_cmd, :i18n_task, :in_test_app_dir, to: :TestCodebase
18
18
 
19
- context 'API' do
19
+ context '#google_translate_list' do
20
20
  it "works with #{tests.map(&:first)}" do
21
21
  # Just one test with all the cases to lower the Google bill
22
- translations = google_translate(
22
+ translations = google_translate_list(
23
23
  tests.map { |t| t[0..1] }, from: :en, to: :es, key: ENV['GOOGLE_TRANSLATE_API_KEY'])
24
24
  expect(translations).to eq(tests.map { |t| [t[0], t[2]] })
25
25
  end
@@ -43,7 +43,8 @@ describe 'Google Translation' do
43
43
  'common' => {
44
44
  'a' => 'λ',
45
45
  'hello' => text_test[1],
46
- 'hello_html' => html_test[1]
46
+ 'hello_html' => html_test[1],
47
+ 'array_key' => array_test[1]
47
48
  }
48
49
  })
49
50
  task.data[:es] = build_tree('es' =>{
@@ -55,6 +56,7 @@ describe 'Google Translation' do
55
56
  cmd.translate_missing
56
57
  expect(task.t('common.hello', 'es')).to eq(text_test[2])
57
58
  expect(task.t('common.hello_html', 'es')).to eq(html_test[2])
59
+ expect(task.t('common.array_key', 'es')).to eq(array_test[2])
58
60
  expect(task.t('common.a', 'es')).to eq('λ')
59
61
  end
60
62
  end
data/spec/i18n_spec.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require 'i18n/tasks'
3
+
4
+ describe 'I18n' do
5
+ let(:i18n) { I18n::Tasks::BaseTask.new }
6
+ let(:missing_keys) { i18n.missing_keys }
7
+ let(:unused_keys) { i18n.unused_keys }
8
+
9
+ it 'does not have missing keys' do
10
+ expect(missing_keys).to be_empty,
11
+ "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them"
12
+ end
13
+
14
+ it 'does not have unused keys' do
15
+ expect(i18n.unused_keys).to be_empty,
16
+ "#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them"
17
+ end
18
+ end
@@ -1,6 +1,5 @@
1
1
  # coding: utf-8
2
2
  require 'spec_helper'
3
- require 'i18n/tasks/commands'
4
3
  require 'fileutils'
5
4
 
6
5
  describe 'i18n-tasks' do
@@ -15,6 +14,7 @@ describe 'i18n-tasks' do
15
14
  en.missing_symbol_key en.missing_symbol.key_two en.missing_symbol.key_three
16
15
  es.missing_in_es_plural_1.a es.missing_in_es_plural_2.a
17
16
  en.missing-key-with-a-dash.key
17
+ en.missing-key-question?.key
18
18
  en.fn_comment en.only_in_es
19
19
  )
20
20
  }
@@ -103,12 +103,12 @@ describe 'i18n-tasks' do
103
103
  }
104
104
  run_cmd :add_missing, locales: 'base'
105
105
  in_test_app_dir {
106
- expect(YAML.load_file('config/locales/en.yml')['en']['used_but_missing']['key']).to eq 'Key'
107
- expect(YAML.load_file('config/locales/en.yml')['en']['present_in_es_but_not_en']['a']).to eq 'A'
106
+ expect(YAML.load_file('config/locales/en.yml')['en']['used_but_missing']['key']).to eq I18n.t('i18n_tasks.common.key')
107
+ expect(YAML.load_file('config/locales/en.yml')['en']['present_in_es_but_not_en']['a']).to eq 'ES_TEXT'
108
108
  }
109
109
  end
110
110
 
111
- it 'default placeholder: base_value for non-base locale' do
111
+ it 'default value: base_value for non-base locale' do
112
112
  in_test_app_dir {
113
113
  expect(YAML.load_file('config/locales/es.yml')['es']['missing_in_es']).to be_nil
114
114
  }
@@ -119,12 +119,12 @@ describe 'i18n-tasks' do
119
119
  }
120
120
  end
121
121
 
122
- it 'placeholder: value' do
122
+ it '--value' do
123
123
  in_test_app_dir {
124
124
  expect(YAML.load_file('config/locales/es.yml')['es']['missing_in_es']).to be_nil
125
125
  }
126
126
  run_cmd :normalize, pattern_router: true
127
- run_cmd :add_missing, locales: 'all', placeholder: 'TRME'
127
+ run_cmd :add_missing, locales: 'all', value: 'TRME'
128
128
  in_test_app_dir {
129
129
  expect(YAML.load_file('config/locales/es.yml')['es']['missing_in_es']['a']).to eq 'TRME'
130
130
  expect(YAML.load_file('config/locales/devise.es.yml')['es']['devise']['a']).to eq 'ES_TEXT'
@@ -132,11 +132,11 @@ describe 'i18n-tasks' do
132
132
  }
133
133
  end
134
134
 
135
- it 'placeholder: value with base_value' do
135
+ it '--value with %{value}' do
136
136
  in_test_app_dir {
137
137
  expect(YAML.load_file('config/locales/es.yml')['es']['missing_in_es']).to be_nil
138
138
  }
139
- run_cmd :add_missing, locales: 'all', placeholder: 'TRME %{base_value}'
139
+ run_cmd :add_missing, locales: 'all', value: 'TRME %{value}'
140
140
  in_test_app_dir {
141
141
  expect(YAML.load_file('config/locales/es.yml')['es']['missing_in_es']['a']).to eq 'TRME EN_TEXT'
142
142
  expect(YAML.load_file('config/locales/en.yml')['en']['present_in_es_but_not_en']['a']).to eq 'TRME ES_TEXT'
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  # coding: utf-8
2
2
  ENV['RAILS_ENV'] = ENV['RAKE_ENV'] = 'test'
3
3
 
4
- unless defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
5
- require 'coveralls'
6
- Coveralls.wear! 'rails'
4
+ if ENV['TRAVIS'] && !(defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx')
5
+ require 'codeclimate-test-reporter'
6
+ CodeClimate::TestReporter.start
7
7
  end
8
8
 
9
9
  $: << File.expand_path('../lib', __FILE__)
@@ -2,6 +2,7 @@
2
2
  require 'fileutils'
3
3
  require 'yaml'
4
4
  require_relative 'capture_std'
5
+ require 'i18n/tasks/commands'
5
6
 
6
7
  module TestCodebase
7
8
  include CaptureStd
@@ -22,7 +23,9 @@ module TestCodebase
22
23
 
23
24
  def run_cmd(name, *args, &block)
24
25
  in_test_app_dir do
25
- capture_stdout { i18n_cmd.send(name, *args, &block) }
26
+ silence_stderr {
27
+ capture_stdout { i18n_cmd.send(name, *args, &block) }
28
+ }
26
29
  end
27
30
  end
28
31
 
@@ -15,14 +15,14 @@ h1 = t 'b'
15
15
  TestCodebase.teardown
16
16
  end
17
17
 
18
- it '#used_keys(source_locations: true)' do
19
- used = task.used_tree(source_locations: true)
18
+ it '#used_keys(source_occurrences: true)' do
19
+ used = task.used_tree(source_occurrences: true)
20
20
  leaves = used.leaves.to_a
21
21
  expect(leaves.size).to eq 2
22
22
  expect_node_key_data(
23
23
  leaves[0],
24
24
  'a',
25
- source_locations:
25
+ source_occurrences:
26
26
  [{pos: 6, line_num: 1, line_pos: 7, line: "div = t 'a'", src_path: 'a.html.slim'},
27
27
  {pos: 18, line_num: 2, line_pos: 7, line: " p = t 'a'", src_path: 'a.html.slim'}]
28
28
  )
@@ -30,18 +30,18 @@ h1 = t 'b'
30
30
  expect_node_key_data(
31
31
  leaves[1],
32
32
  'b',
33
- source_locations:
33
+ source_occurrences:
34
34
  [{pos: 29, line_num: 3, line_pos: 6, line: "h1 = t 'b'", src_path: 'a.html.slim'}]
35
35
  )
36
36
  end
37
37
 
38
- it '#used_keys(source_locations: true, key_filter: "b*")' do
39
- used_keys = task.used_tree(key_filter: 'b*', source_locations: true)
38
+ it '#used_keys(source_occurrences: true, key_filter: "b*")' do
39
+ used_keys = task.used_tree(key_filter: 'b*', source_occurrences: true)
40
40
  expect(used_keys.size).to eq 1
41
41
  expect_node_key_data(
42
42
  used_keys.leaves.first,
43
43
  'b',
44
- source_locations:
44
+ source_occurrences:
45
45
  [{pos: 29, line_num: 3, line_pos: 6, line: "h1 = t 'b'", src_path: 'a.html.slim'}]
46
46
  )
47
47
  end
@@ -27,8 +27,8 @@ data:
27
27
  # YAML / JSON serializer options, passed to load / dump / parse / serialize
28
28
  yaml:
29
29
  write:
30
- ## do not wrap lines at 80 characters (override default)
31
- # line_width: -1
30
+ # do not wrap lines at 80 characters
31
+ line_width: -1
32
32
  json:
33
33
  write:
34
34
  # pretty print JSON
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.6.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-24 00:00:00.000000000 Z
11
+ date: 2014-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: erubis
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: 3.5.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: i18n
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: axlsx
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -201,12 +215,32 @@ files:
201
215
  - README.md
202
216
  - Rakefile
203
217
  - bin/i18n-tasks
218
+ - config/i18n-tasks.yml
219
+ - config/locales/en.yml
204
220
  - i18n-tasks.gemspec
205
221
  - lib/i18n/tasks.rb
206
222
  - lib/i18n/tasks/base_task.rb
223
+ - lib/i18n/tasks/command/collection.rb
224
+ - lib/i18n/tasks/command/commander.rb
225
+ - lib/i18n/tasks/command/commands/data.rb
226
+ - lib/i18n/tasks/command/commands/eq_base.rb
227
+ - lib/i18n/tasks/command/commands/health.rb
228
+ - lib/i18n/tasks/command/commands/meta.rb
229
+ - lib/i18n/tasks/command/commands/missing.rb
230
+ - lib/i18n/tasks/command/commands/tree.rb
231
+ - lib/i18n/tasks/command/commands/usages.rb
232
+ - lib/i18n/tasks/command/commands/xlsx.rb
233
+ - lib/i18n/tasks/command/dsl.rb
234
+ - lib/i18n/tasks/command/dsl/cmd.rb
235
+ - lib/i18n/tasks/command/dsl/cmd_opt.rb
236
+ - lib/i18n/tasks/command/dsl/enum_opt.rb
237
+ - lib/i18n/tasks/command/options/common.rb
238
+ - lib/i18n/tasks/command/options/enum_opt.rb
239
+ - lib/i18n/tasks/command/options/list_opt.rb
240
+ - lib/i18n/tasks/command/options/locales.rb
241
+ - lib/i18n/tasks/command/options/trees.rb
207
242
  - lib/i18n/tasks/command_error.rb
208
243
  - lib/i18n/tasks/commands.rb
209
- - lib/i18n/tasks/commands_base.rb
210
244
  - lib/i18n/tasks/configuration.rb
211
245
  - lib/i18n/tasks/console_context.rb
212
246
  - lib/i18n/tasks/data.rb
@@ -221,10 +255,11 @@ files:
221
255
  - lib/i18n/tasks/data/tree/nodes.rb
222
256
  - lib/i18n/tasks/data/tree/siblings.rb
223
257
  - lib/i18n/tasks/data/tree/traversal.rb
224
- - lib/i18n/tasks/fill_tasks.rb
225
258
  - lib/i18n/tasks/google_translation.rb
259
+ - lib/i18n/tasks/html_keys.rb
226
260
  - lib/i18n/tasks/ignore_keys.rb
227
261
  - lib/i18n/tasks/key_pattern_matching.rb
262
+ - lib/i18n/tasks/locale_list.rb
228
263
  - lib/i18n/tasks/locale_pathname.rb
229
264
  - lib/i18n/tasks/logging.rb
230
265
  - lib/i18n/tasks/missing_keys.rb
@@ -236,10 +271,15 @@ files:
236
271
  - lib/i18n/tasks/scanners/pattern_scanner.rb
237
272
  - lib/i18n/tasks/scanners/pattern_with_scope_scanner.rb
238
273
  - lib/i18n/tasks/scanners/relative_keys.rb
274
+ - lib/i18n/tasks/slop_command.rb
239
275
  - lib/i18n/tasks/split_key.rb
276
+ - lib/i18n/tasks/stats.rb
277
+ - lib/i18n/tasks/string_interpolation.rb
240
278
  - lib/i18n/tasks/unused_keys.rb
241
279
  - lib/i18n/tasks/used_keys.rb
242
280
  - lib/i18n/tasks/version.rb
281
+ - spec/commands/data_commands_spec.rb
282
+ - spec/commands/tree_commands_spec.rb
243
283
  - spec/conservative_router_spec.rb
244
284
  - spec/file_system_data_spec.rb
245
285
  - spec/fixtures/app/assets/javascripts/application.js
@@ -249,6 +289,7 @@ files:
249
289
  - spec/fixtures/app/views/usages.html.slim
250
290
  - spec/fixtures/config/i18n-tasks.yml
251
291
  - spec/google_translate_spec.rb
292
+ - spec/i18n_spec.rb
252
293
  - spec/i18n_tasks_spec.rb
253
294
  - spec/key_pattern_matching_spec.rb
254
295
  - spec/locale_pathname_spec.rb
@@ -294,6 +335,8 @@ signing_key:
294
335
  specification_version: 4
295
336
  summary: Manage localization and translation with the awesome power of static analysis
296
337
  test_files:
338
+ - spec/commands/data_commands_spec.rb
339
+ - spec/commands/tree_commands_spec.rb
297
340
  - spec/conservative_router_spec.rb
298
341
  - spec/file_system_data_spec.rb
299
342
  - spec/fixtures/app/assets/javascripts/application.js
@@ -303,6 +346,7 @@ test_files:
303
346
  - spec/fixtures/app/views/usages.html.slim
304
347
  - spec/fixtures/config/i18n-tasks.yml
305
348
  - spec/google_translate_spec.rb
349
+ - spec/i18n_spec.rb
306
350
  - spec/i18n_tasks_spec.rb
307
351
  - spec/key_pattern_matching_spec.rb
308
352
  - spec/locale_pathname_spec.rb