tabled 0.0.5 → 0.0.6
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 +4 -4
- data/.github/workflows/codemetrics.yml +24 -0
- data/.github/workflows/linters.yml +2 -1
- data/.gitignore +2 -1
- data/.rubocop_todo.yml +35 -19
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +44 -28
- data/README.md +26 -3
- data/demo.rb +1 -1
- data/lib/file_builders/base_file_builder.rb +17 -0
- data/lib/file_builders/csv_file_builder.rb +25 -0
- data/lib/file_builders/json_file_builder.rb +28 -0
- data/lib/helpers.rb +5 -4
- data/lib/tabled.rb +7 -4
- data/lib/template.rb +2 -2
- data/sending_report.sh +9 -0
- data/tabled.gemspec +2 -3
- metadata +7 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 724a82614926269cb03016b9f3d8b7115d7d2b5257427b35b2653e5ddc159b07
|
|
4
|
+
data.tar.gz: 7fbf7a9518cd7a5421cc3bb8575f6c43f601ee7e42167bfa17ca5a34fb557cb6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4e0a7bb5e09def2c59446434d02ede9b7973a307bbc3bbdd3d033aeb14f39f7c152bd856a452e2c56471da1a2b33833df29c8686522cc876262c64ee39f3288e
|
|
7
|
+
data.tar.gz: 7683d779cd2241c372fc292c33f068508f3338c6a819860e99e1fab5bfbcb22d8162eef0be12144b9b8cf7d91444fb5ab91deb2b2f6d00324f332037e010eb2c
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: CodeMetrics report sending
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
|
|
14
|
+
report_sending:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v3
|
|
18
|
+
- name: Set up Ruby
|
|
19
|
+
uses: ruby/setup-ruby@v1
|
|
20
|
+
with:
|
|
21
|
+
ruby-version: 3.0
|
|
22
|
+
bundler-cache: true
|
|
23
|
+
|
|
24
|
+
- run: sh ./sending_report.sh
|
|
@@ -30,13 +30,14 @@ jobs:
|
|
|
30
30
|
with:
|
|
31
31
|
ruby-version: ${{ matrix.ruby-version }}
|
|
32
32
|
bundler-cache: true
|
|
33
|
+
- run: bundle exec rubocop
|
|
33
34
|
|
|
34
35
|
test:
|
|
35
36
|
runs-on: ${{ matrix.os }}
|
|
36
37
|
strategy:
|
|
37
38
|
matrix:
|
|
38
39
|
os: [ubuntu-latest, macos-latest]
|
|
39
|
-
ruby-version: ['2.
|
|
40
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
|
40
41
|
steps:
|
|
41
42
|
- uses: actions/checkout@v3
|
|
42
43
|
- name: Set up Ruby
|
data/.gitignore
CHANGED
data/.rubocop_todo.yml
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config --auto-gen-only-exclude`
|
|
3
|
-
# on
|
|
3
|
+
# on 2023-09-06 20:39:31 UTC using RuboCop version 1.56.2.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
+
# Offense count: 4
|
|
10
|
+
# Configuration parameters: EnforcedStyle, AllowedGems, Include.
|
|
11
|
+
# SupportedStyles: Gemfile, gems.rb, gemspec
|
|
12
|
+
# Include: **/*.gemspec, **/Gemfile, **/gems.rb
|
|
13
|
+
Gemspec/DevelopmentDependencies:
|
|
14
|
+
Exclude:
|
|
15
|
+
- 'tabled.gemspec'
|
|
16
|
+
|
|
9
17
|
# Offense count: 1
|
|
10
|
-
# Configuration parameters: Include.
|
|
18
|
+
# Configuration parameters: Severity, Include.
|
|
11
19
|
# Include: **/*.gemspec
|
|
12
20
|
Gemspec/RequiredRubyVersion:
|
|
13
21
|
Exclude:
|
|
14
22
|
- 'tabled.gemspec'
|
|
15
23
|
|
|
16
|
-
# Offense count:
|
|
17
|
-
# Configuration parameters:
|
|
24
|
+
# Offense count: 4
|
|
25
|
+
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
|
|
18
26
|
Metrics/AbcSize:
|
|
19
27
|
Exclude:
|
|
20
28
|
- 'lib/content_shaper.rb'
|
|
29
|
+
- 'lib/file_builders/csv_file_builder.rb'
|
|
21
30
|
- 'lib/helpers.rb'
|
|
22
31
|
|
|
23
|
-
# Offense count: 3
|
|
24
|
-
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
|
|
25
|
-
# IgnoredMethods: refine
|
|
26
|
-
Metrics/BlockLength:
|
|
27
|
-
Exclude:
|
|
28
|
-
- '**/*.gemspec'
|
|
29
|
-
- 'spec/framed/tabled_spec.rb'
|
|
30
|
-
- 'spec/non_framed/tabled_spec.rb'
|
|
31
|
-
|
|
32
32
|
# Offense count: 1
|
|
33
|
-
# Configuration parameters:
|
|
33
|
+
# Configuration parameters: AllowedMethods, AllowedPatterns, Max.
|
|
34
34
|
Metrics/CyclomaticComplexity:
|
|
35
35
|
Exclude:
|
|
36
36
|
- 'lib/helpers.rb'
|
|
37
37
|
|
|
38
38
|
# Offense count: 5
|
|
39
|
-
# Configuration parameters: CountComments, Max, CountAsOne,
|
|
39
|
+
# Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns.
|
|
40
40
|
Metrics/MethodLength:
|
|
41
41
|
Exclude:
|
|
42
42
|
- 'lib/content_shaper.rb'
|
|
@@ -44,18 +44,31 @@ Metrics/MethodLength:
|
|
|
44
44
|
- 'spec/factories/factory_data.rb'
|
|
45
45
|
|
|
46
46
|
# Offense count: 1
|
|
47
|
-
# Configuration parameters:
|
|
47
|
+
# Configuration parameters: AllowedMethods, AllowedPatterns, Max.
|
|
48
48
|
Metrics/PerceivedComplexity:
|
|
49
49
|
Exclude:
|
|
50
50
|
- 'lib/helpers.rb'
|
|
51
51
|
|
|
52
|
-
# Offense count:
|
|
52
|
+
# Offense count: 4
|
|
53
53
|
# Configuration parameters: Max, CountAsOne.
|
|
54
54
|
RSpec/ExampleLength:
|
|
55
55
|
Exclude:
|
|
56
|
-
- 'spec/
|
|
56
|
+
- 'spec/integration/file_builders/export_csv_spec.rb'
|
|
57
|
+
- 'spec/integration/file_builders/export_json_spec.rb'
|
|
58
|
+
- 'spec/unit/tabled_spec.rb'
|
|
59
|
+
|
|
60
|
+
# Offense count: 1
|
|
61
|
+
RSpec/MultipleDescribes:
|
|
62
|
+
Exclude:
|
|
63
|
+
- 'spec/integration/tabled_spec.rb'
|
|
64
|
+
|
|
65
|
+
# Offense count: 7
|
|
66
|
+
RSpec/RepeatedDescription:
|
|
67
|
+
Exclude:
|
|
68
|
+
- 'spec/integration/tabled_spec.rb'
|
|
69
|
+
- 'spec/unit/tabled_spec.rb'
|
|
57
70
|
|
|
58
|
-
# Offense count:
|
|
71
|
+
# Offense count: 12
|
|
59
72
|
# Configuration parameters: AllowedConstants.
|
|
60
73
|
Style/Documentation:
|
|
61
74
|
Exclude:
|
|
@@ -63,6 +76,9 @@ Style/Documentation:
|
|
|
63
76
|
- 'test/**/*'
|
|
64
77
|
- 'bin/tabled'
|
|
65
78
|
- 'lib/content_shaper.rb'
|
|
79
|
+
- 'lib/file_builders/base_file_builder.rb'
|
|
80
|
+
- 'lib/file_builders/csv_file_builder.rb'
|
|
81
|
+
- 'lib/file_builders/json_file_builder.rb'
|
|
66
82
|
- 'lib/helpers.rb'
|
|
67
83
|
- 'lib/parsers/csv_parser.rb'
|
|
68
84
|
- 'lib/tabled.rb'
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,59 +1,75 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
tabled (0.0.
|
|
4
|
+
tabled (0.0.6)
|
|
5
5
|
dry-cli
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: http://rubygems.org/
|
|
9
9
|
specs:
|
|
10
10
|
ast (2.4.2)
|
|
11
|
+
base64 (0.1.1)
|
|
11
12
|
diff-lcs (1.5.0)
|
|
12
13
|
docile (1.4.0)
|
|
13
14
|
dry-cli (1.0.0)
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
json (2.6.3)
|
|
16
|
+
language_server-protocol (3.17.0.3)
|
|
17
|
+
parallel (1.23.0)
|
|
18
|
+
parser (3.2.2.3)
|
|
16
19
|
ast (~> 2.4.1)
|
|
20
|
+
racc
|
|
21
|
+
racc (1.7.1)
|
|
17
22
|
rainbow (3.1.1)
|
|
18
|
-
regexp_parser (2.
|
|
19
|
-
rexml (3.2.
|
|
20
|
-
rspec (3.
|
|
21
|
-
rspec-core (~> 3.
|
|
22
|
-
rspec-expectations (~> 3.
|
|
23
|
-
rspec-mocks (~> 3.
|
|
24
|
-
rspec-core (3.
|
|
25
|
-
rspec-support (~> 3.
|
|
26
|
-
rspec-expectations (3.
|
|
23
|
+
regexp_parser (2.8.1)
|
|
24
|
+
rexml (3.2.6)
|
|
25
|
+
rspec (3.12.0)
|
|
26
|
+
rspec-core (~> 3.12.0)
|
|
27
|
+
rspec-expectations (~> 3.12.0)
|
|
28
|
+
rspec-mocks (~> 3.12.0)
|
|
29
|
+
rspec-core (3.12.2)
|
|
30
|
+
rspec-support (~> 3.12.0)
|
|
31
|
+
rspec-expectations (3.12.3)
|
|
27
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
28
|
-
rspec-support (~> 3.
|
|
29
|
-
rspec-mocks (3.
|
|
33
|
+
rspec-support (~> 3.12.0)
|
|
34
|
+
rspec-mocks (3.12.6)
|
|
30
35
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
31
|
-
rspec-support (~> 3.
|
|
32
|
-
rspec-support (3.
|
|
33
|
-
rubocop (1.
|
|
36
|
+
rspec-support (~> 3.12.0)
|
|
37
|
+
rspec-support (3.12.1)
|
|
38
|
+
rubocop (1.56.2)
|
|
39
|
+
base64 (~> 0.1.1)
|
|
40
|
+
json (~> 2.3)
|
|
41
|
+
language_server-protocol (>= 3.17.0)
|
|
34
42
|
parallel (~> 1.10)
|
|
35
|
-
parser (>= 3.
|
|
43
|
+
parser (>= 3.2.2.3)
|
|
36
44
|
rainbow (>= 2.2.2, < 4.0)
|
|
37
45
|
regexp_parser (>= 1.8, < 3.0)
|
|
38
46
|
rexml (>= 3.2.5, < 4.0)
|
|
39
|
-
rubocop-ast (>= 1.
|
|
47
|
+
rubocop-ast (>= 1.28.1, < 2.0)
|
|
40
48
|
ruby-progressbar (~> 1.7)
|
|
41
|
-
unicode-display_width (>=
|
|
42
|
-
rubocop-ast (1.
|
|
43
|
-
parser (>= 3.
|
|
44
|
-
rubocop-
|
|
45
|
-
rubocop (~> 1.
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
50
|
+
rubocop-ast (1.29.0)
|
|
51
|
+
parser (>= 3.2.1.0)
|
|
52
|
+
rubocop-capybara (2.18.0)
|
|
53
|
+
rubocop (~> 1.41)
|
|
54
|
+
rubocop-factory_bot (2.23.1)
|
|
55
|
+
rubocop (~> 1.33)
|
|
56
|
+
rubocop-rspec (2.23.2)
|
|
57
|
+
rubocop (~> 1.33)
|
|
58
|
+
rubocop-capybara (~> 2.17)
|
|
59
|
+
rubocop-factory_bot (~> 2.22)
|
|
60
|
+
ruby-progressbar (1.13.0)
|
|
61
|
+
simplecov (0.22.0)
|
|
48
62
|
docile (~> 1.1)
|
|
49
63
|
simplecov-html (~> 0.11)
|
|
50
64
|
simplecov_json_formatter (~> 0.1)
|
|
51
65
|
simplecov-html (0.12.3)
|
|
52
66
|
simplecov_json_formatter (0.1.4)
|
|
53
|
-
unicode-display_width (2.
|
|
67
|
+
unicode-display_width (2.4.2)
|
|
54
68
|
|
|
55
69
|
PLATFORMS
|
|
56
|
-
|
|
70
|
+
arm64-darwin-22
|
|
71
|
+
x86_64-darwin-20
|
|
72
|
+
x86_64-linux
|
|
57
73
|
|
|
58
74
|
DEPENDENCIES
|
|
59
75
|
rspec
|
data/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
# Description
|
|
6
|
-
Library can be used to render your data to a console. Though it's quite simple, but has many features.
|
|
6
|
+
Library can be used to render your data to a console. Though it's quite simple, but has many features.
|
|
7
7
|
|
|
8
8
|
# How to use
|
|
9
9
|
1. Install the gem `bundle add tabled` or `gem install tabled`
|
|
@@ -11,7 +11,7 @@ Library can be used to render your data to a console. Though it's quite simple,
|
|
|
11
11
|
3. Pass to the application array of rows. Each row may have any amount of columns and optional footer text.
|
|
12
12
|
|
|
13
13
|
### Params for Tabled instance
|
|
14
|
-
Tabled accepts two params. Data which is prohibited and options.
|
|
14
|
+
Tabled accepts two params. Data which is prohibited and options.
|
|
15
15
|
Available options:
|
|
16
16
|
1. `framed` - optional, default is true
|
|
17
17
|
2. `row_separator` - optional, default is `-`. Can be `nil` if you don't need separate rows.
|
|
@@ -27,7 +27,7 @@ data = [
|
|
|
27
27
|
["Alan", "23 years", "Male"],
|
|
28
28
|
]
|
|
29
29
|
|
|
30
|
-
Tabled.new(data, framed: false,
|
|
30
|
+
Tabled.new(data, framed: false,
|
|
31
31
|
row_separator: nil).print_to_console
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -59,6 +59,29 @@ Result
|
|
|
59
59
|
----------------------------------------------------------------
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
+
### Export data to CSV or JSON file
|
|
63
|
+
Passed data can be exported as a file. Available formats are `csv` and `json`. Both parameters are optional. By default, file will be saved in the current directory and with file name `tabled.csv` and file format is `CSV`.
|
|
64
|
+
|
|
65
|
+
```ruby
|
|
66
|
+
# CSV
|
|
67
|
+
data = [
|
|
68
|
+
["Helena", "20 years", "Female"],
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
Tabled
|
|
72
|
+
.new(data)
|
|
73
|
+
.export_to_csv
|
|
74
|
+
|
|
75
|
+
# JSON
|
|
76
|
+
data = [
|
|
77
|
+
["Helena", "20 years", "Female"],
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
Tabled
|
|
81
|
+
.new(data, titles: ['Name', 'Age', 'Gender'])
|
|
82
|
+
.export_to_csv(format: :json)
|
|
83
|
+
```
|
|
84
|
+
|
|
62
85
|
# Printing CSV files to console
|
|
63
86
|
As a part of the gem `tabled` binary is included. So, you can basicaly run it like:
|
|
64
87
|
```shell
|
data/demo.rb
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'csv_file_builder'
|
|
4
|
+
require_relative 'json_file_builder'
|
|
5
|
+
|
|
6
|
+
module BaseFileBuilder
|
|
7
|
+
def export_to_file(file_name: 'tabled.csv', format: :csv)
|
|
8
|
+
case format
|
|
9
|
+
when :csv
|
|
10
|
+
FileBuilders::CSVFileBuilder.new(data, file_name, options).export_to_file
|
|
11
|
+
when :json
|
|
12
|
+
FileBuilders::JSONFileBuilder.new(data, file_name, options).export_to_file
|
|
13
|
+
else
|
|
14
|
+
raise 'Not implemented yet'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module FileBuilders
|
|
4
|
+
class CSVFileBuilder
|
|
5
|
+
attr_reader :data, :file_name, :options
|
|
6
|
+
|
|
7
|
+
def initialize(data, file_name, options)
|
|
8
|
+
@data = data
|
|
9
|
+
@file_name = file_name
|
|
10
|
+
@options = options
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def export_to_file
|
|
14
|
+
titles_row = (options[:titles].join(';').concat(';').concat("\n") if options[:titles].size.positive?)
|
|
15
|
+
|
|
16
|
+
data_without_options = data.map { |row| row[0...-1] }
|
|
17
|
+
csv_data = data_without_options.map { |row| row.join(';').concat(';') }.join("\n")
|
|
18
|
+
|
|
19
|
+
File.open(file_name, 'a') do |file|
|
|
20
|
+
file << titles_row
|
|
21
|
+
file << csv_data
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module FileBuilders
|
|
6
|
+
class JSONFileBuilder
|
|
7
|
+
attr_reader :data, :file_name, :options, :titles
|
|
8
|
+
|
|
9
|
+
def initialize(data, file_name, options)
|
|
10
|
+
@data = data
|
|
11
|
+
@file_name = file_name
|
|
12
|
+
@options = options
|
|
13
|
+
@titles = options[:titles]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def export_to_file
|
|
17
|
+
return puts 'For JSON format titles are required' if titles.empty?
|
|
18
|
+
|
|
19
|
+
json_data = data.inject([]) do |result, row|
|
|
20
|
+
result << titles.zip(row).to_h
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
File.open(file_name, 'a') do |file|
|
|
24
|
+
file << JSON.pretty_generate(json_data)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/helpers.rb
CHANGED
|
@@ -9,15 +9,16 @@ class Tabled
|
|
|
9
9
|
data.each do |row|
|
|
10
10
|
# [0..-2] Due to reason last item is always hash with row params
|
|
11
11
|
row[0..-2].each_with_index do |column, index|
|
|
12
|
-
|
|
12
|
+
column_size = column.to_s.gsub(/\e\[[0-9;]*m/, '').size
|
|
13
|
+
columns_width[index] = column_size if column_size > (columns_width[index] || 0)
|
|
13
14
|
end
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
# If titles longer than data use titles column width
|
|
17
18
|
columns_width.each_with_index do |_column_size, index|
|
|
18
|
-
title_size = options[:titles].fetch(index, '').size
|
|
19
|
+
title_size = options[:titles].fetch(index, '').gsub(/\e\[[0-9;]*m/, '').size
|
|
19
20
|
|
|
20
|
-
columns_width[index] =
|
|
21
|
+
columns_width[index] = [title_size, columns_width[index]].max
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
# Add 1 space in the end of each column
|
|
@@ -28,7 +29,7 @@ class Tabled
|
|
|
28
29
|
# Add to the last column footer spaces if needed
|
|
29
30
|
longest_footer_size = # longest footers
|
|
30
31
|
data.map do |row|
|
|
31
|
-
row.last.fetch(:footer, '')
|
|
32
|
+
row.last.fetch(:footer, '').gsub(/\e\[[0-9;]*m/, '')
|
|
32
33
|
end.max.to_s.size + 1
|
|
33
34
|
last_col_spaces = longest_footer_size - columns_width.sum # spaces required to the end
|
|
34
35
|
columns_width[-1] = columns_width.last + last_col_spaces if last_col_spaces.positive?
|
data/lib/tabled.rb
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative '
|
|
5
|
-
require_relative '
|
|
3
|
+
require_relative 'template'
|
|
4
|
+
require_relative 'helpers'
|
|
5
|
+
require_relative 'content_shaper'
|
|
6
|
+
require_relative 'file_builders/base_file_builder'
|
|
6
7
|
|
|
7
8
|
class Tabled
|
|
9
|
+
include BaseFileBuilder
|
|
10
|
+
|
|
8
11
|
DEFAULT_OPTIONS = { framed: true, row_separator: '-', titles: [] }.freeze
|
|
9
|
-
attr_accessor :data, :columns_width, :content, :options
|
|
12
|
+
attr_accessor :data, :data_without_options, :columns_width, :content, :options
|
|
10
13
|
|
|
11
14
|
def initialize(data, **options)
|
|
12
15
|
@options = DEFAULT_OPTIONS.merge(options)
|
data/lib/template.rb
CHANGED
|
@@ -6,7 +6,7 @@ class Tabled
|
|
|
6
6
|
# | Luke Skywalker 172 male |
|
|
7
7
|
def self.render(row, columns_width, _is_framed)
|
|
8
8
|
row[0..-2].map.with_index do |column, index|
|
|
9
|
-
spaces = ' ' * (columns_width[index] - column.to_s.size)
|
|
9
|
+
spaces = ' ' * (columns_width[index] - column.to_s.gsub(/\e\[[0-9;]*m/, '').size)
|
|
10
10
|
column.to_s + spaces
|
|
11
11
|
end.join
|
|
12
12
|
end
|
|
@@ -29,7 +29,7 @@ class Tabled
|
|
|
29
29
|
return nil unless row.last.fetch(:footer, false)
|
|
30
30
|
|
|
31
31
|
footer = row.last.fetch(:footer)
|
|
32
|
-
required_spaces = columns_width.sum - footer.size
|
|
32
|
+
required_spaces = columns_width.sum - footer.gsub(/\e\[[0-9;]*m/, '').size
|
|
33
33
|
footer + (' ' * required_spaces)
|
|
34
34
|
end
|
|
35
35
|
end
|
data/sending_report.sh
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
rm .rubocop.yml
|
|
2
|
+
|
|
3
|
+
bundle exec rubocop -f json -o rubocop-report.json
|
|
4
|
+
|
|
5
|
+
curl --location 'https://codemetrics.dev/reports' \
|
|
6
|
+
--form 'report=@"./rubocop-report.json"' \
|
|
7
|
+
--form 'tool="rubocop"' \
|
|
8
|
+
--form 'token="SFMyNTY.g2gDYQduBgCX0w9migFiAAFRgA.w0a9y7VQGzfLkr2G1Cxxwm7m9uTcl99c24dh3zpKrl0"' \
|
|
9
|
+
--form 'branch="'"$GITHUB_HEAD_REF"'"'
|
data/tabled.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'tabled'
|
|
5
|
-
s.version = '0.0.
|
|
5
|
+
s.version = '0.0.6'
|
|
6
6
|
s.summary = 'Library for rendering pretty tables in console'
|
|
7
7
|
s.description = 'Library can be used to render your data to a console. Being quite simple it has many features.'
|
|
8
8
|
s.authors = ['Max Rukomoynikov']
|
|
@@ -17,8 +17,7 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
'rubygems_mfa_required' => 'true' }
|
|
18
18
|
s.license = 'MIT'
|
|
19
19
|
|
|
20
|
-
s.add_dependency 'dry-cli'
|
|
21
|
-
|
|
20
|
+
s.add_dependency 'dry-cli' # For CLI ap
|
|
22
21
|
s.add_development_dependency 'rspec'
|
|
23
22
|
s.add_development_dependency 'rubocop'
|
|
24
23
|
s.add_development_dependency 'rubocop-rspec'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tabled
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Max Rukomoynikov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-09-
|
|
11
|
+
date: 2023-09-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dry-cli
|
|
@@ -88,6 +88,7 @@ executables:
|
|
|
88
88
|
extensions: []
|
|
89
89
|
extra_rdoc_files: []
|
|
90
90
|
files:
|
|
91
|
+
- ".github/workflows/codemetrics.yml"
|
|
91
92
|
- ".github/workflows/linters.yml"
|
|
92
93
|
- ".gitignore"
|
|
93
94
|
- ".rspec"
|
|
@@ -100,10 +101,14 @@ files:
|
|
|
100
101
|
- bin/tabled
|
|
101
102
|
- demo.rb
|
|
102
103
|
- lib/content_shaper.rb
|
|
104
|
+
- lib/file_builders/base_file_builder.rb
|
|
105
|
+
- lib/file_builders/csv_file_builder.rb
|
|
106
|
+
- lib/file_builders/json_file_builder.rb
|
|
103
107
|
- lib/helpers.rb
|
|
104
108
|
- lib/parsers/csv_parser.rb
|
|
105
109
|
- lib/tabled.rb
|
|
106
110
|
- lib/template.rb
|
|
111
|
+
- sending_report.sh
|
|
107
112
|
- tabled.gemspec
|
|
108
113
|
homepage: https://rubygems.org/gems/tabled
|
|
109
114
|
licenses:
|