colorful_tables 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []