i18n-coverage 0.1.1 → 0.2.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: 753bea6acb14177f754a2660bab00362d3b567c033fe95529c22724def6dedf3
4
- data.tar.gz: 5f9d1fdbb03939f9147d31a1c30e22643a0c578bcdc459422179aea8faa2f0d8
3
+ metadata.gz: ee3cd49315df6b7d72cd6df8815581f74f5172966d2aedd6e009287c2946d8b3
4
+ data.tar.gz: fe61ba0db852812b755a90ef1dd9ecb42afa27b54d27217e3cdb73858fd1221a
5
5
  SHA512:
6
- metadata.gz: 2cb48beaf23a2158644cfdcc71b91ac7715f2805873308157174d736db4b9097d732d9e8ae3f8adc01ed33c2ac9f5a027a432039096f73d882d0defeba574f5b
7
- data.tar.gz: 9931988f357a6748d24813c14e2b33331442b5d8e43642ecc2ee749756c0ce5965f75be041073b1b01668e825e0400c8f751b9a7640b748034778cb43e0a777b
6
+ metadata.gz: f9cb4285645101f11777919b6397ad50e2d5de87d478b68b0e1520ee3fa402bcc4fb7a625a220b489e4b5f4526b39060a2aa682884d9b968c183483fbbd47c5d
7
+ data.tar.gz: 94337fce2b4552b5f26c1dc1dbe3ef1ac32c6b828f639f69052a7bdc0b5ac377acc26812e31d7692c69bd29771b4fbf8cbc1156989a0acf29d65c19767cce7fd
@@ -0,0 +1,25 @@
1
+ AllCops:
2
+ # Wait until the community has decided
3
+ NewCops: disable
4
+
5
+ # These files naturally have long blocks
6
+ Metrics/BlockLength:
7
+ Exclude:
8
+ - 'spec/**/*.rb'
9
+ - '*.gemspec'
10
+
11
+ # Avoid Cops with arbitrary settings
12
+ Metrics/MethodLength:
13
+ Enabled: false
14
+
15
+ # This is no longer upcoming for Ruby
16
+ Style/FrozenStringLiteralComment:
17
+ Enabled: false
18
+
19
+ # Avoid Cops with arbitrary settings
20
+ Layout/LineLength:
21
+ Enabled: false
22
+
23
+ # Avoid comments unless they add value
24
+ Style/Documentation:
25
+ Enabled: false
@@ -4,4 +4,13 @@ language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
6
  - 2.6.2
7
+
7
8
  before_install: gem install bundler -v 1.17.2
9
+ before_script:
10
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
11
+ - chmod +x ./cc-test-reporter
12
+ - ./cc-test-reporter before-build
13
+ script:
14
+ - bundle exec rake
15
+ after_script:
16
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -1,6 +1,17 @@
1
1
  I18N coverage Changelog
2
2
  =======================
3
3
 
4
+ 0.2.0
5
+ -----
6
+
7
+ - Relax coverage criteria [PR#5](https://github.com/hiptest/i18n-coverage/pull/5) (by [benthorner](https://github.com/benthorner))
8
+
9
+ - From [PR#4](https://github.com/hiptest/i18n-coverage/pull/4) (by [benthorner](https://github.com/benthorner))
10
+ - Multiple YAML files (when a repo has lots of translations)
11
+ - Partial matching (to cope with advanced usages of I18n)
12
+ - Configurable output (so we can enforce coverage in CI)
13
+ - Adds RuboCop (so it's easier to be consistent in future)
14
+
4
15
  0.1.1
5
16
  -----
6
17
 
@@ -9,4 +20,4 @@ I18N coverage Changelog
9
20
  0.1.0
10
21
  -----
11
22
 
12
- - Initial release
23
+ - Initial release
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in i18n-coverage.gemspec
6
6
  gemspec
@@ -1,18 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- i18n-coverage (0.1.1)
4
+ i18n-coverage (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  addressable (2.6.0)
10
10
  public_suffix (>= 2.0.2, < 4.0)
11
+ ast (2.4.0)
11
12
  builder (3.2.3)
12
13
  concurrent-ruby (1.1.5)
13
14
  descendants_tracker (0.0.4)
14
15
  thread_safe (~> 0.3, >= 0.3.1)
15
16
  diff-lcs (1.3)
17
+ docile (1.3.1)
16
18
  faraday (0.15.4)
17
19
  multipart-post (>= 1.2, < 3)
18
20
  git (1.5.0)
@@ -26,6 +28,8 @@ GEM
26
28
  highline (2.0.2)
27
29
  i18n (0.9.5)
28
30
  concurrent-ruby (~> 1.0)
31
+ jaro_winkler (1.5.4)
32
+ json (2.2.0)
29
33
  juwelier (2.4.9)
30
34
  builder
31
35
  bundler
@@ -45,7 +49,7 @@ GEM
45
49
  multi_json (1.13.1)
46
50
  multi_xml (0.6.0)
47
51
  multipart-post (2.1.1)
48
- nokogiri (1.10.3)
52
+ nokogiri (1.10.8)
49
53
  mini_portile2 (~> 2.4.0)
50
54
  oauth2 (1.4.1)
51
55
  faraday (>= 0.8, < 0.16.0)
@@ -53,11 +57,16 @@ GEM
53
57
  multi_json (~> 1.3)
54
58
  multi_xml (~> 0.5)
55
59
  rack (>= 1.2, < 3)
60
+ parallel (1.19.1)
61
+ parser (2.7.1.2)
62
+ ast (~> 2.4.0)
56
63
  psych (3.1.0)
57
64
  public_suffix (3.1.0)
58
- rack (2.0.7)
59
- rake (10.5.0)
65
+ rack (2.2.3)
66
+ rainbow (3.0.0)
67
+ rake (13.0.1)
60
68
  rdoc (6.1.1)
69
+ rexml (3.2.4)
61
70
  rspec (3.8.0)
62
71
  rspec-core (~> 3.8.0)
63
72
  rspec-expectations (~> 3.8.0)
@@ -71,8 +80,23 @@ GEM
71
80
  diff-lcs (>= 1.2.0, < 2.0)
72
81
  rspec-support (~> 3.8.0)
73
82
  rspec-support (3.8.0)
83
+ rubocop (0.82.0)
84
+ jaro_winkler (~> 1.5.1)
85
+ parallel (~> 1.10)
86
+ parser (>= 2.7.0.1)
87
+ rainbow (>= 2.2.2, < 4.0)
88
+ rexml
89
+ ruby-progressbar (~> 1.7)
90
+ unicode-display_width (>= 1.4.0, < 2.0)
91
+ ruby-progressbar (1.10.1)
74
92
  semver2 (3.4.2)
93
+ simplecov (0.16.1)
94
+ docile (~> 1.1)
95
+ json (>= 1.8, < 3)
96
+ simplecov-html (~> 0.10.0)
97
+ simplecov-html (0.10.2)
75
98
  thread_safe (0.3.6)
99
+ unicode-display_width (1.7.0)
76
100
 
77
101
  PLATFORMS
78
102
  ruby
@@ -82,8 +106,10 @@ DEPENDENCIES
82
106
  i18n (~> 0.7)
83
107
  i18n-coverage!
84
108
  juwelier (~> 2.4)
85
- rake (~> 10.0)
109
+ rake (~> 13.0)
86
110
  rspec (~> 3.0)
111
+ rubocop (~> 0.82)
112
+ simplecov
87
113
 
88
114
  BUNDLED WITH
89
- 1.17.2
115
+ 1.17.3
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # I18n-coverage
2
2
  [![Build Status](https://travis-ci.org/hiptest/i18n-coverage.svg?branch=master)](https://travis-ci.org/hiptest/i18n-coverage)
3
+ [![Maintainability](https://api.codeclimate.com/v1/badges/30a359b5ad82800c5d35/maintainability)](https://codeclimate.com/github/hiptest/i18n-coverage/maintainability)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/30a359b5ad82800c5d35/test_coverage)](https://codeclimate.com/github/hiptest/i18n-coverage/test_coverage)
3
5
 
4
6
  Simple gem to see how much of your i18n keys are used during tests. It requires that the translations are handled by the [i18n](https://rubygems.org/gems/i18n/) gem.
5
7
 
@@ -15,33 +17,42 @@ gem 'i18n-coverage'
15
17
 
16
18
  ## Usage
17
19
 
18
- First, you need to ensure that the gem is correctly loaded when running the tests. When using rspec for example:
20
+ Add the following lines somewhere to your test setup. For RSpec, this will be at the top of `spec_helper.rb`.
19
21
 
20
22
  ```ruby
21
- # file spec_helper.rb
22
23
  require 'i18n/coverage'
24
+ I18n::Coverage.start
23
25
  ```
24
26
 
25
- You also need to output/read the results of the coverage. This should be done once all the tests have been executed. Once again, an example with rspec:
27
+ If you don't want to check I18n Coverage in every test run, you could enable it with an environment variable.
26
28
 
27
29
  ```ruby
28
- RSpec.configure do |config|
29
- config.after(:suite) do
30
- I18n::Coverage::Reporter.report if ENV['I18N_COVERAGE']
31
- end
32
- end
30
+ # file spec_helper.rb
31
+ require 'i18n/coverage'
32
+ I18n::Coverage.start if ENV['I18N_COVERAGE']
33
33
  ```
34
34
 
35
- Then, when running the tests, you need to enable coverage by setting the environment variable `I18N_COVERAGE`. For example with rspec:
36
-
37
35
  ```shell
38
36
  I18N_COVERAGE=1 bundle exec rspec
39
37
  ```
40
38
 
39
+ ## Configuration
40
+
41
+ The default config is [here](lib/i18n/coverage/config.rb).
42
+
43
+ ### Printer
44
+
45
+ By default the coverage is output to the console. You can also select a different printer, or write your own!
46
+
47
+ ```ruby
48
+ require 'i18n/coverage/printers/file_printer'
49
+ I18n::Coverage.config.printer = I18n::Coverage::Printer::FilePrinter
50
+ I18n::Coverage.start
51
+ ```
41
52
 
42
53
  ## Development
43
54
 
44
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
55
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests, or just `rake` to run all tasks, such as linting. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
45
56
 
46
57
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
47
58
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new
5
7
 
6
- task :default => :spec
8
+ task default: %i[spec rubocop]
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "i18n/coverage"
3
+ require 'bundler/setup'
4
+ require 'i18n/coverage'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "i18n/coverage"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
@@ -1,41 +1,41 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "i18n/coverage/version"
3
+ require 'i18n/coverage/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "i18n-coverage"
6
+ spec.name = 'i18n-coverage'
8
7
  spec.version = I18n::Coverage::VERSION
9
- spec.authors = ["Hiptest"]
10
- spec.email = ["contact@hiptest.com"]
8
+ spec.authors = ['Hiptest']
9
+ spec.email = ['contact@hiptest.com']
11
10
 
12
- spec.summary = %q{Provides a coverage of I18n keys used during test suite}
13
- spec.homepage = "https://github.com/hiptest/i18n-coverage"
11
+ spec.summary = 'Provides a coverage of I18n keys used during test suite'
12
+ spec.homepage = 'https://github.com/hiptest/i18n-coverage'
14
13
 
15
14
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
16
15
  # to allow pushing to a single host or delete this section to allow pushing to any host.
17
16
  if spec.respond_to?(:metadata)
18
- spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/hiptest/i18n-coverage"
20
- spec.metadata["changelog_uri"] = "https://github.com/hiptest/i18n-coverage/blob/master/CHANGELOG.md"
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/hiptest/i18n-coverage'
19
+ spec.metadata['changelog_uri'] = 'https://github.com/hiptest/i18n-coverage/blob/master/CHANGELOG.md'
21
20
  else
22
- raise "RubyGems 2.0 or newer is required to protect against " \
23
- "public gem pushes."
21
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
22
+ 'public gem pushes.'
24
23
  end
25
24
 
26
25
  # Specify which files should be added to the gem when it is released.
27
26
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
28
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
27
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
29
28
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
30
29
  end
31
- spec.bindir = "exe"
30
+ spec.bindir = 'exe'
32
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
33
- spec.require_paths = ["lib"]
34
-
35
- spec.add_development_dependency "i18n", "~> 0.7"
36
- spec.add_development_dependency "bundler", "~> 1.17"
37
- spec.add_development_dependency "rake", "~> 10.0"
38
- spec.add_development_dependency "rspec", "~> 3.0"
39
- spec.add_development_dependency "juwelier", "~> 2.4"
32
+ spec.require_paths = ['lib']
40
33
 
34
+ spec.add_development_dependency 'bundler', '~> 1.17'
35
+ spec.add_development_dependency 'i18n', '~> 0.7'
36
+ spec.add_development_dependency 'juwelier', '~> 2.4'
37
+ spec.add_development_dependency 'rake', '~> 13.0'
38
+ spec.add_development_dependency 'rspec', '~> 3.0'
39
+ spec.add_development_dependency 'rubocop', '~> 0.82'
40
+ spec.add_development_dependency 'simplecov'
41
41
  end
@@ -3,8 +3,9 @@ require 'i18n/coverage/key_logger'
3
3
  module I18n
4
4
  module Backend
5
5
  module KeyLogger
6
- def translate(*args)
7
- I18n::Coverage::KeyLogger.store_key(args[1])
6
+ def lookup(locale, key, scope = [], options = {})
7
+ key = (Array(scope || []) + [key]).compact.join('.')
8
+ I18n::Coverage::KeyLogger.store_key(key)
8
9
  super
9
10
  end
10
11
  end
@@ -1,11 +1,28 @@
1
- require "i18n"
2
- require "i18n/coverage/version"
3
- require "i18n/coverage/reporter"
4
- require "i18n/backend/key_logger"
1
+ require 'i18n'
2
+ require 'i18n/coverage/version'
3
+ require 'i18n/coverage/reporter'
4
+ require 'i18n/backend/key_logger'
5
+ require 'i18n/coverage/config'
5
6
 
6
7
  module I18n
7
8
  module Coverage
9
+ def self.start
10
+ I18n::Backend::Simple.include I18n::Backend::KeyLogger
11
+ at_exit { I18n::Coverage::Reporter.report }
12
+ end
13
+
14
+ def self.config
15
+ @config ||= Config.new
16
+ end
17
+
18
+ def self.configure
19
+ @config = Config.new
20
+ yield @config if block_given?
21
+ end
8
22
  end
9
23
  end
10
24
 
11
- I18n::Backend::Simple.send(:include, I18n::Backend::KeyLogger) if ENV['I18N_COVERAGE']
25
+ if ENV['I18N_COVERAGE']
26
+ warn 'DEPRECATED: use I18n::Coverage.start instead'
27
+ I18n::Backend::Simple.include I18n::Backend::KeyLogger
28
+ end
@@ -0,0 +1,17 @@
1
+ require 'i18n/coverage/printers/basic_printer'
2
+
3
+ module I18n
4
+ module Coverage
5
+ class Config
6
+ attr_accessor :locale,
7
+ :locale_dir_path,
8
+ :printer
9
+
10
+ def initialize
11
+ self.locale = 'en'
12
+ self.locale_dir_path = 'config/locales'
13
+ self.printer = I18n::Coverage::Printers::BasicPrinter
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,40 +3,48 @@ require 'yaml'
3
3
  module I18n
4
4
  module Coverage
5
5
  class KeyLister
6
- def self.list_keys(locale: 'en', locale_dir_path: 'config/locales')
7
- KeyLister.new(locale, locale_dir_path).list_keys
6
+ def self.list_keys
7
+ KeyLister.new.list_keys
8
8
  end
9
-
10
- def initialize(locale, locale_dir_path)
11
- @locale = locale
12
- @source = YAML.load(File.open(File.expand_path("#{locale_dir_path}/#{locale}.yml")))
9
+
10
+ def initialize
11
+ locale_dir_path = I18n::Coverage.config.locale_dir_path
12
+ @locale_files = Dir.glob("#{locale_dir_path}/**/*.yml")
13
13
  @keys = Set[]
14
14
  end
15
-
15
+
16
16
  def list_keys
17
- visit_childs(path: [])
17
+ @locale_files
18
+ .map(&YAML.method(:load_file))
19
+ .flat_map { |hash| visit_childs(source: hash, path: []) }
20
+
18
21
  @keys
19
22
  end
20
-
23
+
21
24
  private
22
-
23
- def visit_childs(path: )
24
- node = @source.dig(*[@locale, path].flatten.compact)
25
+
26
+ def visit_childs(source:, path:)
27
+ node = source.dig(locale, *path)
28
+
25
29
  if node.respond_to? :keys
26
30
  keys = node.keys
27
31
 
28
32
  if pluralization_keys?(keys)
29
33
  @keys.add(path.join('.'))
30
34
  else
31
- keys.map {|key| visit_childs(path: [path, key].flatten.compact)}
35
+ keys.map { |key| visit_childs(source: source, path: path + [key]) }
32
36
  end
33
- else
37
+ elsif path.count.positive?
34
38
  @keys.add(path.join('.'))
35
39
  end
36
40
  end
37
41
 
38
42
  def pluralization_keys?(keys)
39
- return (keys - ['zero', 'one', 'other']).empty?
43
+ (keys - %w[zero one other]).empty?
44
+ end
45
+
46
+ def locale
47
+ I18n::Coverage.config.locale
40
48
  end
41
49
  end
42
50
  end
@@ -2,27 +2,15 @@ module I18n
2
2
  module Coverage
3
3
  class KeyLogger
4
4
  def self.store_key(key)
5
- KeyLogger.new.store_key(key)
5
+ stored_keys.add(key)
6
6
  end
7
7
 
8
8
  def self.stored_keys
9
- KeyLogger.new.stored_keys
9
+ @stored_keys ||= Set[]
10
10
  end
11
11
 
12
12
  def self.clear_keys
13
- KeyLogger.new.clear_keys
14
- end
15
-
16
- def store_key(key)
17
- stored_keys.add(key)
18
- end
19
-
20
- def clear_keys
21
- stored_keys.clear
22
- end
23
-
24
- def stored_keys
25
- @@stored_keys ||= Set[]
13
+ stored_keys.clear
26
14
  end
27
15
  end
28
16
  end
@@ -0,0 +1,26 @@
1
+ module I18n
2
+ module Coverage
3
+ module Printers
4
+ class BasicPrinter
5
+ def self.print(report)
6
+ new(report).print
7
+ end
8
+
9
+ def initialize(report)
10
+ @report = report
11
+ end
12
+
13
+ def print
14
+ puts ''
15
+ puts "I18n Coverage: #{@report[:percentage_used].round(2)}% of the keys used"
16
+ puts "#{@report[:key_count]} keys found in yml files, #{@report[:used_key_count]} keys used during the tests"
17
+
18
+ return unless @report[:unused_keys]
19
+
20
+ puts 'Unused keys:'
21
+ @report[:unused_keys].map { |k| puts " #{k}" }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,33 @@
1
+ module I18n
2
+ module Coverage
3
+ module Printers
4
+ class FilePrinter
5
+ REPORT_PATH = 'coverage/i18n.json'.freeze
6
+
7
+ def self.print(report)
8
+ new(report).print
9
+ end
10
+
11
+ def initialize(report)
12
+ @report = report
13
+ end
14
+
15
+ def print
16
+ write_report
17
+ print_message
18
+ end
19
+
20
+ def write_report
21
+ FileUtils.mkdir_p(File.dirname(REPORT_PATH))
22
+ File.write(REPORT_PATH, JSON.pretty_generate(@report))
23
+ end
24
+
25
+ def print_message
26
+ puts "Coverage report generated for I18n to #{REPORT_PATH}. " \
27
+ "#{@report[:used_key_count]} / #{@report[:key_count]} keys " \
28
+ "(#{@report[:percentage_used].round(2)}%) covered."
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -4,36 +4,38 @@ require 'i18n/coverage/key_logger'
4
4
  module I18n
5
5
  module Coverage
6
6
  class Reporter
7
- def self.report(locale: 'en', locale_dir_path: 'config/locales')
8
- Reporter.new(locale: locale, locale_dir_path: locale_dir_path).report
7
+ def self.report
8
+ Reporter.new.report
9
9
  end
10
10
 
11
- def initialize(locale: 'en', locale_dir_path: 'config/locales')
12
- @existing_keys = KeyLister.list_keys(locale: locale, locale_dir_path: locale_dir_path)
13
- @used_keys = KeyLogger.stored_keys
14
- @percentage_used = (@used_keys.count.to_f / @existing_keys.count.to_f) * 100
15
- @unused_keys = @existing_keys - @used_keys
11
+ def initialize
12
+ @existing_keys = KeyLister.list_keys
13
+ @stored_keys = KeyLogger.stored_keys
16
14
  end
17
15
 
18
16
  def report
19
- puts ""
20
- puts "I18n Coverage: #{@percentage_used.round(2)}% of the keys used"
21
- puts "#{@existing_keys.count} keys found in yml file, #{@used_keys.count} keys used during the tests"
22
-
23
- if @unused_keys
24
- puts "Unused keys:"
25
- @unused_keys.map {|k| puts " #{k}"}
26
- end
17
+ I18n::Coverage.config.printer.print(hash_report)
27
18
  end
28
19
 
29
20
  def hash_report
21
+ used_keys = @existing_keys - unused_keys
22
+ percentage_used = (used_keys.count.to_f / @existing_keys.count) * 100
23
+
30
24
  {
31
25
  key_count: @existing_keys.count,
32
- used_key_count: @used_keys.count,
33
- percentage_used: @percentage_used,
34
- unused_keys: @unused_keys
26
+ used_key_count: used_keys.count,
27
+ percentage_used: percentage_used,
28
+ unused_keys: unused_keys.to_a
35
29
  }
36
30
  end
31
+
32
+ private
33
+
34
+ def unused_keys
35
+ @unused_keys ||= @existing_keys.reject do |key|
36
+ @stored_keys.any? { |stored_key| key.start_with?(stored_key.to_s) }
37
+ end
38
+ end
37
39
  end
38
40
  end
39
- end
41
+ end
@@ -1,5 +1,5 @@
1
1
  module I18n
2
2
  module Coverage
3
- VERSION = "0.1.1"
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-coverage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiptest
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-27 00:00:00.000000000 Z
11
+ date: 2020-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: i18n
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -25,33 +39,33 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0.7'
27
41
  - !ruby/object:Gem::Dependency
28
- name: bundler
42
+ name: juwelier
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '1.17'
47
+ version: '2.4'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '1.17'
54
+ version: '2.4'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '10.0'
61
+ version: '13.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '10.0'
68
+ version: '13.0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,20 +81,34 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '3.0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: juwelier
84
+ name: rubocop
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '2.4'
89
+ version: '0.82'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '2.4'
83
- description:
96
+ version: '0.82'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description:
84
112
  email:
85
113
  - contact@hiptest.com
86
114
  executables: []
@@ -89,6 +117,7 @@ extra_rdoc_files: []
89
117
  files:
90
118
  - ".gitignore"
91
119
  - ".rspec"
120
+ - ".rubocop.yml"
92
121
  - ".travis.yml"
93
122
  - CHANGELOG.md
94
123
  - Gemfile
@@ -100,8 +129,11 @@ files:
100
129
  - i18n-coverage.gemspec
101
130
  - lib/i18n/backend/key_logger.rb
102
131
  - lib/i18n/coverage.rb
132
+ - lib/i18n/coverage/config.rb
103
133
  - lib/i18n/coverage/key_lister.rb
104
134
  - lib/i18n/coverage/key_logger.rb
135
+ - lib/i18n/coverage/printers/basic_printer.rb
136
+ - lib/i18n/coverage/printers/file_printer.rb
105
137
  - lib/i18n/coverage/reporter.rb
106
138
  - lib/i18n/coverage/version.rb
107
139
  homepage: https://github.com/hiptest/i18n-coverage
@@ -110,7 +142,7 @@ metadata:
110
142
  homepage_uri: https://github.com/hiptest/i18n-coverage
111
143
  source_code_uri: https://github.com/hiptest/i18n-coverage
112
144
  changelog_uri: https://github.com/hiptest/i18n-coverage/blob/master/CHANGELOG.md
113
- post_install_message:
145
+ post_install_message:
114
146
  rdoc_options: []
115
147
  require_paths:
116
148
  - lib
@@ -125,8 +157,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
157
  - !ruby/object:Gem::Version
126
158
  version: '0'
127
159
  requirements: []
128
- rubygems_version: 3.0.3
129
- signing_key:
160
+ rubygems_version: 3.0.6
161
+ signing_key:
130
162
  specification_version: 4
131
163
  summary: Provides a coverage of I18n keys used during test suite
132
164
  test_files: []