yummi 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/cash_flow_table.rb +2 -1
- data/examples/cash_flow_table.yaml +11 -1
- data/examples/cash_flow_table_data.csv +2 -1
- data/examples/cash_flow_table_data.yaml +5 -0
- data/examples/list_files.rb +12 -2
- data/examples/monitor_table.rb +24 -13
- data/lib/yummi.rb +4 -0
- data/lib/yummi/table.rb +99 -35
- data/lib/yummi/table_builder.rb +18 -7
- data/lib/yummi/version.rb +1 -1
- metadata +2 -2
data/examples/cash_flow_table.rb
CHANGED
@@ -35,7 +35,8 @@ tablebuilder = Yummi::TableBuilder::new('cash_flow_table.yaml')
|
|
35
35
|
['Withdraw', -50.23, 50.35, true, "34ERDTF6GYU"],
|
36
36
|
['Withdraw', -100, -49.65, true, "2344EDRFT5"],
|
37
37
|
['Deposit', 50, 0.35, false, nil],
|
38
|
-
['Deposit', 600, 600.35, false, nil]
|
38
|
+
['Deposit', 600, 600.35, false, nil],
|
39
|
+
['Total', nil, 600.35, nil, nil]]
|
39
40
|
|
40
41
|
opt.on '--layout LAYOUT', 'Defines the table layout (horizontal or vertical)' do |layout|
|
41
42
|
@table.layout = layout.to_sym
|
data/examples/list_files.rb
CHANGED
@@ -39,11 +39,19 @@ opt = OptionParser::new
|
|
39
39
|
opt.on '--color TYPE', 'Specify the color type (zebra,file,none)' do |type|
|
40
40
|
case type
|
41
41
|
when 'zebra'
|
42
|
-
@table.
|
42
|
+
@table.colorize_row :using => Yummi::Colorizers.stripe(:intense_gray, :intense_white)
|
43
|
+
@table.context do
|
44
|
+
@table.colorize_row :with => :intense_blue
|
45
|
+
@table.format :size, :using => Yummi::Formatters.byte
|
46
|
+
end
|
43
47
|
when 'file'
|
44
|
-
@table.
|
48
|
+
@table.colorize_row do |data| # or |data, index| if you need the index
|
45
49
|
data[:directory] ? :intense_gray : :intense_white
|
46
50
|
end
|
51
|
+
@table.context do
|
52
|
+
@table.colorize_row :with => :intense_blue
|
53
|
+
@table.format :size, :using => Yummi::Formatters.byte
|
54
|
+
end
|
47
55
|
when 'none'
|
48
56
|
@table.no_colors
|
49
57
|
else
|
@@ -64,4 +72,6 @@ files.each do |f|
|
|
64
72
|
data << [f, File.size(f), File.directory?(f)] # the last value will not be printed
|
65
73
|
end
|
66
74
|
@table.data = data
|
75
|
+
@table << ["Total", @table.column(:size).inject(:+)]
|
76
|
+
|
67
77
|
@table.print
|
data/examples/monitor_table.rb
CHANGED
@@ -31,8 +31,12 @@ opt = OptionParser::new
|
|
31
31
|
# sets the title
|
32
32
|
@table.title = 'Server Runtime Info'
|
33
33
|
# formats memory info for easily reading
|
34
|
-
@table.format :max_memory, :using => Yummi::Formatters.byte
|
35
|
-
|
34
|
+
@table.format [:max_memory, :free_memory], :using => Yummi::Formatters.byte
|
35
|
+
|
36
|
+
@table.context do
|
37
|
+
@table.format [:max_memory, :free_memory], :using => Yummi::Formatters.byte
|
38
|
+
@table.colorize_row :with => :white
|
39
|
+
end
|
36
40
|
|
37
41
|
# colorizer for memory
|
38
42
|
memory_colorizer = Yummi::Colorizers.percentage :max => :max_memory, :free => :free_memory
|
@@ -48,8 +52,9 @@ thread_colorizer = Yummi::Colorizers.percentage :max => :max_threads,
|
|
48
52
|
opt.on '--color TYPE', 'Specify the color type (zebra,cell,none)' do |type|
|
49
53
|
case type
|
50
54
|
when 'zebra'
|
51
|
-
@table.
|
55
|
+
@table.colorize_row :using => Yummi::Colorizers.stripe(:yellow, :purple)
|
52
56
|
when 'cell'
|
57
|
+
@table.colorize :server_name, :with => :purple
|
53
58
|
@table.using_row do
|
54
59
|
@table.colorize :free_memory, :using => memory_colorizer
|
55
60
|
@table.colorize :in_use_threads, :using => thread_colorizer
|
@@ -80,26 +85,32 @@ opt.parse ARGV
|
|
80
85
|
|
81
86
|
# sets the table data
|
82
87
|
@table.data = [
|
83
|
-
['Server 1',
|
84
|
-
['Server 2',
|
85
|
-
['Server 3',
|
86
|
-
['Server 4',
|
87
|
-
['Server 5',
|
88
|
-
['Server 6',
|
88
|
+
['Server 1', 1_000_000_000, 750_000_000, 200, 170],
|
89
|
+
['Server 2', 1_000_000_000, 700_000_000, 200, 180],
|
90
|
+
['Server 3', 1_000_000_000, 50_000_000, 200, 50],
|
91
|
+
['Server 4', 1_000_000_000, 200_000_000, 200, 50],
|
92
|
+
['Server 5', 1_000_000_000, 5_000_000, 200, 50],
|
93
|
+
['Server 6', 1_000_000_000, 750_000_000, 200, 50],
|
89
94
|
]
|
90
95
|
|
91
96
|
@table.add :server_name => 'Server 7',
|
92
|
-
:max_memory =>
|
93
|
-
:free_memory =>
|
97
|
+
:max_memory => 1_000_000_000,
|
98
|
+
:free_memory => 200_000_000,
|
94
99
|
:max_threads => 200,
|
95
100
|
:in_use_threads => 170
|
96
101
|
|
97
102
|
@table.add :server_name => 'Server 8',
|
98
|
-
:max_memory =>
|
99
|
-
:free_memory =>
|
103
|
+
:max_memory => 1_000_000_000,
|
104
|
+
:free_memory => 5_000_000,
|
100
105
|
:max_threads => 200,
|
101
106
|
:in_use_threads => 180
|
102
107
|
|
108
|
+
@table.add :server_name => 'Total',
|
109
|
+
:max_memory => @table.column(:max_memory).inject(:+),
|
110
|
+
:free_memory => @table.column(:free_memory).inject(:+),
|
111
|
+
:max_threads => @table.column(:max_threads).inject(:+),
|
112
|
+
:in_use_threads => @table.column(:in_use_threads).inject(:+)
|
113
|
+
|
103
114
|
if @box
|
104
115
|
@box << @table
|
105
116
|
@box.print
|
data/lib/yummi.rb
CHANGED
@@ -165,16 +165,19 @@ module Yummi
|
|
165
165
|
|
166
166
|
# Aligns the text to the right
|
167
167
|
def self.right text, width
|
168
|
+
text = text.to_s unless text.is_a? String
|
168
169
|
text.rjust(width)
|
169
170
|
end
|
170
171
|
|
171
172
|
# Aligns the text to the left
|
172
173
|
def self.left text, width
|
174
|
+
text = text.to_s unless text.is_a? String
|
173
175
|
text.ljust(width)
|
174
176
|
end
|
175
177
|
|
176
178
|
# Aligns the text to the center
|
177
179
|
def self.center text, width
|
180
|
+
text = text.to_s unless text.is_a? String
|
178
181
|
return text if text.size >= width
|
179
182
|
size = width - text.size
|
180
183
|
left_size = size / 2
|
@@ -184,6 +187,7 @@ module Yummi
|
|
184
187
|
|
185
188
|
# Aligns the text to both sides
|
186
189
|
def self.justify text, width
|
190
|
+
text = text.to_s unless text.is_a? String
|
187
191
|
extra_spaces = width - text.size
|
188
192
|
return text unless extra_spaces > 0
|
189
193
|
words = text.split ' '
|
data/lib/yummi/table.rb
CHANGED
@@ -48,7 +48,7 @@ module Yummi
|
|
48
48
|
attr_reader :layout
|
49
49
|
# The table header
|
50
50
|
attr_reader :header
|
51
|
-
|
51
|
+
|
52
52
|
# Creates a new table with the default attributes:
|
53
53
|
#
|
54
54
|
# * Title color: intense_yellow
|
@@ -74,12 +74,11 @@ module Yummi
|
|
74
74
|
@aliases = []
|
75
75
|
|
76
76
|
@align = [:left]
|
77
|
-
@
|
78
|
-
|
79
|
-
@
|
80
|
-
|
81
|
-
@
|
82
|
-
@predicated_colorizers = nil
|
77
|
+
@components = {}
|
78
|
+
#@contexts = []
|
79
|
+
@context_rows = []
|
80
|
+
_define_ :default
|
81
|
+
@current_context = :default
|
83
82
|
end
|
84
83
|
|
85
84
|
# Indicates that the table should not use colors.
|
@@ -92,6 +91,20 @@ module Yummi
|
|
92
91
|
@no_colors = true
|
93
92
|
end
|
94
93
|
|
94
|
+
def context params = {}
|
95
|
+
params ||= {}
|
96
|
+
index = @context_rows.size #@contexts.size
|
97
|
+
_define_ index
|
98
|
+
#@contexts.insert(index, context)
|
99
|
+
@context_rows.insert(index, (params[:rows] or 1))
|
100
|
+
|
101
|
+
@current_context = index
|
102
|
+
yield if block_given?
|
103
|
+
@current_context = :default
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
# Sets the table print layout.
|
95
108
|
def layout=(layout)
|
96
109
|
@layout = layout
|
97
110
|
case layout
|
@@ -104,6 +117,21 @@ module Yummi
|
|
104
117
|
end
|
105
118
|
end
|
106
119
|
|
120
|
+
# Retrieves the row at the given index
|
121
|
+
def row(index)
|
122
|
+
@data[index]
|
123
|
+
end
|
124
|
+
|
125
|
+
# Retrieves the column at the given index. Aliases can be used
|
126
|
+
def column(index)
|
127
|
+
index = parse_index(index)
|
128
|
+
columns = []
|
129
|
+
@data.each do |row|
|
130
|
+
columns << row[index]
|
131
|
+
end
|
132
|
+
columns
|
133
|
+
end
|
134
|
+
|
107
135
|
#
|
108
136
|
# Sets the table header. If no aliases are defined, they will be defined as the texts
|
109
137
|
# in lowercase with line breaks and spaces replaced by underscores.
|
@@ -158,10 +186,11 @@ module Yummi
|
|
158
186
|
#
|
159
187
|
# === Example
|
160
188
|
#
|
161
|
-
# table.
|
189
|
+
# table.colorize_row { |i, row| :red if row[:value] < 0 }
|
162
190
|
#
|
163
|
-
def
|
164
|
-
|
191
|
+
def colorize_row (params = nil, &block)
|
192
|
+
obj = extract_component(params, &block)
|
193
|
+
component[:row_colorizer] = obj
|
165
194
|
end
|
166
195
|
|
167
196
|
#
|
@@ -177,7 +206,7 @@ module Yummi
|
|
177
206
|
#
|
178
207
|
def using_row
|
179
208
|
@using_row = true
|
180
|
-
yield
|
209
|
+
yield if block_given?
|
181
210
|
@using_row = false
|
182
211
|
end
|
183
212
|
|
@@ -224,8 +253,8 @@ module Yummi
|
|
224
253
|
[*indexes].each do |index|
|
225
254
|
index = parse_index(index)
|
226
255
|
if index
|
227
|
-
obj = (params
|
228
|
-
|
256
|
+
obj = extract_component(params, &block)
|
257
|
+
component[:colorizers][index] = {:use_row => @using_row, :component => obj}
|
229
258
|
else
|
230
259
|
colorize_null params, &block
|
231
260
|
end
|
@@ -243,8 +272,8 @@ module Yummi
|
|
243
272
|
# - :with defines the format to use
|
244
273
|
#
|
245
274
|
def colorize_null (params = {}, &block)
|
246
|
-
|
247
|
-
|
275
|
+
component[:null_colorizer] = (params[:using] or block)
|
276
|
+
component[:null_colorizer] ||= proc do |value|
|
248
277
|
params[:with]
|
249
278
|
end
|
250
279
|
end
|
@@ -274,8 +303,8 @@ module Yummi
|
|
274
303
|
[*indexes].each do |index|
|
275
304
|
index = parse_index(index)
|
276
305
|
if index
|
277
|
-
|
278
|
-
|
306
|
+
component[:formatters][index] = (params[:using] or block)
|
307
|
+
component[:formatters][index] ||= proc do |value|
|
279
308
|
params[:with] % value
|
280
309
|
end
|
281
310
|
else
|
@@ -295,8 +324,8 @@ module Yummi
|
|
295
324
|
# - :with defines the format to use
|
296
325
|
#
|
297
326
|
def format_null (params = {}, &block)
|
298
|
-
|
299
|
-
|
327
|
+
component[:null_formatter] = (params[:using] or block)
|
328
|
+
component[:null_formatter] ||= proc do |value|
|
300
329
|
params[:with] % value
|
301
330
|
end
|
302
331
|
end
|
@@ -326,6 +355,26 @@ module Yummi
|
|
326
355
|
string << content(table_data)
|
327
356
|
end
|
328
357
|
|
358
|
+
private
|
359
|
+
|
360
|
+
def extract_component params, &block
|
361
|
+
if params[:using]
|
362
|
+
params[:using]
|
363
|
+
elsif params[:with]
|
364
|
+
proc { |v| params[:with] }
|
365
|
+
else
|
366
|
+
block
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
def _define_ context
|
371
|
+
@components[context] = {
|
372
|
+
:formatters => [],
|
373
|
+
:colorizers => [],
|
374
|
+
:row_colorizer => nil,
|
375
|
+
}
|
376
|
+
end
|
377
|
+
|
329
378
|
#
|
330
379
|
# Gets the content string for the given color map and content
|
331
380
|
#
|
@@ -373,8 +422,18 @@ module Yummi
|
|
373
422
|
#
|
374
423
|
def build_data_output
|
375
424
|
output = []
|
376
|
-
|
425
|
+
rows = @data.size
|
426
|
+
# maps the context for each row
|
427
|
+
row_contexts = [:default] * rows
|
428
|
+
i = 1
|
429
|
+
@context_rows.reverse_each do |size|
|
430
|
+
row_contexts[(rows - size)...rows] = [@context_rows.size - i] * size
|
431
|
+
rows -= size
|
432
|
+
i += 1
|
433
|
+
end
|
377
434
|
@data.each_index do |row_index|
|
435
|
+
# sets the current context
|
436
|
+
@current_context = row_contexts[row_index]
|
378
437
|
row = @data[row_index]
|
379
438
|
_row_data = []
|
380
439
|
row = row.to_a if row.is_a? Range
|
@@ -383,34 +442,37 @@ module Yummi
|
|
383
442
|
color = nil
|
384
443
|
value = nil
|
385
444
|
column = row[col_index]
|
386
|
-
colorizer =
|
387
|
-
if
|
388
|
-
color =
|
445
|
+
colorizer = component[:colorizers][col_index]
|
446
|
+
if component[:null_colorizer] and column.nil?
|
447
|
+
color = component[:null_colorizer].call(column)
|
389
448
|
elsif colorizer
|
390
449
|
arg = colorizer[:use_row] ? IndexedData::new(@aliases, row) : column
|
391
450
|
color = colorizer[:component].call(arg)
|
392
451
|
else
|
393
452
|
color = @colors[:value]
|
394
453
|
end
|
395
|
-
formatter =
|
396
|
-
formatter =
|
454
|
+
formatter = component[:formatters][col_index]
|
455
|
+
formatter = component[:null_formatter] if column.nil? and @null_formatter
|
397
456
|
value = (formatter ? formatter.call(column) : column)
|
398
457
|
|
399
458
|
_row_data << {:value => value, :color => color}
|
400
459
|
end
|
401
|
-
|
460
|
+
row_colorizer = component[:row_colorizer]
|
461
|
+
if row_colorizer
|
402
462
|
row_data = IndexedData::new @aliases, row
|
403
|
-
row_color =
|
463
|
+
row_color = row_colorizer.call row_data, row_index
|
404
464
|
_row_data.collect! { |data| data[:color] = row_color; data } if row_color
|
405
465
|
end
|
406
466
|
|
407
|
-
_row_data = normalize(
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
467
|
+
_row_data = normalize(
|
468
|
+
_row_data,
|
469
|
+
:extract => proc do |data|
|
470
|
+
data[:value].to_s
|
471
|
+
end,
|
472
|
+
:new => proc do |value, data|
|
473
|
+
{:value => value, :color => data[:color]}
|
474
|
+
end
|
475
|
+
)
|
414
476
|
_row_data.each do |_row|
|
415
477
|
output << _row
|
416
478
|
end
|
@@ -418,7 +480,9 @@ module Yummi
|
|
418
480
|
output
|
419
481
|
end
|
420
482
|
|
421
|
-
|
483
|
+
def component
|
484
|
+
@components[@current_context]
|
485
|
+
end
|
422
486
|
|
423
487
|
def normalize(row, params = {})
|
424
488
|
params[:extract] ||= proc do |value|
|
data/lib/yummi/table_builder.rb
CHANGED
@@ -46,7 +46,7 @@ module Yummi
|
|
46
46
|
:invoke => :format
|
47
47
|
|
48
48
|
component [:row_color, :colorize_row], :repository => :row_based_colorizers,
|
49
|
-
:invoke => :
|
49
|
+
:invoke => :colorize_row,
|
50
50
|
:row_based => true
|
51
51
|
|
52
52
|
component [:state, :health], :repository => :using_row_colorizers,
|
@@ -74,6 +74,20 @@ module Yummi
|
|
74
74
|
table.header = config[:header] if config[:header]
|
75
75
|
table.layout = config[:layout].to_sym if config[:layout]
|
76
76
|
|
77
|
+
build_components table, config
|
78
|
+
contexts = config[:contexts]
|
79
|
+
if contexts
|
80
|
+
contexts.each do |context_config|
|
81
|
+
table.context context_config do
|
82
|
+
build_components table, context_config
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
table
|
88
|
+
end
|
89
|
+
|
90
|
+
def build_components(table, config)
|
77
91
|
components.each do |key, component_config|
|
78
92
|
block = lambda do |params|
|
79
93
|
if component_config[:using_row]
|
@@ -90,8 +104,6 @@ module Yummi
|
|
90
104
|
parse_component config[key], component_config, &block
|
91
105
|
end
|
92
106
|
end
|
93
|
-
|
94
|
-
table
|
95
107
|
end
|
96
108
|
|
97
109
|
def parse_component(definitions, config)
|
@@ -111,13 +123,12 @@ module Yummi
|
|
111
123
|
if definitions
|
112
124
|
if definitions.is_a? Hash
|
113
125
|
definitions.each do |component_name, params|
|
114
|
-
|
126
|
+
component = create_component({component_name => params}, config)
|
127
|
+
yield([{:using => component}])
|
115
128
|
end
|
116
129
|
else
|
117
|
-
puts definitions
|
118
130
|
component = create_component(definitions, config)
|
119
|
-
|
120
|
-
yield(component)
|
131
|
+
yield([{:using => component}])
|
121
132
|
end
|
122
133
|
end
|
123
134
|
end
|
data/lib/yummi/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yummi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A tool to colorize your console application.
|
15
15
|
email:
|