table_pal 0.1.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 +7 -0
- data/.rubocop.yml +108 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +45 -0
- data/README.md +5 -0
- data/Rakefile +7 -0
- data/lib/cell.rb +52 -0
- data/lib/colours.rb +286 -0
- data/lib/column.rb +29 -0
- data/lib/csv_formatted.rb +11 -0
- data/lib/csv_unformatted.rb +11 -0
- data/lib/formatters.rb +7 -0
- data/lib/plain_text.rb +67 -0
- data/lib/plain_text_coloured.rb +61 -0
- data/lib/requires.rb +11 -0
- data/lib/row.rb +44 -0
- data/lib/table.rb +43 -0
- data/lib/table_pal.rb +2 -0
- data/lib/version.rb +3 -0
- data/table_pal.gemspec +22 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4b1c3f5234498b916d764d00cc8e9d6a050fd91cac4bc803791b015934494e86
|
4
|
+
data.tar.gz: 42e49d8eee541a96e21090e467f3abdd87bd96545b0a6dacb12e67cacda061d2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7f7cb22a2a031b3d48bad82329d3d76393d855491b78be17e218b7b235db23b06b0a47c6a54a5725d4d9ea178b761b51039635fa81c605a59d46ce844d8677a0
|
7
|
+
data.tar.gz: 8dfea9dfe91bc61d63f03ad30aced9bfafbf756c07e0b3aa0027b6eda44123d93e14592c1fee490454f34cf397a7f27cf9646ab6a39f304f3ca223a49eccc3f0
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.6.4
|
3
|
+
Layout/SpaceInLambdaLiteral:
|
4
|
+
EnforcedStyle: require_space
|
5
|
+
|
6
|
+
Layout/AlignHash:
|
7
|
+
EnforcedColonStyle: table
|
8
|
+
|
9
|
+
Layout/EmptyLinesAroundClassBody:
|
10
|
+
EnforcedStyle: empty_lines_except_namespace
|
11
|
+
|
12
|
+
Lint/UnusedMethodArgument:
|
13
|
+
AutoCorrect: false
|
14
|
+
|
15
|
+
Metrics/AbcSize:
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Metrics/CyclomaticComplexity:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
Metrics/PerceivedComplexity:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
Metrics/LineLength:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Metrics/ModuleLength:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Metrics/ParameterLists:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Metrics/MethodLength:
|
34
|
+
Enabled: false
|
35
|
+
|
36
|
+
Naming/VariableNumber:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Style/ClassAndModuleChildren:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
Style/ClassVars:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
Style/Documentation:
|
46
|
+
Enabled: false
|
47
|
+
|
48
|
+
Style/EmptyMethod:
|
49
|
+
Enabled: false
|
50
|
+
|
51
|
+
Style/FrozenStringLiteralComment:
|
52
|
+
Enabled: false
|
53
|
+
|
54
|
+
Style/MutableConstant:
|
55
|
+
Enabled: false
|
56
|
+
|
57
|
+
Style/StabbyLambdaParentheses:
|
58
|
+
EnforcedStyle: require_no_parentheses
|
59
|
+
|
60
|
+
# Layout/AlignArray:
|
61
|
+
# Layout/AlignHash:
|
62
|
+
# Layout/AlignParameters:
|
63
|
+
# Layout/EmptyLineBetweenDefs:
|
64
|
+
# Layout/EmptyLinesAroundClassBody:
|
65
|
+
# Layout/EmptyLinesAroundExceptionHandlingKeywords:
|
66
|
+
# Layout/EmptyLinesAroundModuleBody:
|
67
|
+
# Layout/ExtraSpacing:
|
68
|
+
# Layout/LeadingBlankLines:
|
69
|
+
# Layout/SpaceAroundOperators:
|
70
|
+
# Layout/SpaceBeforeFirstArg:
|
71
|
+
# Layout/SpaceInLambdaLiteral:
|
72
|
+
# Lint/AmbiguousOperator:
|
73
|
+
# Lint/AmbiguousRegexpLiteral:
|
74
|
+
# Lint/HandleExceptions:
|
75
|
+
# Lint/IneffectiveAccessModifier:
|
76
|
+
# Lint/ToJSON:
|
77
|
+
# Lint/UnderscorePrefixedVariableName:
|
78
|
+
# Lint/UnneededSplatExpansion:
|
79
|
+
# Lint/UnreachableCode:
|
80
|
+
# Lint/UselessAccessModifier:
|
81
|
+
# Lint/UselessAssignment:
|
82
|
+
# Lint/Void:
|
83
|
+
# Metrics/AbcSize:
|
84
|
+
# Metrics/BlockLength:
|
85
|
+
# Metrics/ClassLength:
|
86
|
+
# Metrics/CyclomaticComplexity:
|
87
|
+
# Metrics/LineLength:
|
88
|
+
# Metrics/MethodLength:
|
89
|
+
# Metrics/ModuleLength:
|
90
|
+
# Metrics/ParameterLists:
|
91
|
+
# Metrics/PerceivedComplexity:
|
92
|
+
# Naming/ClassAndModuleCamelCase:
|
93
|
+
# Naming/RescuedExceptionsVariableName:
|
94
|
+
# Naming/UncommunicativeMethodParamName:
|
95
|
+
# Naming/VariableNumber:
|
96
|
+
# Security/MarshalLoad:
|
97
|
+
# Style/ClassVars:
|
98
|
+
# Style/Documentation:
|
99
|
+
# Style/EmptyMethod:
|
100
|
+
# Style/FormatStringToken:
|
101
|
+
# Style/IfUnlessModifier:
|
102
|
+
# Style/MixinUsage:
|
103
|
+
# Style/MutableConstant:
|
104
|
+
# Style/NumericLiterals:
|
105
|
+
# Style/NumericPredicate:
|
106
|
+
# Style/SingleLineMethods:
|
107
|
+
# Style/StringLiterals:
|
108
|
+
# Style/TernaryParentheses:
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
table_pal (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ast (2.4.0)
|
10
|
+
coderay (1.1.2)
|
11
|
+
interesting_methods (0.1.2)
|
12
|
+
jaro_winkler (1.5.2)
|
13
|
+
method_source (0.9.2)
|
14
|
+
minitest (5.12.2)
|
15
|
+
parallel (1.17.0)
|
16
|
+
parser (2.6.3.0)
|
17
|
+
ast (~> 2.4.0)
|
18
|
+
pry (0.12.2)
|
19
|
+
coderay (~> 1.1.0)
|
20
|
+
method_source (~> 0.9.0)
|
21
|
+
rainbow (3.0.0)
|
22
|
+
rake (13.0.0)
|
23
|
+
rubocop (0.71.0)
|
24
|
+
jaro_winkler (~> 1.5.1)
|
25
|
+
parallel (~> 1.10)
|
26
|
+
parser (>= 2.6)
|
27
|
+
rainbow (>= 2.2.2, < 4.0)
|
28
|
+
ruby-progressbar (~> 1.7)
|
29
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
30
|
+
ruby-progressbar (1.10.1)
|
31
|
+
unicode-display_width (1.6.0)
|
32
|
+
|
33
|
+
PLATFORMS
|
34
|
+
ruby
|
35
|
+
|
36
|
+
DEPENDENCIES
|
37
|
+
interesting_methods (~> 0.1)
|
38
|
+
minitest (~> 5.12)
|
39
|
+
pry (~> 0.12)
|
40
|
+
rake (~> 13.0)
|
41
|
+
rubocop (~> 0.71)
|
42
|
+
table_pal!
|
43
|
+
|
44
|
+
BUNDLED WITH
|
45
|
+
2.0.2
|
data/README.md
ADDED
data/Rakefile
ADDED
data/lib/cell.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
module TablePal
|
2
|
+
class Cell
|
3
|
+
|
4
|
+
using Colours
|
5
|
+
|
6
|
+
attr_reader :row, :column, :content, :formatter, :justification, :colour
|
7
|
+
|
8
|
+
def initialize(row:, column:, content: '', formatter: nil, justification: nil, colour: nil)
|
9
|
+
@row = row
|
10
|
+
@column = column
|
11
|
+
@content = content
|
12
|
+
@formatter = formatter || row.formatter || NoFormatting
|
13
|
+
@justification = justification || row.justification || column.justification
|
14
|
+
@colour = colour || row.colour || column.colour || :itself
|
15
|
+
end
|
16
|
+
|
17
|
+
def formatted(justified: false, coloured: false)
|
18
|
+
result = format(content)
|
19
|
+
result = justify(result) if justified
|
20
|
+
result = colourize(result) if coloured
|
21
|
+
|
22
|
+
result
|
23
|
+
end
|
24
|
+
|
25
|
+
def format(result)
|
26
|
+
return '' if result == ''
|
27
|
+
|
28
|
+
formatter.call(result).to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
def justify(result)
|
32
|
+
result.send(justification_to_method, column.width)
|
33
|
+
end
|
34
|
+
|
35
|
+
def colourize(result)
|
36
|
+
result.send(colour)
|
37
|
+
end
|
38
|
+
|
39
|
+
def width
|
40
|
+
formatted.length
|
41
|
+
end
|
42
|
+
|
43
|
+
def justification_to_method
|
44
|
+
{
|
45
|
+
left: :ljust,
|
46
|
+
right: :rjust,
|
47
|
+
center: :center
|
48
|
+
}[justification]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/colours.rb
ADDED
@@ -0,0 +1,286 @@
|
|
1
|
+
module Colours
|
2
|
+
refine String do
|
3
|
+
def reset
|
4
|
+
ansi(0)
|
5
|
+
end
|
6
|
+
|
7
|
+
# FORMATTING
|
8
|
+
|
9
|
+
def bold
|
10
|
+
style 1
|
11
|
+
end
|
12
|
+
|
13
|
+
def faint
|
14
|
+
style 2
|
15
|
+
end
|
16
|
+
|
17
|
+
def italic
|
18
|
+
style 3
|
19
|
+
end
|
20
|
+
|
21
|
+
def underline
|
22
|
+
style 4
|
23
|
+
end
|
24
|
+
|
25
|
+
# FOREGROUND COLOURS
|
26
|
+
|
27
|
+
def black
|
28
|
+
style 30
|
29
|
+
end
|
30
|
+
|
31
|
+
def blue
|
32
|
+
style 34
|
33
|
+
end
|
34
|
+
|
35
|
+
def cyan
|
36
|
+
style 36
|
37
|
+
end
|
38
|
+
|
39
|
+
def green
|
40
|
+
style 32
|
41
|
+
end
|
42
|
+
|
43
|
+
def magenta
|
44
|
+
style 35
|
45
|
+
end
|
46
|
+
|
47
|
+
# TODO: wrong number
|
48
|
+
def purple
|
49
|
+
style 35
|
50
|
+
end
|
51
|
+
|
52
|
+
def red
|
53
|
+
style 31
|
54
|
+
end
|
55
|
+
|
56
|
+
def white
|
57
|
+
style 37
|
58
|
+
end
|
59
|
+
|
60
|
+
def yellow
|
61
|
+
style 33
|
62
|
+
end
|
63
|
+
|
64
|
+
def bright_black
|
65
|
+
style 90
|
66
|
+
end
|
67
|
+
|
68
|
+
def bright_blue
|
69
|
+
style 94
|
70
|
+
end
|
71
|
+
|
72
|
+
def bright_cyan
|
73
|
+
style 96
|
74
|
+
end
|
75
|
+
|
76
|
+
def bright_green
|
77
|
+
style 92
|
78
|
+
end
|
79
|
+
|
80
|
+
def bright_magenta
|
81
|
+
style 95
|
82
|
+
end
|
83
|
+
|
84
|
+
def bright_red
|
85
|
+
style 91
|
86
|
+
end
|
87
|
+
|
88
|
+
def bright_white
|
89
|
+
style 97
|
90
|
+
end
|
91
|
+
|
92
|
+
def bright_yellow
|
93
|
+
style 93
|
94
|
+
end
|
95
|
+
|
96
|
+
# BACKGROUND COLOURS
|
97
|
+
|
98
|
+
def bg_black
|
99
|
+
style 40
|
100
|
+
end
|
101
|
+
|
102
|
+
def bg_blue
|
103
|
+
style 44
|
104
|
+
end
|
105
|
+
|
106
|
+
def bg_cyan
|
107
|
+
style 46
|
108
|
+
end
|
109
|
+
|
110
|
+
def bg_green
|
111
|
+
style 42
|
112
|
+
end
|
113
|
+
|
114
|
+
def bg_magenta
|
115
|
+
style 45
|
116
|
+
end
|
117
|
+
|
118
|
+
def bg_red
|
119
|
+
style 41
|
120
|
+
end
|
121
|
+
|
122
|
+
def bg_white
|
123
|
+
style 47
|
124
|
+
end
|
125
|
+
|
126
|
+
def bg_yellow
|
127
|
+
style 43
|
128
|
+
end
|
129
|
+
|
130
|
+
# ANSI 256 COLOURS
|
131
|
+
|
132
|
+
def bg(code)
|
133
|
+
style "48;5;#{code}"
|
134
|
+
end
|
135
|
+
|
136
|
+
def fg(code)
|
137
|
+
style "38;5;#{code}"
|
138
|
+
end
|
139
|
+
|
140
|
+
# MISC
|
141
|
+
|
142
|
+
def backticks
|
143
|
+
backtick + self + backtick
|
144
|
+
end
|
145
|
+
|
146
|
+
def near_black
|
147
|
+
bg(240)
|
148
|
+
end
|
149
|
+
|
150
|
+
private
|
151
|
+
|
152
|
+
def ansi(code)
|
153
|
+
"\e[#{code}m"
|
154
|
+
end
|
155
|
+
|
156
|
+
def backtick
|
157
|
+
'`'.yellow
|
158
|
+
end
|
159
|
+
|
160
|
+
def style(code)
|
161
|
+
ansi(code) + self + reset
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
class Demo
|
166
|
+
|
167
|
+
class << self
|
168
|
+
|
169
|
+
using Colours
|
170
|
+
|
171
|
+
def all_ansi_256
|
172
|
+
puts
|
173
|
+
display_all_ansi_256('bg')
|
174
|
+
puts
|
175
|
+
puts
|
176
|
+
display_all_ansi_256('fg')
|
177
|
+
puts
|
178
|
+
puts
|
179
|
+
display_all(styles)
|
180
|
+
puts
|
181
|
+
puts
|
182
|
+
display_all(fg_colours)
|
183
|
+
puts
|
184
|
+
puts
|
185
|
+
display_all(bright_colours)
|
186
|
+
puts
|
187
|
+
puts
|
188
|
+
display_all(bg_colours)
|
189
|
+
puts
|
190
|
+
puts
|
191
|
+
end
|
192
|
+
|
193
|
+
private
|
194
|
+
|
195
|
+
def display_all(formats)
|
196
|
+
codes_displayed = 1
|
197
|
+
|
198
|
+
formats.each do |method, complementary_method|
|
199
|
+
print ".#{method}".ljust(col_width).send(method).send(complementary_method)
|
200
|
+
|
201
|
+
codes_displayed += 1
|
202
|
+
|
203
|
+
if codes_displayed * col_width > screen_width
|
204
|
+
puts
|
205
|
+
codes_displayed = 1
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def styles
|
211
|
+
{
|
212
|
+
bold: :white,
|
213
|
+
faint: :white,
|
214
|
+
italic: :white,
|
215
|
+
underline: :white
|
216
|
+
}
|
217
|
+
end
|
218
|
+
|
219
|
+
def fg_colours
|
220
|
+
{
|
221
|
+
black: :near_black,
|
222
|
+
blue: :bg_black,
|
223
|
+
cyan: :bg_black,
|
224
|
+
green: :bg_black,
|
225
|
+
magenta: :bg_black,
|
226
|
+
red: :bg_black,
|
227
|
+
white: :bg_black,
|
228
|
+
yellow: :bg_black
|
229
|
+
}
|
230
|
+
end
|
231
|
+
|
232
|
+
def bright_colours
|
233
|
+
{
|
234
|
+
bright_black: :bg_black,
|
235
|
+
bright_blue: :bg_black,
|
236
|
+
bright_cyan: :bg_black,
|
237
|
+
bright_green: :bg_black,
|
238
|
+
bright_magenta: :bg_black,
|
239
|
+
bright_red: :bg_black,
|
240
|
+
bright_white: :bg_black,
|
241
|
+
bright_yellow: :bg_black
|
242
|
+
}
|
243
|
+
end
|
244
|
+
|
245
|
+
def bg_colours
|
246
|
+
{
|
247
|
+
bg_black: :white,
|
248
|
+
bg_blue: :black,
|
249
|
+
bg_cyan: :black,
|
250
|
+
bg_green: :black,
|
251
|
+
bg_magenta: :black,
|
252
|
+
bg_red: :black,
|
253
|
+
bg_white: :black,
|
254
|
+
bg_yellow: :black
|
255
|
+
}
|
256
|
+
end
|
257
|
+
|
258
|
+
def display_all_ansi_256(method)
|
259
|
+
# Use `Colours::Demo.all_ansi_256` to see colours available
|
260
|
+
|
261
|
+
codes_displayed = 1
|
262
|
+
|
263
|
+
256.times do |code|
|
264
|
+
print ".#{method}(#{code})".ljust(col_width).send(method, code).fg(89)
|
265
|
+
|
266
|
+
codes_displayed += 1
|
267
|
+
|
268
|
+
if codes_displayed * col_width + 2 > screen_width
|
269
|
+
puts
|
270
|
+
codes_displayed = 1
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
def col_width
|
276
|
+
@col_width ||= '.bright_magenta '.length
|
277
|
+
end
|
278
|
+
|
279
|
+
def screen_width
|
280
|
+
@screen_width ||= `tput cols`.to_i
|
281
|
+
end
|
282
|
+
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
end
|
data/lib/column.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module TablePal
|
2
|
+
class Column
|
3
|
+
|
4
|
+
attr_reader :table, :left_padding, :right_padding, :left_border, :right_border, :justification, :colour
|
5
|
+
|
6
|
+
def initialize(table:, left_padding: ' ', right_padding: ' ', left_border: '', right_border: '|', justification: :left, colour: nil)
|
7
|
+
@table = table
|
8
|
+
@left_padding = left_padding
|
9
|
+
@right_padding = right_padding
|
10
|
+
@left_border = left_border
|
11
|
+
@right_border = right_border
|
12
|
+
@justification = justification
|
13
|
+
@colour = colour
|
14
|
+
end
|
15
|
+
|
16
|
+
def width
|
17
|
+
table.select_cells(column: self).max_by(&:width).width
|
18
|
+
end
|
19
|
+
|
20
|
+
def left_padding_char(char)
|
21
|
+
char * left_padding.length
|
22
|
+
end
|
23
|
+
|
24
|
+
def right_padding_char(char)
|
25
|
+
char * right_padding.length
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/formatters.rb
ADDED
data/lib/plain_text.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
module TablePal
|
2
|
+
class PlainText
|
3
|
+
|
4
|
+
attr_reader :table
|
5
|
+
|
6
|
+
def initialize(table:)
|
7
|
+
@table = table
|
8
|
+
|
9
|
+
table.rows.each do |row|
|
10
|
+
print_row(row)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def print_row(row)
|
17
|
+
row.cells_including_empty.each do |cell|
|
18
|
+
print_cell(cell)
|
19
|
+
end
|
20
|
+
|
21
|
+
puts
|
22
|
+
|
23
|
+
if row.heading
|
24
|
+
underline
|
25
|
+
empty
|
26
|
+
elsif row.subheading
|
27
|
+
empty
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def print_cell(cell)
|
32
|
+
print cell.column.left_border
|
33
|
+
print cell.column.left_padding
|
34
|
+
print cell.formatted(justified: true)
|
35
|
+
print cell.column.right_padding
|
36
|
+
print cell.column.right_border
|
37
|
+
end
|
38
|
+
|
39
|
+
def underline
|
40
|
+
table.columns.map do |column|
|
41
|
+
char = '-'
|
42
|
+
print column.left_border
|
43
|
+
print column.left_padding_char(char)
|
44
|
+
print char * column.width
|
45
|
+
print column.right_padding_char(char)
|
46
|
+
print column.right_border
|
47
|
+
end
|
48
|
+
|
49
|
+
puts
|
50
|
+
end
|
51
|
+
|
52
|
+
def empty
|
53
|
+
row = table.create_row
|
54
|
+
|
55
|
+
row.empty_cells.each do |cell|
|
56
|
+
print cell.column.left_border
|
57
|
+
print cell.column.left_padding
|
58
|
+
print cell.formatted(justified: true)
|
59
|
+
print cell.column.right_padding
|
60
|
+
print cell.column.right_border
|
61
|
+
end
|
62
|
+
|
63
|
+
puts
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module TablePal
|
2
|
+
class PlainTextColoured
|
3
|
+
|
4
|
+
attr_reader :table
|
5
|
+
|
6
|
+
def initialize(table:)
|
7
|
+
@table = table
|
8
|
+
|
9
|
+
table.rows.each do |row|
|
10
|
+
print_row(row)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def print_row(row)
|
17
|
+
row.cells_including_empty.each do |cell|
|
18
|
+
print_cell(cell)
|
19
|
+
end
|
20
|
+
|
21
|
+
puts
|
22
|
+
|
23
|
+
if row.heading
|
24
|
+
underline
|
25
|
+
empty
|
26
|
+
elsif row.subheading
|
27
|
+
empty
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def print_cell(cell)
|
32
|
+
print cell.column.left_border
|
33
|
+
print cell.column.left_padding
|
34
|
+
print cell.formatted(justified: true, coloured: true)
|
35
|
+
print cell.column.right_padding
|
36
|
+
print cell.column.right_border
|
37
|
+
end
|
38
|
+
|
39
|
+
def underline
|
40
|
+
table.columns.map do |column|
|
41
|
+
char = '-'
|
42
|
+
print column.left_border
|
43
|
+
print column.left_padding_char(char)
|
44
|
+
print char * column.width
|
45
|
+
print column.right_padding_char(char)
|
46
|
+
print column.right_border
|
47
|
+
end
|
48
|
+
|
49
|
+
puts
|
50
|
+
end
|
51
|
+
|
52
|
+
def empty
|
53
|
+
table.create_row.empty_cells.each do |cell|
|
54
|
+
print_cell(cell)
|
55
|
+
end
|
56
|
+
|
57
|
+
puts
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
data/lib/requires.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require_relative 'colours'
|
2
|
+
require_relative 'table_pal'
|
3
|
+
require_relative 'cell'
|
4
|
+
require_relative 'column'
|
5
|
+
require_relative 'csv_formatted'
|
6
|
+
require_relative 'csv_unformatted'
|
7
|
+
require_relative 'formatters'
|
8
|
+
require_relative 'plain_text'
|
9
|
+
require_relative 'plain_text_coloured'
|
10
|
+
require_relative 'row'
|
11
|
+
require_relative 'table'
|
data/lib/row.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module TablePal
|
2
|
+
class Row
|
3
|
+
|
4
|
+
attr_reader :table, :formatter, :heading, :subheading, :justification, :colour
|
5
|
+
|
6
|
+
def initialize(table:, formatter: nil, heading: false, subheading: false, justification: nil, colour: nil)
|
7
|
+
@table = table
|
8
|
+
@formatter = formatter
|
9
|
+
@heading = heading
|
10
|
+
@subheading = subheading
|
11
|
+
@justification = justification
|
12
|
+
@colour = colour
|
13
|
+
end
|
14
|
+
|
15
|
+
def cells_including_empty
|
16
|
+
table.columns.map do |column|
|
17
|
+
find_cell(column) || create_cell(column)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def underline_cells
|
22
|
+
table.columns.map do |column|
|
23
|
+
table.create_cell(row: self, column: column, content: '-' * column.width)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def empty_cells
|
28
|
+
table.columns.map do |column|
|
29
|
+
table.create_cell(row: self, column: column)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def find_cell(column)
|
36
|
+
table.find_cell(row: self, column: column)
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_cell(column)
|
40
|
+
table.create_cell(row: self, column: column)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
data/lib/table.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module TablePal
|
2
|
+
class Table
|
3
|
+
|
4
|
+
attr_reader :rows, :columns, :cells
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@rows = []
|
8
|
+
@columns = []
|
9
|
+
@cells = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_row(options = {})
|
13
|
+
Row.new(options.merge(table: self)).tap do |row|
|
14
|
+
@rows << row
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_underline
|
19
|
+
Row.new(table: self).cells_as_underline
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_column(options = {})
|
23
|
+
Column.new(options.merge(table: self)).tap do |column|
|
24
|
+
@columns << column
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_cell(options = {})
|
29
|
+
Cell.new(options).tap do |cell|
|
30
|
+
@cells << cell
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def find_cell(row:, column:)
|
35
|
+
cells.find { |cell| cell.row == row && cell.column == column }
|
36
|
+
end
|
37
|
+
|
38
|
+
def select_cells(column:)
|
39
|
+
cells.select { |cell| cell.column == column }
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
data/lib/table_pal.rb
ADDED
data/lib/version.rb
ADDED
data/table_pal.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
require 'version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'table_pal'
|
8
|
+
spec.version = TablePal::VERSION
|
9
|
+
spec.authors = ['Sean Lerner']
|
10
|
+
spec.email = ['sean@@smallcity.ca']
|
11
|
+
spec.summary = 'Aids creating tables'
|
12
|
+
spec.homepage = 'https://github.com/seanlerner/table_pal'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
spec.files = `git ls-files`.split.reject { |f| f.match('test') }
|
15
|
+
spec.require_paths = ['lib']
|
16
|
+
|
17
|
+
spec.add_development_dependency 'interesting_methods', '~> 0.1'
|
18
|
+
spec.add_development_dependency 'minitest', '~> 5.12'
|
19
|
+
spec.add_development_dependency 'pry', '~> 0.12'
|
20
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
21
|
+
spec.add_development_dependency 'rubocop', '~> 0.71'
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: table_pal
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sean Lerner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-10-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: interesting_methods
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.12'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.12'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.12'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.12'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '13.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '13.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.71'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.71'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- sean@@smallcity.ca
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".rubocop.yml"
|
91
|
+
- Gemfile
|
92
|
+
- Gemfile.lock
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- lib/cell.rb
|
96
|
+
- lib/colours.rb
|
97
|
+
- lib/column.rb
|
98
|
+
- lib/csv_formatted.rb
|
99
|
+
- lib/csv_unformatted.rb
|
100
|
+
- lib/formatters.rb
|
101
|
+
- lib/plain_text.rb
|
102
|
+
- lib/plain_text_coloured.rb
|
103
|
+
- lib/requires.rb
|
104
|
+
- lib/row.rb
|
105
|
+
- lib/table.rb
|
106
|
+
- lib/table_pal.rb
|
107
|
+
- lib/version.rb
|
108
|
+
- table_pal.gemspec
|
109
|
+
homepage: https://github.com/seanlerner/table_pal
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubygems_version: 3.0.3
|
129
|
+
signing_key:
|
130
|
+
specification_version: 4
|
131
|
+
summary: Aids creating tables
|
132
|
+
test_files: []
|