colorful_tables 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module ColorfulTables
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/column.rb CHANGED
@@ -2,6 +2,10 @@ module ColorfulTables
2
2
 
3
3
  class Column
4
4
 
5
+ DEFAULT_OPTIONS = {
6
+ :data_color => :light_blue
7
+ }
8
+
5
9
  attr_accessor :header, :data, :options
6
10
 
7
11
  attr_reader :width
@@ -9,7 +13,7 @@ module ColorfulTables
9
13
  def initialize(header, data, options = {})
10
14
  @header = header
11
15
  @data = data
12
- @options = options
16
+ @options = DEFAULT_OPTIONS.merge(options)
13
17
  @width ||= calculate_width
14
18
  end
15
19
 
data/lib/table.rb CHANGED
@@ -1,20 +1,28 @@
1
+ # Colors from colorize gem:
2
+ # [:black, :red, :green, :light_blue, :blue, :magenta, :cyan, :light_blue, :default, :light_black, :light_red, :light_blue, :light_light_blue, :light_blue, :light_magenta, :light_blue, :light_light_blue]
3
+ # String.colors.each { |s| puts s.to_s.colorize(s) }
4
+
1
5
  module ColorfulTables
2
6
 
3
7
  class Table
4
8
 
5
- attr_accessor :data, :options
9
+ DEFAULT_OPTIONS = {
10
+ :border_color => :light_blue
11
+ }
6
12
 
7
- attr_reader :columns_width
13
+ attr_accessor :data, :options
8
14
 
9
15
  def initialize(data, options = {})
10
16
  raise RuntimeError, "data must be an array of columns" unless is_an_array_of_columns?(data)
11
17
  @data = data
12
- @options = options
13
- @columns_width ||= calculate_columns_width
18
+ @options = DEFAULT_OPTIONS.merge(options)
19
+ @border_chars ||= calculate_border_chars
20
+ @columns_width ||= calculate_columns_width
21
+ @columns_options ||= calculate_columns_options
14
22
  end
15
23
 
16
24
  def to_s
17
- t = header
25
+ t = "\r" + header
18
26
  self.data.map(&:data).transpose.each do |row|
19
27
  t += format(row)
20
28
  end
@@ -22,7 +30,7 @@ module ColorfulTables
22
30
  t
23
31
  end
24
32
 
25
- #private
33
+ private
26
34
 
27
35
  def is_an_array_of_columns?(data)
28
36
  array_of_booleans = data.try(:map) { |i| i.is_a? Column }
@@ -33,9 +41,13 @@ module ColorfulTables
33
41
  @data.map(&:width)
34
42
  end
35
43
 
44
+ def calculate_columns_options
45
+ @data.map(&:options)
46
+ end
47
+
36
48
  def separator
37
49
  # + 2 is because we have to add an space at the begining and another at the end inside a cell
38
- self.data.inject('+') { |s, column| s += (('-' * (column.width + 2)) + '+') } + "\n"
50
+ self.data.inject("#{@border_chars[:cross]}") { |s, column| s += (("#{@border_chars[:horizontal]}" * (column.width + 2)) + "#{@border_chars[:cross]}") } + "\n"
39
51
  end
40
52
 
41
53
  def header
@@ -43,7 +55,15 @@ module ColorfulTables
43
55
  end
44
56
 
45
57
  def format(row_elements)
46
- row_elements.inject_with_index('|') { |s, element, index| s += " #{element.to_s.rjust(@columns_width[index])} |" } + "\n"
58
+ row_elements.inject_with_index(@border_chars[:vertical]) { |s, element, index| s += " #{element.to_s.rjust(@columns_width[index]).colorize(@columns_options[index][:data_color])} #{@border_chars[:vertical]}" } + "\n"
59
+ end
60
+
61
+ def calculate_border_chars
62
+ color = @options[:border_color]
63
+ {:vertical => '|'.colorize(color),
64
+ :horizontal => '-'.colorize(color),
65
+ :cross => '+'.colorize(color)
66
+ }
47
67
  end
48
68
 
49
69
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: colorful_tables
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Javier Vidal