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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d6086efaf0670225d0febbaad3691f73445ff490
4
- data.tar.gz: 2728c004d3cec600a73ef0f94158271630a1f5b1
3
+ metadata.gz: a0d7c93628d9188236bb2776136a10588c7ebcdc
4
+ data.tar.gz: 58146b9e5cad0513d64f7ade289159f0a3542c37
5
5
  SHA512:
6
- metadata.gz: ff2a9c168c2da2d4f6caaaf979308b41ae44d0f76764ad68a4e630affb537b33144eb58ea16e6c7afc62b7d166a34e1ae83f3484b526366bf8f8eee510a36fe6
7
- data.tar.gz: 8978a1b77ffe9b5ee7b9664c8d4cc26e645c4d7151a9cca47037a49126bd19a40ea8b9985e7a75d92a0d678db42c7539f5721e6aad4b727e01e083fc4304e35e
6
+ metadata.gz: 5883537c12f133b7b83cfd8a1a8b08bbfb82448eae96249839b0470f9a6baeb3d4647952384aed2374988483c068851088d3d721b50b7deed71e000f46aa15ee
7
+ data.tar.gz: 66a66de7148ba6f287683dd7bf9d337c41d6a25ea3412cdff5c4078903d49cdacaed64288a776e53e6a7e33c10e10959abd6604c373f17ad134f9cee8cc62ee3
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  Gemfile.lock
13
+ legitable*.gem
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
- title = Legitable::Table.new do
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
@@ -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
- render_headers +
27
- rows.map do |row|
28
- headers.map do |header|
29
- render_cell(header, row[header])
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" + (separator * row_width) + "\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 ||= Proc.new {|header| header.to_s.upcase }
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
@@ -1,3 +1,3 @@
1
1
  module Legitable
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.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: 2017-12-12 00:00:00.000000000 Z
11
+ date: 2018-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler