legitable 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|