scruffy 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/CHANGES +8 -0
  2. data/History.txt +104 -0
  3. data/License.txt +20 -0
  4. data/Manifest.txt +105 -0
  5. data/PostInstall.txt +6 -0
  6. data/README.txt +66 -0
  7. data/Rakefile +108 -104
  8. data/config/hoe.rb +78 -0
  9. data/config/requirements.rb +15 -0
  10. data/lib/scruffy.rb +8 -6
  11. data/lib/scruffy/components/base.rb +4 -0
  12. data/lib/scruffy/components/legend.rb +65 -30
  13. data/lib/scruffy/components/viewport.rb +14 -17
  14. data/lib/scruffy/formatters.rb +1 -1
  15. data/lib/scruffy/graph.rb +18 -7
  16. data/lib/scruffy/graph_state.rb +24 -0
  17. data/lib/scruffy/helpers.rb +2 -1
  18. data/lib/scruffy/helpers/canvas.rb +19 -17
  19. data/lib/scruffy/helpers/layer_container.rb +8 -3
  20. data/lib/scruffy/helpers/meta.rb +5 -5
  21. data/lib/scruffy/helpers/point_container.rb +70 -0
  22. data/lib/scruffy/layers.rb +2 -0
  23. data/lib/scruffy/layers/average.rb +6 -1
  24. data/lib/scruffy/layers/bar.rb +1 -0
  25. data/lib/scruffy/layers/base.rb +38 -14
  26. data/lib/scruffy/layers/pie.rb +123 -0
  27. data/lib/scruffy/layers/pie_slice.rb +114 -0
  28. data/lib/scruffy/layers/scatter.rb +21 -0
  29. data/lib/scruffy/layers/sparkline_bar.rb +1 -0
  30. data/lib/scruffy/layers/stacked.rb +2 -5
  31. data/lib/scruffy/rasterizers/rmagick_rasterizer.rb +1 -2
  32. data/lib/scruffy/renderers.rb +2 -1
  33. data/lib/scruffy/renderers/base.rb +6 -4
  34. data/lib/scruffy/renderers/pie.rb +20 -0
  35. data/lib/scruffy/themes.rb +54 -4
  36. data/lib/scruffy/version.rb +8 -2
  37. data/script/console +10 -0
  38. data/script/destroy +14 -0
  39. data/script/generate +14 -0
  40. data/script/txt2html +82 -0
  41. data/setup.rb +1585 -0
  42. data/spec/scruffy/graph_spec.rb +175 -0
  43. data/spec/scruffy/layers/base_spec.rb +30 -0
  44. data/spec/{layers → scruffy/layers}/line_spec.rb +2 -1
  45. data/spec/spec_helper.rb +8 -0
  46. data/tasks/deployment.rake +34 -0
  47. data/tasks/environment.rake +7 -0
  48. data/tasks/website.rake +17 -0
  49. data/test/graph_creation_test.rb +101 -0
  50. data/test/test_helper.rb +2 -0
  51. data/test/test_scruffy.rb +11 -0
  52. data/website/images/blank.gif.html +7 -0
  53. data/website/images/graphs/all_smiles.png +0 -0
  54. data/website/images/graphs/bar_test.png +0 -0
  55. data/website/images/graphs/bar_test.svg +71 -0
  56. data/website/images/graphs/line_test.png +0 -0
  57. data/website/images/graphs/line_test.svg +60 -0
  58. data/website/images/graphs/multi_test.png +0 -0
  59. data/website/images/graphs/multi_test.svg +296 -0
  60. data/website/images/graphs/pie_test.png +0 -0
  61. data/website/images/graphs/pie_test.svg +40 -0
  62. data/website/images/graphs/split_test.png +0 -0
  63. data/website/images/graphs/split_test.svg +295 -0
  64. data/website/images/graphs/stacking_test.png +0 -0
  65. data/website/images/graphs/stacking_test.svg +146 -0
  66. data/website/images/header.png +0 -0
  67. data/website/images/header_gradient.png +0 -0
  68. data/website/images/overlay.png +0 -0
  69. data/website/images/scruffy.png +0 -0
  70. data/website/index.html +294 -0
  71. data/website/index.txt +199 -0
  72. data/website/javascripts/application.js +2 -0
  73. data/website/javascripts/controls.js +815 -0
  74. data/website/javascripts/dragdrop.js +913 -0
  75. data/website/javascripts/effects.js +958 -0
  76. data/website/javascripts/lightbox.js +437 -0
  77. data/website/javascripts/prototype.js +2006 -0
  78. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  79. data/website/stylesheets/lightbox.css +27 -0
  80. data/website/stylesheets/screen.css +147 -0
  81. data/website/stylesheets/scruffy.css +227 -0
  82. data/website/template.html.erb +47 -0
  83. metadata +135 -55
  84. data/spec/graph_spec.rb +0 -162
@@ -0,0 +1,146 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <?DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" type=""?>
3
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="360" xmlns="http://www.w3.org/2000/svg">
4
+ <g id="scruffy_graph">
5
+ <g transform="translate(0.0, 0.0)" id="background">
6
+ <defs>
7
+ <linearGradient x2="0%" y2="100%" x1="0%" id="BackgroundGradient" y1="0%">
8
+ <stop stop-color="black" offset="5%"/>
9
+ <stop stop-color="#4A465A" offset="95%"/>
10
+ </linearGradient>
11
+ </defs>
12
+ <rect width="600.0" x="0" y="0" height="360.0" fill="url(#BackgroundGradient)"/>
13
+ </g>
14
+ <g transform="translate(30.0, 7.2)" id="title">
15
+ <text class="title" font-size="25.2" x="270.0" text-anchor="middle" y="25.2" stroke="none" stroke-width="0" fill="white">Comparative Agent Performance</text>
16
+ </g>
17
+ <g transform="translate(12.0, 93.6)" id="view">
18
+ <g>
19
+ <g transform="translate(0.0, 4.752)" id="values">
20
+ <text font-size="16.91712" x="96.12" text-anchor="end" y="211.464" fill="white">-77%</text>
21
+ <text font-size="16.91712" x="96.12" text-anchor="end" y="158.598" fill="white">2%</text>
22
+ <text font-size="16.91712" x="96.12" text-anchor="end" y="105.732" fill="white">81%</text>
23
+ <text font-size="16.91712" x="96.12" text-anchor="end" y="52.866" fill="white">161%</text>
24
+ <text font-size="16.91712" x="96.12" text-anchor="end" y="0.0" fill="white">240%</text>
25
+ </g>
26
+ <g transform="translate(106.8, 0.0)" id="grid">
27
+ <line x2="427.2" y2="0.0" x1="0" style="stroke: white; stroke-width: 2;" y1="0.0"/>
28
+ <line x2="427.2" y2="52.866" x1="0" style="stroke: white; stroke-width: 2;" y1="52.866"/>
29
+ <line x2="427.2" y2="105.732" x1="0" style="stroke: white; stroke-width: 2;" y1="105.732"/>
30
+ <line x2="427.2" y2="158.598" x1="0" style="stroke: white; stroke-width: 2;" y1="158.598"/>
31
+ <line x2="427.2" y2="211.464" x1="0" style="stroke: white; stroke-width: 2;" y1="211.464"/>
32
+ </g>
33
+ <g transform="translate(106.8, 218.592)" id="labels">
34
+ <text font-size="17.1072" x="0.0" text-anchor="middle" y="19.008" fill="white">Jan</text>
35
+ <text font-size="17.1072" x="85.44" text-anchor="middle" y="19.008" fill="white">Feb</text>
36
+ <text font-size="17.1072" x="170.88" text-anchor="middle" y="19.008" fill="white">Mar</text>
37
+ <text font-size="17.1072" x="256.32" text-anchor="middle" y="19.008" fill="white">Apr</text>
38
+ <text font-size="17.1072" x="341.76" text-anchor="middle" y="19.008" fill="white">May</text>
39
+ <text font-size="17.1072" x="427.2" text-anchor="middle" y="19.008" fill="white">Jun</text>
40
+ </g>
41
+ <g transform="translate(106.8, 0.0)" id="graphs">
42
+ <g class="graph_layer" id="component_graphs_graph_0">
43
+ <g transform="translate(-1.05732, -1.05732)">
44
+ <rect width="66.19464" x="3.56" y="53.2990548204159" height="160.279585179584" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
45
+ <rect width="66.19464" x="4.61732" y="57.5283348204159" height="157.107625179584" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
46
+ </g>
47
+ <rect width="64.08" x="3.56" y="53.2990548204159" height="158.164945179584" fill="#FDD84E" style="opacity: 1.0; stroke: none;"/>
48
+ <g transform="translate(-1.05732, -1.05732)">
49
+ <rect width="66.19464" x="74.76" y="-46.6366729678639" height="260.215312967864" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
50
+ <rect width="66.19464" x="75.81732" y="-42.4073929678639" height="257.043352967864" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
51
+ </g>
52
+ <rect width="64.08" x="74.76" y="-46.6366729678639" height="258.100672967864" fill="#FDD84E" style="opacity: 1.0; stroke: none;"/>
53
+ <g transform="translate(-1.05732, -1.05732)">
54
+ <rect width="66.19464" x="145.96" y="67.290056710775" height="146.288583289225" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
55
+ <rect width="66.19464" x="147.01732" y="71.519336710775" height="143.116623289225" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
56
+ </g>
57
+ <rect width="64.08" x="145.96" y="67.290056710775" height="144.173943289225" fill="#FDD84E" style="opacity: 1.0; stroke: none;"/>
58
+ <g transform="translate(-1.05732, -1.05732)">
59
+ <rect width="66.19464" x="217.16" y="60.6276748582231" height="152.950965141777" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
60
+ <rect width="66.19464" x="218.21732" y="64.8569548582231" height="149.779005141777" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
61
+ </g>
62
+ <rect width="64.08" x="217.16" y="60.6276748582231" height="150.836325141777" fill="#FDD84E" style="opacity: 1.0; stroke: none;"/>
63
+ <g transform="translate(-1.05732, -1.05732)">
64
+ <rect width="66.19464" x="288.36" y="-26.649527410208" height="240.228167410208" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
65
+ <rect width="66.19464" x="289.41732" y="-22.4202474102079" height="237.056207410208" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
66
+ </g>
67
+ <rect width="64.08" x="288.36" y="-26.649527410208" height="238.113527410208" fill="#FDD84E" style="opacity: 1.0; stroke: none;"/>
68
+ <g transform="translate(-1.05732, -1.05732)">
69
+ <rect width="66.19464" x="359.56" y="59.9614366729679" height="153.617203327032" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
70
+ <rect width="66.19464" x="360.61732" y="64.1907166729679" height="150.445243327032" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
71
+ </g>
72
+ <rect width="64.08" x="359.56" y="59.9614366729679" height="151.502563327032" fill="#FDD84E" style="opacity: 1.0; stroke: none;"/>
73
+ <g transform="translate(-1.05732, -1.05732)">
74
+ <rect width="66.19464" x="3.56" y="73.2862003780718" height="140.292439621928" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
75
+ <rect width="66.19464" x="4.61732" y="77.5154803780718" height="137.120479621928" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
76
+ </g>
77
+ <rect width="64.08" x="3.56" y="73.2862003780718" height="138.177799621928" fill="#72AE6E" style="opacity: 1.0; stroke: none;"/>
78
+ <g transform="translate(-1.05732, -1.05732)">
79
+ <rect width="66.19464" x="74.76" y="-6.66238185255199" height="220.241021852552" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
80
+ <rect width="66.19464" x="75.81732" y="-2.43310185255199" height="217.069061852552" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
81
+ </g>
82
+ <rect width="64.08" x="74.76" y="-6.66238185255199" height="218.126381852552" fill="#72AE6E" style="opacity: 1.0; stroke: none;"/>
83
+ <g transform="translate(-1.05732, -1.05732)">
84
+ <rect width="66.19464" x="145.96" y="99.9357277882798" height="113.64291221172" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
85
+ <rect width="66.19464" x="147.01732" y="104.16500778828" height="110.47095221172" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
86
+ </g>
87
+ <rect width="64.08" x="145.96" y="99.9357277882798" height="111.52827221172" fill="#72AE6E" style="opacity: 1.0; stroke: none;"/>
88
+ <g transform="translate(-1.05732, -1.05732)">
89
+ <rect width="66.19464" x="217.16" y="79.9485822306238" height="133.630057769376" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
90
+ <rect width="66.19464" x="218.21732" y="84.1778622306238" height="130.458097769376" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
91
+ </g>
92
+ <rect width="64.08" x="217.16" y="79.9485822306238" height="131.515417769376" fill="#72AE6E" style="opacity: 1.0; stroke: none;"/>
93
+ <g transform="translate(-1.05732, -1.05732)">
94
+ <rect width="66.19464" x="288.36" y="39.9742911153119" height="173.604348884688" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
95
+ <rect width="66.19464" x="289.41732" y="44.2035711153119" height="170.432388884688" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
96
+ </g>
97
+ <rect width="64.08" x="288.36" y="39.9742911153119" height="171.489708884688" fill="#72AE6E" style="opacity: 1.0; stroke: none;"/>
98
+ <g transform="translate(-1.05732, -1.05732)">
99
+ <rect width="66.19464" x="359.56" y="139.910018903592" height="73.6686210964083" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
100
+ <rect width="66.19464" x="360.61732" y="144.139298903592" height="70.4966610964083" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
101
+ </g>
102
+ <rect width="64.08" x="359.56" y="139.910018903592" height="71.5539810964083" fill="#72AE6E" style="opacity: 1.0; stroke: none;"/>
103
+ <g transform="translate(-1.05732, -1.05732)">
104
+ <rect width="66.19464" x="3.56" y="153.234782608696" height="60.3438573913044" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
105
+ <rect width="66.19464" x="4.61732" y="157.464062608696" height="57.1718973913044" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
106
+ </g>
107
+ <rect width="64.08" x="3.56" y="153.234782608696" height="58.2292173913044" fill="#D1695E" style="opacity: 1.0; stroke: none;"/>
108
+ <g transform="translate(-1.05732, -1.05732)">
109
+ <rect width="66.19464" x="74.76" y="153.234782608696" height="60.3438573913044" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
110
+ <rect width="66.19464" x="75.81732" y="157.464062608696" height="57.1718973913044" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
111
+ </g>
112
+ <rect width="64.08" x="74.76" y="153.234782608696" height="58.2292173913044" fill="#D1695E" style="opacity: 1.0; stroke: none;"/>
113
+ <g transform="translate(-1.05732, -1.05732)">
114
+ <rect width="66.19464" x="145.96" y="99.9357277882798" height="113.64291221172" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
115
+ <rect width="66.19464" x="147.01732" y="104.16500778828" height="110.47095221172" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
116
+ </g>
117
+ <rect width="64.08" x="145.96" y="99.9357277882798" height="111.52827221172" fill="#D1695E" style="opacity: 1.0; stroke: none;"/>
118
+ <g transform="translate(-1.05732, -1.05732)">
119
+ <rect width="66.19464" x="217.16" y="146.572400756144" height="67.0062392438563" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
120
+ <rect width="66.19464" x="218.21732" y="150.801680756144" height="63.8342792438564" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
121
+ </g>
122
+ <rect width="64.08" x="217.16" y="146.572400756144" height="64.8915992438563" fill="#D1695E" style="opacity: 1.0; stroke: none;"/>
123
+ <g transform="translate(-1.05732, -1.05732)">
124
+ <rect width="66.19464" x="288.36" y="133.24763705104" height="80.3310029489603" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
125
+ <rect width="66.19464" x="289.41732" y="137.47691705104" height="77.1590429489603" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
126
+ </g>
127
+ <rect width="64.08" x="288.36" y="133.24763705104" height="78.2163629489603" fill="#D1695E" style="opacity: 1.0; stroke: none;"/>
128
+ <g transform="translate(-1.05732, -1.05732)">
129
+ <rect width="66.19464" x="359.56" y="153.234782608696" height="60.3438573913044" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
130
+ <rect width="66.19464" x="360.61732" y="157.464062608696" height="57.1718973913044" style="fill: black; fill-opacity: 0.15; stroke: none;"/>
131
+ </g>
132
+ <rect width="64.08" x="359.56" y="153.234782608696" height="58.2292173913044" fill="#D1695E" style="opacity: 1.0; stroke: none;"/>
133
+ </g>
134
+ </g>
135
+ </g>
136
+ </g>
137
+ <g transform="translate(30.0, 46.8)" id="legend">
138
+ <rect width="10.8" x="167.4" y="0" height="10.8" fill="#FDD84E"/>
139
+ <text font-size="1.3824" x="169.128" y="1.0368" fill="white" style="color: white">Jack</text>
140
+ <rect width="10.8" x="243.0" y="0" height="10.8" fill="#72AE6E"/>
141
+ <text font-size="1.3824" x="244.728" y="1.0368" fill="white" style="color: white">Jill</text>
142
+ <rect width="10.8" x="318.6" y="0" height="10.8" fill="#D1695E"/>
143
+ <text font-size="1.3824" x="320.328" y="1.0368" fill="white" style="color: white">Hill</text>
144
+ </g>
145
+ </g>
146
+ </svg>
Binary file
@@ -0,0 +1,294 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1></h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/scruffy"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/scruffy" class="numbers">0.2.3</a>
37
+ </div>
38
+ <p><a href="index.html">Home</a>
39
+ <a href="doc">Documentation</a>
40
+ <a href="http://rubyforge.org/projects/scruffy/">RubyForge Project</a></p>
41
+
42
+
43
+ <h1>Don&#8217;t Worry.</h1>
44
+
45
+
46
+ <h1>Be Scruffy.</h1>
47
+
48
+
49
+ <blockquote>
50
+ <p>Beautiful Graphs for Ruby.</p>
51
+ </blockquote>
52
+
53
+
54
+ <h2>What is Scruffy?</h2>
55
+
56
+
57
+ <p>Scruffy is a Ruby library for generating attractive and powerful graphs, useful for web applications, print media and many others.</p>
58
+
59
+
60
+ <p>Scruffy&#8217;s key features include:</p>
61
+
62
+
63
+ <ul>
64
+ <li><strong>Built on <span class="caps">SVG</span></strong><br/>
65
+ Scruffy uses <span class="caps">SVG</span> internally for rendering graphs. This allows Scruffy to render your graph identically at almost any size.</li>
66
+ </ul>
67
+
68
+
69
+ <ul>
70
+ <li><strong>Mix-n-Match Graphs</strong><br/>
71
+ A Scruffy graph isn&#8217;t limited to a single graph type (line, bar, area, etc). You can specify a different type for every data set.</li>
72
+ </ul>
73
+
74
+
75
+ <ul>
76
+ <li><strong>Snapshot Rendering</strong><br/>
77
+ You can render a Scruffy graph as many times as you want, and change any settings between renders. Data, colors, even the graph size and image type can all be changed for the next render.</li>
78
+ </ul>
79
+
80
+
81
+ <ul>
82
+ <li><strong>Easily Extendable</strong><br/>
83
+ Scruffy is designed to be extremely extendible. Adding new graph types or themes can be done in as little as a few lines of code. If you need more control over your graphs, you can customize the layouts, data generation, almost anything.</li>
84
+ </ul>
85
+
86
+
87
+ <h2>Installing</h2>
88
+
89
+
90
+ <p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">scruffy</span></pre></p>
91
+
92
+
93
+ <h2>Demonstration of usage</h2>
94
+
95
+
96
+ <h3>Pie Chart
97
+ <pre class='syntax'>
98
+ <span class="ident">graph</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Graph</span><span class="punct">.</span><span class="ident">new</span>
99
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">title</span> <span class="punct">=</span> <span class="punct">&quot;</span><span class="string">Favourite Snacks</span><span class="punct">&quot;</span>
100
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">renderer</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Renderers</span><span class="punct">::</span><span class="constant">Pie</span><span class="punct">.</span><span class="ident">new</span>
101
+
102
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:pie</span><span class="punct">,</span> <span class="punct">'</span><span class="string"></span><span class="punct">',</span> <span class="punct">{</span>
103
+ <span class="punct">'</span><span class="string">Apple</span><span class="punct">'</span> <span class="punct">=&gt;</span> <span class="number">20</span><span class="punct">,</span>
104
+ <span class="punct">'</span><span class="string">Banana</span><span class="punct">'</span> <span class="punct">=&gt;</span> <span class="number">100</span><span class="punct">,</span>
105
+ <span class="punct">'</span><span class="string">Orange</span><span class="punct">'</span> <span class="punct">=&gt;</span> <span class="number">70</span><span class="punct">,</span>
106
+ <span class="punct">'</span><span class="string">Taco</span><span class="punct">'</span> <span class="punct">=&gt;</span> <span class="number">30</span>
107
+ <span class="punct">}</span>
108
+
109
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">pie_test.svg</span><span class="punct">&quot;</span>
110
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:width</span> <span class="punct">=&gt;</span> <span class="number">300</span><span class="punct">,</span> <span class="symbol">:height</span> <span class="punct">=&gt;</span> <span class="number">200</span><span class="punct">,</span>
111
+ <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">pie_test.png</span><span class="punct">&quot;,</span> <span class="symbol">:as</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">png</span><span class="punct">'</span>
112
+ </pre></h3>
113
+
114
+
115
+ <p><img src="images/graphs/pie_test.png" alt="" /></p>
116
+
117
+
118
+ <h3>Line Graph
119
+ <pre class='syntax'>
120
+ <span class="ident">graph</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Graph</span><span class="punct">.</span><span class="ident">new</span>
121
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">title</span> <span class="punct">=</span> <span class="punct">&quot;</span><span class="string">Sample Line Graph</span><span class="punct">&quot;</span>
122
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">renderer</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Renderers</span><span class="punct">::</span><span class="constant">Standard</span><span class="punct">.</span><span class="ident">new</span>
123
+
124
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:line</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Example</span><span class="punct">',</span> <span class="punct">[</span><span class="number">20</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="number">30</span><span class="punct">,</span> <span class="number">106</span><span class="punct">]</span>
125
+
126
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">line_test.svg</span><span class="punct">&quot;</span>
127
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:width</span> <span class="punct">=&gt;</span> <span class="number">300</span><span class="punct">,</span> <span class="symbol">:height</span> <span class="punct">=&gt;</span> <span class="number">200</span><span class="punct">,</span>
128
+ <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">line_test.png</span><span class="punct">&quot;,</span> <span class="symbol">:as</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">png</span><span class="punct">'</span>
129
+ </pre></h3>
130
+
131
+
132
+ <p><img src="images/graphs/line_test.png" alt="" /></p>
133
+
134
+
135
+ <h3>Bar Graph
136
+ <pre class='syntax'>
137
+ <span class="ident">graph</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Graph</span><span class="punct">.</span><span class="ident">new</span>
138
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">title</span> <span class="punct">=</span> <span class="punct">&quot;</span><span class="string">Sample Line Graph</span><span class="punct">&quot;</span>
139
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">renderer</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Renderers</span><span class="punct">::</span><span class="constant">Standard</span><span class="punct">.</span><span class="ident">new</span>
140
+
141
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:line</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Example</span><span class="punct">',</span> <span class="punct">[</span><span class="number">20</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="number">30</span><span class="punct">,</span> <span class="number">106</span><span class="punct">]</span>
142
+
143
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">line_test.svg</span><span class="punct">&quot;</span>
144
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:width</span> <span class="punct">=&gt;</span> <span class="number">300</span><span class="punct">,</span> <span class="symbol">:height</span> <span class="punct">=&gt;</span> <span class="number">200</span><span class="punct">,</span>
145
+ <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">line_test.png</span><span class="punct">&quot;,</span> <span class="symbol">:as</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">png</span><span class="punct">'</span>
146
+ </pre></h3>
147
+
148
+
149
+ <p><img src="images/graphs/bar_test.png" alt="" /></p>
150
+
151
+
152
+ <h3>Split Graph
153
+ <pre class='syntax'>
154
+ <span class="ident">graph</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Graph</span><span class="punct">.</span><span class="ident">new</span>
155
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">title</span> <span class="punct">=</span> <span class="punct">&quot;</span><span class="string">Long-term Comparisons</span><span class="punct">&quot;</span>
156
+
157
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">value_formatter</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Formatters</span><span class="punct">::</span><span class="constant">Currency</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span>
158
+ <span class="symbol">:special_negatives</span> <span class="punct">=&gt;</span> <span class="constant">true</span><span class="punct">,</span> <span class="symbol">:negative_color</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">#ff7777</span><span class="punct">')</span>
159
+
160
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">renderer</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Renderers</span><span class="punct">::</span><span class="constant">Split</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span>
161
+ <span class="symbol">:split_label</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">Northeastern (Top) / Central (Bottom)</span><span class="punct">')</span>
162
+
163
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:area</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jeff</span><span class="punct">',</span>
164
+ <span class="punct">[</span><span class="number">20</span><span class="punct">,</span> <span class="punct">-</span><span class="number">5</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="number">30</span><span class="punct">,</span> <span class="number">106</span><span class="punct">,</span> <span class="number">203</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">50</span><span class="punct">,</span> <span class="number">203</span><span class="punct">,</span> <span class="number">289</span><span class="punct">,</span> <span class="number">20</span><span class="punct">],</span>
165
+ <span class="symbol">:category</span> <span class="punct">=&gt;</span> <span class="symbol">:top</span>
166
+
167
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:area</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jerry</span><span class="punct">',</span>
168
+ <span class="punct">[-</span><span class="number">10</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="number">20</span><span class="punct">,</span> <span class="number">102</span><span class="punct">,</span> <span class="number">201</span><span class="punct">,</span> <span class="number">26</span><span class="punct">,</span> <span class="number">30</span><span class="punct">,</span> <span class="number">106</span><span class="punct">,</span> <span class="number">203</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">50</span><span class="punct">,</span> <span class="number">39</span><span class="punct">],</span>
169
+ <span class="symbol">:category</span> <span class="punct">=&gt;</span> <span class="symbol">:top</span>
170
+
171
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:bar</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jack</span><span class="punct">',</span>
172
+ <span class="punct">[</span><span class="number">30</span><span class="punct">,</span> <span class="number">0</span><span class="punct">,</span> <span class="number">49</span><span class="punct">,</span> <span class="number">29</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">203</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="number">20</span><span class="punct">,</span> <span class="number">102</span><span class="punct">,</span> <span class="number">201</span><span class="punct">,</span> <span class="number">26</span><span class="punct">,</span> <span class="number">130</span><span class="punct">],</span>
173
+ <span class="symbol">:category</span> <span class="punct">=&gt;</span> <span class="symbol">:bottom</span>
174
+
175
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:line</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Brasten</span><span class="punct">',</span>
176
+ <span class="punct">[</span><span class="number">42</span><span class="punct">,</span> <span class="number">10</span><span class="punct">,</span> <span class="number">75</span><span class="punct">,</span> <span class="number">150</span><span class="punct">,</span> <span class="number">130</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="punct">-</span><span class="number">10</span><span class="punct">,</span> <span class="punct">-</span><span class="number">20</span><span class="punct">,</span> <span class="number">50</span><span class="punct">,</span> <span class="number">92</span><span class="punct">,</span> <span class="punct">-</span><span class="number">21</span><span class="punct">,</span> <span class="number">19</span><span class="punct">],</span>
177
+ <span class="symbol">:categories</span> <span class="punct">=&gt;</span> <span class="punct">[</span><span class="symbol">:top</span><span class="punct">,</span> <span class="symbol">:bottom</span><span class="punct">]</span>
178
+
179
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:line</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jim</span><span class="punct">',</span>
180
+ <span class="punct">[-</span><span class="number">10</span><span class="punct">,</span> <span class="punct">-</span><span class="number">20</span><span class="punct">,</span> <span class="number">50</span><span class="punct">,</span> <span class="number">92</span><span class="punct">,</span> <span class="punct">-</span><span class="number">21</span><span class="punct">,</span> <span class="number">56</span><span class="punct">,</span> <span class="number">92</span><span class="punct">,</span> <span class="number">84</span><span class="punct">,</span> <span class="number">82</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">39</span><span class="punct">,</span> <span class="number">120</span><span class="punct">],</span>
181
+ <span class="symbol">:categories</span> <span class="punct">=&gt;</span> <span class="punct">[</span><span class="symbol">:top</span><span class="punct">,</span> <span class="symbol">:bottom</span><span class="punct">]</span>
182
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">point_markers</span> <span class="punct">=</span> <span class="punct">['</span><span class="string">Jan</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Feb</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Mar</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Apr</span><span class="punct">',</span> <span class="punct">'</span><span class="string">May</span><span class="punct">',</span>
183
+ <span class="punct">'</span><span class="string">Jun</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Jul</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Aug</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Sep</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Oct</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Nov</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Dec</span><span class="punct">']</span>
184
+
185
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">split_test.svg</span><span class="punct">&quot;</span>
186
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:width</span> <span class="punct">=&gt;</span> <span class="number">500</span><span class="punct">,</span>
187
+ <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">split_test.png</span><span class="punct">&quot;,</span> <span class="symbol">:as</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">png</span><span class="punct">'</span>
188
+ </pre></h3>
189
+
190
+
191
+ <p><img src="images/graphs/split_test.png" alt="" /></p>
192
+
193
+
194
+ <h3>Stacking Graph Types
195
+ <pre class='syntax'>
196
+ <span class="ident">graph</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Graph</span><span class="punct">.</span><span class="ident">new</span>
197
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">title</span> <span class="punct">=</span> <span class="punct">&quot;</span><span class="string">Comparative Agent Performance</span><span class="punct">&quot;</span>
198
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">value_formatter</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Formatters</span><span class="punct">::</span><span class="constant">Percentage</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="symbol">:precision</span> <span class="punct">=&gt;</span> <span class="number">0</span><span class="punct">)</span>
199
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:stacked</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">stacked</span><span class="punct">|</span>
200
+ <span class="ident">stacked</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:bar</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jack</span><span class="punct">',</span> <span class="punct">[</span><span class="number">30</span><span class="punct">,</span> <span class="number">60</span><span class="punct">,</span> <span class="number">49</span><span class="punct">,</span> <span class="number">29</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">120</span><span class="punct">]</span>
201
+ <span class="ident">stacked</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:bar</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jill</span><span class="punct">',</span> <span class="punct">[</span><span class="number">120</span><span class="punct">,</span> <span class="number">240</span><span class="punct">,</span> <span class="number">0</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">140</span><span class="punct">,</span> <span class="number">20</span><span class="punct">]</span>
202
+ <span class="ident">stacked</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:bar</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Hill</span><span class="punct">',</span> <span class="punct">[</span><span class="number">10</span><span class="punct">,</span> <span class="number">10</span><span class="punct">,</span> <span class="number">90</span><span class="punct">,</span> <span class="number">20</span><span class="punct">,</span> <span class="number">40</span><span class="punct">,</span> <span class="number">10</span><span class="punct">]</span>
203
+ <span class="keyword">end</span>
204
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">point_markers</span> <span class="punct">=</span> <span class="punct">['</span><span class="string">Jan</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Feb</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Mar</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Apr</span><span class="punct">',</span> <span class="punct">'</span><span class="string">May</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Jun</span><span class="punct">']</span>
205
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">stacking_test.svg</span><span class="punct">&quot;</span>
206
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:width</span> <span class="punct">=&gt;</span> <span class="number">500</span><span class="punct">,</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">stacking_test.png</span><span class="punct">&quot;,</span> <span class="symbol">:as</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">png</span><span class="punct">'</span>
207
+ </pre></h3>
208
+
209
+
210
+ <p><img src="images/graphs/stacking_test.png" alt="" /></p>
211
+
212
+
213
+ <h3>Multi-viewport Multi-layered
214
+ <pre class='syntax'>
215
+ <span class="ident">graph</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Graph</span><span class="punct">.</span><span class="ident">new</span>
216
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">title</span> <span class="punct">=</span> <span class="punct">&quot;</span><span class="string">Some Kind of Information</span><span class="punct">&quot;</span>
217
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">renderer</span> <span class="punct">=</span> <span class="constant">Scruffy</span><span class="punct">::</span><span class="constant">Renderers</span><span class="punct">::</span><span class="constant">Cubed</span><span class="punct">.</span><span class="ident">new</span>
218
+
219
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:area</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jeff</span><span class="punct">',</span> <span class="punct">[</span><span class="number">20</span><span class="punct">,</span> <span class="punct">-</span><span class="number">5</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="number">30</span><span class="punct">,</span> <span class="number">106</span><span class="punct">],</span>
220
+ <span class="symbol">:categories</span> <span class="punct">=&gt;</span> <span class="punct">[</span><span class="symbol">:top_left</span><span class="punct">,</span> <span class="symbol">:bottom_right</span><span class="punct">]</span>
221
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:area</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jerry</span><span class="punct">',</span> <span class="punct">[-</span><span class="number">10</span><span class="punct">,</span> <span class="number">70</span><span class="punct">,</span> <span class="number">20</span><span class="punct">,</span> <span class="number">102</span><span class="punct">,</span> <span class="number">201</span><span class="punct">,</span> <span class="number">26</span><span class="punct">],</span>
222
+ <span class="symbol">:categories</span> <span class="punct">=&gt;</span> <span class="punct">[</span><span class="symbol">:bottom_left</span><span class="punct">,</span> <span class="symbol">:buttom_right</span><span class="punct">]</span>
223
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:bar</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jack</span><span class="punct">',</span> <span class="punct">[</span><span class="number">30</span><span class="punct">,</span> <span class="number">0</span><span class="punct">,</span> <span class="number">49</span><span class="punct">,</span> <span class="number">29</span><span class="punct">,</span> <span class="number">100</span><span class="punct">,</span> <span class="number">203</span><span class="punct">],</span>
224
+ <span class="symbol">:categories</span> <span class="punct">=&gt;</span> <span class="punct">[</span><span class="symbol">:bottom_left</span><span class="punct">,</span> <span class="symbol">:top_right</span><span class="punct">]</span>
225
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:line</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Brasten</span><span class="punct">',</span> <span class="punct">[</span><span class="number">42</span><span class="punct">,</span> <span class="number">10</span><span class="punct">,</span> <span class="number">75</span><span class="punct">,</span> <span class="number">150</span><span class="punct">,</span> <span class="number">130</span><span class="punct">,</span> <span class="number">70</span><span class="punct">],</span>
226
+ <span class="symbol">:categories</span> <span class="punct">=&gt;</span> <span class="punct">[</span><span class="symbol">:top_right</span><span class="punct">,</span> <span class="symbol">:bottom_left</span><span class="punct">]</span>
227
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">add</span> <span class="symbol">:line</span><span class="punct">,</span> <span class="punct">'</span><span class="string">Jim</span><span class="punct">',</span> <span class="punct">[-</span><span class="number">10</span><span class="punct">,</span> <span class="punct">-</span><span class="number">20</span><span class="punct">,</span> <span class="number">50</span><span class="punct">,</span> <span class="number">92</span><span class="punct">,</span> <span class="punct">-</span><span class="number">21</span><span class="punct">,</span> <span class="number">56</span><span class="punct">],</span>
228
+ <span class="symbol">:categories</span> <span class="punct">=&gt;</span> <span class="punct">[</span><span class="symbol">:top_left</span><span class="punct">,</span> <span class="symbol">:bottom_right</span><span class="punct">]</span>
229
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">point_markers</span> <span class="punct">=</span> <span class="punct">['</span><span class="string">Jan</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Feb</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Mar</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Apr</span><span class="punct">',</span> <span class="punct">'</span><span class="string">May</span><span class="punct">',</span> <span class="punct">'</span><span class="string">Jun</span><span class="punct">']</span>
230
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">multi_test.svg</span><span class="punct">&quot;</span>
231
+ <span class="ident">graph</span><span class="punct">.</span><span class="ident">render</span> <span class="symbol">:width</span> <span class="punct">=&gt;</span> <span class="number">500</span><span class="punct">,</span> <span class="symbol">:to</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">multi_test.png</span><span class="punct">&quot;,</span> <span class="symbol">:as</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">png</span><span class="punct">'</span>
232
+ </pre></h3>
233
+
234
+
235
+ <p><img src="images/graphs/multi_test.png" alt="" /></p>
236
+
237
+
238
+ <h2>Source Code</h2>
239
+
240
+
241
+ <p>The trunk repository is <code>svn://rubyforge.org/var/svn/scruffy/trunk</code> for anonymous access.</p>
242
+
243
+
244
+ <p>Rubyforge Project is <a href="http://rubyforge.org/projects/scruffy/" class="major">here</a></p>
245
+
246
+
247
+ <h2>News</h2>
248
+
249
+
250
+ <ul>
251
+ <li><strong>July 8th, 2008, Scruffy 0.2.3</strong> &#8211; Pie Charts added.</li>
252
+ </ul>
253
+
254
+
255
+ <ul>
256
+ <li><strong>August 18th, 2006, Scruffy 0.2.2</strong> &#8211; Significant changes from 0.1.0! New layouts, better rendering, etc.
257
+ Check out more examples at <a href="http://www.ibrasten.com/articles/tag/scruffy">iBrasten.com</a></li>
258
+ </ul>
259
+
260
+
261
+ <ul>
262
+ <li><strong>August 11th, 2006, Scruffy 0.1.0</strong> &#8211; the first release intended for public use &#8211; has been posted!</li>
263
+ </ul>
264
+
265
+
266
+ <h2>License</h2>
267
+
268
+
269
+ <p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
270
+
271
+
272
+ <h2>Contact</h2>
273
+
274
+
275
+ <p>Scruffy was created by <a href="http://www.ibrasten.com">Brasten Sager</a>.</p>
276
+
277
+
278
+ <p>Collaborative work by <a href="http://www.ajostman.com/blog">A.J. Ostman</a>.</p>
279
+
280
+
281
+ <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
282
+ <script type="text/javascript">
283
+ _uacct = &#8220;UA-1742674-1&#8221;;
284
+ urchinTracker();
285
+ </script>
286
+ <p class="coda">
287
+ 9th July 2008<br>
288
+ </p>
289
+ </div>
290
+
291
+ <!-- insert site tracking codes here, like Google Urchin -->
292
+
293
+ </body>
294
+ </html>