yummi 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +3 -2
- data/bin/yummi +2 -33
- data/examples/cash_flow_table.yaml +5 -5
- data/examples/license_box.rb +2 -2
- data/examples/list_files.rb +2 -2
- data/examples/logcat_colorizer.rb +1 -1
- data/examples/monitor_table.rb +3 -3
- data/lib/yummi.rb +30 -127
- data/lib/yummi/colorizers.rb +1 -0
- data/lib/yummi/extensions.rb +48 -4
- data/lib/yummi/logger.rb +3 -3
- data/lib/yummi/no_colors.rb +1 -11
- data/lib/yummi/patterns/jboss.yaml +1 -1
- data/lib/yummi/patterns/log.yaml +1 -1
- data/lib/yummi/patterns/weblogic.yaml +4 -4
- data/lib/yummi/table.rb +47 -20
- data/lib/yummi/text_box.rb +35 -19
- data/lib/yummi/version.rb +1 -1
- data/yummi.gemspec +2 -0
- data/yummi.iml +2 -3
- data/yummi.ipr +11 -2
- metadata +19 -6
- data/lib/yummi/color_mapping.rb +0 -48
- data/lib/yummi/generate/colorize.sh.erb +0 -23
- data/lib/yummi/generator.rb +0 -47
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Yummi
|
2
2
|
|
3
|
-
This is a tool to
|
3
|
+
This is a tool to make your console app more tasty. Yummi provides a set of console line elements
|
4
|
+
also with a delegator for colorizing Strings using the awesome gem term-ansicolor.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -46,7 +47,7 @@ Example:
|
|
46
47
|
patterns:
|
47
48
|
TRACE : cyan
|
48
49
|
DEBUG : blue
|
49
|
-
INFO :
|
50
|
+
INFO : black
|
50
51
|
WARN : yellow
|
51
52
|
ERROR : red
|
52
53
|
FATAL : intense_red
|
data/bin/yummi
CHANGED
@@ -27,20 +27,10 @@ require 'optparse'
|
|
27
27
|
|
28
28
|
@params = []
|
29
29
|
|
30
|
-
def get_input message, default
|
31
|
-
puts(message.colorize(:blue) << ": " << " [#{default}]".colorize(:yellow))
|
32
|
-
input = gets.chomp
|
33
|
-
return default if input.empty?
|
34
|
-
input
|
35
|
-
end
|
36
|
-
|
37
30
|
opt = OptionParser::new
|
38
31
|
opt.on '-c COLOR', '--color=COLOR', 'Colorize using the given color' do |color|
|
39
32
|
@color = color
|
40
33
|
end
|
41
|
-
opt.on '-s STYLE', '--style=STYLE', Array, 'Sets the styles to use (bold, highlight, underline, blink, ...)' do |styles|
|
42
|
-
@styles = styles
|
43
|
-
end
|
44
34
|
opt.on '-f FORMAT', '--format=FORMAT', 'Sets the format to use (a "%s" means the colorized message)' do |format|
|
45
35
|
@format = format
|
46
36
|
end
|
@@ -67,27 +57,6 @@ opt.on '-l FILES', '--load=FILES', Array, 'Include the files for extending compo
|
|
67
57
|
load File.expand_path(file)
|
68
58
|
end
|
69
59
|
end
|
70
|
-
opt.on '--shell-script', 'Outputs a shell script program to colorize texts without a ruby environment' do
|
71
|
-
abort "Environment not supported" unless Yummi::Color::supported?
|
72
|
-
|
73
|
-
generator = Yummi::Generator::ShellScript::new
|
74
|
-
puts generator.generate
|
75
|
-
exit 0
|
76
|
-
end
|
77
|
-
opt.on '--install', 'Installs a shell script program to colorize texts without a ruby environment' do
|
78
|
-
abort "Environment not supported" unless Yummi::Color::supported?
|
79
|
-
|
80
|
-
puts ".: Yummi shell script installation :.".colorize(:bold_yellow)
|
81
|
-
name = get_input "Program name", "colorize"
|
82
|
-
location = File.expand_path(get_input("Install location", "~/bin"))
|
83
|
-
file = File.join(location, name)
|
84
|
-
|
85
|
-
generator = Yummi::Generator::ShellScript::new
|
86
|
-
generator.install file
|
87
|
-
|
88
|
-
puts "Program installed!".colorize(:bold_green)
|
89
|
-
exit 0
|
90
|
-
end
|
91
60
|
opt.on '-h', '--help', 'Display this help message' do
|
92
61
|
puts opt
|
93
62
|
exit 0
|
@@ -102,7 +71,7 @@ opt.parse! ARGV
|
|
102
71
|
|
103
72
|
def print_out message
|
104
73
|
output_text = if @color
|
105
|
-
Yummi::colorize message, @color
|
74
|
+
Yummi::colorize message, @color
|
106
75
|
elsif @colorizer
|
107
76
|
@colorizer.colorize message
|
108
77
|
end
|
@@ -129,6 +98,6 @@ else
|
|
129
98
|
print_out line.chomp
|
130
99
|
end
|
131
100
|
rescue Interrupt
|
132
|
-
puts
|
101
|
+
puts "Aborted!".red
|
133
102
|
end
|
134
103
|
end
|
@@ -18,9 +18,9 @@ format:
|
|
18
18
|
with: none
|
19
19
|
color:
|
20
20
|
description:
|
21
|
-
with:
|
21
|
+
with: magenta
|
22
22
|
authentication_code:
|
23
|
-
with:
|
23
|
+
with: black.on_intense_white
|
24
24
|
eletronic:
|
25
25
|
boolean:
|
26
26
|
if_true: blue
|
@@ -28,7 +28,7 @@ color:
|
|
28
28
|
value,total:
|
29
29
|
numeric:
|
30
30
|
positive: green
|
31
|
-
zero:
|
31
|
+
zero: white
|
32
32
|
negative: red
|
33
33
|
undefined:
|
34
34
|
with: red
|
@@ -43,7 +43,7 @@ top:
|
|
43
43
|
zero: "%.2f"
|
44
44
|
negative: "%.2f"
|
45
45
|
row_color:
|
46
|
-
with:
|
46
|
+
with: intense_white
|
47
47
|
bottom:
|
48
48
|
- format:
|
49
49
|
total:
|
@@ -52,4 +52,4 @@ bottom:
|
|
52
52
|
zero: "%.2f"
|
53
53
|
negative: "%.2f"
|
54
54
|
row_color:
|
55
|
-
with:
|
55
|
+
with: intense_white
|
data/examples/license_box.rb
CHANGED
@@ -27,8 +27,8 @@ require_relative '../lib/yummi'
|
|
27
27
|
|
28
28
|
@box.style.width = 70
|
29
29
|
@box.style.align = :justify
|
30
|
-
@box.style.separator[:color] = :
|
31
|
-
@box.style.border[:color] = :
|
30
|
+
@box.style.separator[:color] = :magenta
|
31
|
+
@box.style.border[:color] = :intense_magenta
|
32
32
|
|
33
33
|
opt = OptionParser::new
|
34
34
|
|
data/examples/list_files.rb
CHANGED
@@ -39,14 +39,14 @@ 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.colorize_row :using => Yummi::Colorizers.stripe(:
|
42
|
+
@table.colorize_row :using => Yummi::Colorizers.stripe(:intense_black, :intense_white)
|
43
43
|
@table.bottom do
|
44
44
|
@table.colorize_row :with => :intense_blue
|
45
45
|
@table.format :size, :using => Yummi::Formatters.byte
|
46
46
|
end
|
47
47
|
when 'file'
|
48
48
|
@table.colorize_row do |data| # or |data, index| if you need the index
|
49
|
-
data[:directory] ? :
|
49
|
+
data[:directory] ? :intense_black : :intense_white
|
50
50
|
end
|
51
51
|
@table.bottom do
|
52
52
|
@table.colorize_row :with => :intense_blue
|
data/examples/monitor_table.rb
CHANGED
@@ -54,14 +54,14 @@ end
|
|
54
54
|
}
|
55
55
|
|
56
56
|
def zebra_colors
|
57
|
-
@table.colorize_row :using => Yummi::Colorizers.stripe(:yellow, :
|
57
|
+
@table.colorize_row :using => Yummi::Colorizers.stripe(:yellow, :magenta)
|
58
58
|
end
|
59
59
|
|
60
60
|
def full_colors
|
61
|
-
@table.colorize :server_name, :with => :
|
61
|
+
@table.colorize :server_name, :with => :magenta
|
62
62
|
@table.colorize :free_memory, :using => @memory_colorizer
|
63
63
|
@table.colorize :in_use_threads, :using => @thread_colorizer
|
64
|
-
@table.colorize [:max_memory, :max_threads], :with => :
|
64
|
+
@table.colorize [:max_memory, :max_threads], :with => :black
|
65
65
|
end
|
66
66
|
|
67
67
|
full_colors
|
data/lib/yummi.rb
CHANGED
@@ -20,142 +20,47 @@
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
21
|
# THE SOFTWARE.
|
22
22
|
|
23
|
+
require 'set'
|
24
|
+
require 'term/ansicolor'
|
23
25
|
require_relative "yummi/version"
|
24
26
|
|
25
27
|
module Yummi
|
26
|
-
# Base for colorizing
|
27
|
-
module Color
|
28
|
-
|
29
|
-
# The Color Schema Definition
|
30
|
-
module Schema
|
31
|
-
# Normal Linux Terminal Colors, used by default in normal color types
|
32
|
-
NORMAL_COLORS = {
|
33
|
-
:colors => [:black, :red, :green, [:yellow, :orange], :blue, [:purple, :magenta], :cyan, [:gray, :white]],
|
34
|
-
:default => :white
|
35
|
-
}
|
36
|
-
# Intense Linux Terminal Colors, used by default in bold color types
|
37
|
-
ALTERNATE_COLORS = {
|
38
|
-
:colors => [:gray, :red, :green, :yellow, :blue, [:purple, :magenta], :cyan, :white],
|
39
|
-
:default => :gray
|
40
|
-
}
|
41
|
-
end
|
42
|
-
|
43
|
-
# Color mappings
|
44
|
-
COLORS = {}
|
45
|
-
|
46
|
-
#
|
47
|
-
# Checks if the environment is supported by Yummi.
|
48
|
-
#
|
49
|
-
# Currently (known) unsupported environments are:
|
50
|
-
# * Windows
|
51
|
-
#
|
52
|
-
def self.supported?
|
53
|
-
not RUBY_PLATFORM['mingw'] #Windows
|
54
|
-
end
|
55
|
-
|
56
|
-
#
|
57
|
-
# Clears all color mappings and add this ones
|
58
|
-
#
|
59
|
-
# see #add_color_map
|
60
|
-
#
|
61
|
-
def self.load_color_map mappings
|
62
|
-
COLORS.clear
|
63
|
-
add_color_map mappings
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# Adds the given color mappings, overriding the already defined.
|
68
|
-
#
|
69
|
-
# Colors are printed using a "[#{type_key_code}:3#{color_key_code}m" prefix.
|
70
|
-
#
|
71
|
-
# === Args
|
72
|
-
#
|
73
|
-
# The mappings is a Hash of Hashes, each parent hash must define a type key and the
|
74
|
-
# child hash must contain the following keys:
|
75
|
-
#
|
76
|
-
# +key_code+::
|
77
|
-
# The key code to map this type. If the type name is :default, the mapping will not
|
78
|
-
# use the name "default" (:normal_red will become only :red)
|
79
|
-
# +schema+::
|
80
|
-
# An array with the color names. Each name will be mapped and their positions
|
81
|
-
# (1 based) too. (:intense_red and :intense_2, for example)
|
82
|
-
#
|
83
|
-
def self.add_color_map mappings
|
84
|
-
mappings.each do |types, config|
|
85
|
-
[*types].each do |type|
|
86
|
-
schema = config[:schema]
|
87
|
-
schema[:colors].each_with_index do |colors, key_code|
|
88
|
-
[*colors].each do |color|
|
89
|
-
# maps the default color for a type
|
90
|
-
COLORS[type] = "#{config[:key_code]}#{key_code}" if color == schema[:default]
|
91
|
-
# do not use prefix if schema is default
|
92
|
-
prefix = (type == :default ? '' : "#{type}_")
|
93
|
-
# maps the color using color name
|
94
|
-
key = "#{prefix}#{color}"
|
95
|
-
COLORS[key.to_sym] = "#{config[:key_code]}#{key_code}"
|
96
|
-
# maps the color using color key code
|
97
|
-
key = "#{prefix}#{key_code + 1}"
|
98
|
-
COLORS[key.to_sym] = "#{config[:key_code]}#{key_code}"
|
99
|
-
# maps the color using color name if default schema does not defines it
|
100
|
-
# example: yellow and white are present only in strong/intense schema
|
101
|
-
COLORS[color.to_sym] = "#{config[:key_code]}#{key_code}" unless COLORS[color]
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
# Escape the given text with the given color code
|
109
|
-
def self.escape key
|
110
|
-
return key unless key and COLORS[key.to_sym]
|
111
|
-
"\e[#{COLORS[key.to_sym]}m"
|
112
|
-
end
|
113
|
-
|
114
|
-
# Colorize the given text with the given color
|
115
|
-
def self.colorize string, color
|
116
|
-
return string if color.to_s == 'none'
|
117
|
-
color, end_color = [color, "\e[0;0m"].map { |key| Color.escape(key) }
|
118
|
-
color ? "#{color}#{string}#{end_color}" : string
|
119
|
-
end
|
120
28
|
|
29
|
+
#
|
30
|
+
# Checks if the environment is supported by Yummi.
|
31
|
+
#
|
32
|
+
# Currently (known) unsupported environments are:
|
33
|
+
# * Windows
|
34
|
+
#
|
35
|
+
def self.supported?
|
36
|
+
not RUBY_PLATFORM['mingw'] #Windows
|
121
37
|
end
|
122
38
|
|
123
|
-
#
|
124
|
-
# Colorizes the text using the given color.
|
125
|
-
#
|
126
|
-
# Examples:
|
127
39
|
#
|
128
|
-
#
|
129
|
-
#
|
130
|
-
#
|
40
|
+
# Colorizes the given string with the given color
|
41
|
+
#
|
42
|
+
# The color may be an integer, a string or a dot
|
43
|
+
# separated color style (ex: "bold.yellow" or
|
44
|
+
# "underline.bold.green").
|
131
45
|
#
|
132
|
-
#
|
46
|
+
# Since this method delegates to Term::ANSIColor,
|
47
|
+
# the given color should be compatible with it.
|
133
48
|
#
|
134
|
-
def self.colorize string, color
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
string = Color.colorize(string, "#{style}_#{color}")
|
145
|
-
end
|
146
|
-
string
|
49
|
+
def self.colorize string, color
|
50
|
+
return string unless color
|
51
|
+
if color.is_a? Fixnum
|
52
|
+
string.color color
|
53
|
+
elsif color.match(/\./)
|
54
|
+
result = string
|
55
|
+
color.to_s.split(/\./).each { |c| result = colorize(result, c) }
|
56
|
+
result
|
57
|
+
elsif color.match(/\d+/)
|
58
|
+
string.color color.to_i
|
147
59
|
else
|
148
|
-
|
60
|
+
string.send color
|
149
61
|
end
|
150
62
|
end
|
151
63
|
|
152
|
-
#
|
153
|
-
# Extracts the text from a colorized string
|
154
|
-
#
|
155
|
-
def self.uncolorize string
|
156
|
-
string.gsub(/\e\[\d;\d{2}m/, '').gsub(/\e\[0;0m/, '')
|
157
|
-
end
|
158
|
-
|
159
64
|
# A module to align texts based on a reference width
|
160
65
|
module Aligner
|
161
66
|
|
@@ -323,7 +228,7 @@ module Yummi
|
|
323
228
|
|
324
229
|
def self.load_resource name, params = {:from => ''}
|
325
230
|
file = File.expand_path name.to_s
|
326
|
-
if File.
|
231
|
+
if File.file? file
|
327
232
|
return YAML::load_file(file)
|
328
233
|
else
|
329
234
|
from = params[:from].to_s
|
@@ -357,18 +262,16 @@ module Yummi
|
|
357
262
|
|
358
263
|
end
|
359
264
|
|
360
|
-
require_relative 'yummi/no_colors' unless Yummi::
|
265
|
+
require_relative 'yummi/no_colors' unless Yummi::supported?
|
361
266
|
|
362
267
|
require_relative 'yummi/extensions'
|
363
268
|
require_relative 'yummi/data_parser'
|
364
269
|
require_relative "yummi/colorizers"
|
365
270
|
require_relative "yummi/formatters"
|
366
|
-
require_relative 'yummi/color_mapping'
|
367
271
|
require_relative 'yummi/table'
|
368
272
|
require_relative 'yummi/table_builder'
|
369
273
|
require_relative 'yummi/text_box'
|
370
274
|
require_relative 'yummi/logger'
|
371
|
-
require_relative 'yummi/generator'
|
372
275
|
|
373
276
|
# if the output is being piped, turn off the colors
|
374
277
|
unless $stdout.isatty
|
data/lib/yummi/colorizers.rb
CHANGED
data/lib/yummi/extensions.rb
CHANGED
@@ -21,11 +21,16 @@
|
|
21
21
|
# THE SOFTWARE.
|
22
22
|
|
23
23
|
class String
|
24
|
+
include Term::ANSIColor
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
#
|
27
|
+
# Colorizes the string using #Yummi#colorize
|
28
|
+
#
|
29
|
+
# If params is a hash, the keys will be used as a regexp and the
|
30
|
+
# result of #gsub will be colorized using the value color.
|
31
|
+
#
|
32
|
+
# Otherwise, the params will be sended to Yummi#colorize
|
33
|
+
#
|
29
34
|
def colorize params
|
30
35
|
if params.is_a? Hash
|
31
36
|
text = self
|
@@ -37,4 +42,43 @@ class String
|
|
37
42
|
Yummi::colorize self, params
|
38
43
|
end
|
39
44
|
|
45
|
+
#
|
46
|
+
# Returns the string wrapped in a #Yummi#TextBox. The given parameters will be used
|
47
|
+
# to instantiate the TextBox.
|
48
|
+
#
|
49
|
+
def on_box params = {}
|
50
|
+
box = Yummi::TextBox::new params
|
51
|
+
box.add self
|
52
|
+
return box
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
class Array
|
58
|
+
|
59
|
+
#
|
60
|
+
# Colorizes each array item in a new String array
|
61
|
+
#
|
62
|
+
def colorize params
|
63
|
+
map {|n| n.to_s.colorize params}
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Returns a new array using the items with no color applied
|
68
|
+
#
|
69
|
+
def uncolored
|
70
|
+
map {|n| n.to_s.uncolored}
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Returns a #Yummi#Table using the array content as the data.
|
75
|
+
#
|
76
|
+
# The parameters will be used to instantiate the table.
|
77
|
+
#
|
78
|
+
def on_table params = {}
|
79
|
+
table = Yummi::Table::new params
|
80
|
+
table.data = self
|
81
|
+
return table
|
82
|
+
end
|
83
|
+
|
40
84
|
end
|
data/lib/yummi/logger.rb
CHANGED
@@ -51,7 +51,7 @@ module Yummi
|
|
51
51
|
# * +WARN+: yellow
|
52
52
|
# * +ERROR+: red
|
53
53
|
# * +FATAL+: red (intense)
|
54
|
-
# * +ANY+:
|
54
|
+
# * +ANY+: black (intense)
|
55
55
|
#
|
56
56
|
# If a block is passed, it will be used to format the message. The block can use
|
57
57
|
# the following variables: severity, time, program_name and message.
|
@@ -63,7 +63,7 @@ module Yummi
|
|
63
63
|
:warn => :yellow,
|
64
64
|
:error => :red,
|
65
65
|
:fatal => :intense_red,
|
66
|
-
:any => :
|
66
|
+
:any => :intense_black
|
67
67
|
}.merge! colors
|
68
68
|
@format_block = block
|
69
69
|
end
|
@@ -72,7 +72,7 @@ module Yummi
|
|
72
72
|
|
73
73
|
def call(severity, time, program_name, message)
|
74
74
|
color = @colors[severity.downcase.to_sym]
|
75
|
-
Yummi::
|
75
|
+
Yummi::colorize output(severity, time, program_name, message), color
|
76
76
|
end
|
77
77
|
|
78
78
|
# Formats the message, override this method instead of #call
|
data/lib/yummi/no_colors.rb
CHANGED
data/lib/yummi/patterns/log.yaml
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
prefix: '####<[^>]+>\s<'
|
2
2
|
suffix: '>'
|
3
3
|
patterns:
|
4
|
-
Trace :
|
4
|
+
Trace : magenta
|
5
5
|
Debug : blue
|
6
6
|
Info : white
|
7
7
|
Notice : cyan
|
8
8
|
Warning : yellow
|
9
9
|
Error : red
|
10
|
-
Critical :
|
11
|
-
Alert :
|
12
|
-
Emergency :
|
10
|
+
Critical : bold.red
|
11
|
+
Alert : bold.red
|
12
|
+
Emergency : bold.red
|
data/lib/yummi/table.rb
CHANGED
@@ -20,6 +20,8 @@
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
21
|
# THE SOFTWARE.
|
22
22
|
|
23
|
+
require 'ostruct'
|
24
|
+
|
23
25
|
module Yummi
|
24
26
|
# A Table that supports colorizing title, header, values and also formatting the values.
|
25
27
|
class Table
|
@@ -47,28 +49,39 @@ module Yummi
|
|
47
49
|
# The table header
|
48
50
|
attr_reader :header
|
49
51
|
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
# *
|
55
|
-
# *
|
56
|
-
# *
|
57
|
-
|
52
|
+
#
|
53
|
+
# Creates a new table. A hash containing the style properties may be given to override
|
54
|
+
# the defaults.
|
55
|
+
#
|
56
|
+
# * Title (title): none
|
57
|
+
# * Description (description): none
|
58
|
+
# * Header (header): none
|
59
|
+
#
|
60
|
+
# Hash in "style" key:
|
61
|
+
#
|
62
|
+
# * Title color (title): bold.yellow
|
63
|
+
# * Header color (header): bold.blue
|
64
|
+
# * Values color (color): none
|
65
|
+
# * Colspan (colspan): 2
|
66
|
+
# * Default Align (align): right and first element to left
|
67
|
+
#
|
68
|
+
def initialize params = {}
|
69
|
+
params = OpenStruct::new params
|
70
|
+
params.style ||= {}
|
58
71
|
@data = []
|
59
72
|
@header = []
|
60
|
-
@title = nil
|
61
|
-
@description = nil
|
73
|
+
@title = (params.title or nil)
|
74
|
+
@description = (params.description or nil)
|
62
75
|
@style = {
|
63
|
-
:title => :
|
64
|
-
:description => :
|
65
|
-
:header => :
|
66
|
-
:value => nil
|
76
|
+
:title => (params.style[:title] or "bold.yellow"),
|
77
|
+
:description => (params.style[:description] or "bold.black"),
|
78
|
+
:header => (params.style[:header] or "bold.blue"),
|
79
|
+
:value => (params.style[:color] or nil)
|
67
80
|
}
|
68
81
|
|
69
|
-
@colspan = 2
|
70
|
-
@layout = :horizontal
|
71
|
-
@default_align = :right
|
82
|
+
@colspan = (params.colspan or 2)
|
83
|
+
@layout = (params.layout or :horizontal)
|
84
|
+
@default_align = (params.align or :right)
|
72
85
|
@aliases = []
|
73
86
|
|
74
87
|
@align = [:left]
|
@@ -76,6 +89,8 @@ module Yummi
|
|
76
89
|
@contexts = [:default]
|
77
90
|
_define_ :default
|
78
91
|
@current_context = :default
|
92
|
+
|
93
|
+
self.header = params.header if params.header
|
79
94
|
end
|
80
95
|
|
81
96
|
# Indicates that the table should not use colors.
|
@@ -256,7 +271,7 @@ module Yummi
|
|
256
271
|
#
|
257
272
|
# === Example
|
258
273
|
#
|
259
|
-
# table.colorize :description, :with => :
|
274
|
+
# table.colorize :description, :with => :magenta
|
260
275
|
# table.colorize([:value, :total]) { |value| :red if value < 0 }
|
261
276
|
#
|
262
277
|
def colorize (indexes, params = {}, &block)
|
@@ -355,8 +370,8 @@ module Yummi
|
|
355
370
|
data_output = build_data_output
|
356
371
|
|
357
372
|
string = ""
|
358
|
-
string <<
|
359
|
-
string <<
|
373
|
+
string << Yummi.colorize(@title, @style[:title]) << $/ if @title
|
374
|
+
string << Yummi.colorize(@description, @style[:description]) << $/ if @description
|
360
375
|
table_data = header_output + data_output
|
361
376
|
if @layout == :vertical
|
362
377
|
# don't use array transpose because the data may differ in each line size
|
@@ -365,6 +380,18 @@ module Yummi
|
|
365
380
|
string << content(table_data)
|
366
381
|
end
|
367
382
|
|
383
|
+
#
|
384
|
+
# Calculates the table width using the rendered lines
|
385
|
+
#
|
386
|
+
def width
|
387
|
+
string = to_s
|
388
|
+
max_width = 0
|
389
|
+
string.each_line do |line|
|
390
|
+
max_width = [max_width, line.uncolored.chomp.size].max
|
391
|
+
end
|
392
|
+
max_width
|
393
|
+
end
|
394
|
+
|
368
395
|
private
|
369
396
|
|
370
397
|
def extract_component params, &block
|
data/lib/yummi/text_box.rb
CHANGED
@@ -31,34 +31,48 @@ module Yummi
|
|
31
31
|
#
|
32
32
|
# Holds the style information for this box. Supported properties are:
|
33
33
|
#
|
34
|
-
# width: the box width (default:
|
34
|
+
# width: the box width (default: bold.black)
|
35
35
|
# align: the default alignment to use (default: left)
|
36
36
|
# separator: the style for separators, defined as a hash
|
37
|
-
# color: separator color (default:
|
37
|
+
# color: separator color (default: bold.black)
|
38
38
|
# pattern: separator pattern (default: '-')
|
39
39
|
# width: separator width (default: box width)
|
40
40
|
#
|
41
41
|
attr_reader :style
|
42
42
|
|
43
|
-
|
44
|
-
|
43
|
+
#
|
44
|
+
# Initializes a text box using the parameters to define the style
|
45
|
+
#
|
46
|
+
# Example:
|
47
|
+
#
|
48
|
+
# TextBox::new :align => :center, :border => {:color => :red}, :separator => {:color => :green}
|
49
|
+
#
|
50
|
+
def initialize params = {}
|
51
|
+
params = OpenStruct::new params
|
52
|
+
params.separator ||= {}
|
53
|
+
params.border ||= {}
|
45
54
|
@content = []
|
46
55
|
@style = OpenStruct::new
|
56
|
+
|
57
|
+
@style.width = (params.width or nil)
|
58
|
+
@style.align = (params.align or :left)
|
59
|
+
|
47
60
|
@style.separator = {}
|
48
|
-
@style.separator[:pattern] = '-'
|
49
|
-
@style.separator[:width] = nil
|
50
|
-
@style.separator[:
|
61
|
+
@style.separator[:pattern] = (params.separator[:pattern] or '-')
|
62
|
+
@style.separator[:width] = (params.separator[:width] or nil)
|
63
|
+
@style.separator[:color] = (params.separator[:color] or "bold.black")
|
64
|
+
@style.separator[:align] = (params.separator[:align] or :left)
|
51
65
|
|
52
66
|
@style.border = {}
|
53
|
-
@style.border[:color] =
|
54
|
-
@style.border[:top] = '-'
|
55
|
-
@style.border[:bottom] = '-'
|
56
|
-
@style.border[:left] = '|'
|
57
|
-
@style.border[:right] = '|'
|
58
|
-
@style.border[:top_left] = '+'
|
59
|
-
@style.border[:top_right] = '+'
|
60
|
-
@style.border[:bottom_left] = '+'
|
61
|
-
@style.border[:bottom_right] = '+'
|
67
|
+
@style.border[:color] = (params.border[:color] or "bold.black")
|
68
|
+
@style.border[:top] = (params.border[:top] or '-')
|
69
|
+
@style.border[:bottom] = (params.border[:bottom] or '-')
|
70
|
+
@style.border[:left] = (params.border[:left] or '|')
|
71
|
+
@style.border[:right] = (params.border[:right] or '|')
|
72
|
+
@style.border[:top_left] = (params.border[:top_left] or '+')
|
73
|
+
@style.border[:top_right] = (params.border[:top_right] or '+')
|
74
|
+
@style.border[:bottom_left] = (params.border[:bottom_left] or '+')
|
75
|
+
@style.border[:bottom_right] = (params.border[:bottom_right] or '+')
|
62
76
|
end
|
63
77
|
|
64
78
|
def no_border
|
@@ -77,6 +91,7 @@ module Yummi
|
|
77
91
|
# color: the text color (see #Yummi#COLORS)
|
78
92
|
# width: the text maximum width. Set this to break the lines automatically.
|
79
93
|
# If the #width is set, this will override the box width for this lines.
|
94
|
+
# raw: if true, the entire text will be used as one word to align the text.
|
80
95
|
# align: the text alignment (see #Yummi#Aligner)
|
81
96
|
#
|
82
97
|
def add (text, params = {})
|
@@ -86,7 +101,8 @@ module Yummi
|
|
86
101
|
}.merge! params
|
87
102
|
if params[:width]
|
88
103
|
width = params[:width]
|
89
|
-
words = text.gsub($/, ' ').split(' ')
|
104
|
+
words = text.gsub($/, ' ').split(' ') unless params[:raw]
|
105
|
+
words ||= [text]
|
90
106
|
buff = ''
|
91
107
|
words.each do |word|
|
92
108
|
# go to next line if the current word blows up the width limit
|
@@ -128,7 +144,7 @@ module Yummi
|
|
128
144
|
# align: the separator alignment (see #Yummi#Aligner)
|
129
145
|
#
|
130
146
|
def separator (params = {})
|
131
|
-
params = style.separator.merge
|
147
|
+
params = style.separator.merge params
|
132
148
|
params[:width] ||= style.width
|
133
149
|
raise Exception::new("Define a width for using separators") unless params[:width]
|
134
150
|
line = fill(params[:pattern], params[:width])
|
@@ -151,7 +167,7 @@ module Yummi
|
|
151
167
|
width = 0
|
152
168
|
sizes = [] # the real size of each line
|
153
169
|
content.each do |line|
|
154
|
-
size = line.chomp.
|
170
|
+
size = line.chomp.uncolored.size
|
155
171
|
sizes << size
|
156
172
|
width = [width, size].max
|
157
173
|
end
|
data/lib/yummi/version.rb
CHANGED
data/yummi.gemspec
CHANGED
@@ -8,6 +8,8 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.summary = "A tool to colorize your console application."
|
9
9
|
gem.homepage = "https://github.com/ataxexe/yummi"
|
10
10
|
|
11
|
+
gem.add_dependency 'term-ansicolor', '>=1.1'
|
12
|
+
|
11
13
|
gem.files = `git ls-files`.split($\)
|
12
14
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
15
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
data/yummi.iml
CHANGED
@@ -5,12 +5,11 @@
|
|
5
5
|
<content url="file://$MODULE_DIR$">
|
6
6
|
<sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" />
|
7
7
|
<sourceFolder url="file://$MODULE_DIR$/examples" isTestSource="false" />
|
8
|
-
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
9
8
|
<excludeFolder url="file://$MODULE_DIR$/pkg" />
|
10
9
|
</content>
|
11
|
-
<orderEntry type="
|
10
|
+
<orderEntry type="inheritedJdk" />
|
12
11
|
<orderEntry type="sourceFolder" forTests="false" />
|
13
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v1.
|
12
|
+
<orderEntry type="library" scope="PROVIDED" name="bundler (v1.2.3, RVM: ruby-1.9.3-p374) [gem]" level="application" />
|
14
13
|
</component>
|
15
14
|
<component name="org.twodividedbyzero.idea.findbugs">
|
16
15
|
<option name="_basePreferences">
|
data/yummi.ipr
CHANGED
@@ -23,7 +23,11 @@
|
|
23
23
|
<entry name="?*.ftl" />
|
24
24
|
<entry name="trace.info" />
|
25
25
|
</wildcardResourcePatterns>
|
26
|
-
<annotationProcessing
|
26
|
+
<annotationProcessing>
|
27
|
+
<profile default="true" name="Default" enabled="false">
|
28
|
+
<processorPath useClasspath="true" />
|
29
|
+
</profile>
|
30
|
+
</annotationProcessing>
|
27
31
|
</component>
|
28
32
|
<component name="CopyrightManager" default="MIT">
|
29
33
|
<copyright>
|
@@ -82,6 +86,11 @@
|
|
82
86
|
<option name="LOCALE" />
|
83
87
|
<option name="OPEN_IN_BROWSER" value="true" />
|
84
88
|
</component>
|
89
|
+
<component name="Jenkins.Application.Settings">
|
90
|
+
<option name="rssSettings">
|
91
|
+
<RssSettings />
|
92
|
+
</option>
|
93
|
+
</component>
|
85
94
|
<component name="ModuleEditorState">
|
86
95
|
<option name="LAST_EDITED_MODULE_NAME" />
|
87
96
|
<option name="LAST_EDITED_TAB_NAME" />
|
@@ -218,7 +227,7 @@
|
|
218
227
|
<component name="ProjectResources">
|
219
228
|
<default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
|
220
229
|
</component>
|
221
|
-
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="RVM: ruby-1.9.3-
|
230
|
+
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="RVM: ruby-1.9.3-p374" project-jdk-type="RUBY_SDK">
|
222
231
|
<output url="file://$PROJECT_DIR$/out" />
|
223
232
|
</component>
|
224
233
|
<component name="Regex">
|
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.
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
13
|
-
dependencies:
|
12
|
+
date: 2013-05-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: term-ansicolor
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.1'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.1'
|
14
30
|
description: A tool to colorize your console application.
|
15
31
|
email:
|
16
32
|
- ataxexe@gmail.com
|
@@ -37,13 +53,10 @@ files:
|
|
37
53
|
- examples/logger.rb
|
38
54
|
- examples/monitor_table.rb
|
39
55
|
- lib/yummi.rb
|
40
|
-
- lib/yummi/color_mapping.rb
|
41
56
|
- lib/yummi/colorizers.rb
|
42
57
|
- lib/yummi/data_parser.rb
|
43
58
|
- lib/yummi/extensions.rb
|
44
59
|
- lib/yummi/formatters.rb
|
45
|
-
- lib/yummi/generate/colorize.sh.erb
|
46
|
-
- lib/yummi/generator.rb
|
47
60
|
- lib/yummi/logger.rb
|
48
61
|
- lib/yummi/no_colors.rb
|
49
62
|
- lib/yummi/patterns/jboss.yaml
|
data/lib/yummi/color_mapping.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# The MIT License
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
|
23
|
-
Yummi::Color::load_color_map(
|
24
|
-
:default => {
|
25
|
-
:key_code => '0;3',
|
26
|
-
:schema => Yummi::Color::Schema::NORMAL_COLORS
|
27
|
-
},
|
28
|
-
:reverse => {
|
29
|
-
:key_code => '0;4',
|
30
|
-
:schema => Yummi::Color::Schema::NORMAL_COLORS
|
31
|
-
},
|
32
|
-
[:intense, :strong, :bold] => {
|
33
|
-
:key_code => '1;3',
|
34
|
-
:schema => Yummi::Color::Schema::ALTERNATE_COLORS
|
35
|
-
},
|
36
|
-
[:underline, :underscore, :underscored] => {
|
37
|
-
:key_code => '4;3',
|
38
|
-
:schema => Yummi::Color::Schema::NORMAL_COLORS
|
39
|
-
},
|
40
|
-
[:blink, :blinking] => {
|
41
|
-
:key_code => '5;3',
|
42
|
-
:schema => Yummi::Color::Schema::NORMAL_COLORS
|
43
|
-
},
|
44
|
-
[:highlight, :highlighted] => {
|
45
|
-
:key_code => '7;3',
|
46
|
-
:schema => Yummi::Color::Schema::NORMAL_COLORS
|
47
|
-
}
|
48
|
-
)
|
@@ -1,23 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
|
3
|
-
# .:: Generated by Yummi ::.
|
4
|
-
|
5
|
-
usage() {
|
6
|
-
echo "Usage: $0 COLOR TEXT [FORMAT]"
|
7
|
-
echo " COLOR: a name or a number [1..8]. A modifier may also be used in a form $MOD_$COLOR"
|
8
|
-
echo " TEXT: the text to colorize"
|
9
|
-
echo " FORMAT: a format to use (defaults to \"%s\\n\")"
|
10
|
-
exit 1
|
11
|
-
}
|
12
|
-
<% Yummi::Color::COLORS.each do |key, pattern| %>
|
13
|
-
function color_<%= key %> {
|
14
|
-
echo "<%= "$1".colorize(key) %>"
|
15
|
-
}
|
16
|
-
<% end %>
|
17
|
-
[ "$#" = "0" ] && usage
|
18
|
-
|
19
|
-
format="%s\n"
|
20
|
-
|
21
|
-
[ ! -z "$3" ] && format="$3"
|
22
|
-
|
23
|
-
printf "$format" $(color_"$@")
|
data/lib/yummi/generator.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
# The MIT License
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Marcelo Guimarães <ataxexe@gmail.com>
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
22
|
-
|
23
|
-
require 'erb'
|
24
|
-
|
25
|
-
module Yummi
|
26
|
-
|
27
|
-
class Generator
|
28
|
-
|
29
|
-
class ShellScript
|
30
|
-
|
31
|
-
def generate
|
32
|
-
file = File.join(File.dirname(__FILE__), "generate/colorize.sh.erb")
|
33
|
-
content = File.read(file)
|
34
|
-
erb = ERB::new(content, 0, "%<>")
|
35
|
-
erb.result binding
|
36
|
-
end
|
37
|
-
|
38
|
-
def install file
|
39
|
-
File.open(file, "w") { |f| f.write generate }
|
40
|
-
File.chmod(0755, file)
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|