tabled 0.0.1
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 +7 -0
- data/.github/workflows/linters.yml +35 -0
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +42 -0
- data/lib/tabled.rb +55 -0
- data/lib/template.rb +24 -0
- data/tabled.gemspec +19 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c9ad158738f50082bbcc59da4ab6e84e6d1d3a336bd4168623c72a037144df34
|
4
|
+
data.tar.gz: 679b46c1e778597edcb871484106aaeaccc70a8153ad75749f8116eae563adbe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cc7dc1ee13cd9f4085ada67db778e79153f4bec054501d745694644155186fff9a46335120f384c796c42d55cf69d641d358865a74c7fd7edbc86835b67dfed6
|
7
|
+
data.tar.gz: 5eda9d7584f0bd89813ff666f840d281e56fd1f5cc2617eedf8b7366da258b830a3774752b74ccbdb87921fb35e5a70a0651736f4c45c1287af5055c428d0193
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ main ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ main ]
|
15
|
+
|
16
|
+
permissions:
|
17
|
+
contents: read
|
18
|
+
|
19
|
+
jobs:
|
20
|
+
test:
|
21
|
+
|
22
|
+
runs-on: ubuntu-latest
|
23
|
+
strategy:
|
24
|
+
matrix:
|
25
|
+
ruby-version: ['2.6', '2.7', '3.0']
|
26
|
+
|
27
|
+
steps:
|
28
|
+
- uses: actions/checkout@v3
|
29
|
+
- name: Set up Ruby
|
30
|
+
uses: ruby/setup-ruby@2b019609e2b0f1ea1a2bc8ca11cb82ab46ada124
|
31
|
+
with:
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
34
|
+
- name: Run tests
|
35
|
+
run: bundle exec rspec
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
tabled (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
byebug (11.1.3)
|
10
|
+
diff-lcs (1.5.0)
|
11
|
+
docile (1.4.0)
|
12
|
+
rspec (3.11.0)
|
13
|
+
rspec-core (~> 3.11.0)
|
14
|
+
rspec-expectations (~> 3.11.0)
|
15
|
+
rspec-mocks (~> 3.11.0)
|
16
|
+
rspec-core (3.11.0)
|
17
|
+
rspec-support (~> 3.11.0)
|
18
|
+
rspec-expectations (3.11.0)
|
19
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
20
|
+
rspec-support (~> 3.11.0)
|
21
|
+
rspec-mocks (3.11.1)
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
+
rspec-support (~> 3.11.0)
|
24
|
+
rspec-support (3.11.0)
|
25
|
+
simplecov (0.21.2)
|
26
|
+
docile (~> 1.1)
|
27
|
+
simplecov-html (~> 0.11)
|
28
|
+
simplecov_json_formatter (~> 0.1)
|
29
|
+
simplecov-html (0.12.3)
|
30
|
+
simplecov_json_formatter (0.1.4)
|
31
|
+
|
32
|
+
PLATFORMS
|
33
|
+
ruby
|
34
|
+
|
35
|
+
DEPENDENCIES
|
36
|
+
byebug
|
37
|
+
rspec
|
38
|
+
simplecov
|
39
|
+
tabled!
|
40
|
+
|
41
|
+
BUNDLED WITH
|
42
|
+
2.2.3
|
data/lib/tabled.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'byebug'
|
2
|
+
require 'template'
|
3
|
+
|
4
|
+
class Tabled
|
5
|
+
DEFAULT_OPTIONS = { borders: false }
|
6
|
+
attr_accessor :data, :columns_width, :content, :options
|
7
|
+
|
8
|
+
def initialize(data, **options)
|
9
|
+
@options = DEFAULT_OPTIONS.merge(options)
|
10
|
+
@data = data
|
11
|
+
@columns_width = []
|
12
|
+
|
13
|
+
convert_to_required_structure
|
14
|
+
calculate_columns_width
|
15
|
+
prepare_content
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def print_to_console
|
20
|
+
print content.join("\n")
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def convert_to_required_structure
|
26
|
+
self.data = data.map { |row|
|
27
|
+
row << {} unless row.last.is_a?(Hash)
|
28
|
+
row
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def calculate_columns_width
|
33
|
+
data.each do |row|
|
34
|
+
row_without_params = row[0..-2]
|
35
|
+
row_without_params.each_with_index { |column, index|
|
36
|
+
is_column_last = row_without_params.count == index + 1
|
37
|
+
if is_column_last
|
38
|
+
possible_new_value = [row.last.fetch(:footer, '').to_s.size, column.to_s.size].sort.last
|
39
|
+
self.columns_width[index] = possible_new_value if possible_new_value > (self.columns_width[index] || 0)
|
40
|
+
else
|
41
|
+
self.columns_width[index] = column.to_s.size if column.to_s.size > (self.columns_width[index] || 0)
|
42
|
+
end
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
self.columns_width = columns_width.map { |column_width| column_width + 1 }
|
47
|
+
end
|
48
|
+
|
49
|
+
def prepare_content
|
50
|
+
self.content = data.inject([]) { |enumerator, row|
|
51
|
+
enumerator << Tabled::Template::Row.render(row, columns_width, options)
|
52
|
+
enumerator << Tabled::Template::RowFooter.render(row)
|
53
|
+
}.compact
|
54
|
+
end
|
55
|
+
end
|
data/lib/template.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
class Tabled
|
2
|
+
class Template
|
3
|
+
class Row
|
4
|
+
def self.render(row, columns_width, options)
|
5
|
+
row[0..-2].map.with_index { |column, index|
|
6
|
+
spaces = ' ' * (columns_width[index] - column.to_s.size)
|
7
|
+
column.to_s + spaces
|
8
|
+
}.join('')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Tabled
|
15
|
+
class Template
|
16
|
+
class RowFooter
|
17
|
+
def self.render(row)
|
18
|
+
return nil unless row.last.fetch(:footer, false)
|
19
|
+
|
20
|
+
row.last.fetch(:footer)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/tabled.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'tabled'
|
3
|
+
s.version = '0.0.1'
|
4
|
+
s.summary = "Library for rendering pretty tables in console"
|
5
|
+
s.description = "This library can be used to render your data to a console. It's quite simple and has many features"
|
6
|
+
s.authors = ["Max Rukomoynikov"]
|
7
|
+
s.email = 'rukomoynikov@gmail.com'
|
8
|
+
s.files =
|
9
|
+
Dir.chdir(File.expand_path(__dir__)) do
|
10
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
11
|
+
end
|
12
|
+
s.homepage = 'https://rubygems.org/gems/tabled'
|
13
|
+
s.metadata = { "source_code_uri" => "https://github.com/Rukomoynikov/tabled" }
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.add_development_dependency "byebug"
|
17
|
+
s.add_development_dependency "rspec"
|
18
|
+
s.add_development_dependency "simplecov"
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tabled
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Max Rukomoynikov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: byebug
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: This library can be used to render your data to a console. It's quite
|
56
|
+
simple and has many features
|
57
|
+
email: rukomoynikov@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".github/workflows/linters.yml"
|
63
|
+
- ".gitignore"
|
64
|
+
- Gemfile
|
65
|
+
- Gemfile.lock
|
66
|
+
- lib/tabled.rb
|
67
|
+
- lib/template.rb
|
68
|
+
- tabled.gemspec
|
69
|
+
homepage: https://rubygems.org/gems/tabled
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata:
|
73
|
+
source_code_uri: https://github.com/Rukomoynikov/tabled
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubygems_version: 3.2.3
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: Library for rendering pretty tables in console
|
93
|
+
test_files: []
|