teejayvanslyke-gruff 0.3.6
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/History.txt +117 -0
- data/MIT-LICENSE +21 -0
- data/Manifest.txt +81 -0
- data/README.txt +40 -0
- data/Rakefile +55 -0
- data/assets/bubble.png +0 -0
- data/assets/city_scene/background/0000.png +0 -0
- data/assets/city_scene/background/0600.png +0 -0
- data/assets/city_scene/background/2000.png +0 -0
- data/assets/city_scene/clouds/cloudy.png +0 -0
- data/assets/city_scene/clouds/partly_cloudy.png +0 -0
- data/assets/city_scene/clouds/stormy.png +0 -0
- data/assets/city_scene/grass/default.png +0 -0
- data/assets/city_scene/haze/true.png +0 -0
- data/assets/city_scene/number_sample/1.png +0 -0
- data/assets/city_scene/number_sample/2.png +0 -0
- data/assets/city_scene/number_sample/default.png +0 -0
- data/assets/city_scene/sky/0000.png +0 -0
- data/assets/city_scene/sky/0200.png +0 -0
- data/assets/city_scene/sky/0400.png +0 -0
- data/assets/city_scene/sky/0600.png +0 -0
- data/assets/city_scene/sky/0800.png +0 -0
- data/assets/city_scene/sky/1000.png +0 -0
- data/assets/city_scene/sky/1200.png +0 -0
- data/assets/city_scene/sky/1400.png +0 -0
- data/assets/city_scene/sky/1500.png +0 -0
- data/assets/city_scene/sky/1700.png +0 -0
- data/assets/city_scene/sky/2000.png +0 -0
- data/assets/pc306715.jpg +0 -0
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/init.rb +2 -0
- data/lib/gruff/accumulator_bar.rb +27 -0
- data/lib/gruff/area.rb +58 -0
- data/lib/gruff/bar.rb +87 -0
- data/lib/gruff/bar_conversion.rb +46 -0
- data/lib/gruff/base.rb +1123 -0
- data/lib/gruff/bullet.rb +109 -0
- data/lib/gruff/deprecated.rb +39 -0
- data/lib/gruff/dot.rb +113 -0
- data/lib/gruff/line.rb +135 -0
- data/lib/gruff/mini/bar.rb +37 -0
- data/lib/gruff/mini/legend.rb +82 -0
- data/lib/gruff/mini/pie.rb +36 -0
- data/lib/gruff/mini/side_bar.rb +35 -0
- data/lib/gruff/net.rb +140 -0
- data/lib/gruff/photo_bar.rb +100 -0
- data/lib/gruff/pie.rb +126 -0
- data/lib/gruff/scene.rb +209 -0
- data/lib/gruff/side_bar.rb +118 -0
- data/lib/gruff/side_stacked_bar.rb +77 -0
- data/lib/gruff/spider.rb +130 -0
- data/lib/gruff/stacked_area.rb +67 -0
- data/lib/gruff/stacked_bar.rb +57 -0
- data/lib/gruff/stacked_mixin.rb +23 -0
- data/lib/gruff.rb +28 -0
- data/rails_generators/gruff/gruff_generator.rb +63 -0
- data/rails_generators/gruff/templates/controller.rb +32 -0
- data/rails_generators/gruff/templates/functional_test.rb +24 -0
- data/test/gruff_test_case.rb +123 -0
- data/test/test_accumulator_bar.rb +50 -0
- data/test/test_area.rb +134 -0
- data/test/test_bar.rb +321 -0
- data/test/test_base.rb +8 -0
- data/test/test_bullet.rb +26 -0
- data/test/test_dot.rb +273 -0
- data/test/test_legend.rb +68 -0
- data/test/test_line.rb +556 -0
- data/test/test_mini_bar.rb +33 -0
- data/test/test_mini_pie.rb +20 -0
- data/test/test_mini_side_bar.rb +37 -0
- data/test/test_net.rb +230 -0
- data/test/test_photo.rb +41 -0
- data/test/test_pie.rb +154 -0
- data/test/test_scene.rb +100 -0
- data/test/test_side_bar.rb +12 -0
- data/test/test_sidestacked_bar.rb +89 -0
- data/test/test_sidestacked_bar_percentile.rb +29 -0
- data/test/test_spider.rb +216 -0
- data/test/test_stacked_area.rb +52 -0
- data/test/test_stacked_bar.rb +52 -0
- metadata +167 -0
data/test/test_area.rb
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
4
|
+
|
5
|
+
class TestGruffArea < GruffTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@datasets = [
|
9
|
+
[:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]],
|
10
|
+
[:Charles, [80, 54, 67, 54, 68, 70, 90, 95]],
|
11
|
+
[:Julie, [22, 29, 35, 38, 36, 40, 46, 57]],
|
12
|
+
[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
|
13
|
+
[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
|
14
|
+
["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
|
15
|
+
]
|
16
|
+
@sample_labels = {
|
17
|
+
0 => '5/6',
|
18
|
+
1 => '5/15',
|
19
|
+
2 => '5/24',
|
20
|
+
3 => '5/30',
|
21
|
+
4 => '6/4',
|
22
|
+
5 => '6/12',
|
23
|
+
6 => '6/21',
|
24
|
+
7 => '6/28',
|
25
|
+
}
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_area_graph
|
30
|
+
g = Gruff::Area.new
|
31
|
+
g.title = "Visual Multi-Area Graph Test"
|
32
|
+
g.labels = {
|
33
|
+
0 => '5/6',
|
34
|
+
2 => '5/15',
|
35
|
+
4 => '5/24',
|
36
|
+
6 => '5/30',
|
37
|
+
}
|
38
|
+
@datasets.each do |data|
|
39
|
+
g.data(data[0], data[1])
|
40
|
+
end
|
41
|
+
|
42
|
+
# Default theme
|
43
|
+
g.write("test/output/area_keynote.png")
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_resize
|
47
|
+
g = Gruff::Area.new(400)
|
48
|
+
g.title = "Small Size Multi-Area Graph Test"
|
49
|
+
g.labels = {
|
50
|
+
0 => '5/6',
|
51
|
+
2 => '5/15',
|
52
|
+
4 => '5/24',
|
53
|
+
6 => '5/30',
|
54
|
+
}
|
55
|
+
@datasets.each do |data|
|
56
|
+
g.data(data[0], data[1])
|
57
|
+
end
|
58
|
+
|
59
|
+
# Default theme
|
60
|
+
g.write("test/output/area_keynote_small.png")
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_many_datapoints
|
64
|
+
g = Gruff::Area.new
|
65
|
+
g.title = "Many Multi-Area Graph Test"
|
66
|
+
g.labels = {
|
67
|
+
0 => 'June',
|
68
|
+
10 => 'July',
|
69
|
+
30 => 'August',
|
70
|
+
50 => 'September',
|
71
|
+
}
|
72
|
+
g.data('many points', (0..50).collect {|i| rand(100) })
|
73
|
+
|
74
|
+
# Default theme
|
75
|
+
g.write("test/output/area_many.png")
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_many_areas_graph_small
|
79
|
+
g = Gruff::Area.new(400)
|
80
|
+
g.title = "Many Values Area Test 400px"
|
81
|
+
g.labels = {
|
82
|
+
0 => '5/6',
|
83
|
+
10 => '5/15',
|
84
|
+
20 => '5/24',
|
85
|
+
30 => '5/30',
|
86
|
+
40 => '6/4',
|
87
|
+
50 => '6/16'
|
88
|
+
}
|
89
|
+
%w{jimmy jane philip arthur julie bert}.each do |student_name|
|
90
|
+
g.data(student_name, (0..50).collect { |i| rand 100 })
|
91
|
+
end
|
92
|
+
|
93
|
+
# Default theme
|
94
|
+
g.write("test/output/area_many_areas_small.png")
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_area_graph_tiny
|
98
|
+
g = Gruff::Area.new(300)
|
99
|
+
g.title = "Area Test 300px"
|
100
|
+
g.labels = {
|
101
|
+
0 => '5/6',
|
102
|
+
10 => '5/15',
|
103
|
+
20 => '5/24',
|
104
|
+
30 => '5/30',
|
105
|
+
40 => '6/4',
|
106
|
+
50 => '6/16'
|
107
|
+
}
|
108
|
+
%w{jimmy jane philip arthur julie bert}.each do |student_name|
|
109
|
+
g.data(student_name, (0..50).collect { |i| rand 100 })
|
110
|
+
end
|
111
|
+
|
112
|
+
# Default theme
|
113
|
+
g.write("test/output/area_tiny.png")
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_wide
|
117
|
+
g = setup_basic_graph('800x400')
|
118
|
+
g.title = "Area Wide"
|
119
|
+
g.write("test/output/area_wide.png")
|
120
|
+
end
|
121
|
+
|
122
|
+
protected
|
123
|
+
|
124
|
+
def setup_basic_graph(size=800)
|
125
|
+
g = Gruff::Area.new(size)
|
126
|
+
g.title = "My Graph Title"
|
127
|
+
g.labels = @sample_labels
|
128
|
+
@datasets.each do |data|
|
129
|
+
g.data(data[0], data[1])
|
130
|
+
end
|
131
|
+
return g
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
data/test/test_bar.rb
ADDED
@@ -0,0 +1,321 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
4
|
+
|
5
|
+
class TestGruffBar < GruffTestCase
|
6
|
+
|
7
|
+
# TODO Delete old output files once when starting tests
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@datasets = [
|
11
|
+
[:Jimmy, [25, 36, 86, 39]],
|
12
|
+
[:Charles, [80, 54, 67, 54]],
|
13
|
+
[:Julie, [22, 29, 35, 38]],
|
14
|
+
#[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
|
15
|
+
#[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
|
16
|
+
#["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_bar_graph
|
21
|
+
g = setup_basic_graph
|
22
|
+
g.title = "Bar Graph Test"
|
23
|
+
g.title_margin = 100
|
24
|
+
g.write("test/output/bar_keynote.png")
|
25
|
+
|
26
|
+
g = setup_basic_graph
|
27
|
+
g.title = "Visual Multi-Line Bar Graph Test"
|
28
|
+
g.theme_rails_keynote
|
29
|
+
g.write("test/output/bar_rails_keynote.png")
|
30
|
+
|
31
|
+
g = setup_basic_graph
|
32
|
+
g.title = "Visual Multi-Line Bar Graph Test"
|
33
|
+
g.theme_odeo
|
34
|
+
g.write("test/output/bar_odeo.png")
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_thousand_separators
|
38
|
+
g = Gruff::Bar.new(600)
|
39
|
+
g.title = "Formatted numbers"
|
40
|
+
g.marker_count = 8
|
41
|
+
g.data("data", [4025, 1024, 50257, 703672, 1580456])
|
42
|
+
g.write("test/output/bar_formatted_numbers.png")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_bar_graph_set_colors
|
46
|
+
g = Gruff::Bar.new
|
47
|
+
g.title = "Bar Graph With Manual Colors"
|
48
|
+
g.legend_margin = 50
|
49
|
+
g.labels = {
|
50
|
+
0 => '5/6',
|
51
|
+
1 => '5/15',
|
52
|
+
2 => '5/24',
|
53
|
+
3 => '5/30',
|
54
|
+
}
|
55
|
+
g.data(:Art, [0, 5, 8, 15], '#990000')
|
56
|
+
g.data(:Philosophy, [10, 3, 2, 8], '#009900')
|
57
|
+
g.data(:Science, [2, 15, 8, 11], '#990099')
|
58
|
+
|
59
|
+
g.minimum_value = 0
|
60
|
+
|
61
|
+
g.write("test/output/bar_manual_colors.png")
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_bar_graph_small
|
65
|
+
g = Gruff::Bar.new(400)
|
66
|
+
g.title = "Visual Multi-Line Bar Graph Test"
|
67
|
+
g.labels = {
|
68
|
+
0 => '5/6',
|
69
|
+
1 => '5/15',
|
70
|
+
2 => '5/24',
|
71
|
+
3 => '5/30',
|
72
|
+
}
|
73
|
+
@datasets.each do |data|
|
74
|
+
g.data(data[0], data[1])
|
75
|
+
end
|
76
|
+
|
77
|
+
g.write("test/output/bar_keynote_small.png")
|
78
|
+
end
|
79
|
+
|
80
|
+
# Somewhat worthless test. Should an error be thrown?
|
81
|
+
# def test_nil_font
|
82
|
+
# g = setup_basic_graph 400
|
83
|
+
# g.title = "Nil Font"
|
84
|
+
# g.font = nil
|
85
|
+
# g.write "test/output/bar_nil_font.png"
|
86
|
+
# end
|
87
|
+
|
88
|
+
|
89
|
+
def test_no_line_markers
|
90
|
+
g = setup_basic_graph(400)
|
91
|
+
g.title = "No Line Markers"
|
92
|
+
g.hide_line_markers = true
|
93
|
+
g.write("test/output/bar_no_line_markers.png")
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_no_legend
|
97
|
+
g = setup_basic_graph(400)
|
98
|
+
g.title = "No Legend"
|
99
|
+
g.hide_legend = true
|
100
|
+
g.write("test/output/bar_no_legend.png")
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_no_title
|
104
|
+
g = setup_basic_graph(400)
|
105
|
+
g.title = "No Title"
|
106
|
+
g.hide_title = true
|
107
|
+
g.write("test/output/bar_no_title.png")
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_no_title_or_legend
|
111
|
+
g = setup_basic_graph(400)
|
112
|
+
g.title = "No Title or Legend"
|
113
|
+
g.hide_legend = true
|
114
|
+
g.hide_title = true
|
115
|
+
g.write("test/output/bar_no_title_or_legend.png")
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_set_marker_count
|
119
|
+
g = setup_basic_graph(400)
|
120
|
+
g.title = "Set marker"
|
121
|
+
g.marker_count = 10
|
122
|
+
g.write("test/output/bar_set_marker.png")
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_set_legend_box_size
|
126
|
+
g = setup_basic_graph(400)
|
127
|
+
g.title = "Set Small Legend Box Size"
|
128
|
+
g.legend_box_size = 10.0
|
129
|
+
g.write("test/output/bar_set_legend_box_size_sm.png")
|
130
|
+
|
131
|
+
g = setup_basic_graph(400)
|
132
|
+
g.title = "Set Large Legend Box Size"
|
133
|
+
g.legend_box_size = 50.0
|
134
|
+
g.write("test/output/bar_set_legend_box_size_lg.png")
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_x_y_labels
|
138
|
+
g = setup_basic_graph(400)
|
139
|
+
g.title = "X Y Labels"
|
140
|
+
g.x_axis_label = 'Score (%)'
|
141
|
+
g.y_axis_label = "Students"
|
142
|
+
g.write("test/output/bar_x_y_labels.png")
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_wide_graph
|
146
|
+
g = setup_basic_graph('800x400')
|
147
|
+
g.title = "Wide Graph"
|
148
|
+
g.write("test/output/bar_wide_graph.png")
|
149
|
+
|
150
|
+
g = setup_basic_graph('400x200')
|
151
|
+
g.title = "Wide Graph Small"
|
152
|
+
g.write("test/output/bar_wide_graph_small.png")
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
def test_tall_graph
|
157
|
+
g = setup_basic_graph('400x600')
|
158
|
+
g.title = "Tall Graph"
|
159
|
+
g.write("test/output/bar_tall_graph.png")
|
160
|
+
|
161
|
+
g = setup_basic_graph('200x400')
|
162
|
+
g.title = "Tall Graph Small"
|
163
|
+
g.write("test/output/bar_tall_graph_small.png")
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
def test_one_value
|
168
|
+
g = Gruff::Bar.new
|
169
|
+
g.title = "One Value Graph Test"
|
170
|
+
g.labels = {
|
171
|
+
0 => '1',
|
172
|
+
1 => '2'
|
173
|
+
}
|
174
|
+
g.data('one', [1,1])
|
175
|
+
|
176
|
+
g.write("test/output/bar_one_value.png")
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
def test_negative
|
181
|
+
g = Gruff::Bar.new
|
182
|
+
g.title = "Pos/Neg Bar Graph Test"
|
183
|
+
g.labels = {
|
184
|
+
0 => '5/6',
|
185
|
+
1 => '5/15',
|
186
|
+
2 => '5/24',
|
187
|
+
3 => '5/30',
|
188
|
+
}
|
189
|
+
g.data(:apples, [-1, 0, 4, -4])
|
190
|
+
g.data(:peaches, [10, 8, 6, 3])
|
191
|
+
|
192
|
+
g.write("test/output/bar_pos_neg.png")
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
def test_nearly_zero
|
197
|
+
g = Gruff::Bar.new
|
198
|
+
g.title = "Nearly Zero Graph"
|
199
|
+
g.labels = {
|
200
|
+
0 => '5/6',
|
201
|
+
1 => '5/15',
|
202
|
+
2 => '5/24',
|
203
|
+
3 => '5/30',
|
204
|
+
}
|
205
|
+
g.data(:apples, [1, 2, 3, 4])
|
206
|
+
g.data(:peaches, [4, 3, 2, 1])
|
207
|
+
g.minimum_value = 0
|
208
|
+
g.maximum_value = 10
|
209
|
+
g.write("test/output/bar_nearly_zero_max_10.png")
|
210
|
+
end
|
211
|
+
|
212
|
+
def test_y_axis_increment
|
213
|
+
generate_with_y_axis_increment 2.0
|
214
|
+
generate_with_y_axis_increment 1
|
215
|
+
generate_with_y_axis_increment 5
|
216
|
+
generate_with_y_axis_increment 20
|
217
|
+
end
|
218
|
+
|
219
|
+
def generate_with_y_axis_increment(increment)
|
220
|
+
g = Gruff::Bar.new
|
221
|
+
g.title = "Y Axis Set to #{increment}"
|
222
|
+
g.labels = {
|
223
|
+
0 => '5/6',
|
224
|
+
1 => '5/15',
|
225
|
+
2 => '5/24',
|
226
|
+
3 => '5/30',
|
227
|
+
}
|
228
|
+
g.y_axis_increment = increment
|
229
|
+
g.data(:apples, [1, 0.2, 0.5, 0.7])
|
230
|
+
g.data(:peaches, [2.5, 2.3, 2, 6.1])
|
231
|
+
g.write("test/output/bar_y_increment_#{increment}.png")
|
232
|
+
end
|
233
|
+
|
234
|
+
|
235
|
+
def test_custom_theme
|
236
|
+
g = Gruff::Bar.new
|
237
|
+
g.title = "Custom Theme"
|
238
|
+
g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH'])
|
239
|
+
g.title_font_size = 60
|
240
|
+
g.legend_font_size = 32
|
241
|
+
g.marker_font_size = 32
|
242
|
+
g.theme = {
|
243
|
+
:colors => %w(#efd250 #666699 #e5573f #9595e2),
|
244
|
+
:marker_color => 'white',
|
245
|
+
:font_color => 'blue',
|
246
|
+
:background_image => "assets/pc306715.jpg"
|
247
|
+
}
|
248
|
+
g.labels = {
|
249
|
+
0 => '5/6',
|
250
|
+
1 => '5/15',
|
251
|
+
2 => '5/24',
|
252
|
+
3 => '5/30',
|
253
|
+
}
|
254
|
+
g.data(:vancouver, [1, 2, 3, 4])
|
255
|
+
g.data(:seattle, [2, 4, 6, 8])
|
256
|
+
g.data(:portland, [3, 1, 7, 3])
|
257
|
+
g.data(:victoria, [4, 3, 5, 7])
|
258
|
+
g.minimum_value = 0
|
259
|
+
g.write("test/output/bar_themed.png")
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_legend_should_not_overlap
|
263
|
+
g = Gruff::Bar.new(400)
|
264
|
+
g.theme_37signals()
|
265
|
+
g.title = 'My Graph'
|
266
|
+
g.data("Apples Oranges Watermelon Apples Oranges", [1, 2, 3, 4, 4, 3])
|
267
|
+
g.data('Oranges', [4, 8, 7, 9, 8, 9])
|
268
|
+
g.data('Watermelon', [2, 3, 1, 5, 6, 8])
|
269
|
+
g.data('Peaches', [9, 9, 10, 8, 7, 9])
|
270
|
+
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
|
271
|
+
g.write("test/output/bar_long_legend_text.png")
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_july_enhancements
|
275
|
+
g = Gruff::Bar.new(600)
|
276
|
+
g.hide_legend = true
|
277
|
+
g.title = "Full speed ahead"
|
278
|
+
g.labels = (0..10).inject({}) { |memo, i| memo.merge({ i => (i*10).to_s}) }
|
279
|
+
g.data(:apples, (0..9).map { rand(20)/10.0 })
|
280
|
+
g.y_axis_increment = 1.0
|
281
|
+
g.x_axis_label = 'Score (%)'
|
282
|
+
g.y_axis_label = 'Students'
|
283
|
+
write_test_file g, 'enhancements.png'
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_bar_spacing
|
287
|
+
g = setup_basic_graph
|
288
|
+
g.bar_spacing = 0
|
289
|
+
g.title = "100% spacing between bars"
|
290
|
+
g.write("test/output/bar_spacing_full.png")
|
291
|
+
|
292
|
+
g = setup_basic_graph
|
293
|
+
g.bar_spacing = 0.5
|
294
|
+
g.title = "50% spacing between bars"
|
295
|
+
g.write("test/output/bar_spacing_half.png")
|
296
|
+
|
297
|
+
g = setup_basic_graph
|
298
|
+
g.bar_spacing = 1
|
299
|
+
g.title = "0% spacing between bars"
|
300
|
+
g.write("test/output/bar_spacing_none.png")
|
301
|
+
end
|
302
|
+
|
303
|
+
protected
|
304
|
+
|
305
|
+
def setup_basic_graph(size=800)
|
306
|
+
g = Gruff::Bar.new(size)
|
307
|
+
g.title = "My Bar Graph"
|
308
|
+
g.labels = {
|
309
|
+
0 => '5/6',
|
310
|
+
1 => '5/15',
|
311
|
+
2 => '5/24',
|
312
|
+
3 => '5/30',
|
313
|
+
}
|
314
|
+
@datasets.each do |data|
|
315
|
+
g.data(data[0], data[1])
|
316
|
+
end
|
317
|
+
g
|
318
|
+
end
|
319
|
+
|
320
|
+
end
|
321
|
+
|
data/test/test_base.rb
ADDED
data/test/test_bullet.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# require File.dirname(__FILE__) + "/gruff_test_case"
|
2
|
+
#
|
3
|
+
# class TestGruffBullet < GruffTestCase
|
4
|
+
#
|
5
|
+
# def setup
|
6
|
+
# @data_args = [75, 100, {
|
7
|
+
# :target => 80,
|
8
|
+
# :low => 50,
|
9
|
+
# :high => 90
|
10
|
+
# }]
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# def test_bullet_graph
|
14
|
+
# g = Gruff::Bullet.new
|
15
|
+
# g.title = "Monthly Revenue"
|
16
|
+
# g.data *@data_args
|
17
|
+
# g.write("test/output/bullet_greyscale.png")
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# def test_no_options
|
21
|
+
# g = Gruff::Bullet.new
|
22
|
+
# g.data 127, 150
|
23
|
+
# g.write("test/output/bullet_no_options.png")
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# end
|