yummi 0.0.2 → 0.0.3
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.
- data/examples/list_files.rb +2 -3
 - data/examples/monitor_table.rb +9 -8
 - data/examples/table_cash_flow.rb +1 -2
 - data/lib/yummi/table.rb +20 -28
 - data/lib/yummi/version.rb +1 -1
 - data/lib/yummi.rb +188 -47
 - metadata +2 -2
 
    
        data/examples/list_files.rb
    CHANGED
    
    | 
         @@ -34,13 +34,12 @@ opt = OptionParser::new 
     | 
|
| 
       34 
34 
     | 
    
         
             
            # sets the title
         
     | 
| 
       35 
35 
     | 
    
         
             
            @table.title = 'Files in home folder'
         
     | 
| 
       36 
36 
     | 
    
         
             
            # formats size for easily reading
         
     | 
| 
       37 
     | 
    
         
            -
            @table.format :size, :using => Yummi::Formatter. 
     | 
| 
      
 37 
     | 
    
         
            +
            @table.format :size, :using => Yummi::Formatter.unit(:byte)
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       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.row_colorizer Yummi::IndexedDataColorizer. 
     | 
| 
       43 
     | 
    
         
            -
                  @table.row_colorizer Yummi::IndexedDataColorizer.even :with => :intense_white
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @table.row_colorizer Yummi::IndexedDataColorizer.zebra :intense_gray, :intense_white
         
     | 
| 
       44 
43 
     | 
    
         
             
                when 'file'
         
     | 
| 
       45 
44 
     | 
    
         
             
                  @table.row_colorizer do |i, data|
         
     | 
| 
       46 
45 
     | 
    
         
             
                    data[:directory] ? :intense_gray : :intense_white
         
     | 
    
        data/examples/monitor_table.rb
    CHANGED
    
    | 
         @@ -31,18 +31,18 @@ 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::Formatter. 
     | 
| 
       35 
     | 
    
         
            -
            @table.format :free_memory, :using => Yummi::Formatter. 
     | 
| 
      
 34 
     | 
    
         
            +
            @table.format :max_memory, :using => Yummi::Formatter.unit(:byte)
         
     | 
| 
      
 35 
     | 
    
         
            +
            @table.format :free_memory, :using => Yummi::Formatter.unit(:byte)
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
            # colorizer for memory
         
     | 
| 
       38 
     | 
    
         
            -
            memory_colorizer = Yummi::Colorizer. 
     | 
| 
      
 38 
     | 
    
         
            +
            memory_colorizer = Yummi::Colorizer.by_data_eval do |free_memory, max_memory|
         
     | 
| 
       39 
39 
     | 
    
         
             
              free_memory.to_f / max_memory
         
     | 
| 
       40 
40 
     | 
    
         
             
            end
         
     | 
| 
       41 
41 
     | 
    
         
             
            memory_colorizer.use(:red) { |value| value > 0.1 and value < 0.3 }
         
     | 
| 
       42 
42 
     | 
    
         
             
            memory_colorizer.use(:intense_red) { |value| value <= 0.1 }
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
            # colorizer for threads
         
     | 
| 
       45 
     | 
    
         
            -
            thread_colorizer = Yummi::Colorizer. 
     | 
| 
      
 45 
     | 
    
         
            +
            thread_colorizer = Yummi::Colorizer.by_data_eval do |max_threads, in_use_threads|
         
     | 
| 
       46 
46 
     | 
    
         
             
              in_use_threads.to_f / max_threads
         
     | 
| 
       47 
47 
     | 
    
         
             
            end
         
     | 
| 
       48 
48 
     | 
    
         
             
            thread_colorizer.use(:brown) { |value| value > 0.7 and value < 0.9 }
         
     | 
| 
         @@ -51,14 +51,15 @@ thread_colorizer.use(:intense_cyan) { |value| value >= 0.9 } 
     | 
|
| 
       51 
51 
     | 
    
         
             
            opt.on '--color TYPE', 'Specify the color type (zebra,row,cell,none)' do |type|
         
     | 
| 
       52 
52 
     | 
    
         
             
              case type
         
     | 
| 
       53 
53 
     | 
    
         
             
                when 'zebra'
         
     | 
| 
       54 
     | 
    
         
            -
                  @table.row_colorizer Yummi:: 
     | 
| 
       55 
     | 
    
         
            -
                  @table.row_colorizer Yummi::IndexedDataColorizer.even :with => :purple
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @table.row_colorizer Yummi::Colorizer.by_index.zebra :brown, :purple
         
     | 
| 
       56 
55 
     | 
    
         
             
                when 'row'
         
     | 
| 
       57 
56 
     | 
    
         
             
                  @table.row_colorizer memory_colorizer
         
     | 
| 
       58 
57 
     | 
    
         
             
                  @table.row_colorizer thread_colorizer
         
     | 
| 
       59 
58 
     | 
    
         
             
                when 'cell'
         
     | 
| 
       60 
     | 
    
         
            -
                  @table.using_row 
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
      
 59 
     | 
    
         
            +
                  @table.using_row do
         
     | 
| 
      
 60 
     | 
    
         
            +
                    @table.colorize :free_memory, :using => memory_colorizer
         
     | 
| 
      
 61 
     | 
    
         
            +
                    @table.colorize :in_use_threads, :using => thread_colorizer
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
       62 
63 
     | 
    
         
             
                when 'none'
         
     | 
| 
       63 
64 
     | 
    
         
             
                  @table.no_colors
         
     | 
| 
       64 
65 
     | 
    
         
             
                else
         
     | 
    
        data/examples/table_cash_flow.rb
    CHANGED
    
    | 
         @@ -47,8 +47,7 @@ opt = OptionParser::new 
     | 
|
| 
       47 
47 
     | 
    
         
             
            opt.on '--color TYPE', 'Specify the color type (zebra,full,none)' do |type|
         
     | 
| 
       48 
48 
     | 
    
         
             
              case type
         
     | 
| 
       49 
49 
     | 
    
         
             
                when 'zebra'
         
     | 
| 
       50 
     | 
    
         
            -
                  @table.row_colorizer Yummi:: 
     | 
| 
       51 
     | 
    
         
            -
                  @table.row_colorizer Yummi::IndexedDataColorizer.even :with => :purple
         
     | 
| 
      
 50 
     | 
    
         
            +
                  @table.row_colorizer Yummi::Colorizer.by_index.zebra :brown, :purple
         
     | 
| 
       52 
51 
     | 
    
         
             
                when 'full'
         
     | 
| 
       53 
52 
     | 
    
         
             
                  # colorize all values from the Description column to purple
         
     | 
| 
       54 
53 
     | 
    
         
             
                  @table.colorize :description, :with => :purple
         
     | 
    
        data/lib/yummi/table.rb
    CHANGED
    
    | 
         @@ -82,8 +82,6 @@ module Yummi 
     | 
|
| 
       82 
82 
     | 
    
         
             
                  @no_colors = true
         
     | 
| 
       83 
83 
     | 
    
         
             
                end
         
     | 
| 
       84 
84 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                #
         
     | 
| 
       86 
     | 
    
         
            -
                # === Description
         
     | 
| 
       87 
85 
     | 
    
         
             
                #
         
     | 
| 
       88 
86 
     | 
    
         
             
                # Sets the table header. If no aliases are defined, they will be defined as the texts
         
     | 
| 
       89 
87 
     | 
    
         
             
                # in lowercase with line breaks and spaces replaced by underscores.
         
     | 
| 
         @@ -118,8 +116,6 @@ module Yummi 
     | 
|
| 
       118 
116 
     | 
    
         
             
                  @aliases = header.map { |n| n.downcase.gsub(' ', '_').gsub("\n", '_').to_sym } if @aliases.empty?
         
     | 
| 
       119 
117 
     | 
    
         
             
                end
         
     | 
| 
       120 
118 
     | 
    
         | 
| 
       121 
     | 
    
         
            -
                #
         
     | 
| 
       122 
     | 
    
         
            -
                # === Description
         
     | 
| 
       123 
119 
     | 
    
         
             
                #
         
     | 
| 
       124 
120 
     | 
    
         
             
                # Sets the align for a column in the table. #Yummi#Aligner should respond to it.
         
     | 
| 
       125 
121 
     | 
    
         
             
                #
         
     | 
| 
         @@ -140,8 +136,6 @@ module Yummi 
     | 
|
| 
       140 
136 
     | 
    
         
             
                  @align[index] = type
         
     | 
| 
       141 
137 
     | 
    
         
             
                end
         
     | 
| 
       142 
138 
     | 
    
         | 
| 
       143 
     | 
    
         
            -
                #
         
     | 
| 
       144 
     | 
    
         
            -
                # === Description
         
     | 
| 
       145 
139 
     | 
    
         
             
                #
         
     | 
| 
       146 
140 
     | 
    
         
             
                # Adds a component to colorize the entire row (overrides column color).
         
     | 
| 
       147 
141 
     | 
    
         
             
                # The component must respond to +call+ with the index and the row as the arguments and
         
     | 
| 
         @@ -154,32 +148,27 @@ module Yummi 
     | 
|
| 
       154 
148 
     | 
    
         
             
                #   table.row_colorizer { |i, row| :red if row[:value] < 0 }
         
     | 
| 
       155 
149 
     | 
    
         
             
                #
         
     | 
| 
       156 
150 
     | 
    
         
             
                def row_colorizer colorizer = nil, &block
         
     | 
| 
       157 
     | 
    
         
            -
                  @row_colorizer ||= Yummi:: 
     | 
| 
      
 151 
     | 
    
         
            +
                  @row_colorizer ||= Yummi::GroupedComponent::new
         
     | 
| 
       158 
152 
     | 
    
         
             
                  @row_colorizer << (colorizer or block)
         
     | 
| 
       159 
153 
     | 
    
         
             
                end
         
     | 
| 
       160 
154 
     | 
    
         | 
| 
       161 
     | 
    
         
            -
                #
         
     | 
| 
       162 
     | 
    
         
            -
                # === Description
         
     | 
| 
       163 
155 
     | 
    
         
             
                #
         
     | 
| 
       164 
156 
     | 
    
         
             
                # 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+
         
     | 
| 
      
 157 
     | 
    
         
            +
                # argument instead of just the column value for all definitions inside of the given
         
     | 
| 
      
 158 
     | 
    
         
            +
                # block.
         
     | 
| 
       170 
159 
     | 
    
         
             
                #
         
     | 
| 
       171 
160 
     | 
    
         
             
                # === Example
         
     | 
| 
       172 
161 
     | 
    
         
             
                #
         
     | 
| 
       173 
     | 
    
         
            -
                #   table.using_row 
     | 
| 
       174 
     | 
    
         
            -
                #
         
     | 
| 
      
 162 
     | 
    
         
            +
                #   table.using_row do
         
     | 
| 
      
 163 
     | 
    
         
            +
                #     table.colorize(:value) { |row| :red if row[:value] < row[:average] }
         
     | 
| 
      
 164 
     | 
    
         
            +
                #   end
         
     | 
| 
       175 
165 
     | 
    
         
             
                #
         
     | 
| 
       176 
166 
     | 
    
         
             
                def using_row
         
     | 
| 
       177 
167 
     | 
    
         
             
                  @using_row = true
         
     | 
| 
       178 
     | 
    
         
            -
                   
     | 
| 
      
 168 
     | 
    
         
            +
                  yield
         
     | 
| 
      
 169 
     | 
    
         
            +
                  @using_row = false
         
     | 
| 
       179 
170 
     | 
    
         
             
                end
         
     | 
| 
       180 
171 
     | 
    
         | 
| 
       181 
     | 
    
         
            -
                #
         
     | 
| 
       182 
     | 
    
         
            -
                # === Description
         
     | 
| 
       183 
172 
     | 
    
         
             
                #
         
     | 
| 
       184 
173 
     | 
    
         
             
                # Sets a component to colorize a column.
         
     | 
| 
       185 
174 
     | 
    
         
             
                #
         
     | 
| 
         @@ -208,11 +197,8 @@ module Yummi 
     | 
|
| 
       208 
197 
     | 
    
         
             
                  @colorizers[index] ||= []
         
     | 
| 
       209 
198 
     | 
    
         
             
                  obj = (params[:using] or block or (proc { |v| params[:with] }))
         
     | 
| 
       210 
199 
     | 
    
         
             
                  @colorizers[index] << {:use_row => @using_row, :component => obj}
         
     | 
| 
       211 
     | 
    
         
            -
                  @using_row = false
         
     | 
| 
       212 
200 
     | 
    
         
             
                end
         
     | 
| 
       213 
201 
     | 
    
         | 
| 
       214 
     | 
    
         
            -
                #
         
     | 
| 
       215 
     | 
    
         
            -
                # === Description
         
     | 
| 
       216 
202 
     | 
    
         
             
                #
         
     | 
| 
       217 
203 
     | 
    
         
             
                # Sets a component to format a column.
         
     | 
| 
       218 
204 
     | 
    
         
             
                #
         
     | 
| 
         @@ -255,16 +241,22 @@ module Yummi 
     | 
|
| 
       255 
241 
     | 
    
         
             
                  header_color_map, header_output = build_header_output
         
     | 
| 
       256 
242 
     | 
    
         
             
                  data_color_map, data_output = build_data_output
         
     | 
| 
       257 
243 
     | 
    
         | 
| 
       258 
     | 
    
         
            -
                  color_map = header_color_map + data_color_map
         
     | 
| 
       259 
     | 
    
         
            -
                  output = header_output + data_output
         
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
       261 
244 
     | 
    
         
             
                  string = ""
         
     | 
| 
       262 
245 
     | 
    
         
             
                  string << Color.colorize(@title, @colors[:title]) << $/ if @title
         
     | 
| 
       263 
     | 
    
         
            -
                   
     | 
| 
       264 
     | 
    
         
            -
             
     | 
| 
      
 246 
     | 
    
         
            +
                  string << content(header_color_map + data_color_map,
         
     | 
| 
      
 247 
     | 
    
         
            +
                                    header_output + data_output)
         
     | 
| 
      
 248 
     | 
    
         
            +
                end
         
     | 
| 
      
 249 
     | 
    
         
            +
             
     | 
| 
      
 250 
     | 
    
         
            +
                #
         
     | 
| 
      
 251 
     | 
    
         
            +
                # Gets the content string for the given color map and content
         
     | 
| 
      
 252 
     | 
    
         
            +
                #
         
     | 
| 
      
 253 
     | 
    
         
            +
                def content color_map, data
         
     | 
| 
      
 254 
     | 
    
         
            +
                  string = ""
         
     | 
| 
      
 255 
     | 
    
         
            +
                  data.each_index do |i|
         
     | 
| 
      
 256 
     | 
    
         
            +
                    row = data[i]
         
     | 
| 
       265 
257 
     | 
    
         
             
                    row.each_index do |j|
         
     | 
| 
       266 
258 
     | 
    
         
             
                      column = row[j]
         
     | 
| 
       267 
     | 
    
         
            -
                      width = max_width  
     | 
| 
      
 259 
     | 
    
         
            +
                      width = max_width data, j
         
     | 
| 
       268 
260 
     | 
    
         
             
                      align = (@align[j] or @default_align)
         
     | 
| 
       269 
261 
     | 
    
         
             
                      color = color_map[i][j]
         
     | 
| 
       270 
262 
     | 
    
         
             
                      value = Aligner.send align, column.to_s, width
         
     | 
    
        data/lib/yummi/version.rb
    CHANGED
    
    
    
        data/lib/yummi.rb
    CHANGED
    
    | 
         @@ -109,46 +109,90 @@ module Yummi 
     | 
|
| 
       109 
109 
     | 
    
         
             
                end
         
     | 
| 
       110 
110 
     | 
    
         
             
              end
         
     | 
| 
       111 
111 
     | 
    
         | 
| 
       112 
     | 
    
         
            -
               
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
      
 112 
     | 
    
         
            +
              #
         
     | 
| 
      
 113 
     | 
    
         
            +
              # A module to handle blocks by dynamically resolving parameters
         
     | 
| 
      
 114 
     | 
    
         
            +
              #
         
     | 
| 
      
 115 
     | 
    
         
            +
              # see #DataEvalColorizer
         
     | 
| 
      
 116 
     | 
    
         
            +
              #
         
     | 
| 
      
 117 
     | 
    
         
            +
              module BlockHandler
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                #
         
     | 
| 
      
 120 
     | 
    
         
            +
                # Calls the block resolving the parameters by getting the parameter name from the
         
     | 
| 
      
 121 
     | 
    
         
            +
                # given context.
         
     | 
| 
      
 122 
     | 
    
         
            +
                #
         
     | 
| 
      
 123 
     | 
    
         
            +
                # === Example
         
     | 
| 
      
 124 
     | 
    
         
            +
                #
         
     | 
| 
      
 125 
     | 
    
         
            +
                #   context = :max => 10, :curr => 5, ratio => 0.15
         
     | 
| 
      
 126 
     | 
    
         
            +
                #   percentage = BlockHandler.call_block(context) { |max,curr| curr.to_f / max }
         
     | 
| 
      
 127 
     | 
    
         
            +
                #
         
     | 
| 
      
 128 
     | 
    
         
            +
                def block_call context, &block
         
     | 
| 
      
 129 
     | 
    
         
            +
                  args = []
         
     | 
| 
      
 130 
     | 
    
         
            +
                  block.parameters.each do |parameter|
         
     | 
| 
      
 131 
     | 
    
         
            +
                    args << context[parameter[1]]
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
                  block.call *args
         
     | 
| 
       116 
134 
     | 
    
         
             
                end
         
     | 
| 
       117 
135 
     | 
    
         | 
| 
       118 
     | 
    
         
            -
                 
     | 
| 
       119 
     | 
    
         
            -
                  text.ljust(width)
         
     | 
| 
       120 
     | 
    
         
            -
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
                module_function :block_call
         
     | 
| 
       121 
137 
     | 
    
         | 
| 
       122 
138 
     | 
    
         
             
              end
         
     | 
| 
       123 
139 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
              module  
     | 
| 
      
 140 
     | 
    
         
            +
              # A module to align texts based on a reference width
         
     | 
| 
      
 141 
     | 
    
         
            +
              module Aligner
         
     | 
| 
       125 
142 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
                 
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
                  end
         
     | 
| 
      
 143 
     | 
    
         
            +
                # Aligns the text to the right
         
     | 
| 
      
 144 
     | 
    
         
            +
                def self.right text, width
         
     | 
| 
      
 145 
     | 
    
         
            +
                  text.rjust(width)
         
     | 
| 
       130 
146 
     | 
    
         
             
                end
         
     | 
| 
       131 
147 
     | 
    
         | 
| 
       132 
     | 
    
         
            -
                 
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
                  end
         
     | 
| 
      
 148 
     | 
    
         
            +
                # Aligns the text to the left
         
     | 
| 
      
 149 
     | 
    
         
            +
                def self.left text, width
         
     | 
| 
      
 150 
     | 
    
         
            +
                  text.ljust(width)
         
     | 
| 
       136 
151 
     | 
    
         
             
                end
         
     | 
| 
       137 
152 
     | 
    
         | 
| 
       138 
153 
     | 
    
         
             
              end
         
     | 
| 
       139 
154 
     | 
    
         | 
| 
      
 155 
     | 
    
         
            +
              # A module with useful colorizers
         
     | 
| 
       140 
156 
     | 
    
         
             
              module Colorizer
         
     | 
| 
       141 
157 
     | 
    
         | 
| 
      
 158 
     | 
    
         
            +
                # Joins the given colorizers to work as one
         
     | 
| 
       142 
159 
     | 
    
         
             
                def self.join *colorizers
         
     | 
| 
       143 
     | 
    
         
            -
                  join = Yummi:: 
     | 
| 
      
 160 
     | 
    
         
            +
                  join = Yummi::GroupedComponent::new
         
     | 
| 
       144 
161 
     | 
    
         
             
                  colorizers.each { |c| join << c }
         
     | 
| 
       145 
162 
     | 
    
         
             
                  join
         
     | 
| 
       146 
163 
     | 
    
         
             
                end
         
     | 
| 
       147 
164 
     | 
    
         | 
| 
      
 165 
     | 
    
         
            +
                # Returns a new instance of #DataEvalColorizer
         
     | 
| 
      
 166 
     | 
    
         
            +
                def self.by_data_eval &block
         
     | 
| 
      
 167 
     | 
    
         
            +
                  DataEvalColorizer::new &block
         
     | 
| 
      
 168 
     | 
    
         
            +
                end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                # Returns a new instance of #EvalColorizer
         
     | 
| 
       148 
171 
     | 
    
         
             
                def self.by_eval &block
         
     | 
| 
       149 
172 
     | 
    
         
             
                  EvalColorizer::new &block
         
     | 
| 
       150 
173 
     | 
    
         
             
                end
         
     | 
| 
       151 
174 
     | 
    
         | 
| 
      
 175 
     | 
    
         
            +
                # Returns the #IndexedDataColorizer module
         
     | 
| 
      
 176 
     | 
    
         
            +
                def self.by_index
         
     | 
| 
      
 177 
     | 
    
         
            +
                  IndexedDataColorizer
         
     | 
| 
      
 178 
     | 
    
         
            +
                end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                #
         
     | 
| 
      
 181 
     | 
    
         
            +
                # A colorizer that evaluates a main block and returns a color based on other blocks.
         
     | 
| 
      
 182 
     | 
    
         
            +
                #
         
     | 
| 
      
 183 
     | 
    
         
            +
                # The main block must be compatible with the colorizing type (receiving a column
         
     | 
| 
      
 184 
     | 
    
         
            +
                # value in case of a table column colorizer or the row index and row value in case
         
     | 
| 
      
 185 
     | 
    
         
            +
                # of a table row colorizer).
         
     | 
| 
      
 186 
     | 
    
         
            +
                #
         
     | 
| 
      
 187 
     | 
    
         
            +
                # === Example
         
     | 
| 
      
 188 
     | 
    
         
            +
                #
         
     | 
| 
      
 189 
     | 
    
         
            +
                #   # assuming that the table has :max and :current aliases
         
     | 
| 
      
 190 
     | 
    
         
            +
                #   colorizer = DataEvalColorizer::new { |index, data| data[:current] / data[:max] }
         
     | 
| 
      
 191 
     | 
    
         
            +
                #   # the result of the expression above will be passed to this block
         
     | 
| 
      
 192 
     | 
    
         
            +
                #   colorizer.use(:red) { |value| value >= 0.9 }
         
     | 
| 
      
 193 
     | 
    
         
            +
                #
         
     | 
| 
      
 194 
     | 
    
         
            +
                #   table.using_row.colorize :current, :using => colorizer
         
     | 
| 
      
 195 
     | 
    
         
            +
                #
         
     | 
| 
       152 
196 
     | 
    
         
             
                class EvalColorizer
         
     | 
| 
       153 
197 
     | 
    
         | 
| 
       154 
198 
     | 
    
         
             
                  def initialize &block
         
     | 
| 
         @@ -157,13 +201,24 @@ module Yummi 
     | 
|
| 
       157 
201 
     | 
    
         
             
                    @eval_blocks = []
         
     | 
| 
       158 
202 
     | 
    
         
             
                  end
         
     | 
| 
       159 
203 
     | 
    
         | 
| 
       160 
     | 
    
         
            -
                   
     | 
| 
      
 204 
     | 
    
         
            +
                  #
         
     | 
| 
      
 205 
     | 
    
         
            +
                  # Uses the given color if the given block returns something when evaluated with the
         
     | 
| 
      
 206 
     | 
    
         
            +
                  # result of main block.
         
     | 
| 
      
 207 
     | 
    
         
            +
                  #
         
     | 
| 
      
 208 
     | 
    
         
            +
                  # An objtect that responds to :call may also be used.
         
     | 
| 
      
 209 
     | 
    
         
            +
                  #
         
     | 
| 
      
 210 
     | 
    
         
            +
                  def use color, component = nil, &eval_block
         
     | 
| 
       161 
211 
     | 
    
         
             
                    @colors << color
         
     | 
| 
       162 
     | 
    
         
            -
                    @eval_blocks << eval_block
         
     | 
| 
      
 212 
     | 
    
         
            +
                    @eval_blocks << (component or eval_block)
         
     | 
| 
      
 213 
     | 
    
         
            +
                  end
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
                  # Resolves the value using the main block and given arguments
         
     | 
| 
      
 216 
     | 
    
         
            +
                  def resolve_value *args
         
     | 
| 
      
 217 
     | 
    
         
            +
                    @block.call *args
         
     | 
| 
       163 
218 
     | 
    
         
             
                  end
         
     | 
| 
       164 
219 
     | 
    
         | 
| 
       165 
220 
     | 
    
         
             
                  def call *args
         
     | 
| 
       166 
     | 
    
         
            -
                    value =  
     | 
| 
      
 221 
     | 
    
         
            +
                    value = resolve_value *args
         
     | 
| 
       167 
222 
     | 
    
         
             
                    @eval_blocks.each_index do |i|
         
     | 
| 
       168 
223 
     | 
    
         
             
                      return @colors[i] if @eval_blocks[i].call(value)
         
     | 
| 
       169 
224 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -172,40 +227,117 @@ module Yummi 
     | 
|
| 
       172 
227 
     | 
    
         | 
| 
       173 
228 
     | 
    
         
             
                end
         
     | 
| 
       174 
229 
     | 
    
         | 
| 
      
 230 
     | 
    
         
            +
                #
         
     | 
| 
      
 231 
     | 
    
         
            +
                # A colorizer that evaluates a main block and returns a color based on other blocks.
         
     | 
| 
      
 232 
     | 
    
         
            +
                #
         
     | 
| 
      
 233 
     | 
    
         
            +
                # The main block can receive any parameters and the names must be aliases the current
         
     | 
| 
      
 234 
     | 
    
         
            +
                # evaluated data.
         
     | 
| 
      
 235 
     | 
    
         
            +
                #
         
     | 
| 
      
 236 
     | 
    
         
            +
                # === Example
         
     | 
| 
      
 237 
     | 
    
         
            +
                #
         
     | 
| 
      
 238 
     | 
    
         
            +
                #   # assuming that the table has :max and :current aliases
         
     | 
| 
      
 239 
     | 
    
         
            +
                #   colorizer = DataEvalColorizer::new { |max, current| current / max }
         
     | 
| 
      
 240 
     | 
    
         
            +
                #   # the result of the expression above will be passed to this block
         
     | 
| 
      
 241 
     | 
    
         
            +
                #   colorizer.use(:red) { |value| value >= 0.9 }
         
     | 
| 
      
 242 
     | 
    
         
            +
                #
         
     | 
| 
      
 243 
     | 
    
         
            +
                #   table.using_row.colorize :current, :using => colorizer
         
     | 
| 
      
 244 
     | 
    
         
            +
                #
         
     | 
| 
      
 245 
     | 
    
         
            +
                class DataEvalColorizer < EvalColorizer
         
     | 
| 
      
 246 
     | 
    
         
            +
                  include Yummi::BlockHandler
         
     | 
| 
      
 247 
     | 
    
         
            +
             
     | 
| 
      
 248 
     | 
    
         
            +
                  def resolve_value *args
         
     | 
| 
      
 249 
     | 
    
         
            +
                    block_call args.last, &@block # by convention, the last arg is data
         
     | 
| 
      
 250 
     | 
    
         
            +
                  end
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
                end
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
                # A module with colorizers that uses indexes
         
     | 
| 
      
 255 
     | 
    
         
            +
                module IndexedDataColorizer
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
                  # Returns a colorizer that uses the given color in odd indexes
         
     | 
| 
      
 258 
     | 
    
         
            +
                  def self.odd color
         
     | 
| 
      
 259 
     | 
    
         
            +
                    lambda do |index, data|
         
     | 
| 
      
 260 
     | 
    
         
            +
                      color if index.odd?
         
     | 
| 
      
 261 
     | 
    
         
            +
                    end
         
     | 
| 
      
 262 
     | 
    
         
            +
                  end
         
     | 
| 
      
 263 
     | 
    
         
            +
             
     | 
| 
      
 264 
     | 
    
         
            +
                  # Returns a colorizer that uses the given color in even indexes
         
     | 
| 
      
 265 
     | 
    
         
            +
                  def self.even color
         
     | 
| 
      
 266 
     | 
    
         
            +
                    lambda do |index, data|
         
     | 
| 
      
 267 
     | 
    
         
            +
                      color if index.even?
         
     | 
| 
      
 268 
     | 
    
         
            +
                    end
         
     | 
| 
      
 269 
     | 
    
         
            +
                  end
         
     | 
| 
      
 270 
     | 
    
         
            +
             
     | 
| 
      
 271 
     | 
    
         
            +
                  # Returns a colorizer that uses the first color for odd indexes and the second for
         
     | 
| 
      
 272 
     | 
    
         
            +
                  # even indexes.
         
     | 
| 
      
 273 
     | 
    
         
            +
                  def self.zebra first_color, second_color
         
     | 
| 
      
 274 
     | 
    
         
            +
                    Yummi::Colorizer.join odd(first_color), even(second_color)
         
     | 
| 
      
 275 
     | 
    
         
            +
                  end
         
     | 
| 
      
 276 
     | 
    
         
            +
             
     | 
| 
      
 277 
     | 
    
         
            +
                end
         
     | 
| 
      
 278 
     | 
    
         
            +
             
     | 
| 
       175 
279 
     | 
    
         
             
              end
         
     | 
| 
       176 
280 
     | 
    
         | 
| 
      
 281 
     | 
    
         
            +
              # A module with useful formatters
         
     | 
| 
       177 
282 
     | 
    
         
             
              module Formatter
         
     | 
| 
       178 
283 
     | 
    
         | 
| 
      
 284 
     | 
    
         
            +
                # A module for formatting units in a way that makes the value easy to read
         
     | 
| 
      
 285 
     | 
    
         
            +
                module Unit
         
     | 
| 
      
 286 
     | 
    
         
            +
                  # Holds the information about the units that are supported in #format
         
     | 
| 
      
 287 
     | 
    
         
            +
                  UNITS = {
         
     | 
| 
      
 288 
     | 
    
         
            +
                    :byte => {:range => %w{B KB MB GB TB}, :step => 1024}
         
     | 
| 
      
 289 
     | 
    
         
            +
                  }
         
     | 
| 
      
 290 
     | 
    
         
            +
             
     | 
| 
      
 291 
     | 
    
         
            +
                  #
         
     | 
| 
      
 292 
     | 
    
         
            +
                  # Formats the value using the given unit.
         
     | 
| 
      
 293 
     | 
    
         
            +
                  #
         
     | 
| 
      
 294 
     | 
    
         
            +
                  # === Args
         
     | 
| 
      
 295 
     | 
    
         
            +
                  #
         
     | 
| 
      
 296 
     | 
    
         
            +
                  # +unit+::
         
     | 
| 
      
 297 
     | 
    
         
            +
                  #   A unit defined in #UNITS or a definition
         
     | 
| 
      
 298 
     | 
    
         
            +
                  # +value+::
         
     | 
| 
      
 299 
     | 
    
         
            +
                  #   The value to format
         
     | 
| 
      
 300 
     | 
    
         
            +
                  # +params+::
         
     | 
| 
      
 301 
     | 
    
         
            +
                  #   Additional parameters:
         
     | 
| 
      
 302 
     | 
    
         
            +
                  #   * precision: the number of fractional digits to display (defaults to 1)
         
     | 
| 
      
 303 
     | 
    
         
            +
                  #
         
     | 
| 
      
 304 
     | 
    
         
            +
                  def self.format unit, value, params = {}
         
     | 
| 
      
 305 
     | 
    
         
            +
                    unit = UNITS[unit] if unit.is_a? Symbol
         
     | 
| 
      
 306 
     | 
    
         
            +
                    params[:precision] ||= 1
         
     | 
| 
      
 307 
     | 
    
         
            +
                    result = value
         
     | 
| 
      
 308 
     | 
    
         
            +
                    units = unit[:range]
         
     | 
| 
      
 309 
     | 
    
         
            +
                    units.each_index do |i|
         
     | 
| 
      
 310 
     | 
    
         
            +
                      minimun = (unit[:step] ** i)
         
     | 
| 
      
 311 
     | 
    
         
            +
                      result = "%.#{params[:precision]}f #{units[i]}" % (value.to_f / minimun) if value >= minimun
         
     | 
| 
      
 312 
     | 
    
         
            +
                    end
         
     | 
| 
      
 313 
     | 
    
         
            +
                    result
         
     | 
| 
      
 314 
     | 
    
         
            +
                  end
         
     | 
| 
      
 315 
     | 
    
         
            +
                end
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
                # Formats boolean values using 'Yes' or 'No'
         
     | 
| 
       179 
318 
     | 
    
         
             
                def self.yes_or_no
         
     | 
| 
       180 
319 
     | 
    
         
             
                  lambda do |value|
         
     | 
| 
       181 
320 
     | 
    
         
             
                    value ? "Yes" : "No"
         
     | 
| 
       182 
321 
     | 
    
         
             
                  end
         
     | 
| 
       183 
322 
     | 
    
         
             
                end
         
     | 
| 
       184 
323 
     | 
    
         | 
| 
      
 324 
     | 
    
         
            +
                # Formats a float value by rounding to the given decinal digits
         
     | 
| 
       185 
325 
     | 
    
         
             
                def self.round precision
         
     | 
| 
       186 
326 
     | 
    
         
             
                  lambda do |value|
         
     | 
| 
       187 
327 
     | 
    
         
             
                    "%.#{precision}f" % value
         
     | 
| 
       188 
328 
     | 
    
         
             
                  end
         
     | 
| 
       189 
329 
     | 
    
         
             
                end
         
     | 
| 
       190 
330 
     | 
    
         | 
| 
       191 
     | 
    
         
            -
                 
     | 
| 
      
 331 
     | 
    
         
            +
                # see #Unit#format
         
     | 
| 
      
 332 
     | 
    
         
            +
                def self.unit unit, params = {}
         
     | 
| 
       192 
333 
     | 
    
         
             
                  lambda do |value|
         
     | 
| 
       193 
     | 
    
         
            -
                     
     | 
| 
       194 
     | 
    
         
            -
                    units = params[:range]
         
     | 
| 
       195 
     | 
    
         
            -
                    units.each_index do |i|
         
     | 
| 
       196 
     | 
    
         
            -
                      minimun = (params[:step] ** i)
         
     | 
| 
       197 
     | 
    
         
            -
                      result = "%.#{params[:precision]}f #{units[i]}" % (value.to_f / minimun) if value >= minimun
         
     | 
| 
       198 
     | 
    
         
            -
                    end
         
     | 
| 
       199 
     | 
    
         
            -
                    result
         
     | 
| 
      
 334 
     | 
    
         
            +
                    Unit.format unit, value, params
         
     | 
| 
       200 
335 
     | 
    
         
             
                  end
         
     | 
| 
       201 
336 
     | 
    
         
             
                end
         
     | 
| 
       202 
337 
     | 
    
         | 
| 
       203 
     | 
    
         
            -
                def self.bytes precision = 1
         
     | 
| 
       204 
     | 
    
         
            -
                  unit :range => %w{B KB MB GB TB}, :step => 1024, :precision => precision
         
     | 
| 
       205 
     | 
    
         
            -
                end
         
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
       207 
338 
     | 
    
         
             
              end
         
     | 
| 
       208 
339 
     | 
    
         | 
| 
      
 340 
     | 
    
         
            +
              # A class to expose indexed data by numeric indexes and aliases.
         
     | 
| 
       209 
341 
     | 
    
         
             
              class IndexedData
         
     | 
| 
       210 
342 
     | 
    
         | 
| 
       211 
343 
     | 
    
         
             
                def initialize aliases, data
         
     | 
| 
         @@ -223,36 +355,45 @@ module Yummi 
     | 
|
| 
       223 
355 
     | 
    
         | 
| 
       224 
356 
     | 
    
         
             
              end
         
     | 
| 
       225 
357 
     | 
    
         | 
| 
       226 
     | 
    
         
            -
              class  
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
      
 358 
     | 
    
         
            +
              # A class to group components and blocks
         
     | 
| 
      
 359 
     | 
    
         
            +
              class GroupedComponent
         
     | 
| 
      
 360 
     | 
    
         
            +
             
     | 
| 
      
 361 
     | 
    
         
            +
                #
         
     | 
| 
      
 362 
     | 
    
         
            +
                # Creates a new GroupedComponent
         
     | 
| 
      
 363 
     | 
    
         
            +
                #
         
     | 
| 
      
 364 
     | 
    
         
            +
                # === Args
         
     | 
| 
      
 365 
     | 
    
         
            +
                #
         
     | 
| 
      
 366 
     | 
    
         
            +
                # +params+::
         
     | 
| 
      
 367 
     | 
    
         
            +
                #   Hash parameters:
         
     | 
| 
      
 368 
     | 
    
         
            +
                #     - call_all: indicates if all components must be called. For use if the return
         
     | 
| 
      
 369 
     | 
    
         
            +
                #     should be ignored
         
     | 
| 
      
 370 
     | 
    
         
            +
                #     - message: the message to send. Defaults to :call
         
     | 
| 
      
 371 
     | 
    
         
            +
                #
         
     | 
| 
       228 
372 
     | 
    
         
             
                def initialize params = {}
         
     | 
| 
       229 
     | 
    
         
            -
                  @ 
     | 
| 
      
 373 
     | 
    
         
            +
                  @components = []
         
     | 
| 
       230 
374 
     | 
    
         
             
                  @call_all = params[:call_all]
         
     | 
| 
      
 375 
     | 
    
         
            +
                  @message = (params[:message] or :call)
         
     | 
| 
       231 
376 
     | 
    
         
             
                end
         
     | 
| 
       232 
377 
     | 
    
         | 
| 
       233 
     | 
    
         
            -
                 
     | 
| 
       234 
     | 
    
         
            -
             
     | 
| 
      
 378 
     | 
    
         
            +
                # Adds a new component
         
     | 
| 
      
 379 
     | 
    
         
            +
                def << component = nil, &block
         
     | 
| 
      
 380 
     | 
    
         
            +
                  @components << (component or block)
         
     | 
| 
       235 
381 
     | 
    
         
             
                end
         
     | 
| 
       236 
382 
     | 
    
         | 
| 
      
 383 
     | 
    
         
            +
                #
         
     | 
| 
      
 384 
     | 
    
         
            +
                # Calls the added components by sending the configured message and the given args.
         
     | 
| 
      
 385 
     | 
    
         
            +
                #
         
     | 
| 
       237 
386 
     | 
    
         
             
                def call *args
         
     | 
| 
       238 
387 
     | 
    
         
             
                  result = nil
         
     | 
| 
       239 
     | 
    
         
            -
                  @ 
     | 
| 
      
 388 
     | 
    
         
            +
                  @components.each do |component|
         
     | 
| 
       240 
389 
     | 
    
         
             
                    break if result and not @call_all
         
     | 
| 
       241 
     | 
    
         
            -
                    result =  
     | 
| 
      
 390 
     | 
    
         
            +
                    result = component.send @message, *args
         
     | 
| 
       242 
391 
     | 
    
         
             
                  end
         
     | 
| 
       243 
392 
     | 
    
         
             
                  result
         
     | 
| 
       244 
393 
     | 
    
         
             
                end
         
     | 
| 
       245 
394 
     | 
    
         | 
| 
       246 
395 
     | 
    
         
             
              end
         
     | 
| 
       247 
396 
     | 
    
         | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
       256 
397 
     | 
    
         
             
            end
         
     | 
| 
       257 
398 
     | 
    
         | 
| 
       258 
399 
     | 
    
         
             
            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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.3
         
     | 
| 
       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- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-04-15 00:00:00.000000000Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       14 
14 
     | 
    
         
             
            description: A tool to colorize your console application.
         
     | 
| 
       15 
15 
     | 
    
         
             
            email:
         
     |