colorful_tables 0.3.0 → 0.4.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.
@@ -3,7 +3,8 @@ module ColorfulTables
3
3
  class Column
4
4
 
5
5
  DEFAULT_OPTIONS = {
6
- :data_color => :light_blue
6
+ :data_color => :light_blue,
7
+ :header_color => :light_blue
7
8
  }
8
9
 
9
10
  attr_accessor :header, :data, :options
File without changes
File without changes
@@ -1,6 +1,8 @@
1
+ # Copied from rails
2
+ # https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/try.rb
3
+
1
4
  class Object
2
5
 
3
- # From https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/try.rb
4
6
  def try(*a, &b)
5
7
  if a.empty? && block_given?
6
8
  yield self
@@ -13,27 +13,37 @@ module ColorfulTables
13
13
  attr_accessor :data, :options
14
14
 
15
15
  def initialize(data, options = {})
16
- raise RuntimeError, "data must be an array of columns" unless is_an_array_of_columns?(data)
17
- @data = data
18
- @options = DEFAULT_OPTIONS.merge(options)
19
- @border_chars ||= calculate_border_chars
20
- @columns_width ||= calculate_columns_width
16
+ #raise RuntimeError, "data must be an array of columns" unless is_an_array_of_columns?(data)
17
+ @data = data
18
+ @options = DEFAULT_OPTIONS.merge(options)
19
+ @border_chars ||= calculate_border_chars
20
+ @columns_width ||= calculate_columns_width
21
21
  @columns_options ||= calculate_columns_options
22
+ @terminal_heigth ||= ColorfulTables.detect_terminal_size[1]
23
+ @transposed_data ||= self.data.map(&:data).transpose
22
24
  end
23
25
 
24
- def to_s
25
- t = "\r" + header
26
- self.data.map(&:data).transpose.each do |row|
27
- t += format(row)
26
+ def page(n)
27
+ return nil if n >= total_pages
28
+ page_output = @transposed_data[page_ranges[n]].inject("\r" + header) do |output, row|
29
+ output += format(row)
30
+ end
31
+ page_output += separator
32
+ page_output
33
+ end
34
+
35
+ def paginate
36
+ total_pages.times do |n|
37
+ puts page(n)
38
+ print "-- Press ENTER --"
39
+ STDIN.getc
28
40
  end
29
- t += separator
30
- t
31
41
  end
32
42
 
33
43
  private
34
44
 
35
45
  def is_an_array_of_columns?(data)
36
- array_of_booleans = data.try(:map) { |i| i.is_a? Column }
46
+ array_of_booleans = data.try(:map) { |i| i.is_a? ColorfulTables::Column }
37
47
  array_of_booleans.nil? ? false : !(array_of_booleans.include? false)
38
48
  end
39
49
 
@@ -51,13 +61,17 @@ module ColorfulTables
51
61
  end
52
62
 
53
63
  def header
54
- separator + format(@data.map(&:header)) + separator
64
+ separator + format(@data.map(&:header), :in_header) + separator
55
65
  end
56
66
 
57
- def format(row_elements)
67
+ def format(row_elements, in_header = false)
58
68
  output = row_elements.inject_with_index(@border_chars[:vertical]) do |s, element, index|
59
69
  value = ColorfulTables.truncate_if_float(element)
60
- color = @columns_options[index][:data_color].is_a?(Proc) ? @columns_options[index][:data_color].call(value) : @columns_options[index][:data_color]
70
+ color = if in_header
71
+ @columns_options[index][:header_color]
72
+ else
73
+ @columns_options[index][:data_color].is_a?(Proc) ? @columns_options[index][:data_color].call(value) : @columns_options[index][:data_color]
74
+ end
61
75
  s += " #{value.to_s.rjust(@columns_width[index]).colorize(color)} #{@border_chars[:vertical]}"
62
76
  end
63
77
  output + "\n"
@@ -70,6 +84,24 @@ module ColorfulTables
70
84
  :cross => '+'.colorize(color) }
71
85
  end
72
86
 
87
+ def page_ranges
88
+ ranges = []
89
+ Range.new(0,total_rows,:exclude_last).each_slice(rows_per_page) {|r| ranges << Range.new(r.first,r.last) }
90
+ ranges
91
+ end
92
+
93
+ def rows_per_page
94
+ @terminal_heigth - 5
95
+ end
96
+
97
+ def total_rows
98
+ @transposed_data.size
99
+ end
100
+
101
+ def total_pages
102
+ Rational(total_rows, rows_per_page).ceil
103
+ end
104
+
73
105
  end
74
106
 
75
107
  end
@@ -0,0 +1,34 @@
1
+ # Copied from hirb gem
2
+ # https://github.com/cldwalker/hirb/blob/master/lib/hirb/util.rb
3
+
4
+ module ColorfulTables
5
+
6
+ class << self
7
+
8
+ # Determines if a shell command exists by searching for it in ENV['PATH'].
9
+ def command_exists?(command)
10
+ ENV['PATH'].split(File::PATH_SEPARATOR).any? {|d| File.exists? File.join(d, command) }
11
+ end
12
+
13
+ # Returns [width, height] of terminal when detected, nil if not detected.
14
+ # Think of this as a simpler version of Highline's Highline::SystemExtensions.terminal_size()
15
+ def detect_terminal_size
16
+ if (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
17
+ [ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
18
+ elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
19
+ [`tput cols`.to_i, `tput lines`.to_i]
20
+ elsif STDIN.tty? && command_exists?('stty')
21
+ `stty size`.scan(/\d+/).map { |s| s.to_i }.reverse
22
+ else
23
+ nil
24
+ end
25
+ rescue
26
+ nil
27
+ end
28
+
29
+ end
30
+
31
+
32
+
33
+
34
+ end
@@ -1,3 +1,3 @@
1
1
  module ColorfulTables
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -1,11 +1,12 @@
1
1
  module ColorfulTables
2
2
 
3
3
  require 'colorize'
4
- require 'object'
5
- require 'enumerable'
6
- require 'errors'
7
- require 'table'
8
- require 'column'
9
- require 'misc'
4
+ require 'colorful_tables/object'
5
+ require 'colorful_tables/enumerable'
6
+ require 'colorful_tables/errors'
7
+ require 'colorful_tables/table'
8
+ require 'colorful_tables/column'
9
+ require 'colorful_tables/misc'
10
+ require 'colorful_tables/util'
10
11
 
11
12
  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: 19
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Javier Vidal
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-11 00:00:00 +02:00
18
+ date: 2011-10-14 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -47,13 +47,14 @@ files:
47
47
  - Rakefile
48
48
  - colorful_tables.gemspec
49
49
  - lib/colorful_tables.rb
50
+ - lib/colorful_tables/column.rb
51
+ - lib/colorful_tables/enumerable.rb
52
+ - lib/colorful_tables/errors.rb
53
+ - lib/colorful_tables/misc.rb
54
+ - lib/colorful_tables/object.rb
55
+ - lib/colorful_tables/table.rb
56
+ - lib/colorful_tables/util.rb
50
57
  - lib/colorful_tables/version.rb
51
- - lib/column.rb
52
- - lib/enumerable.rb
53
- - lib/errors.rb
54
- - lib/misc.rb
55
- - lib/object.rb
56
- - lib/table.rb
57
58
  has_rdoc: true
58
59
  homepage: ""
59
60
  licenses: []