table_pal 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/Gemfile.lock +1 -1
- data/lib/column.rb +3 -2
- data/lib/formatters.rb +9 -5
- data/lib/plain_text_coloured.rb +6 -17
- data/lib/requires.rb +2 -1
- data/lib/table.rb +16 -0
- data/lib/table_pal.rb +2 -0
- data/lib/table_pal_error.rb +25 -0
- data/lib/validate.rb +49 -0
- data/lib/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48767bd03cc5c790c74a94af5e6aa8543f67685b3f241d5de639786edc24f09d
|
4
|
+
data.tar.gz: 59ccde4f78da37851987b132e86d245b04dd798499615efd3fdb97359e26e05d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80e74c7849b253a12fe954ed950efd98d3889a7e0d47c4e47b3302c159042f11731ed22378978a9e000461ac32568d1f5943653568bde62d407362be89866811
|
7
|
+
data.tar.gz: 97802a7e8f6855f7f1ef3612c018a27a4dae7d628b32b0db51dbb29f52c6775587e946dc4435fd645c05855b9276c083ab925fc1484d1ceda4ad02a67b8a3b81
|
data/Gemfile.lock
CHANGED
data/lib/column.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module TablePal
|
2
2
|
class Column
|
3
3
|
|
4
|
-
attr_reader :table, :left_padding, :right_padding, :left_border, :right_border, :justification, :colour
|
4
|
+
attr_reader :table, :left_padding, :right_padding, :left_border, :right_border, :justification, :colour, :formatter
|
5
5
|
|
6
|
-
def initialize(table:, left_padding: ' ', right_padding: ' ', left_border: '', right_border: '|', justification: :left, colour: nil)
|
6
|
+
def initialize(table:, formatter: nil, left_padding: ' ', right_padding: ' ', left_border: '', right_border: '|', justification: :left, colour: nil)
|
7
7
|
@table = table
|
8
|
+
@formatter = formatter
|
8
9
|
@left_padding = left_padding
|
9
10
|
@right_padding = right_padding
|
10
11
|
@left_border = left_border
|
data/lib/formatters.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
module TablePal
|
2
|
-
Dollar
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
Dollar = lambda { |content|
|
3
|
+
return content unless content.is_a?(Float)
|
4
|
+
|
5
|
+
format('$%.2f', content)
|
6
|
+
}
|
7
|
+
|
8
|
+
NoFormatting = -> content { content }
|
9
|
+
Titleize = -> content { content.titleize }
|
10
|
+
Upper = -> content { content.upcase }
|
7
11
|
end
|
data/lib/plain_text_coloured.rb
CHANGED
@@ -14,17 +14,14 @@ module TablePal
|
|
14
14
|
private
|
15
15
|
|
16
16
|
def print_row(row)
|
17
|
-
row
|
18
|
-
print_cell(cell)
|
19
|
-
end
|
20
|
-
|
17
|
+
print_cells(row)
|
21
18
|
puts
|
19
|
+
underline if row.heading
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
elsif row.subheading
|
27
|
-
empty
|
22
|
+
def print_cells(row)
|
23
|
+
row.cells_including_empty.each do |cell|
|
24
|
+
print_cell(cell)
|
28
25
|
end
|
29
26
|
end
|
30
27
|
|
@@ -49,13 +46,5 @@ module TablePal
|
|
49
46
|
puts
|
50
47
|
end
|
51
48
|
|
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
49
|
end
|
61
50
|
end
|
data/lib/requires.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require_relative 'colours'
|
2
|
-
require_relative 'table_pal'
|
3
2
|
require_relative 'cell'
|
4
3
|
require_relative 'column'
|
5
4
|
require_relative 'csv_formatted'
|
@@ -9,3 +8,5 @@ require_relative 'plain_text'
|
|
9
8
|
require_relative 'plain_text_coloured'
|
10
9
|
require_relative 'row'
|
11
10
|
require_relative 'table'
|
11
|
+
require_relative 'table_pal_error'
|
12
|
+
require_relative 'validate'
|
data/lib/table.rb
CHANGED
@@ -10,6 +10,8 @@ module TablePal
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def create_row(options = {})
|
13
|
+
Validate.new(__method__, options)
|
14
|
+
|
13
15
|
Row.new(options.merge(table: self)).tap do |row|
|
14
16
|
@rows << row
|
15
17
|
end
|
@@ -20,12 +22,18 @@ module TablePal
|
|
20
22
|
end
|
21
23
|
|
22
24
|
def create_column(options = {})
|
25
|
+
Validate.new(__method__, options)
|
26
|
+
|
23
27
|
Column.new(options.merge(table: self)).tap do |column|
|
24
28
|
@columns << column
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
28
32
|
def create_cell(options = {})
|
33
|
+
Validate.new(__method__, options)
|
34
|
+
|
35
|
+
ensure_cell_does_not_exist(options.slice(:row, :column))
|
36
|
+
|
29
37
|
Cell.new(options).tap do |cell|
|
30
38
|
@cells << cell
|
31
39
|
end
|
@@ -39,5 +47,13 @@ module TablePal
|
|
39
47
|
cells.select { |cell| cell.column == column }
|
40
48
|
end
|
41
49
|
|
50
|
+
def ensure_cell_does_not_exist(row:, column:)
|
51
|
+
cell = find_cell(row: row, column: column)
|
52
|
+
|
53
|
+
return unless cell
|
54
|
+
|
55
|
+
raise TablePalError, "Cell with content: '#{cell.content}' already exists at this row and column."
|
56
|
+
end
|
57
|
+
|
42
58
|
end
|
43
59
|
end
|
data/lib/table_pal.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module TablePal
|
2
|
+
class TablePalError < StandardError
|
3
|
+
|
4
|
+
# def initialize(message)
|
5
|
+
# @meth = meth
|
6
|
+
|
7
|
+
# options.each do |key, value|
|
8
|
+
# validate_option(key, value)
|
9
|
+
# end
|
10
|
+
# end
|
11
|
+
|
12
|
+
# def validate_option(key, value)
|
13
|
+
# case key
|
14
|
+
# when :row then validate_row(value)
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
|
18
|
+
# def validate_row(value)
|
19
|
+
# return if value.is_a?(Row)
|
20
|
+
|
21
|
+
# raise "Table.#{meth} error. Expected `row:` to be a Row instance, not a #{value.class}"
|
22
|
+
# end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/validate.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
module TablePal
|
2
|
+
class Validate
|
3
|
+
|
4
|
+
attr_reader :meth
|
5
|
+
|
6
|
+
def initialize(meth, options)
|
7
|
+
@meth = meth
|
8
|
+
|
9
|
+
options.each do |key, value|
|
10
|
+
validate_option(key, value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def validate_option(key, value)
|
15
|
+
case key
|
16
|
+
when :colour then validate(key: key, value: value, classes: [Symbol, NilClass])
|
17
|
+
when :column then validate(key: key, value: value, classes: Column)
|
18
|
+
when :content then validate(key: key, value: value, classes: [String, Float, Integer, NilClass])
|
19
|
+
when :formatter then validate(key: key, value: value, classes: Proc)
|
20
|
+
when :heading then validate(key: key, value: value, classes: [TrueClass])
|
21
|
+
when :justification then validate(key: key, value: value, classes: Symbol)
|
22
|
+
when :left_border then validate(key: key, value: value, classes: [String, NilClass])
|
23
|
+
when :left_padding then validate(key: key, value: value, classes: String)
|
24
|
+
when :right_border then validate(key: key, value: value, classes: [String, NilClass])
|
25
|
+
when :right_padding then validate(key: key, value: value, classes: String)
|
26
|
+
when :row then validate(key: key, value: value, classes: Row)
|
27
|
+
when :subheading then validate(key: key, value: value, classes: [TrueClass])
|
28
|
+
else raise TablePalError, "#{class_method} received Unexpected option: `#{key}`"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def validate(key:, value:, classes:)
|
33
|
+
classes = [classes].flatten
|
34
|
+
|
35
|
+
return if classes.any? { |klass| value.is_a?(klass) }
|
36
|
+
|
37
|
+
raise TablePalError, "#{class_method} expected `#{key}:` to be a #{for_sentence(classes)}, not a `#{value.class}`"
|
38
|
+
end
|
39
|
+
|
40
|
+
def class_method
|
41
|
+
"Table.#{meth}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def for_sentence(classes)
|
45
|
+
classes.map { |klass| "`#{klass}`" }.join(' or ')
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: table_pal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Lerner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: interesting_methods
|
@@ -104,6 +104,8 @@ files:
|
|
104
104
|
- lib/row.rb
|
105
105
|
- lib/table.rb
|
106
106
|
- lib/table_pal.rb
|
107
|
+
- lib/table_pal_error.rb
|
108
|
+
- lib/validate.rb
|
107
109
|
- lib/version.rb
|
108
110
|
- table_pal.gemspec
|
109
111
|
homepage: https://github.com/seanlerner/table_pal
|