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.
- data/lib/{column.rb → colorful_tables/column.rb} +2 -1
- data/lib/{enumerable.rb → colorful_tables/enumerable.rb} +0 -0
- data/lib/{errors.rb → colorful_tables/errors.rb} +0 -0
- data/lib/{misc.rb → colorful_tables/misc.rb} +0 -0
- data/lib/{object.rb → colorful_tables/object.rb} +3 -1
- data/lib/{table.rb → colorful_tables/table.rb} +47 -15
- data/lib/colorful_tables/util.rb +34 -0
- data/lib/colorful_tables/version.rb +1 -1
- data/lib/colorful_tables.rb +7 -6
- metadata +11 -10
File without changes
|
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
|
18
|
-
@options
|
19
|
-
@border_chars
|
20
|
-
@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
|
25
|
-
|
26
|
-
|
27
|
-
|
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 =
|
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
|
data/lib/colorful_tables.rb
CHANGED
@@ -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:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 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-
|
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: []
|