i18n-tasks 0.8.7 → 0.9.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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