i18n-tasks 0.8.7 → 0.9.0.rc1

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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -5
  3. data/CHANGES.md +3 -3
  4. data/Gemfile +1 -1
  5. data/README.md +4 -4
  6. data/bin/i18n-tasks +0 -1
  7. data/config/locales/en.yml +103 -102
  8. data/config/locales/ru.yml +1 -1
  9. data/i18n-tasks.gemspec +1 -2
  10. data/lib/i18n/tasks.rb +0 -1
  11. data/lib/i18n/tasks/base_task.rb +0 -1
  12. data/lib/i18n/tasks/cli.rb +1 -1
  13. data/lib/i18n/tasks/command/commander.rb +0 -1
  14. data/lib/i18n/tasks/command/commands/missing.rb +3 -15
  15. data/lib/i18n/tasks/command/commands/usages.rb +5 -6
  16. data/lib/i18n/tasks/command/option_parsers/locale.rb +1 -8
  17. data/lib/i18n/tasks/command_error.rb +5 -1
  18. data/lib/i18n/tasks/commands.rb +0 -1
  19. data/lib/i18n/tasks/configuration.rb +1 -9
  20. data/lib/i18n/tasks/console_context.rb +2 -2
  21. data/lib/i18n/tasks/data.rb +0 -1
  22. data/lib/i18n/tasks/data/adapter/json_adapter.rb +0 -1
  23. data/lib/i18n/tasks/data/adapter/yaml_adapter.rb +0 -1
  24. data/lib/i18n/tasks/data/file_formats.rb +0 -1
  25. data/lib/i18n/tasks/data/file_system.rb +0 -1
  26. data/lib/i18n/tasks/data/file_system_base.rb +0 -1
  27. data/lib/i18n/tasks/data/router/conservative_router.rb +0 -1
  28. data/lib/i18n/tasks/data/router/pattern_router.rb +0 -1
  29. data/lib/i18n/tasks/data/tree/node.rb +6 -7
  30. data/lib/i18n/tasks/data/tree/nodes.rb +0 -1
  31. data/lib/i18n/tasks/data/tree/siblings.rb +29 -10
  32. data/lib/i18n/tasks/data/tree/traversal.rb +0 -3
  33. data/lib/i18n/tasks/google_translation.rb +0 -1
  34. data/lib/i18n/tasks/ignore_keys.rb +0 -1
  35. data/lib/i18n/tasks/key_pattern_matching.rb +0 -1
  36. data/lib/i18n/tasks/logging.rb +0 -1
  37. data/lib/i18n/tasks/missing_keys.rb +0 -1
  38. data/lib/i18n/tasks/plural_keys.rb +0 -1
  39. data/lib/i18n/tasks/reports/base.rb +1 -2
  40. data/lib/i18n/tasks/reports/spreadsheet.rb +0 -1
  41. data/lib/i18n/tasks/reports/terminal.rb +41 -17
  42. data/lib/i18n/tasks/scanners/files/caching_file_finder.rb +32 -0
  43. data/lib/i18n/tasks/scanners/files/caching_file_finder_provider.rb +24 -0
  44. data/lib/i18n/tasks/scanners/files/caching_file_reader.rb +27 -0
  45. data/lib/i18n/tasks/scanners/files/file_finder.rb +61 -0
  46. data/lib/i18n/tasks/scanners/files/file_reader.rb +18 -0
  47. data/lib/i18n/tasks/scanners/key_occurrences.rb +35 -0
  48. data/lib/i18n/tasks/scanners/occurence.rb +50 -0
  49. data/lib/i18n/tasks/scanners/pattern_scanner.rb +97 -38
  50. data/lib/i18n/tasks/scanners/pattern_with_scope_scanner.rb +2 -3
  51. data/lib/i18n/tasks/scanners/relative_keys.rb +3 -4
  52. data/lib/i18n/tasks/scanners/scanner.rb +15 -0
  53. data/lib/i18n/tasks/scanners/scanner_multiplexer.rb +43 -0
  54. data/lib/i18n/tasks/unused_keys.rb +4 -5
  55. data/lib/i18n/tasks/used_keys.rb +76 -23
  56. data/lib/i18n/tasks/version.rb +1 -2
  57. data/spec/conservative_router_spec.rb +0 -1
  58. data/spec/file_system_data_spec.rb +0 -1
  59. data/spec/fixtures/app/controllers/events_controller.rb +1 -2
  60. data/spec/google_translate_spec.rb +0 -1
  61. data/spec/i18n_tasks_spec.rb +4 -15
  62. data/spec/key_pattern_matching_spec.rb +0 -1
  63. data/spec/locale_tree/siblings_spec.rb +0 -1
  64. data/spec/pattern_scanner_spec.rb +34 -36
  65. data/spec/plural_keys_spec.rb +0 -1
  66. data/spec/readme_spec.rb +0 -1
  67. data/spec/relative_keys_spec.rb +15 -10
  68. data/spec/scanners/files/caching_file_finder_provider_spec.rb +18 -0
  69. data/spec/scanners/files/caching_file_finder_spec.rb +39 -0
  70. data/spec/scanners/files/caching_file_reader_spec.rb +18 -0
  71. data/spec/scanners/files/file_finder_spec.rb +52 -0
  72. data/spec/scanners/files/file_reader_spec.rb +15 -0
  73. data/spec/scanners/scanner_multiplexer_spec.rb +26 -0
  74. data/spec/spec_helper.rb +1 -1
  75. data/spec/support/capture_std.rb +0 -1
  76. data/spec/support/fixtures.rb +0 -1
  77. data/spec/support/i18n_tasks_output_matcher.rb +0 -1
  78. data/spec/support/key_pattern_matcher.rb +0 -1
  79. data/spec/support/keys_and_occurrences.rb +27 -0
  80. data/spec/support/test_codebase.rb +0 -1
  81. data/spec/support/trees.rb +1 -7
  82. data/spec/used_keys_spec.rb +15 -16
  83. data/templates/config/i18n-tasks.yml +9 -2
  84. metadata +29 -9
  85. data/lib/i18n/tasks/scanners/base_scanner.rb +0 -149
  86. data/spec/commands/missing_commands_spec.rb +0 -23
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require 'i18n/tasks/scanners/files/caching_file_finder'
3
+
4
+ RSpec.describe 'CachingFileFinder' do
5
+ let(:test_files) {
6
+ %w(a/a/a/a.txt a/a/a.txt a/a/b.txt a/b/a.txt a/b/b.txt a.txt)
7
+ }
8
+ describe '#find_files' do
9
+ it 'accesses the filesystem only once' do
10
+ begin
11
+ TestCodebase.setup(test_files.inject({}) { |h, f| h[f] = ''; h })
12
+ TestCodebase.in_test_app_dir {
13
+ finder = I18n::Tasks::Scanners::Files::CachingFileFinder.new
14
+ expect(finder.find_files).to eq test_files.map { |f| File.join('.', f) }
15
+ TestCodebase.teardown
16
+ expect(finder.find_files).to eq test_files.map { |f| File.join('.', f) }
17
+ }
18
+ ensure
19
+ TestCodebase.teardown
20
+ end
21
+ end
22
+ end
23
+
24
+ describe '#traverse_files' do
25
+ it 'accesses the filesystem only once' do
26
+ begin
27
+ TestCodebase.setup(test_files.inject({}) { |h, f| h[f] = ''; h })
28
+ TestCodebase.in_test_app_dir {
29
+ finder = I18n::Tasks::Scanners::Files::CachingFileFinder.new
30
+ expect(finder.traverse_files { |f| f }).to eq test_files.map { |f| File.join('.', f) }
31
+ TestCodebase.teardown
32
+ expect(finder.traverse_files { |f| f }).to eq test_files.map { |f| File.join('.', f) }
33
+ }
34
+ ensure
35
+ TestCodebase.teardown
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require 'i18n/tasks/scanners/files/caching_file_reader'
3
+
4
+ RSpec.describe 'CachingFileReader' do
5
+ describe '#read_file' do
6
+ around do |ex|
7
+ TestCodebase.setup('test.txt' => 'test')
8
+ TestCodebase.in_test_app_dir { ex.call }
9
+ TestCodebase.teardown
10
+ end
11
+ it 'reads the file only once' do
12
+ caching_file_reader = I18n::Tasks::Scanners::Files::CachingFileReader.new
13
+ expect(caching_file_reader.read_file('test.txt')).to eq('test')
14
+ File.write('test.txt', 'something else')
15
+ expect(caching_file_reader.read_file('test.txt')).to eq('test')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+ require 'i18n/tasks/scanners/files/file_finder'
3
+
4
+ RSpec.describe 'FileFinder' do
5
+ let(:test_files) {
6
+ %w(a/a/a/a.txt a/a/a.txt a/a/b.txt a/b/a.txt a/b/b.txt a.txt)
7
+ }
8
+ around do |ex|
9
+ TestCodebase.setup(test_files.inject({}) { |h, f| h[f] = ''; h })
10
+ TestCodebase.in_test_app_dir { ex.call }
11
+ TestCodebase.teardown
12
+ end
13
+
14
+ describe '#find_files' do
15
+ it 'finds all the files in the current directory with default options' do
16
+ finder = I18n::Tasks::Scanners::Files::FileFinder.new
17
+ expect(finder.find_files).to eq test_files.map { |f| File.join('.', f) }
18
+ end
19
+
20
+ it 'finds only the files in paths' do
21
+ finder = I18n::Tasks::Scanners::Files::FileFinder.new(paths: %w(a/a a/b/a.txt))
22
+ expect(finder.find_files).to eq test_files.select { |f| f.start_with?('a/a/') || f == 'a/b/a.txt' }
23
+ end
24
+
25
+ it 'find only the files specified by the inclusion patterns' do
26
+ finder = I18n::Tasks::Scanners::Files::FileFinder.new(
27
+ paths: %w(a), include: %w(a/a/**))
28
+ expect(finder.find_files).to eq test_files.select { |f| f.start_with?('a/a/') }
29
+ end
30
+
31
+ it 'finds only the files not specified by the exclusion patterns' do
32
+ finder = I18n::Tasks::Scanners::Files::FileFinder.new(
33
+ exclude: %w(./a/a/**))
34
+ expect(finder.find_files).to eq test_files.select { |f| !f.start_with?('a/a/') }.map { |f| File.join('.', f) }
35
+ end
36
+ end
37
+
38
+ describe '#traverse_files' do
39
+ let(:finder) { I18n::Tasks::Scanners::Files::FileFinder.new }
40
+
41
+ it 'yields all the files' do
42
+ actual = []
43
+ finder.traverse_files { |f| actual << f }
44
+ expect(actual).to eq(test_files.map { |f| File.join('.', f) })
45
+ end
46
+
47
+ it 'returns the results from the block' do
48
+ i = 0
49
+ expect(finder.traverse_files { |_f| i += 1 }).to eq((1..test_files.length).to_a)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'i18n/tasks/scanners/files/file_reader'
3
+
4
+ RSpec.describe 'FileReader' do
5
+ describe '#read_file' do
6
+ around do |ex|
7
+ TestCodebase.setup('test.txt' => 'test')
8
+ TestCodebase.in_test_app_dir { ex.call }
9
+ TestCodebase.teardown
10
+ end
11
+ it 'reads the file' do
12
+ expect(I18n::Tasks::Scanners::Files::FileReader.new.read_file('test.txt')).to eq('test')
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'i18n/tasks/scanners/scanner_multiplexer'
3
+
4
+ RSpec.describe 'ScannerMultiplexer' do
5
+ describe '#keys' do
6
+ let(:key_a) { make_key_occurrences 'key.a', [{path: 'a'}] }
7
+ let(:key_b_1) { make_key_occurrences 'key.b', [{path: 'b1'}] }
8
+ let(:key_b_2) { make_key_occurrences 'key.b', [{path: 'b2'}] }
9
+ let(:key_c) { make_key_occurrences 'key.c', [{path: 'c'}] }
10
+
11
+ scanner_mock = Struct.new(:keys)
12
+ let(:scanner_one) { scanner_mock.new([key_a, key_b_1]) }
13
+ let(:scanner_two) { scanner_mock.new([key_b_2, key_c]) }
14
+
15
+ let(:expected_key_occurrences) {
16
+ [key_a,
17
+ I18n::Tasks::Scanners::KeyOccurrences.new(key: 'key.b', occurrences: key_b_1.occurrences + key_b_2.occurrences),
18
+ key_c]
19
+ }
20
+
21
+ it 'returns the merged results' do
22
+ scanner_multiplexer = I18n::Tasks::Scanners::ScannerMultiplexer.new(scanners: [scanner_one, scanner_two])
23
+ expect(scanner_multiplexer.keys).to eq expected_key_occurrences
24
+ end
25
+ end
26
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  ENV['RAILS_ENV'] = ENV['RAKE_ENV'] = 'test'
3
2
 
4
3
  if ENV['TRAVIS'] && !(defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx')
@@ -21,4 +20,5 @@ RSpec.configure do |config|
21
20
  config.include FixturesSupport
22
21
  config.include CaptureStd
23
22
  config.include Trees
23
+ config.include KeysAndOccurrences
24
24
  end
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require 'active_support/core_ext/kernel/reporting'
3
2
  module CaptureStd
4
3
  def capture_stderr
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  # quick'n'dirty fixture loader
3
2
  module FixturesSupport
4
3
  def fixtures_contents
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  RSpec::Matchers.define :be_i18n_keys do |expected|
3
2
  def locale_re
4
3
  /^\w{2}\b/
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  RSpec::Matchers.define :match_key do |key|
3
2
  include I18n::Tasks::KeyPatternMatching
4
3
 
@@ -0,0 +1,27 @@
1
+ module KeysAndOccurrences
2
+ def make_occurrence(path: '', line: '', pos: 1, line_pos: 1, line_num: 1)
3
+ ::I18n::Tasks::Scanners::Occurrence.new(path: path, line: line, pos: pos, line_pos: line_pos, line_num: line_num)
4
+ end
5
+
6
+ def make_occurrences(occurrences)
7
+ occurrences.map { |attr| make_occurrence(attr) }
8
+ end
9
+
10
+ def make_key_occurrences(key, occurrences)
11
+ ::I18n::Tasks::Scanners::KeyOccurrences.new(key: key, occurrences: make_occurrences(occurrences))
12
+ end
13
+
14
+ # adjust position to account for \r on Windows
15
+ def adjust_occurrences(data)
16
+ if Gem.win_platform?
17
+ data = data.dup
18
+ data[:occurrences].map! { |occ| adjust_occurrence occ }
19
+ end
20
+ data
21
+ end
22
+
23
+ # adjust position to account for \r on Windows
24
+ def adjust_occurrence(occurrence)
25
+ occurrence.dup.tap { |o| o.instance_variable_set(:@pos, o.pos + o.line_num - 1) }
26
+ end
27
+ end
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require 'fileutils'
3
2
  require 'yaml'
4
3
  require_relative 'capture_std'
@@ -1,13 +1,7 @@
1
- # coding: utf-8
2
1
  module Trees
3
2
  def expect_node_key_data(node, key, data)
4
3
  expect(node.full_key(root: false)).to eq key
5
- if Gem.win_platform?
6
- # adjust position to account for \r on Windows
7
- data = data.dup
8
- data[:source_occurrences].map! { |occ| occ.dup.tap { |o| o[:pos] += o[:line_num] - 1 } }
9
- end
10
- expect(node.data).to eq data
4
+ expect(node.data).to eq adjust_occurrences(data)
11
5
  end
12
6
 
13
7
  def build_tree(hash)
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require 'spec_helper'
3
2
 
4
3
  RSpec.describe 'UsedKeys' do
@@ -19,34 +18,34 @@ h1 = t 'b'
19
18
  TestCodebase.teardown
20
19
  end
21
20
 
22
- it '#used_keys(source_occurrences: true)' do
23
- used = task.used_tree(source_occurrences: true)
21
+ it '#used_keys' do
22
+ used = task.used_tree
24
23
  leaves = used.leaves.to_a
25
24
  expect(leaves.size).to eq 2
26
25
  expect_node_key_data(
27
26
  leaves[0],
28
27
  'a',
29
- source_occurrences:
30
- [{src_path: 'a.html.slim', pos: 6, line_num: 1, line_pos: 7, line: "div = t 'a'"},
31
- {src_path: 'a.html.slim', pos: 18, line_num: 2, line_pos: 7, line: " p = t 'a'"}]
28
+ occurrences: make_occurrences(
29
+ [{path: 'a.html.slim', pos: 6, line_num: 1, line_pos: 7, line: "div = t 'a'"},
30
+ {path: 'a.html.slim', pos: 18, line_num: 2, line_pos: 7, line: " p = t 'a'"}])
32
31
  )
33
32
 
34
33
  expect_node_key_data(
35
34
  leaves[1],
36
35
  'b',
37
- source_occurrences:
38
- [{src_path: 'a.html.slim', pos: 29, line_num: 3, line_pos: 6, line: "h1 = t 'b'"}]
36
+ occurrences: make_occurrences(
37
+ [{path: 'a.html.slim', pos: 29, line_num: 3, line_pos: 6, line: "h1 = t 'b'"}])
39
38
  )
40
39
  end
41
40
 
42
- it '#used_keys(source_occurrences: true, key_filter: "b*")' do
43
- used_keys = task.used_tree(key_filter: 'b*', source_occurrences: true)
41
+ it '#used_keys(key_filter: "b*")' do
42
+ used_keys = task.used_tree(key_filter: 'b*')
44
43
  expect(used_keys.size).to eq 1
45
44
  expect_node_key_data(
46
45
  used_keys.leaves.first,
47
46
  'b',
48
- source_occurrences:
49
- [{src_path: 'a.html.slim', pos: 29, line_num: 3, line_pos: 6, line: "h1 = t 'b'"}]
47
+ occurrences: make_occurrences(
48
+ [{path: 'a.html.slim', pos: 29, line_num: 3, line_pos: 6, line: "h1 = t 'b'"}])
50
49
  )
51
50
  end
52
51
 
@@ -61,14 +60,14 @@ h1 = t 'b'
61
60
  end
62
61
 
63
62
  it '#used_keys(source_occurences: true)' do
64
- used_keys = task.used_tree(source_occurrences: true)
63
+ used_keys = task.used_tree
65
64
  expect(used_keys.size).to eq 1
66
65
  expect_node_key_data(
67
66
  used_keys.leaves.first,
68
67
  'a',
69
- source_occurrences:
70
- [{src_path: 'a.html.haml', pos: 15, line_num: 1, line_pos: 16, line: "#first{ title: t('a') }"},
71
- {src_path: 'a.html.haml', pos: 40, line_num: 2, line_pos: 17, line: ".second{ title: t('a') }"}]
68
+ occurrences: make_occurrences(
69
+ [{path: 'a.html.haml', pos: 15, line_num: 1, line_pos: 16, line: "#first{ title: t('a') }"},
70
+ {path: 'a.html.haml', pos: 40, line_num: 2, line_pos: 17, line: ".second{ title: t('a') }"}])
72
71
  )
73
72
  end
74
73
  end
@@ -70,8 +70,15 @@ search:
70
70
  ## If specified, this settings takes priority over `exclude`, but `exclude` still applies.
71
71
  # include: ["*.rb", "*.html.slim"]
72
72
 
73
- ## Default scanner finds t() and I18n.t() calls.
74
- # scanner: I18n::Tasks::Scanners::PatternWithScopeScanner
73
+ ## If `strict` is `false`, guess usages such as t("categories.#{category}.title"). The default is `true`.
74
+ # strict: true
75
+
76
+ ## Multiple scanners can be used. Their results are merged.
77
+ ## The options specified above are passed down to each scanner. Per-scanner options can be specified as well.
78
+ ## An array of [scanner class name, scanner options]:
79
+ # scanners:
80
+ # - - I18n::Tasks::Scanners::PatternWithScopeScanner
81
+ # - {}
75
82
 
76
83
  ## Google Translate
77
84
  # translation:
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.7
4
+ version: 0.9.0.rc1
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-07 00:00:00.000000000 Z
11
+ date: 2015-08-05 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: 2.3.18
33
+ version: 4.0.2
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: 2.3.18
40
+ version: 4.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: easy_translate
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -253,10 +253,18 @@ files:
253
253
  - lib/i18n/tasks/reports/base.rb
254
254
  - lib/i18n/tasks/reports/spreadsheet.rb
255
255
  - lib/i18n/tasks/reports/terminal.rb
256
- - lib/i18n/tasks/scanners/base_scanner.rb
256
+ - lib/i18n/tasks/scanners/files/caching_file_finder.rb
257
+ - lib/i18n/tasks/scanners/files/caching_file_finder_provider.rb
258
+ - lib/i18n/tasks/scanners/files/caching_file_reader.rb
259
+ - lib/i18n/tasks/scanners/files/file_finder.rb
260
+ - lib/i18n/tasks/scanners/files/file_reader.rb
261
+ - lib/i18n/tasks/scanners/key_occurrences.rb
262
+ - lib/i18n/tasks/scanners/occurence.rb
257
263
  - lib/i18n/tasks/scanners/pattern_scanner.rb
258
264
  - lib/i18n/tasks/scanners/pattern_with_scope_scanner.rb
259
265
  - lib/i18n/tasks/scanners/relative_keys.rb
266
+ - lib/i18n/tasks/scanners/scanner.rb
267
+ - lib/i18n/tasks/scanners/scanner_multiplexer.rb
260
268
  - lib/i18n/tasks/split_key.rb
261
269
  - lib/i18n/tasks/stats.rb
262
270
  - lib/i18n/tasks/string_interpolation.rb
@@ -264,7 +272,6 @@ files:
264
272
  - lib/i18n/tasks/used_keys.rb
265
273
  - lib/i18n/tasks/version.rb
266
274
  - spec/commands/data_commands_spec.rb
267
- - spec/commands/missing_commands_spec.rb
268
275
  - spec/commands/tree_commands_spec.rb
269
276
  - spec/conservative_router_spec.rb
270
277
  - spec/file_system_data_spec.rb
@@ -285,12 +292,19 @@ files:
285
292
  - spec/plural_keys_spec.rb
286
293
  - spec/readme_spec.rb
287
294
  - spec/relative_keys_spec.rb
295
+ - spec/scanners/files/caching_file_finder_provider_spec.rb
296
+ - spec/scanners/files/caching_file_finder_spec.rb
297
+ - spec/scanners/files/caching_file_reader_spec.rb
298
+ - spec/scanners/files/file_finder_spec.rb
299
+ - spec/scanners/files/file_reader_spec.rb
300
+ - spec/scanners/scanner_multiplexer_spec.rb
288
301
  - spec/spec_helper.rb
289
302
  - spec/split_key_spec.rb
290
303
  - spec/support/capture_std.rb
291
304
  - spec/support/fixtures.rb
292
305
  - spec/support/i18n_tasks_output_matcher.rb
293
306
  - spec/support/key_pattern_matcher.rb
307
+ - spec/support/keys_and_occurrences.rb
294
308
  - spec/support/test_codebase.rb
295
309
  - spec/support/trees.rb
296
310
  - spec/used_keys_spec.rb
@@ -316,9 +330,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
316
330
  version: '0'
317
331
  required_rubygems_version: !ruby/object:Gem::Requirement
318
332
  requirements:
319
- - - ">="
333
+ - - ">"
320
334
  - !ruby/object:Gem::Version
321
- version: '0'
335
+ version: 1.3.1
322
336
  requirements: []
323
337
  rubyforge_project:
324
338
  rubygems_version: 2.4.5
@@ -327,7 +341,6 @@ specification_version: 4
327
341
  summary: Manage localization and translation with the awesome power of static analysis
328
342
  test_files:
329
343
  - spec/commands/data_commands_spec.rb
330
- - spec/commands/missing_commands_spec.rb
331
344
  - spec/commands/tree_commands_spec.rb
332
345
  - spec/conservative_router_spec.rb
333
346
  - spec/file_system_data_spec.rb
@@ -348,12 +361,19 @@ test_files:
348
361
  - spec/plural_keys_spec.rb
349
362
  - spec/readme_spec.rb
350
363
  - spec/relative_keys_spec.rb
364
+ - spec/scanners/files/caching_file_finder_provider_spec.rb
365
+ - spec/scanners/files/caching_file_finder_spec.rb
366
+ - spec/scanners/files/caching_file_reader_spec.rb
367
+ - spec/scanners/files/file_finder_spec.rb
368
+ - spec/scanners/files/file_reader_spec.rb
369
+ - spec/scanners/scanner_multiplexer_spec.rb
351
370
  - spec/spec_helper.rb
352
371
  - spec/split_key_spec.rb
353
372
  - spec/support/capture_std.rb
354
373
  - spec/support/fixtures.rb
355
374
  - spec/support/i18n_tasks_output_matcher.rb
356
375
  - spec/support/key_pattern_matcher.rb
376
+ - spec/support/keys_and_occurrences.rb
357
377
  - spec/support/test_codebase.rb
358
378
  - spec/support/trees.rb
359
379
  - spec/used_keys_spec.rb