yummi 0.0.1 → 0.0.2

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.
@@ -28,13 +28,11 @@ opt = OptionParser::new
28
28
  @basedir = ENV['HOME']
29
29
 
30
30
  @table = Yummi::Table::new
31
- # setting the header sets the aliases automaically
31
+ # setting the header sets the aliases automatically
32
32
  @table.header = ['Name', 'Size']
33
33
  @table.aliases << :directory
34
34
  # sets the title
35
35
  @table.title = 'Files in home folder'
36
- # aligns the first column to the left
37
- @table.align :name, :left
38
36
  # formats size for easily reading
39
37
  @table.format :size, :using => Yummi::Formatter.bytes
40
38
 
data/examples/logger.rb CHANGED
@@ -25,11 +25,13 @@ require_relative '../lib/yummi'
25
25
 
26
26
  logger = Logger::new STDOUT
27
27
  logger.level = Logger::DEBUG
28
- logger.formatter = Yummi::Formatter::LogFormatter.new
28
+ logger.formatter = Yummi::Formatter::LogFormatter.new do |severity, time, program_name, message|
29
+ message << $/
30
+ end
29
31
 
30
- logger.debug "File: #{__FILE__}"
32
+ logger.debug __FILE__
31
33
  logger.info "Example started"
32
- logger.warn "Remember to read the examples for better use of Yummi!"
34
+ logger.warn "Warning message"
33
35
  logger.error "An error has occurred"
34
36
  logger.fatal "A fatal exception has occurred"
35
37
  logger.unknown "Unknown severity message"
@@ -0,0 +1,86 @@
1
+ # The MIT License
2
+ #
3
+ # Copyright (c) 2012 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 'optparse'
24
+ require_relative '../lib/yummi'
25
+
26
+ opt = OptionParser::new
27
+
28
+ @table = Yummi::Table::new
29
+ # setting the header sets the aliases automatically
30
+ @table.header = ['Server Name', 'Max Memory', 'Free Memory', "Max\nThreads", "In Use\nThreads"]
31
+ # sets the title
32
+ @table.title = 'Server Runtime Info'
33
+ # formats memory info for easily reading
34
+ @table.format :max_memory, :using => Yummi::Formatter.bytes
35
+ @table.format :free_memory, :using => Yummi::Formatter.bytes
36
+
37
+ # colorizer for memory
38
+ memory_colorizer = Yummi::Colorizer.by_eval do |free_memory, max_memory|
39
+ free_memory.to_f / max_memory
40
+ end
41
+ memory_colorizer.use(:red) { |value| value > 0.1 and value < 0.3 }
42
+ memory_colorizer.use(:intense_red) { |value| value <= 0.1 }
43
+
44
+ # colorizer for threads
45
+ thread_colorizer = Yummi::Colorizer.by_eval do |max_threads, in_use_threads|
46
+ in_use_threads.to_f / max_threads
47
+ end
48
+ thread_colorizer.use(:brown) { |value| value > 0.7 and value < 0.9 }
49
+ thread_colorizer.use(:intense_cyan) { |value| value >= 0.9 }
50
+
51
+ opt.on '--color TYPE', 'Specify the color type (zebra,row,cell,none)' do |type|
52
+ case type
53
+ when 'zebra'
54
+ @table.row_colorizer Yummi::IndexedDataColorizer.odd :with => :brown
55
+ @table.row_colorizer Yummi::IndexedDataColorizer.even :with => :purple
56
+ when 'row'
57
+ @table.row_colorizer memory_colorizer
58
+ @table.row_colorizer thread_colorizer
59
+ when 'cell'
60
+ @table.using_row.colorize :free_memory, :using => memory_colorizer
61
+ @table.using_row.colorize :in_use_threads, :using => thread_colorizer
62
+ when 'none'
63
+ @table.no_colors
64
+ else
65
+ end
66
+ end
67
+ opt.on '--help', 'Prints this message' do
68
+ puts opt
69
+ exit 0
70
+ end
71
+
72
+ opt.parse ARGV
73
+
74
+ # sets the table data
75
+ @table.data = [
76
+ ['Server 1', 1_000_000, 750_000, 200, 170],
77
+ ['Server 2', 1_000_000, 700_000, 200, 180],
78
+ ['Server 3', 1_000_000, 50_000, 200, 50],
79
+ ['Server 4', 1_000_000, 200_000, 200, 50],
80
+ ['Server 5', 1_000_000, 5_000, 200, 50],
81
+ ['Server 6', 1_000_000, 750_000, 200, 50],
82
+ ['Server 6', 1_000_000, 200_000, 200, 170],
83
+ ['Server 6', 1_000_000, 5_000, 200, 180],
84
+ ]
85
+
86
+ @table.print
@@ -26,26 +26,23 @@ require_relative '../lib/yummi'
26
26
  opt = OptionParser::new
27
27
 
28
28
  @table = Yummi::Table::new
29
- # setting the header sets the aliases automaically
30
- @table.header = ['Description', 'Value', 'Total', 'Eletronic']
29
+ # setting the header sets the aliases automatically
30
+ @table.header = ['Description', 'Value', 'Total', 'Eletronic', "Authentication\nCode"]
31
31
  # sets the title
32
32
  @table.title = 'Cash Flow'
33
- # aligns the first column to the left
34
- @table.align :description, :left
35
- # colorize all values from the Description column to purple
36
33
  # formats booleans using Yes or No
37
34
  @table.format :eletronic, :using => Yummi::Formatter.yes_or_no
38
35
  # shows values without minus signal and rounded
39
36
  @table.format :value, :using => lambda { |value| "%.2f" % value.abs }
40
37
  # shows totals rounded
41
- @table.format :total, :with => "%.2f"
38
+ @table.format :total, :using => Yummi::Formatter.round(2)
42
39
  # table data
43
40
  @table.data = [['Initial', 0, 0, false],
44
- ['Deposit', 100, 100, true],
45
- ['Withdraw', -50, 50, true],
46
- ['Withdraw', -100, -50, true],
47
- ['Deposit', 50, 0, false],
48
- ['Deposit', 600, 600, false]]
41
+ ['Deposit', 100.58, 100.58, true, "QAWSEDRFTGH535"],
42
+ ['Withdraw', -50.23, 50.35, true, "34ERDTF6GYU"],
43
+ ['Withdraw', -100, -49.65, true, "2344EDRFT5"],
44
+ ['Deposit', 50, 0.35, false],
45
+ ['Deposit', 600, 600.35, false]]
49
46
 
50
47
  opt.on '--color TYPE', 'Specify the color type (zebra,full,none)' do |type|
51
48
  case type
@@ -53,22 +50,22 @@ opt.on '--color TYPE', 'Specify the color type (zebra,full,none)' do |type|
53
50
  @table.row_colorizer Yummi::IndexedDataColorizer.odd :with => :brown
54
51
  @table.row_colorizer Yummi::IndexedDataColorizer.even :with => :purple
55
52
  when 'full'
53
+ # colorize all values from the Description column to purple
56
54
  @table.colorize :description, :with => :purple
55
+ # Authentication Code will be highlighted
56
+ @table.colorize :authentication_code, :with => :highlight_gray
57
57
  # colorize booleans based on their values
58
58
  @table.colorize :eletronic do |b|
59
59
  b ? :blue : :cyan
60
60
  end
61
61
  # colorize the values based on comparison
62
- colorizer = lambda do |value|
63
- if value < 0 then
64
- :red
65
- else
66
- value > 0 ? :green : :brown
67
- end
68
- end
62
+ red_to_negative = lambda { |value| :red if value < 0 }
63
+ green_to_positive = lambda { |value| :green if value > 0 }
64
+ brown_to_zero = lambda { |value| :brown if value == 0 }
65
+ colorizer = Yummi::Colorizer.join(red_to_negative, green_to_positive, brown_to_zero)
69
66
  @table.colorize :value, :using => colorizer
70
67
  @table.colorize :total, :using => colorizer
71
- # colorize rows that Value is greather than Total
68
+ # colorize rows that Value is greater than Total
72
69
  @table.row_colorizer do |i, data|
73
70
  :white if data[:value] > data[:total]
74
71
  end
data/lib/yummi/logger.rb CHANGED
@@ -26,19 +26,45 @@ module Yummi
26
26
 
27
27
  module Formatter
28
28
 
29
+ #
30
+ # A colorful log formatter
31
+ #
29
32
  class LogFormatter < Logger::Formatter
30
33
 
34
+ #
35
+ # Colors for each severity:
36
+ #
37
+ # * :debug
38
+ # * :info
39
+ # * :warn
40
+ # * :error
41
+ # * :fatal
42
+ # * :any
43
+ #
31
44
  attr_accessor :colors
32
45
 
33
- def initialize
46
+ #
47
+ # Creates a new formatter with the colors (assuming Linux default terminal colors):
48
+ #
49
+ # * +DEBUG+: no color
50
+ # * +INFO+: green
51
+ # * +WARN+: brown
52
+ # * +ERROR+: red
53
+ # * +FATAL+: red (intense)
54
+ # * +ANY+: gray (intense)
55
+ #
56
+ # If a block is passed, it will be used to format the message
57
+ #
58
+ def initialize &block
34
59
  @colors = {
35
60
  :debug => nil,
36
61
  :info => :green,
37
- :warn => :yellow,
62
+ :warn => :brown,
38
63
  :error => :red,
39
64
  :fatal => :intense_red,
40
65
  :any => :intense_gray
41
66
  }
67
+ @format_block = block
42
68
  end
43
69
 
44
70
  alias_method :super_call, :call
@@ -48,7 +74,9 @@ module Yummi
48
74
  Yummi::Color.colorize output(severity, time, program_name, message), color
49
75
  end
50
76
 
77
+ # Formats the message, override this method instead of #call
51
78
  def output severity, time, program_name, message
79
+ return @format_block.call severity, time, program_name, message if @format_block
52
80
  super_call severity, time, program_name, message
53
81
  end
54
82
 
data/lib/yummi/table.rb CHANGED
@@ -21,11 +21,35 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module Yummi
24
-
24
+ # A Table that supports colorizing title, header, values and also formatting the values.
25
25
  class Table
26
+ # The table data. It holds a two dimensional array.
27
+ attr_accessor :data
28
+ # The table title
29
+ attr_accessor :title
30
+ # Default align. #Yummi#Aligner should respond to it.
31
+ attr_accessor :default_align
32
+ # Aliases that can be used by formatters and colorizers instead of numeric indexes.
33
+ # The aliases are directed mapped to their respective index in this array
34
+ attr_accessor :aliases
35
+ # The table colspan
36
+ attr_accessor :colspan
37
+ # The table colors. This Map should have colors for the following elements:
38
+ #
39
+ # * Title: using :title key
40
+ # * Header: using :header key
41
+ # * Values: using :value key
42
+ #
43
+ # The colors must be supported by #Yummi#Color#parse or defined in #Yummi#Color#COLORS
44
+ attr_accessor :colors
26
45
 
27
- attr_accessor :data, :header, :title, :default_align, :aliases, :colspan, :colors
28
-
46
+ # Creates a new table with the default attributes:
47
+ #
48
+ # * Title color: intense_yellow
49
+ # * Header color: intense_blue
50
+ # * Values color: none
51
+ # * Colspan: 2
52
+ # * Default Align: right and first element to left
29
53
  def initialize
30
54
  @data = []
31
55
  @header = []
@@ -40,7 +64,7 @@ module Yummi
40
64
 
41
65
  @aliases = []
42
66
 
43
- @align = []
67
+ @align = [:left]
44
68
  @formatters = []
45
69
  @colorizers = []
46
70
  @row_colorizer = nil
@@ -48,6 +72,7 @@ module Yummi
48
72
  @default_align = :right
49
73
  end
50
74
 
75
+ # Indicates that the table should not use colors.
51
76
  def no_colors
52
77
  @colors = {
53
78
  :title => nil,
@@ -57,29 +82,157 @@ module Yummi
57
82
  @no_colors = true
58
83
  end
59
84
 
85
+ #
86
+ # === Description
87
+ #
88
+ # Sets the table header. If no aliases are defined, they will be defined as the texts
89
+ # in lowercase with line breaks and spaces replaced by underscores.
90
+ #
91
+ # Defining headers also limits the printed column to only columns that has a header
92
+ # (even if it is empty).
93
+ #
94
+ # === Args
95
+ #
96
+ # +header+::
97
+ # Array containing the texts for displaying the header. Line breaks are supported
98
+ #
99
+ # === Examples
100
+ #
101
+ # table.header = ['Name', 'Email', 'Work Phone', "Home\nPhone"]
102
+ #
103
+ # This will create the following aliases: :name, :email, :work_phone and :home_phone
104
+ #
60
105
  def header= header
61
- @aliases = header.map { |n| n.downcase.gsub(' ', '_').to_sym } if @aliases.empty?
62
- @header = header
106
+ max = 0
107
+ header.each_index do |i|
108
+ max = [max, header[i].split("\n").size].max
109
+ end
110
+ @header = []
111
+ max.times { @header << [] }
112
+ header.each_index do |i|
113
+ names = header[i].split("\n")
114
+ names.each_index do |j|
115
+ @header[j][i] = names[j]
116
+ end
117
+ end
118
+ @aliases = header.map { |n| n.downcase.gsub(' ', '_').gsub("\n", '_').to_sym } if @aliases.empty?
63
119
  end
64
120
 
121
+ #
122
+ # === Description
123
+ #
124
+ # Sets the align for a column in the table. #Yummi#Aligner should respond to it.
125
+ #
126
+ # === Args
127
+ #
128
+ # +index+::
129
+ # The column index or its alias
130
+ # +type+::
131
+ # The alignment type
132
+ #
133
+ # === Example
134
+ #
135
+ # table.align :description, :left
136
+ # table.align :value, :right
137
+ #
65
138
  def align index, type
66
139
  index = parse_index(index)
67
140
  @align[index] = type
68
141
  end
69
142
 
143
+ #
144
+ # === Description
145
+ #
146
+ # Adds a component to colorize the entire row (overrides column color).
147
+ # The component must respond to +call+ with the index and the row as the arguments and
148
+ # return a color or +nil+ if default color should be used. A block can also be used.
149
+ #
150
+ # You can add as much colorizers as you want. The first color returned will be used.
151
+ #
152
+ # === Example
153
+ #
154
+ # table.row_colorizer { |i, row| :red if row[:value] < 0 }
155
+ #
70
156
  def row_colorizer colorizer = nil, &block
71
157
  @row_colorizer ||= Yummi::LinkedBlocks::new
72
158
  @row_colorizer << (colorizer or block)
73
159
  end
74
160
 
161
+ #
162
+ # === Description
163
+ #
164
+ # Indicates that the column colorizer (#colorize) should receive the entire row as the
165
+ # argument instead of just the column value.
166
+ #
167
+ # === Return
168
+ #
169
+ # +self+
170
+ #
171
+ # === Example
172
+ #
173
+ # table.using_row.colorize(:value) { |row| :red if row[:value] < row[:average] }
174
+ #
175
+ #
176
+ def using_row
177
+ @using_row = true
178
+ self
179
+ end
180
+
181
+ #
182
+ # === Description
183
+ #
184
+ # Sets a component to colorize a column.
185
+ #
186
+ # The component must respond to +call+ with the column value (or row if used with
187
+ # #using_row) as the arguments and return a color or +nil+ if default color should be
188
+ # used. A block can also be used.
189
+ #
190
+ # You can add as much colorizers as you want. The first color returned will be used.
191
+ #
192
+ # === Args
193
+ #
194
+ # +index+::
195
+ # The column index or its alias
196
+ # +params+::
197
+ # A hash with params in case a block is not given:
198
+ # - :using defines the component to use
199
+ # - :with defines the color to use (to use the same color for all columns)
200
+ #
201
+ # === Example
202
+ #
203
+ # table.colorize :description, :with => :purple
204
+ # table.colorize(:value) { |value| :red if value < 0 }
205
+ #
75
206
  def colorize index, params = {}, &block
76
207
  index = parse_index(index)
77
- @colorizers[index] = (params[:using] or block)
78
- @colorizers[index] ||= proc do |value|
79
- params[:with]
80
- end
208
+ @colorizers[index] ||= []
209
+ obj = (params[:using] or block or (proc { |v| params[:with] }))
210
+ @colorizers[index] << {:use_row => @using_row, :component => obj}
211
+ @using_row = false
81
212
  end
82
213
 
214
+ #
215
+ # === Description
216
+ #
217
+ # Sets a component to format a column.
218
+ #
219
+ # The component must respond to +call+ with the column value
220
+ # as the arguments and return a color or +nil+ if default color should be used.
221
+ # A block can also be used.
222
+ #
223
+ # === Args
224
+ #
225
+ # +index+::
226
+ # The column index or its alias
227
+ # +params+::
228
+ # A hash with params in case a block is not given:
229
+ # - :using defines the component to use
230
+ # - :with defines the format to use (to use the same format for all columns)
231
+ #
232
+ # === Example
233
+ #
234
+ # table.format :value, :with => '%.2f'
235
+ #
83
236
  def format index, params = {}, &block
84
237
  index = parse_index(index)
85
238
  @formatters[index] = (params[:using] or block)
@@ -88,12 +241,23 @@ module Yummi
88
241
  end
89
242
  end
90
243
 
244
+ #
245
+ # Prints the #to_s into the given object.
246
+ #
91
247
  def print to = $stdout
92
248
  to.print to_s
93
249
  end
94
250
 
251
+ #
252
+ # Return a colorized and formatted table.
253
+ #
95
254
  def to_s
96
- color_map, output = build_output
255
+ header_color_map, header_output = build_header_output
256
+ data_color_map, data_output = build_data_output
257
+
258
+ color_map = header_color_map + data_color_map
259
+ output = header_output + data_output
260
+
97
261
  string = ""
98
262
  string << Color.colorize(@title, @colors[:title]) << $/ if @title
99
263
  output.each_index do |i|
@@ -106,28 +270,43 @@ module Yummi
106
270
  value = Aligner.send align, column.to_s, width
107
271
  value = Color.colorize value, color unless @no_colors
108
272
  string << value
109
- string << (" " * @colspan)
273
+ string << (' ' * @colspan)
110
274
  end
111
275
  string.strip! << $/
112
276
  end
113
277
  string
114
278
  end
115
279
 
116
- private
117
-
118
- def build_output
280
+ #
281
+ # Builds the header output for this table.
282
+ #
283
+ # Returns the color map and the header.
284
+ #
285
+ def build_header_output
119
286
  color_map = []
120
287
  output = []
121
288
 
122
- _colors = []
123
- _data = []
124
-
125
- @header.each do |h|
126
- _colors << @colors[:header]
127
- _data << h
289
+ @header.each do |line|
290
+ _colors = []
291
+ _data = []
292
+ line.each do |h|
293
+ _colors << @colors[:header]
294
+ _data << h
295
+ end
296
+ color_map << _colors
297
+ output << _data
128
298
  end
129
- color_map << _colors
130
- output << _data
299
+ [color_map, output]
300
+ end
301
+
302
+ #
303
+ # Builds the data output for this table.
304
+ #
305
+ # Returns the color map and the formatted data.
306
+ #
307
+ def build_data_output
308
+ color_map = []
309
+ output = []
131
310
 
132
311
  @data.each_index do |row_index|
133
312
  row = @data[row_index]
@@ -135,11 +314,21 @@ module Yummi
135
314
  _data = []
136
315
 
137
316
  row.each_index do |col_index|
138
- next if @header and not @header[col_index]
317
+ next if @header and @header[0].size < col_index + 1
139
318
  column = row[col_index]
140
- colorizer = @colorizers[col_index]
141
- _colors << (colorizer ? colorizer.call(column) : @colors[:value])
142
-
319
+ colorizers = @colorizers[col_index]
320
+ if colorizers
321
+ colorizers.each do |colorizer|
322
+ arg = colorizer[:use_row] ? IndexedData::new(@aliases, row) : column
323
+ c = colorizer[:component].call(arg)
324
+ if c
325
+ _colors << c
326
+ break
327
+ end
328
+ end
329
+ else
330
+ _colors << @colors[:value]
331
+ end
143
332
  formatter = @formatters[col_index]
144
333
  _data << (formatter ? formatter.call(column) : column)
145
334
  end
@@ -155,6 +344,8 @@ module Yummi
155
344
  [color_map, output]
156
345
  end
157
346
 
347
+ private
348
+
158
349
  def parse_index(value)
159
350
  return @aliases.index(value) unless value.is_a? Fixnum
160
351
  value
data/lib/yummi/version.rb CHANGED
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module Yummi
24
- VERSION = "0.0.1"
24
+ VERSION = "0.0.2"
25
25
  end
data/lib/yummi.rb CHANGED
@@ -25,7 +25,7 @@ require_relative "yummi/table"
25
25
  require_relative "yummi/logger"
26
26
 
27
27
  module Yummi
28
-
28
+ # Base for colorizing
29
29
  module Color
30
30
  # Colors from default linux terminal scheme
31
31
  COLORS = {
@@ -58,14 +58,14 @@ module Yummi
58
58
  :blink_cyan => '5;36',
59
59
  :blink_gray => '5;37',
60
60
 
61
- :highlight_black => '5;30',
62
- :highlight_red => '5;31',
63
- :highlight_green => '5;32',
64
- :highlight_brown => '5;33',
65
- :highlight_blue => '5;34',
66
- :highlight_purple => '5;35',
67
- :highlight_cyan => '5;36',
68
- :highlight_gray => '5;37',
61
+ :highlight_black => '7;30',
62
+ :highlight_red => '7;31',
63
+ :highlight_green => '7;32',
64
+ :highlight_brown => '7;33',
65
+ :highlight_blue => '7;34',
66
+ :highlight_purple => '7;35',
67
+ :highlight_cyan => '7;36',
68
+ :highlight_gray => '7;37',
69
69
 
70
70
  :intense_gray => '1;30',
71
71
  :intense_red => '1;31',
@@ -107,7 +107,6 @@ module Yummi
107
107
  col, nocol = [color, :nothing].map { |key| Color.escape(key) }
108
108
  col ? "#{col}#{str}#{nocol}" : str
109
109
  end
110
-
111
110
  end
112
111
 
113
112
  module Aligner
@@ -138,6 +137,43 @@ module Yummi
138
137
 
139
138
  end
140
139
 
140
+ module Colorizer
141
+
142
+ def self.join *colorizers
143
+ join = Yummi::LinkedBlocks::new
144
+ colorizers.each { |c| join << c }
145
+ join
146
+ end
147
+
148
+ def self.by_eval &block
149
+ EvalColorizer::new &block
150
+ end
151
+
152
+ class EvalColorizer
153
+
154
+ def initialize &block
155
+ @block = block
156
+ @colors = []
157
+ @eval_blocks = []
158
+ end
159
+
160
+ def use color, &eval_block
161
+ @colors << color
162
+ @eval_blocks << eval_block
163
+ end
164
+
165
+ def call *args
166
+ value = Yummi.call_block args.last, &@block # by convention, the last arg is data
167
+ @eval_blocks.each_index do |i|
168
+ return @colors[i] if @eval_blocks[i].call(value)
169
+ end
170
+ nil
171
+ end
172
+
173
+ end
174
+
175
+ end
176
+
141
177
  module Formatter
142
178
 
143
179
  def self.yes_or_no
@@ -146,6 +182,12 @@ module Yummi
146
182
  end
147
183
  end
148
184
 
185
+ def self.round precision
186
+ lambda do |value|
187
+ "%.#{precision}f" % value
188
+ end
189
+ end
190
+
149
191
  def self.unit params
150
192
  lambda do |value|
151
193
  result = value
@@ -203,6 +245,14 @@ module Yummi
203
245
 
204
246
  end
205
247
 
248
+ def self.call_block params, &block
249
+ args = []
250
+ block.parameters.each do |parameter|
251
+ args << params[parameter[1]]
252
+ end
253
+ block.call *args
254
+ end
255
+
206
256
  end
207
257
 
208
258
  require_relative 'yummi/no_colors' if RUBY_PLATFORM['mingw'] #Windows
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.0.1
4
+ version: 0.0.2
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-04-08 00:00:00.000000000Z
12
+ date: 2012-04-10 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: A tool to colorize your console application.
15
15
  email:
@@ -26,6 +26,7 @@ files:
26
26
  - Rakefile
27
27
  - examples/list_files.rb
28
28
  - examples/logger.rb
29
+ - examples/monitor_table.rb
29
30
  - examples/table_cash_flow.rb
30
31
  - lib/yummi.rb
31
32
  - lib/yummi/logger.rb