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 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