sparklines 0.5.0 → 0.5.1
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/CHANGELOG +5 -0
 - data/lib/sparklines.rb +76 -52
 - metadata +5 -5
 
    
        data/CHANGELOG
    CHANGED
    
    
    
        data/lib/sparklines.rb
    CHANGED
    
    | 
         @@ -75,7 +75,7 @@ Licensed under the MIT license. 
     | 
|
| 
       75 
75 
     | 
    
         
             
            =end
         
     | 
| 
       76 
76 
     | 
    
         
             
            class Sparklines
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
              VERSION = '0.5. 
     | 
| 
      
 78 
     | 
    
         
            +
              VERSION = '0.5.1'
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
              @@label_margin = 5.0
         
     | 
| 
       81 
81 
     | 
    
         
             
              @@pointsize = 10.0
         
     | 
| 
         @@ -87,29 +87,29 @@ class Sparklines 
     | 
|
| 
       87 
87 
     | 
    
         | 
| 
       88 
88 
     | 
    
         
             
                def plot_to_image(data=[], options={})
         
     | 
| 
       89 
89 
     | 
    
         
             
                  defaults = {
         
     | 
| 
       90 
     | 
    
         
            -
                    :type 
     | 
| 
       91 
     | 
    
         
            -
                    :height 
     | 
| 
       92 
     | 
    
         
            -
                    :upper 
     | 
| 
       93 
     | 
    
         
            -
                    :diameter 
     | 
| 
       94 
     | 
    
         
            -
                    :step 
     | 
| 
       95 
     | 
    
         
            -
                    :line_color 
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                    :above_color 
     | 
| 
       98 
     | 
    
         
            -
                    :below_color 
     | 
| 
      
 90 
     | 
    
         
            +
                    :type             => 'smooth',
         
     | 
| 
      
 91 
     | 
    
         
            +
                    :height           => 14,
         
     | 
| 
      
 92 
     | 
    
         
            +
                    :upper            => 50,
         
     | 
| 
      
 93 
     | 
    
         
            +
                    :diameter         => 20,
         
     | 
| 
      
 94 
     | 
    
         
            +
                    :step             => 2,
         
     | 
| 
      
 95 
     | 
    
         
            +
                    :line_color       => 'lightgrey',
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                    :above_color      => 'red',
         
     | 
| 
      
 98 
     | 
    
         
            +
                    :below_color      => 'grey',
         
     | 
| 
       99 
99 
     | 
    
         
             
                    :background_color => 'white',
         
     | 
| 
       100 
     | 
    
         
            -
                    :share_color 
     | 
| 
       101 
     | 
    
         
            -
                    :remain_color 
     | 
| 
       102 
     | 
    
         
            -
                    :min_color 
     | 
| 
       103 
     | 
    
         
            -
                    :max_color 
     | 
| 
       104 
     | 
    
         
            -
                    :last_color 
     | 
| 
       105 
     | 
    
         
            -
                    :std_dev_color 
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                    :has_min 
     | 
| 
       108 
     | 
    
         
            -
                    :has_max 
     | 
| 
       109 
     | 
    
         
            -
                    :has_last 
     | 
| 
       110 
     | 
    
         
            -
                    :has_std_dev 
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                    :label 
     | 
| 
      
 100 
     | 
    
         
            +
                    :share_color      => 'red',
         
     | 
| 
      
 101 
     | 
    
         
            +
                    :remain_color     => 'lightgrey',
         
     | 
| 
      
 102 
     | 
    
         
            +
                    :min_color        => 'blue',
         
     | 
| 
      
 103 
     | 
    
         
            +
                    :max_color        => 'green',
         
     | 
| 
      
 104 
     | 
    
         
            +
                    :last_color       => 'red',
         
     | 
| 
      
 105 
     | 
    
         
            +
                    :std_dev_color    => '#efefef',
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                    :has_min          => false,
         
     | 
| 
      
 108 
     | 
    
         
            +
                    :has_max          => false,
         
     | 
| 
      
 109 
     | 
    
         
            +
                    :has_last         => false,
         
     | 
| 
      
 110 
     | 
    
         
            +
                    :has_std_dev      => false,
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                    :label            => nil
         
     | 
| 
       113 
113 
     | 
    
         
             
                  }
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
                  # HACK for HashWithIndifferentAccess
         
     | 
| 
         @@ -139,10 +139,10 @@ class Sparklines 
     | 
|
| 
       139 
139 
     | 
    
         
             
                def plot(data=[], options={})
         
     | 
| 
       140 
140 
     | 
    
         
             
                  plot_to_image(data, options).to_blob
         
     | 
| 
       141 
141 
     | 
    
         
             
                end
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
       143 
143 
     | 
    
         
             
                ##
         
     | 
| 
       144 
144 
     | 
    
         
             
                # Writes a graph to disk with the specified filename, or "sparklines.png".
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
       146 
146 
     | 
    
         
             
                def plot_to_file(filename="sparklines.png", data=[], options={})
         
     | 
| 
       147 
147 
     | 
    
         
             
                  File.open( filename, 'wb' ) do |png|
         
     | 
| 
       148 
148 
     | 
    
         
             
                    png << self.plot( data, options)
         
     | 
| 
         @@ -251,28 +251,44 @@ class Sparklines 
     | 
|
| 
       251 
251 
     | 
    
         | 
| 
       252 
252 
     | 
    
         
             
              ##
         
     | 
| 
       253 
253 
     | 
    
         
             
              # A bar graph.
         
     | 
| 
      
 254 
     | 
    
         
            +
              #
         
     | 
| 
      
 255 
     | 
    
         
            +
              # Also takes :target option (a line will be drawn) and :upper (values
         
     | 
| 
      
 256 
     | 
    
         
            +
              # under will be drawn in :below_color, above in :above_color).
         
     | 
| 
       254 
257 
     | 
    
         | 
| 
       255 
258 
     | 
    
         
             
              def bar
         
     | 
| 
       256 
     | 
    
         
            -
                step 
     | 
| 
       257 
     | 
    
         
            -
                height 
     | 
| 
      
 259 
     | 
    
         
            +
                step             = @options[:step].to_f
         
     | 
| 
      
 260 
     | 
    
         
            +
                height           = @options[:height].to_f
         
     | 
| 
      
 261 
     | 
    
         
            +
                width            = ((@norm_data.size - 1) * step).to_f
         
     | 
| 
       258 
262 
     | 
    
         
             
                background_color = @options[:background_color]
         
     | 
| 
       259 
263 
     | 
    
         | 
| 
       260 
264 
     | 
    
         
             
                create_canvas(@norm_data.length * step + 2, height, background_color)
         
     | 
| 
       261 
265 
     | 
    
         | 
| 
       262 
     | 
    
         
            -
                upper 
     | 
| 
       263 
     | 
    
         
            -
                below_color 
     | 
| 
       264 
     | 
    
         
            -
                above_color 
     | 
| 
      
 266 
     | 
    
         
            +
                upper            = @options[:upper].to_f
         
     | 
| 
      
 267 
     | 
    
         
            +
                below_color      = @options[:below_color]
         
     | 
| 
      
 268 
     | 
    
         
            +
                above_color      = @options[:above_color]
         
     | 
| 
      
 269 
     | 
    
         
            +
             
     | 
| 
      
 270 
     | 
    
         
            +
                target           = @options.has_key?(:target) ? @options[:target].to_f : nil
         
     | 
| 
      
 271 
     | 
    
         
            +
                target_color     = @options[:target_color] || 'white'
         
     | 
| 
       265 
272 
     | 
    
         | 
| 
       266 
273 
     | 
    
         
             
                i = 1
         
     | 
| 
      
 274 
     | 
    
         
            +
                # raise @norm_data.to_yaml
         
     | 
| 
      
 275 
     | 
    
         
            +
                max_normalized = @norm_data.max
         
     | 
| 
       267 
276 
     | 
    
         
             
                @norm_data.each_with_index do |r, index|
         
     | 
| 
       268 
     | 
    
         
            -
                  color = ( 
     | 
| 
      
 277 
     | 
    
         
            +
                  color = (@data[index] >= upper) ? above_color : below_color
         
     | 
| 
       269 
278 
     | 
    
         
             
                  @draw.stroke('transparent')
         
     | 
| 
       270 
279 
     | 
    
         
             
                  @draw.fill(color)
         
     | 
| 
       271 
     | 
    
         
            -
                  @ 
     | 
| 
       272 
     | 
    
         
            -
                  i 
     | 
| 
      
 280 
     | 
    
         
            +
                  bar_height_from_top = @canvas.rows - ( (r.to_f / max_normalized.to_f) * @canvas.rows)
         
     | 
| 
      
 281 
     | 
    
         
            +
                  @draw.rectangle( i, @canvas.rows, i + step - 2, bar_height_from_top )
         
     | 
| 
       273 
282 
     | 
    
         
             
                  i += step
         
     | 
| 
       274 
283 
     | 
    
         
             
                end
         
     | 
| 
       275 
284 
     | 
    
         | 
| 
      
 285 
     | 
    
         
            +
                unless target.nil?
         
     | 
| 
      
 286 
     | 
    
         
            +
                  normalized_target_value = ((target.to_f - @minimum_value)/(@maximum_value - @minimum_value)) * 100.0
         
     | 
| 
      
 287 
     | 
    
         
            +
                  adjusted_target_value = (height - 3 - normalized_target_value/(101.0/(height-4))).to_i
         
     | 
| 
      
 288 
     | 
    
         
            +
                  @draw.stroke(target_color)
         
     | 
| 
      
 289 
     | 
    
         
            +
                  open_ended_polyline([[-5, adjusted_target_value], [width + 5, adjusted_target_value]])
         
     | 
| 
      
 290 
     | 
    
         
            +
                end
         
     | 
| 
      
 291 
     | 
    
         
            +
             
     | 
| 
       276 
292 
     | 
    
         
             
                @draw.draw(@canvas)
         
     | 
| 
       277 
293 
     | 
    
         
             
                @canvas
         
     | 
| 
       278 
294 
     | 
    
         
             
              end
         
     | 
| 
         @@ -415,28 +431,27 @@ class Sparklines 
     | 
|
| 
       415 
431 
     | 
    
         
             
              #   :target - A 1px horizontal line will be drawn at this value. Useful for showing an average.
         
     | 
| 
       416 
432 
     | 
    
         
             
              #
         
     | 
| 
       417 
433 
     | 
    
         
             
              #   :target_color - Color of the target line. Defaults to white.
         
     | 
| 
       418 
     | 
    
         
            -
              
         
     | 
| 
       419 
     | 
    
         
            -
              def smooth
         
     | 
| 
       420 
434 
     | 
    
         | 
| 
       421 
     | 
    
         
            -
             
     | 
| 
       422 
     | 
    
         
            -
                 
     | 
| 
       423 
     | 
    
         
            -
                 
     | 
| 
      
 435 
     | 
    
         
            +
              def smooth
         
     | 
| 
      
 436 
     | 
    
         
            +
                step             = @options[:step].to_f
         
     | 
| 
      
 437 
     | 
    
         
            +
                height           = @options[:height].to_f
         
     | 
| 
      
 438 
     | 
    
         
            +
                width            = ((@norm_data.size - 1) * step).to_f
         
     | 
| 
       424 
439 
     | 
    
         | 
| 
       425 
440 
     | 
    
         
             
                background_color = @options[:background_color]
         
     | 
| 
       426 
441 
     | 
    
         
             
                create_canvas(width, height, background_color)
         
     | 
| 
       427 
442 
     | 
    
         | 
| 
       428 
     | 
    
         
            -
                min_color 
     | 
| 
       429 
     | 
    
         
            -
                max_color 
     | 
| 
       430 
     | 
    
         
            -
                last_color 
     | 
| 
       431 
     | 
    
         
            -
                has_min 
     | 
| 
       432 
     | 
    
         
            -
                has_max 
     | 
| 
       433 
     | 
    
         
            -
                has_last 
     | 
| 
       434 
     | 
    
         
            -
                line_color 
     | 
| 
       435 
     | 
    
         
            -
                has_std_dev 
     | 
| 
       436 
     | 
    
         
            -
                std_dev_color 
     | 
| 
      
 443 
     | 
    
         
            +
                min_color        = @options[:min_color]
         
     | 
| 
      
 444 
     | 
    
         
            +
                max_color        = @options[:max_color]
         
     | 
| 
      
 445 
     | 
    
         
            +
                last_color       = @options[:last_color]
         
     | 
| 
      
 446 
     | 
    
         
            +
                has_min          = @options[:has_min]
         
     | 
| 
      
 447 
     | 
    
         
            +
                has_max          = @options[:has_max]
         
     | 
| 
      
 448 
     | 
    
         
            +
                has_last         = @options[:has_last]
         
     | 
| 
      
 449 
     | 
    
         
            +
                line_color       = @options[:line_color]
         
     | 
| 
      
 450 
     | 
    
         
            +
                has_std_dev      = @options[:has_std_dev]
         
     | 
| 
      
 451 
     | 
    
         
            +
                std_dev_color    = @options[:std_dev_color]
         
     | 
| 
       437 
452 
     | 
    
         | 
| 
       438 
     | 
    
         
            -
                target 
     | 
| 
       439 
     | 
    
         
            -
                target_color 
     | 
| 
      
 453 
     | 
    
         
            +
                target           = @options.has_key?(:target) ? @options[:target].to_f : nil
         
     | 
| 
      
 454 
     | 
    
         
            +
                target_color     = @options[:target_color] || 'white'
         
     | 
| 
       440 
455 
     | 
    
         | 
| 
       441 
456 
     | 
    
         
             
                drawstddevbox(width,height,std_dev_color) if has_std_dev == true
         
     | 
| 
       442 
457 
     | 
    
         | 
| 
         @@ -477,7 +492,7 @@ class Sparklines 
     | 
|
| 
       477 
492 
     | 
    
         
             
              # No value produces an empty row to indicate a tie.
         
     | 
| 
       478 
493 
     | 
    
         
             
              #
         
     | 
| 
       479 
494 
     | 
    
         
             
              # * results - an array of integer values between -2 and 2. -2 is exceptional
         
     | 
| 
       480 
     | 
    
         
            -
              #   down, 1 is regular down, 0 is no value, 1 is up, and 2 is exceptional up.
         
     | 
| 
      
 495 
     | 
    
         
            +
              #   down, -1 is regular down, 0 is no value, 1 is up, and 2 is exceptional up.
         
     | 
| 
       481 
496 
     | 
    
         
             
              # * options - a hash that takes parameters
         
     | 
| 
       482 
497 
     | 
    
         
             
              #
         
     | 
| 
       483 
498 
     | 
    
         
             
              #   :height - height of the sparkline
         
     | 
| 
         @@ -485,6 +500,8 @@ class Sparklines 
     | 
|
| 
       485 
500 
     | 
    
         
             
              #   :whisker_color - the color of regular whiskers; defaults to black
         
     | 
| 
       486 
501 
     | 
    
         
             
              #
         
     | 
| 
       487 
502 
     | 
    
         
             
              #   :exception_color - the color of exceptional whiskers; defaults to red
         
     | 
| 
      
 503 
     | 
    
         
            +
              #
         
     | 
| 
      
 504 
     | 
    
         
            +
              #   :step - Spacing for whiskers. Includes the whisker itself. Default 2.
         
     | 
| 
       488 
505 
     | 
    
         | 
| 
       489 
506 
     | 
    
         
             
              def whisker
         
     | 
| 
       490 
507 
     | 
    
         | 
| 
         @@ -539,7 +556,7 @@ class Sparklines 
     | 
|
| 
       539 
556 
     | 
    
         
             
              #   :height - Numeric. Defaults to 15. Should be a multiple of three.
         
     | 
| 
       540 
557 
     | 
    
         
             
              #
         
     | 
| 
       541 
558 
     | 
    
         
             
              #   :width - This graph expands to any specified width. Defaults to 100.
         
     | 
| 
       542 
     | 
    
         
            -
              # 
     | 
| 
      
 559 
     | 
    
         
            +
              #
         
     | 
| 
       543 
560 
     | 
    
         
             
              #   :bad - Numeric. A darker shade background will be drawn up to this point.
         
     | 
| 
       544 
561 
     | 
    
         
             
              #
         
     | 
| 
       545 
562 
     | 
    
         
             
              #   :satisfactory - Numeric. A medium background will be drawn up to this point.
         
     | 
| 
         @@ -609,8 +626,15 @@ class Sparklines 
     | 
|
| 
       609 
626 
     | 
    
         
             
              private
         
     | 
| 
       610 
627 
     | 
    
         | 
| 
       611 
628 
     | 
    
         
             
              def normalize_data
         
     | 
| 
       612 
     | 
    
         
            -
                 
     | 
| 
      
 629 
     | 
    
         
            +
                case @options[:type].to_s
         
     | 
| 
      
 630 
     | 
    
         
            +
                when 'bar'
         
     | 
| 
      
 631 
     | 
    
         
            +
                  @minimum_value = 0.0
         
     | 
| 
      
 632 
     | 
    
         
            +
                else
         
     | 
| 
      
 633 
     | 
    
         
            +
                  @minimum_value = @data.min
         
     | 
| 
      
 634 
     | 
    
         
            +
                end
         
     | 
| 
      
 635 
     | 
    
         
            +
             
     | 
| 
       613 
636 
     | 
    
         
             
                @maximum_value = @data.max
         
     | 
| 
      
 637 
     | 
    
         
            +
                
         
     | 
| 
       614 
638 
     | 
    
         
             
                case @options[:type].to_s
         
     | 
| 
       615 
639 
     | 
    
         
             
                when 'pie'
         
     | 
| 
       616 
640 
     | 
    
         
             
                  @norm_data = @data
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sparklines
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.5. 
     | 
| 
       5 
     | 
    
         
            -
            platform:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Geoffrey Grosenbach
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date: 2008- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2008-05-19 00:00:00 -07:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -19,7 +19,7 @@ dependencies: 
     | 
|
| 
       19 
19 
     | 
    
         
             
                requirements: 
         
     | 
| 
       20 
20 
     | 
    
         
             
                - - ">="
         
     | 
| 
       21 
21 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       22 
     | 
    
         
            -
                    version: 1. 
     | 
| 
      
 22 
     | 
    
         
            +
                    version: 1.5.1
         
     | 
| 
       23 
23 
     | 
    
         
             
                version: 
         
     | 
| 
       24 
24 
     | 
    
         
             
            description: Tiny graphs.
         
     | 
| 
       25 
25 
     | 
    
         
             
            email: boss@topfunky.com
         
     | 
| 
         @@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       118 
118 
     | 
    
         
             
            requirements: []
         
     | 
| 
       119 
119 
     | 
    
         | 
| 
       120 
120 
     | 
    
         
             
            rubyforge_project: sparklines
         
     | 
| 
       121 
     | 
    
         
            -
            rubygems_version:  
     | 
| 
      
 121 
     | 
    
         
            +
            rubygems_version: 1.1.1
         
     | 
| 
       122 
122 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       123 
123 
     | 
    
         
             
            specification_version: 2
         
     | 
| 
       124 
124 
     | 
    
         
             
            summary: Tiny graphs.
         
     |