simplecov-table 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6e3aafc3c5c93e9bd6d514f083407737abebad68ac733306ab3fe105e77f370
4
- data.tar.gz: 4b9bfcde11e1c38000e7359c0e3b291e07a1a7f37d6e7a109fc5f023a3a8e1da
3
+ metadata.gz: fc28d11cf99048676421d6e706105883378877a788b850714b747743465021fb
4
+ data.tar.gz: 9eac3ca3b0f4cab12ea1bf6f5f202199f0d3d18525bae4ad4838d0bc9f666ed3
5
5
  SHA512:
6
- metadata.gz: 458127c342f2ec2ba66b6084f8224009ac08e8aa5f61029a656c18d6c1261693641884e62874506ee0ca0dc593a3bf79689c673c855a41555ec5e659c4c28237
7
- data.tar.gz: 6dcdc99db04d06658d25e6a35c2fe8c9c4e91c084301740fd3bf60776fb1e517fd2a5d92c9f79e8b51514f40ccb35a9b49aaef61f2164db2f0302218a0f6bdc3
6
+ metadata.gz: a4a677abb3a9ef7e9201afe4d5c6e775d923389bc52bd36e0ff13a2e5313598965f4ad4337b370f49a2164c05b6406055ac98c3bdba997ccb10952bf7c96b99c
7
+ data.tar.gz: c7014aedb4862b108cc267fa7ea5deffa43bd78894bded199d76331358e714ac25a624c6d0502000856d03cc8c61b50197369368064615b0519b67b813018feb
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+ group :development do
3
+ gem 'rake'
4
+ gem 'rspec'
5
+ gem 'simplecov', '~> 0.18'
6
+ end
@@ -0,0 +1,109 @@
1
+ fail 'simplecov-table requires simplecov' unless defined?(SimpleCov)
2
+ require 'io/console'
3
+
4
+ module SimpleCov
5
+ module Formatter
6
+ class TableFormatter
7
+
8
+ def format(coverage)
9
+ if coverage == nil then
10
+ $stderr.puts 'No coverage data'
11
+ return
12
+ end
13
+
14
+ table = {
15
+ 'Files' => ['Files'],
16
+ 'Coverage' => ['Coverage'],
17
+ 'Uncovered lines' => ['Uncovered lines'],
18
+ }
19
+
20
+ coverage.files.each do |file|
21
+ if file.no_lines? then
22
+ continue
23
+ end
24
+ table['Files'].push(File.basename(file.filename))
25
+ table['Coverage'].push(file.covered_percent.round(1).to_s + '%')
26
+ table['Uncovered lines'].push(group_lines(file.missed_lines))
27
+ end
28
+
29
+ print_table(table)
30
+ end
31
+
32
+ private
33
+
34
+ def group_lines(lines)
35
+ if lines.length == 0 then
36
+ return ''
37
+ end
38
+
39
+ groups = []
40
+ group_start = group_end = lines.first.number
41
+
42
+ lines[1..].each do |line|
43
+ if line.number == group_end + 1 then
44
+ group_end = line.number
45
+ else
46
+ add_group(groups, group_start, group_end)
47
+ group_start = group_end = line.number
48
+ end
49
+ end
50
+ # Ensure the last group is closed
51
+ add_group(groups, group_start, group_end)
52
+
53
+ groups.join(',')
54
+ end
55
+
56
+ def add_group(groups, group_start, group_end)
57
+ if group_end == nil || group_end == group_start then
58
+ groups.push(group_start.to_s)
59
+ elsif group_end == group_start + 1
60
+ groups.push(group_start.to_s, group_end.to_s)
61
+ else
62
+ groups.push(group_start.to_s + '-' + group_end.to_s)
63
+ end
64
+ end
65
+
66
+ def print_table(table)
67
+ headers = table.keys
68
+ columns = table.values
69
+
70
+ terminal_width = IO.console.winsize[1]
71
+ columns_widths = columns[0..-2].map { |column| column.map(&:length).max }
72
+ # The last column takes all the remaining horizontal space
73
+ columns_widths.push(terminal_width - (columns_widths.sum + 3*columns_widths.length) - 2)
74
+
75
+ rows = columns.first
76
+ .each_index
77
+ .map { |row_index| get_row(columns.map { |column| column[row_index] }, columns_widths) }
78
+
79
+ print [
80
+ '',
81
+ get_row_separator(columns_widths, '┬'),
82
+ get_row(headers, columns_widths),
83
+ get_row_separator(columns_widths, '┼'),
84
+ rows[1..].join("\n"),
85
+ get_row_separator(columns_widths, '┴'),
86
+ "\n",
87
+ ].join("\n")
88
+ end
89
+
90
+ def get_row(cells, columns_widths)
91
+ row = cells
92
+ .map.with_index { |cell, index| pad_string(cell, columns_widths[index]) }
93
+ .join(' │ ')
94
+ ' ' + row
95
+ end
96
+
97
+ def get_row_separator(columns_widths, cell_separator)
98
+ columns_widths
99
+ .map { |width| '─' * (width + 2) }
100
+ .join(cell_separator)
101
+ end
102
+
103
+ def pad_string(string, length)
104
+ string + ' ' * (length - string.length)
105
+ end
106
+
107
+ end
108
+ end
109
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'simplecov-table'
3
- s.version = '1.0.0'
3
+ s.version = '1.0.1'
4
4
  s.summary = 'A custom SimpleCov formatter to display summaries of coverage reports in table format.'
5
5
  s.description = 'A custom SimpleCov formatter that displays table-formatted summaries of your coverage reports in the terminal. It prints the total coverage ratio of each source file, along with a compressed list of the uncovered lines.'
6
6
  s.authors = ['cheap glitch']
@@ -9,13 +9,9 @@ Gem::Specification.new do |s|
9
9
  s.license = 'ISC'
10
10
  s.require_path = 'lib'
11
11
  s.files = Dir[
12
- 'LICENSE',
13
- 'lib/***/*.rb',
14
- 'spec/**/*.rb',
12
+ 'lib/**/*.rb',
15
13
  'simplecov-table.gemspec',
16
- ]
17
- s.extra_rdoc_files = [
14
+ 'Gemfile',
18
15
  'LICENSE',
19
- 'README.md',
20
16
  ]
21
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplecov-table
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - cheap glitch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-16 00:00:00.000000000 Z
11
+ date: 2022-02-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A custom SimpleCov formatter that displays table-formatted summaries
14
14
  of your coverage reports in the terminal. It prints the total coverage ratio of
@@ -16,17 +16,12 @@ description: A custom SimpleCov formatter that displays table-formatted summarie
16
16
  email: cheap.glitch@gmail.com
17
17
  executables: []
18
18
  extensions: []
19
- extra_rdoc_files:
20
- - LICENSE
21
- - README.md
19
+ extra_rdoc_files: []
22
20
  files:
21
+ - Gemfile
23
22
  - LICENSE
24
- - README.md
23
+ - lib/simplecov-table.rb
25
24
  - simplecov-table.gemspec
26
- - spec/fixtures/bar.rb
27
- - spec/fixtures/foo.rb
28
- - spec/helpers.rb
29
- - spec/simplecov-table_spec.rb
30
25
  homepage: https://github.com/cheap-glitch/simplecov-table
31
26
  licenses:
32
27
  - ISC
data/README.md DELETED
@@ -1,65 +0,0 @@
1
- # 📊 simplecov-table
2
-
3
- ![License](https://badgen.net/github/license/cheap-glitch/simplecov-table?color=green)
4
- ![Latest release](https://badgen.net/github/release/cheap-glitch/simplecov-table?color=green)
5
-
6
- This is a custom [SimpleCov](https://github.com/simplecov-ruby/simplecov)
7
- formatter that displays table-formatted summaries of your coverage reports in
8
- the terminal. It prints the total coverage ratio of each source file, along with
9
- a compressed list of the uncovered lines.
10
-
11
- ```text
12
- ────────────────────┬──────────┬──────────────────────────────────────
13
- Files │ Coverage │ Uncovered lines
14
- ────────────────────┼──────────┼──────────────────────────────────────
15
- lib/foo.rb │ 78.0% │ 11,12,20-27
16
- lib/foo/bar.rb │ 100.0% │
17
- lib/foo/baz.rb │ 33.5% │ 3,5,63-75,122,128
18
- ────────────────────┴──────────┴──────────────────────────────────────
19
- ```
20
-
21
- ## Installation
22
-
23
- ```shell
24
- gem install simplecov-table
25
- ```
26
-
27
- ## Usage
28
-
29
- ```ruby
30
- require 'simplecov'
31
- require 'simplecov-table'
32
-
33
- SimpleCov.formatter = SimpleCov::Formatter::TableFormatter
34
- SimpleCov.start
35
- ```
36
-
37
- Or, if you want to use several formatters:
38
-
39
- ```ruby
40
- require 'simplecov'
41
- require 'simplecov-table'
42
-
43
- SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new([
44
- SimpleCov::Formatter::HTMLFormatter,
45
- SimpleCov::Formatter::TableFormatter,
46
- ])
47
- SimpleCov.start
48
- ```
49
-
50
- ## Changelog
51
-
52
- See the full changelog [here](https://github.com/cheap-glitch/simplecov-table/releases).
53
-
54
- ## Contributing
55
-
56
- Contributions are welcomed! Please open an issue before submitting substantial changes.
57
-
58
- ## Related
59
-
60
- * [simplecov-erb](https://github.com/kpaulisse/simplecov-erb) - Flexible plain-text formatter that uses ERB templates
61
- * [simplecov-lcov](https://github.com/fortissimo1997/simplecov-lcov) - Simple LCOV formatter
62
-
63
- ## License
64
-
65
- ISC
data/spec/fixtures/bar.rb DELETED
@@ -1,17 +0,0 @@
1
- class Bar
2
- def uncovered_1
3
- "foo: #{@foo}"
4
- end
5
-
6
- def bar
7
- @a = 'bar'
8
- end
9
-
10
- def uncovered_2(a)
11
- @a = a
12
- @b = 'baz'
13
- @c = false
14
- end
15
- end
16
-
17
- Bar.new.bar
data/spec/fixtures/foo.rb DELETED
@@ -1,22 +0,0 @@
1
- class Foo
2
- def foo
3
- "foo: #{@foo}"
4
- end
5
-
6
- def bar
7
- @a = 'bar'
8
- end
9
-
10
- def baz(b)
11
- @a = b
12
- end
13
-
14
- def uncovered
15
- @a = 'baz'
16
- end
17
- end
18
-
19
- Foo.new.foo
20
- Foo.new.foo
21
- Foo.new.bar
22
- Foo.new.baz 'hello'
data/spec/helpers.rb DELETED
@@ -1,26 +0,0 @@
1
- # Taken from https://github.com/cldwalker/hirb/blob/master/test/test_helper.rb
2
- # Copyright (c) 2010 Gabriel Horner
3
-
4
- require 'stringio'
5
-
6
- def capture_stdout(&block)
7
- original_stdout = $stdout
8
- $stdout = fake = StringIO.new
9
- begin
10
- yield
11
- ensure
12
- $stdout = original_stdout
13
- end
14
- fake.string
15
- end
16
-
17
- def capture_stderr(&block)
18
- original_stderr = $stderr
19
- $stderr = fake = StringIO.new
20
- begin
21
- yield
22
- ensure
23
- $stderr = original_stderr
24
- end
25
- fake.string
26
- end
@@ -1,37 +0,0 @@
1
- require 'simplecov'
2
-
3
- require_relative 'helpers'
4
- require_relative '../lib/simplecov-table'
5
-
6
- FIXTURES_COVERAGE_DIR = 'spec/coverage'
7
-
8
- module SimpleCov::Formatter
9
- describe TableFormatter do
10
-
11
- before(:example) do
12
- FileUtils.remove_dir(FIXTURES_COVERAGE_DIR, true) if Dir.exist?(FIXTURES_COVERAGE_DIR)
13
- SimpleCov.coverage_dir FIXTURES_COVERAGE_DIR
14
- end
15
-
16
- it 'prints an error when there is no data' do
17
- output = capture_stderr { TableFormatter.new.format(SimpleCov.result) }
18
- expect(output).to eq("No coverage data\n")
19
- end
20
-
21
- it 'prints a pretty table' do
22
- SimpleCov.start
23
- load 'fixtures/foo.rb'
24
- output = capture_stdout { TableFormatter.new.format(SimpleCov.result) }
25
- expect(output).to match(/^ Files │ Coverage │ Uncovered lines\s+$/m)
26
- expect(output).to match(/^ foo\.rb │ 92\.3% │ 15\s+$/m)
27
- end
28
-
29
- it 'groups adjacent uncovered lines together' do
30
- SimpleCov.start
31
- load 'fixtures/bar.rb'
32
- output = capture_stdout { TableFormatter.new.format(SimpleCov.result) }
33
- expect(output).to match(/^ bar\.rb │ 60\.0% │ 3,11-13\s+$/m)
34
- end
35
-
36
- end
37
- end