console_table 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/console_table.gemspec +1 -1
- data/console_table_screenshot.png +0 -0
- data/examples/purchases.rb +41 -0
- data/examples/stocks.rb +48 -0
- data/lib/console_table.rb +5 -2
- data/test/test_console_table.rb +126 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20cc9ca26b036bfe447968e6e351a9c701a22e56
|
4
|
+
data.tar.gz: 3dff948fbf2f07604b93189d323b6d55a69efba3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1da3fe51b14f347d17e7670840d00a13c73599e4642518f9ae94769205dc74c222676fbad746b3c4719d476c8125131eaa4a2aac6f94b1d38606f462ad4b5bd0
|
7
|
+
data.tar.gz: 920c48265acf2873c2ff40e86d17ea250a6ef8641b278bc4af148e380951984c625d50dd0c904b646ee3c50f0f2a9301c0ae2f31042db981ebd0033e96ed16fd
|
data/console_table.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "console_table"
|
7
|
-
spec.version = "0.2.
|
7
|
+
spec.version = "0.2.3"
|
8
8
|
spec.authors = ["Rod Hilton"]
|
9
9
|
spec.email = ["consoletable@rodhilton.com"]
|
10
10
|
spec.summary = %q{Simplifies printing tables of information to commandline consoles}
|
Binary file
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'console_table'
|
2
|
+
require 'faker'
|
3
|
+
require 'colorize'
|
4
|
+
|
5
|
+
# Just a goofy example that simulates a big table of purchase data.
|
6
|
+
|
7
|
+
layout = [
|
8
|
+
{size: 6, title: "Pur.#"},
|
9
|
+
{size: 20, title: "Customer"},
|
10
|
+
{size: 13, title: "Product Code"},
|
11
|
+
{size: "*", title: "Product Name", ellipsize: true},
|
12
|
+
{size: 5, title: "Price", justify: :right},
|
13
|
+
{size: 3, title: "Qty"},
|
14
|
+
{size: 8, title: "Date"},
|
15
|
+
{size: 11, title: "Profit/Loss", justify: :right}
|
16
|
+
]
|
17
|
+
|
18
|
+
sum = 0
|
19
|
+
|
20
|
+
ConsoleTable.define(layout, :title=>"Product Purchases".upcase.bold.green.underline) do |table|
|
21
|
+
(0..25).each do |i|
|
22
|
+
name = Faker::Name.name
|
23
|
+
profit = (rand(1*100000)-30000)/100.00
|
24
|
+
table << [
|
25
|
+
sprintf("%010d", rand(1..999999999)).blue,
|
26
|
+
name,
|
27
|
+
Faker::Code.ean.red,
|
28
|
+
Faker::Commerce.product_name,
|
29
|
+
sprintf("%#.2f", Faker::Commerce.price).bold.green,
|
30
|
+
rand(1..20).to_s.magenta,
|
31
|
+
Faker::Date.backward(14).strftime("%m/%d/%y").yellow,
|
32
|
+
sprintf("%#.2f", profit).colorize(profit < 0 ? :red : :green)
|
33
|
+
]
|
34
|
+
|
35
|
+
sum = sum + profit
|
36
|
+
|
37
|
+
sleep(rand(1..10)/20.0)
|
38
|
+
end
|
39
|
+
|
40
|
+
table.footer << "Total Profit: #{sprintf("%#.2f", sum).to_s.colorize(sum < 0 ? :red : :green)}"
|
41
|
+
end
|
data/examples/stocks.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'console_table'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'net/http'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'colorize'
|
7
|
+
|
8
|
+
symbols = ["YHOO", "AAPL", "GOOG", "MSFT", "C", "MMM", "KO", "WMT", "GM", "IBM", "MCD", "VZ", "HD", "DIS", "INTC"]
|
9
|
+
|
10
|
+
params = symbols.collect{|s| "\"#{s}\"" }.join(",")
|
11
|
+
url = "http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol in (#{params})&env=http://datatables.org/alltables.env&format=json"
|
12
|
+
uri = URI.parse(URI::encode(url))
|
13
|
+
response = Net::HTTP.get_response(uri)
|
14
|
+
json = JSON.parse(response.body)
|
15
|
+
|
16
|
+
table_config = [
|
17
|
+
{:key=>:symbol, :title=>"Symbol", :size=>6},
|
18
|
+
{:key=>:name, :title=>"Name", :size=>17},
|
19
|
+
{:key=>:price, :title=>"Price", :size=>5, :justify=>:right},
|
20
|
+
{:key=>:change, :title=>"Change", :size=>7, :justify=>:right},
|
21
|
+
{:key=>:recommendation, :title=>"Recommendation", :size=>15, :justify=>:right}
|
22
|
+
]
|
23
|
+
|
24
|
+
ConsoleTable.define(table_config, :title=>"Stock Prices") do |table|
|
25
|
+
|
26
|
+
json["query"]["results"]["quote"].each do |j|
|
27
|
+
change = j["ChangeRealtime"]
|
28
|
+
if change.start_with?("+")
|
29
|
+
change = change.green
|
30
|
+
else
|
31
|
+
change = change.red
|
32
|
+
end
|
33
|
+
|
34
|
+
recommendation = (rand() <= 0.5) ? "BUY!".white.on_green.bold.underline : "Sell".yellow
|
35
|
+
|
36
|
+
table << [
|
37
|
+
j["Symbol"].magenta,
|
38
|
+
j["Name"],
|
39
|
+
j["LastTradePriceOnly"],
|
40
|
+
change,
|
41
|
+
recommendation
|
42
|
+
]
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
table.footer << "Recommendations randomly generated"
|
47
|
+
|
48
|
+
end
|
data/lib/console_table.rb
CHANGED
@@ -65,6 +65,7 @@ module ConsoleTable
|
|
65
65
|
@left_margin = options[:left_margin] || 0
|
66
66
|
@right_margin = options[:right_margin] || 0
|
67
67
|
@headings = options[:headings].nil? ? true : options[:headings]
|
68
|
+
@ellipse = options[:ellipse] || "..."
|
68
69
|
|
69
70
|
#Set outline, just the upper and lower lines
|
70
71
|
if @borders
|
@@ -335,8 +336,10 @@ module ConsoleTable
|
|
335
336
|
uncolorized = uncolorize(text)
|
336
337
|
if uncolorized.length > length
|
337
338
|
|
339
|
+
ellipsize = false if uncolorize(@ellipse).length >= length
|
340
|
+
|
338
341
|
if ellipsize
|
339
|
-
goal_length = length-
|
342
|
+
goal_length = length-uncolorize(@ellipse).length
|
340
343
|
else
|
341
344
|
goal_length = length
|
342
345
|
end
|
@@ -367,7 +370,7 @@ module ConsoleTable
|
|
367
370
|
current_index = current_index + 1
|
368
371
|
end
|
369
372
|
|
370
|
-
final_string_parts <<
|
373
|
+
final_string_parts << @ellipse if ellipsize
|
371
374
|
final_string_parts << "\e[0m" if color_active
|
372
375
|
|
373
376
|
final_string_parts.join("")
|
data/test/test_console_table.rb
CHANGED
@@ -7,6 +7,9 @@ require 'minitest/autorun'
|
|
7
7
|
#--
|
8
8
|
# TODO: if you're doing center or right-justification, should it trim from the sides or
|
9
9
|
# from the left, respectively?
|
10
|
+
# TODO: "compact" option, which when true makes tables output like they do here, but when
|
11
|
+
# compact is FALSE and borders is true, there's an extra space between the | and the text
|
12
|
+
# but only in the middle - on the sides the | goes up against the margin
|
10
13
|
#++
|
11
14
|
class ConsoleTableTest < Minitest::Test
|
12
15
|
|
@@ -1471,6 +1474,129 @@ Fake:... Fake: 1
|
|
1471
1474
|
assert_output_equal expected, @mock_out.string
|
1472
1475
|
end
|
1473
1476
|
|
1477
|
+
def test_can_custom_ellipse
|
1478
|
+
table_config = [
|
1479
|
+
{:key => :col1, :size => 10, :title => "Column 1", :ellipsize=>true},
|
1480
|
+
{:key => :col2, :size => 10, :title => "Column 2", :ellipsize=>true, :justify=>:right},
|
1481
|
+
]
|
1482
|
+
|
1483
|
+
ConsoleTable.define(table_config, :width => 100, :ellipse=>"…", :output=>@mock_out) do |table|
|
1484
|
+
table << {
|
1485
|
+
:col1 => "Row 1, Column 1",
|
1486
|
+
:col2 => "Row 1, Column 2"
|
1487
|
+
}
|
1488
|
+
|
1489
|
+
table << {
|
1490
|
+
:col1 => {text: "Row 2, Column 1", :ellipsize=>false},
|
1491
|
+
:col2 => {text: "Row 2, Column 1", :ellipsize=>false}
|
1492
|
+
}
|
1493
|
+
end
|
1494
|
+
|
1495
|
+
expected=<<-END
|
1496
|
+
=====================
|
1497
|
+
Column 1 Column 2
|
1498
|
+
---------------------
|
1499
|
+
Row 1, Co… Row 1, Co…
|
1500
|
+
Row 2, Col Row 2, Col
|
1501
|
+
=====================
|
1502
|
+
END
|
1503
|
+
|
1504
|
+
assert_output_equal expected, @mock_out.string
|
1505
|
+
end
|
1506
|
+
|
1507
|
+
def test_can_use_colorized_custom_ellipse_for_some_reason
|
1508
|
+
table_config = [
|
1509
|
+
{:key => :col1, :size => 10, :title => "Column 1", :ellipsize=>true},
|
1510
|
+
{:key => :col2, :size => 10, :title => "Column 2", :ellipsize=>true, :justify=>:right},
|
1511
|
+
]
|
1512
|
+
|
1513
|
+
ConsoleTable.define(table_config, :width => 100, :ellipse=>"…".red, :output=>@mock_out) do |table|
|
1514
|
+
table << {
|
1515
|
+
:col1 => "Row 1, Column 1",
|
1516
|
+
:col2 => "Row 1, Column 2"
|
1517
|
+
}
|
1518
|
+
|
1519
|
+
table << {
|
1520
|
+
:col1 => {text: "Row 2, Column 1", :ellipsize=>false},
|
1521
|
+
:col2 => {text: "Row 2, Column 1", :ellipsize=>false}
|
1522
|
+
}
|
1523
|
+
end
|
1524
|
+
|
1525
|
+
expected=<<-END
|
1526
|
+
=====================
|
1527
|
+
Column 1 Column 2
|
1528
|
+
---------------------
|
1529
|
+
Row 1, Co… Row 1, Co…
|
1530
|
+
Row 2, Col Row 2, Col
|
1531
|
+
=====================
|
1532
|
+
END
|
1533
|
+
|
1534
|
+
assert_includes @mock_out.string, "\e[0;31;49m…\e[0m"
|
1535
|
+
|
1536
|
+
assert_output_equal expected, @mock_out.string
|
1537
|
+
end
|
1538
|
+
|
1539
|
+
def test_can_use_extra_long_ellipse
|
1540
|
+
table_config = [
|
1541
|
+
{:key => :col1, :size => 10, :title => "Column 1", :ellipsize=>true},
|
1542
|
+
{:key => :col2, :size => 10, :title => "Column 2", :ellipsize=>true, :justify=>:right},
|
1543
|
+
]
|
1544
|
+
|
1545
|
+
ConsoleTable.define(table_config, :width => 100, :ellipse=>" (cont)", :output=>@mock_out) do |table|
|
1546
|
+
table << {
|
1547
|
+
:col1 => "Row 1, Column 1",
|
1548
|
+
:col2 => "Row 1, Column 2"
|
1549
|
+
}
|
1550
|
+
|
1551
|
+
table << {
|
1552
|
+
:col1 => {text: "Row 2, Column 1", :ellipsize=>false},
|
1553
|
+
:col2 => {text: "Row 2, Column 1", :ellipsize=>false}
|
1554
|
+
}
|
1555
|
+
end
|
1556
|
+
|
1557
|
+
expected=<<-END
|
1558
|
+
=====================
|
1559
|
+
Column 1 Column 2
|
1560
|
+
---------------------
|
1561
|
+
Row (cont) Row (cont)
|
1562
|
+
Row 2, Col Row 2, Col
|
1563
|
+
=====================
|
1564
|
+
END
|
1565
|
+
|
1566
|
+
|
1567
|
+
assert_output_equal expected, @mock_out.string
|
1568
|
+
end
|
1569
|
+
|
1570
|
+
def test_ellipse_char_too_long_for_area_is_ignored_entirely
|
1571
|
+
table_config = [
|
1572
|
+
{:key => :col1, :size => 10, :title => "Column 1", :ellipsize=>true},
|
1573
|
+
{:key => :col2, :size => 10, :title => "Column 2", :ellipsize=>true, :justify=>:right},
|
1574
|
+
]
|
1575
|
+
|
1576
|
+
ConsoleTable.define(table_config, :width => 100, :ellipse=>" (this is a long ellipse)", :output=>@mock_out) do |table|
|
1577
|
+
table << {
|
1578
|
+
:col1 => "Row 1, Column 1",
|
1579
|
+
:col2 => "Row 1, Column 2"
|
1580
|
+
}
|
1581
|
+
|
1582
|
+
table << {
|
1583
|
+
:col1 => {text: "Row 2, Column 1", :ellipsize=>false},
|
1584
|
+
:col2 => {text: "Row 2, Column 1", :ellipsize=>false}
|
1585
|
+
}
|
1586
|
+
end
|
1587
|
+
|
1588
|
+
expected=<<-END
|
1589
|
+
=====================
|
1590
|
+
Column 1 Column 2
|
1591
|
+
---------------------
|
1592
|
+
Row 1, Col Row 1, Col
|
1593
|
+
Row 2, Col Row 2, Col
|
1594
|
+
=====================
|
1595
|
+
END
|
1596
|
+
|
1597
|
+
assert_output_equal expected, @mock_out.string
|
1598
|
+
end
|
1599
|
+
|
1474
1600
|
private
|
1475
1601
|
def assert_output_equal(expected, actual)
|
1476
1602
|
expected_lines = expected.split("\n")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rod Hilton
|
@@ -111,6 +111,8 @@ files:
|
|
111
111
|
- Rakefile
|
112
112
|
- console_table.gemspec
|
113
113
|
- console_table_screenshot.png
|
114
|
+
- examples/purchases.rb
|
115
|
+
- examples/stocks.rb
|
114
116
|
- lib/console_table.rb
|
115
117
|
- test/test_console_table.rb
|
116
118
|
homepage: https://github.com/rodhilton/console_table
|