legitable 0.1.0 → 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 +4 -4
- data/.gitignore +1 -0
- data/README.md +20 -1
- data/lib/legitable/table.rb +36 -10
- data/lib/legitable/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0d7c93628d9188236bb2776136a10588c7ebcdc
|
4
|
+
data.tar.gz: 58146b9e5cad0513d64f7ade289159f0a3542c37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5883537c12f133b7b83cfd8a1a8b08bbfb82448eae96249839b0470f9a6baeb3d4647952384aed2374988483c068851088d3d721b50b7deed71e000f46aa15ee
|
7
|
+
data.tar.gz: 66a66de7148ba6f287683dd7bf9d337c41d6a25ea3412cdff5c4078903d49cdacaed64288a776e53e6a7e33c10e10959abd6604c373f17ad134f9cee8cc62ee3
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -116,7 +116,7 @@ Which, of course, improves the display of the names column:
|
|
116
116
|
And, of course, you can do something similar for the column headings:
|
117
117
|
|
118
118
|
```ruby
|
119
|
-
|
119
|
+
table = Legitable::Table.new do
|
120
120
|
formatting_headers do |header|
|
121
121
|
header.capitalize
|
122
122
|
end
|
@@ -131,6 +131,25 @@ Which makes the headers a little nicer:
|
|
131
131
|
jj abrams | 333-555-1212
|
132
132
|
|
133
133
|
|
134
|
+
### Markdown Style
|
135
|
+
|
136
|
+
Sometimes your tables end up in a markdown document. Legitable is nice
|
137
|
+
for plain text viewing, but the default table style is not quite legit
|
138
|
+
as a markdown table. You can fix that with the markdown style:
|
139
|
+
|
140
|
+
```ruby
|
141
|
+
table = Legitable::Table.new(style: :markdown)
|
142
|
+
```
|
143
|
+
|
144
|
+
The result is very similar, but adds the delimiter to the header
|
145
|
+
separator, which causes it to render properly as markdown:
|
146
|
+
|
147
|
+
NAME | PHONE
|
148
|
+
------------|-------------
|
149
|
+
joss whedon | 444-555-1212
|
150
|
+
jj abrams | 333-555-1212
|
151
|
+
|
152
|
+
|
134
153
|
## Caveats
|
135
154
|
|
136
155
|
It should be obvious that this utility pulls in all rows, and then
|
data/lib/legitable/table.rb
CHANGED
@@ -2,9 +2,9 @@ require 'ostruct'
|
|
2
2
|
|
3
3
|
module Legitable
|
4
4
|
class Table
|
5
|
-
attr_reader :rows, :headers, :delimiter, :separator, :format
|
5
|
+
attr_reader :rows, :headers, :delimiter, :separator, :format, :style
|
6
6
|
|
7
|
-
def initialize(alignment: {}, delimiter: ' | ', separator: '-', &block)
|
7
|
+
def initialize(alignment: {}, delimiter: ' | ', separator: '-', style: nil, &block)
|
8
8
|
@rows = []
|
9
9
|
@headers = []
|
10
10
|
@format = {}
|
@@ -12,6 +12,12 @@ module Legitable
|
|
12
12
|
@alignment = alignment
|
13
13
|
@delimiter = delimiter
|
14
14
|
@separator = separator
|
15
|
+
@style = style
|
16
|
+
|
17
|
+
if style == :markdown
|
18
|
+
@delimiter = ' | '
|
19
|
+
@separator = '-'
|
20
|
+
end
|
15
21
|
|
16
22
|
self.instance_eval(&block) unless block.nil?
|
17
23
|
end
|
@@ -23,12 +29,10 @@ module Legitable
|
|
23
29
|
end
|
24
30
|
|
25
31
|
def to_s
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end.join(delimiter)
|
31
|
-
end.join("\n") + "\n"
|
32
|
+
<<-EOS
|
33
|
+
#{render_headers}
|
34
|
+
#{render_rows}
|
35
|
+
EOS
|
32
36
|
end
|
33
37
|
|
34
38
|
private
|
@@ -59,7 +63,7 @@ module Legitable
|
|
59
63
|
def render_headers
|
60
64
|
headers.map do |header|
|
61
65
|
render_cell(header, header_formatter.call(header))
|
62
|
-
end.join(delimiter) + "\n" +
|
66
|
+
end.join(delimiter) + "\n" + render_separator
|
63
67
|
end
|
64
68
|
|
65
69
|
def row_width
|
@@ -69,6 +73,24 @@ module Legitable
|
|
69
73
|
end
|
70
74
|
end
|
71
75
|
|
76
|
+
def render_rows
|
77
|
+
rows.map { |row| render_row(row) }.join("\n")
|
78
|
+
end
|
79
|
+
|
80
|
+
def render_row(row)
|
81
|
+
headers.map { |header| render_cell header, row[header] }.join(delimiter)
|
82
|
+
end
|
83
|
+
|
84
|
+
def render_separator
|
85
|
+
if style == :markdown
|
86
|
+
headers.map do |header|
|
87
|
+
separator * format[header].width
|
88
|
+
end.join('-|-')
|
89
|
+
else
|
90
|
+
separator * row_width
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
72
94
|
def render_cell(header, value)
|
73
95
|
cell_width = format[header].width
|
74
96
|
|
@@ -90,7 +112,11 @@ module Legitable
|
|
90
112
|
end
|
91
113
|
|
92
114
|
def header_formatter
|
93
|
-
@header_formatter ||=
|
115
|
+
@header_formatter ||= default_header_formatter
|
116
|
+
end
|
117
|
+
|
118
|
+
def default_header_formatter
|
119
|
+
@default_header_formatter ||= Proc.new { |header| header.to_s.upcase }
|
94
120
|
end
|
95
121
|
end
|
96
122
|
end
|
data/lib/legitable/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: legitable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Helbling
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|