flexible_table 0.0.1
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.
- checksums.yaml +7 -0
- data/lib/flexible_column.rb +7 -0
- data/lib/flexible_table.rb +44 -0
- data/lib/print_helper.rb +33 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 87a39f425b93bfe9764411addd45abb6a172ba35
|
4
|
+
data.tar.gz: 2863f2030c00a87bc9e7962b4f1ff188394c3d65
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e7789777d44279338c617989f360e2c784dbf5d775bc03e63546422fc37d8c6f00b985dc4ff8963385cbfcc7eff9e05c587070739103f693d582766aa9895126
|
7
|
+
data.tar.gz: 3ecc8474a3ad64277977659a13e849880da070d1c5b393ad970aa18251aaac9d75ea20c58cff75c14a6cd3e238de491de901916f85a627435219b416d24025f0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative './flexible_column'
|
2
|
+
require_relative './print_helper'
|
3
|
+
require 'io/console'
|
4
|
+
|
5
|
+
class FlexibleTable
|
6
|
+
include PrintHelper
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@screen_width = IO.console.winsize[1]
|
10
|
+
@columns = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_column(title, width_percentage)
|
14
|
+
@columns << FlexibleColumn.new(title, width_percentage)
|
15
|
+
end
|
16
|
+
|
17
|
+
def print_header()
|
18
|
+
validate_column_width_percentages
|
19
|
+
|
20
|
+
@columns.each_with_index do |col, index|
|
21
|
+
abs_width = get_abs_width(col.width_percentage, 3)
|
22
|
+
output = get_printable_output(col.header, abs_width)
|
23
|
+
|
24
|
+
printf("%-#{abs_width}s", output)
|
25
|
+
printf(' | ') unless index == (@columns.length - 1)
|
26
|
+
end
|
27
|
+
|
28
|
+
puts "\n"
|
29
|
+
print_header_line
|
30
|
+
end
|
31
|
+
|
32
|
+
def print_row(*args)
|
33
|
+
validate_column_width_percentages
|
34
|
+
|
35
|
+
args.each_with_index do |element, index|
|
36
|
+
abs_width = get_abs_width(@columns[index].width_percentage, 3)
|
37
|
+
output = get_printable_output(element, abs_width)
|
38
|
+
|
39
|
+
printf("%-#{abs_width}s", output)
|
40
|
+
printf(' | ') unless index == (@columns.length - 1)
|
41
|
+
end
|
42
|
+
puts "\n"
|
43
|
+
end
|
44
|
+
end
|
data/lib/print_helper.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module PrintHelper
|
2
|
+
private
|
3
|
+
def get_abs_width(width_percentage, offset=0)
|
4
|
+
abs_width = (Integer(((width_percentage.to_f / 100.to_f) * @screen_width.to_f).floor)) - offset
|
5
|
+
|
6
|
+
return abs_width <= 0 ? 1 : abs_width
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_printable_output(str, abs_width)
|
10
|
+
return str[0..(abs_width - 1)]
|
11
|
+
end
|
12
|
+
|
13
|
+
def print_header_line
|
14
|
+
line_header = ''
|
15
|
+
|
16
|
+
@columns.each do |col|
|
17
|
+
get_abs_width(col.width_percentage).times do |t|
|
18
|
+
line_header << '-'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
puts "#{line_header}\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def validate_column_width_percentages
|
25
|
+
total_percentage = (@columns.map { |x| x.width_percentage }).reduce(:+)
|
26
|
+
if(total_percentage > 100)
|
27
|
+
puts "Your column percentages can't add up to more than 100%\n"
|
28
|
+
@columns.each { |col| puts "\t#{col.header}: \t#{col.width_percentage}" }
|
29
|
+
puts "\tTotal percetage: #{total_percentage}"
|
30
|
+
exit
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flexible_table
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brett Sykes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Prints a table that can have different column widths that also respond
|
14
|
+
in size relative to the size of the terminal window
|
15
|
+
email: brettcsykes@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/flexible_column.rb
|
21
|
+
- lib/flexible_table.rb
|
22
|
+
- lib/print_helper.rb
|
23
|
+
homepage: https://github.com/bretts/flexible_table
|
24
|
+
licenses:
|
25
|
+
- MIT
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 2.4.5
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: Prints a table that can have different column widths that also respond in
|
47
|
+
size relative to the size of the terminal window
|
48
|
+
test_files: []
|