schapht-gruff 0.3.5

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.
Files changed (80) hide show
  1. data/History.txt +111 -0
  2. data/MIT-LICENSE +21 -0
  3. data/Manifest.txt +79 -0
  4. data/README.txt +40 -0
  5. data/Rakefile +55 -0
  6. data/assets/bubble.png +0 -0
  7. data/assets/city_scene/background/0000.png +0 -0
  8. data/assets/city_scene/background/0600.png +0 -0
  9. data/assets/city_scene/background/2000.png +0 -0
  10. data/assets/city_scene/clouds/cloudy.png +0 -0
  11. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  12. data/assets/city_scene/clouds/stormy.png +0 -0
  13. data/assets/city_scene/grass/default.png +0 -0
  14. data/assets/city_scene/haze/true.png +0 -0
  15. data/assets/city_scene/number_sample/1.png +0 -0
  16. data/assets/city_scene/number_sample/2.png +0 -0
  17. data/assets/city_scene/number_sample/default.png +0 -0
  18. data/assets/city_scene/sky/0000.png +0 -0
  19. data/assets/city_scene/sky/0200.png +0 -0
  20. data/assets/city_scene/sky/0400.png +0 -0
  21. data/assets/city_scene/sky/0600.png +0 -0
  22. data/assets/city_scene/sky/0800.png +0 -0
  23. data/assets/city_scene/sky/1000.png +0 -0
  24. data/assets/city_scene/sky/1200.png +0 -0
  25. data/assets/city_scene/sky/1400.png +0 -0
  26. data/assets/city_scene/sky/1500.png +0 -0
  27. data/assets/city_scene/sky/1700.png +0 -0
  28. data/assets/city_scene/sky/2000.png +0 -0
  29. data/assets/pc306715.jpg +0 -0
  30. data/assets/plastik/blue.png +0 -0
  31. data/assets/plastik/green.png +0 -0
  32. data/assets/plastik/red.png +0 -0
  33. data/init.rb +2 -0
  34. data/lib/gruff.rb +27 -0
  35. data/lib/gruff/accumulator_bar.rb +27 -0
  36. data/lib/gruff/area.rb +58 -0
  37. data/lib/gruff/bar.rb +84 -0
  38. data/lib/gruff/bar_conversion.rb +46 -0
  39. data/lib/gruff/base.rb +1112 -0
  40. data/lib/gruff/bullet.rb +109 -0
  41. data/lib/gruff/deprecated.rb +39 -0
  42. data/lib/gruff/line.rb +105 -0
  43. data/lib/gruff/mini/bar.rb +32 -0
  44. data/lib/gruff/mini/legend.rb +77 -0
  45. data/lib/gruff/mini/pie.rb +36 -0
  46. data/lib/gruff/mini/side_bar.rb +35 -0
  47. data/lib/gruff/net.rb +142 -0
  48. data/lib/gruff/photo_bar.rb +100 -0
  49. data/lib/gruff/pie.rb +124 -0
  50. data/lib/gruff/scene.rb +209 -0
  51. data/lib/gruff/side_bar.rb +115 -0
  52. data/lib/gruff/side_stacked_bar.rb +74 -0
  53. data/lib/gruff/spider.rb +130 -0
  54. data/lib/gruff/stacked_area.rb +67 -0
  55. data/lib/gruff/stacked_bar.rb +54 -0
  56. data/lib/gruff/stacked_mixin.rb +23 -0
  57. data/rails_generators/gruff/gruff_generator.rb +63 -0
  58. data/rails_generators/gruff/templates/controller.rb +32 -0
  59. data/rails_generators/gruff/templates/functional_test.rb +24 -0
  60. data/test/gruff_test_case.rb +123 -0
  61. data/test/test_accumulator_bar.rb +50 -0
  62. data/test/test_area.rb +134 -0
  63. data/test/test_bar.rb +283 -0
  64. data/test/test_base.rb +8 -0
  65. data/test/test_bullet.rb +26 -0
  66. data/test/test_legend.rb +68 -0
  67. data/test/test_line.rb +513 -0
  68. data/test/test_mini_bar.rb +32 -0
  69. data/test/test_mini_pie.rb +20 -0
  70. data/test/test_mini_side_bar.rb +37 -0
  71. data/test/test_net.rb +230 -0
  72. data/test/test_photo.rb +41 -0
  73. data/test/test_pie.rb +154 -0
  74. data/test/test_scene.rb +100 -0
  75. data/test/test_side_bar.rb +12 -0
  76. data/test/test_sidestacked_bar.rb +89 -0
  77. data/test/test_spider.rb +216 -0
  78. data/test/test_stacked_area.rb +52 -0
  79. data/test/test_stacked_bar.rb +52 -0
  80. metadata +160 -0
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * controller_class_name.split("::").length %>/test_helper'
2
+ require '<%= parent_folder_for_require %><%= controller_file_name %>_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end
6
+
7
+ class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
8
+
9
+ #fixtures :data
10
+
11
+ def setup
12
+ @controller = <%= controller_class_name %>Controller.new
13
+ @request = ActionController::TestRequest.new
14
+ @response = ActionController::TestResponse.new
15
+ end
16
+
17
+ # TODO Replace this with your actual tests
18
+ def test_show
19
+ get :show
20
+ assert_response :success
21
+ assert_equal 'image/png', @response.headers['Content-Type']
22
+ end
23
+
24
+ end
@@ -0,0 +1,123 @@
1
+ $:.unshift(File.dirname(__FILE__) + "/../lib/")
2
+ # require 'rubygems'
3
+
4
+ require 'test/unit'
5
+ require 'gruff'
6
+ require 'fileutils'
7
+ # require 'test_timer'
8
+
9
+ TEST_OUTPUT_DIR = File.dirname(__FILE__) + "/output"
10
+ FileUtils.mkdir_p(TEST_OUTPUT_DIR)
11
+
12
+ class GruffTestCase < Test::Unit::TestCase
13
+
14
+ def setup
15
+ @datasets = [
16
+ [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]],
17
+ [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]],
18
+ [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]],
19
+ [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
20
+ [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
21
+ ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
22
+ ]
23
+
24
+ @labels = {
25
+ 0 => '5/6',
26
+ 1 => '5/15',
27
+ 2 => '5/24',
28
+ 3 => '5/30',
29
+ 4 => '6/4',
30
+ 5 => '6/12',
31
+ 6 => '6/21',
32
+ 7 => '6/28',
33
+ }
34
+ end
35
+
36
+ def setup_single_dataset
37
+ @datasets = [
38
+ [:Jimmy, [25, 36, 86]]
39
+ ]
40
+
41
+ @labels = {
42
+ 0 => 'You',
43
+ 1 => 'Average',
44
+ 2 => 'Lifetime'
45
+ }
46
+ end
47
+
48
+ def setup_wide_dataset
49
+ @datasets = [
50
+ ["Auto", 25],
51
+ ["Food", 5],
52
+ ["Entertainment", 15]
53
+ ]
54
+
55
+ @labels = { 0 => 'This Month' }
56
+ end
57
+
58
+ def test_dummy
59
+ assert true
60
+ end
61
+
62
+ protected
63
+
64
+ # Generate graphs at several sizes.
65
+ #
66
+ # Also writes the graph to disk.
67
+ #
68
+ # graph_sized 'bar_basic' do |g|
69
+ # g.data('students', [1, 2, 3, 4])
70
+ # end
71
+ #
72
+ def graph_sized(filename, sizes=['', 400])
73
+ class_name = self.class.name.gsub(/^TestGruff/, '')
74
+ Array(sizes).each do |size|
75
+ g = instance_eval("Gruff::#{class_name}.new #{size}")
76
+ g.title = "#{class_name} Graph"
77
+ yield g
78
+ write_test_file g, "#{filename}_#{size}.png"
79
+ end
80
+ end
81
+
82
+ def write_test_file(graph, filename)
83
+ graph.write([TEST_OUTPUT_DIR, filename].join("/"))
84
+ end
85
+
86
+ ##
87
+ # Example:
88
+ #
89
+ # setup_basic_graph Gruff::Pie, 400
90
+ #
91
+ def setup_basic_graph(*args)
92
+ klass, size = Gruff::Bar, 400
93
+ # Allow args to be klass, size or just klass or just size.
94
+ #
95
+ # TODO Refactor
96
+ case args.length
97
+ when 1
98
+ case args[0]
99
+ when Fixnum
100
+ size = args[0]
101
+ klass = eval("Gruff::#{self.class.name.gsub(/^TestGruff/, '')}")
102
+ when String
103
+ size = args[0]
104
+ klass = eval("Gruff::#{self.class.name.gsub(/^TestGruff/, '')}")
105
+ else
106
+ klass = args[0]
107
+ end
108
+ when 2
109
+ klass, size = args[0], args[1]
110
+ end
111
+
112
+ g = klass.new(size)
113
+ g.title = "My Bar Graph"
114
+ g.labels = @labels
115
+
116
+
117
+ @datasets.each do |data|
118
+ g.data(data[0], data[1])
119
+ end
120
+ g
121
+ end
122
+
123
+ end
@@ -0,0 +1,50 @@
1
+ require File.dirname(__FILE__) + "/gruff_test_case"
2
+
3
+ class TestGruffAccumulatorBar < GruffTestCase
4
+
5
+ # TODO Delete old output files once when starting tests
6
+
7
+ def setup
8
+ @datasets = [
9
+ (1..20).to_a.map { rand(10) }
10
+ ]
11
+ end
12
+
13
+ def test_accumulator
14
+ g = Gruff::AccumulatorBar.new 500
15
+ g.title = "Your Savings"
16
+ g.hide_legend = true
17
+
18
+ # g.font = File.expand_path(File.dirname(__FILE__) + "/../assets/fonts/ATMA____.TTF")
19
+
20
+ g.marker_font_size = 18
21
+
22
+ g.theme = {
23
+ :colors => ['#aedaa9', '#12a702'], # 3077a9 blue, aedaa9 light green
24
+ :marker_color => '#dddddd',
25
+ :font_color => 'black',
26
+ :background_colors => "white"
27
+ # :background_image => File.expand_path(File.dirname(__FILE__) + "/../assets/backgrounds/43things.png")
28
+ }
29
+
30
+ # Attempt at negative numbers
31
+ # g.data 'Savings', (1..20).to_a.map { rand(10) * (rand(2) > 0 ? 1 : -1) }
32
+ g.data 'Savings', (1..12).to_a.map { rand(100) }
33
+ g.labels = (0..11).to_a.inject({}) {|memo, index| {index => '12-26'}.merge(memo)}
34
+
35
+ g.maximum_value = 1000
36
+ g.minimum_value = 0
37
+
38
+ g.write("test/output/accum_bar.png")
39
+ end
40
+
41
+ def test_too_many_args
42
+ assert_raise(Gruff::IncorrectNumberOfDatasetsException) {
43
+ g = Gruff::AccumulatorBar.new
44
+ g.data 'First', [1,1,1]
45
+ g.data 'Too Many', [1,1,1]
46
+ g.write("test/output/_SHOULD_NOT_ACTUALLY_BE_WRITTEN.png")
47
+ }
48
+ end
49
+
50
+ end
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,283 @@
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.write("test/output/bar_keynote.png")
24
+
25
+ g = setup_basic_graph
26
+ g.title = "Visual Multi-Line Bar Graph Test"
27
+ g.theme_rails_keynote
28
+ g.write("test/output/bar_rails_keynote.png")
29
+
30
+ g = setup_basic_graph
31
+ g.title = "Visual Multi-Line Bar Graph Test"
32
+ g.theme_odeo
33
+ g.write("test/output/bar_odeo.png")
34
+ end
35
+
36
+ def test_bar_graph_set_colors
37
+ g = Gruff::Bar.new
38
+ g.title = "Bar Graph With Manual Colors"
39
+ g.labels = {
40
+ 0 => '5/6',
41
+ 1 => '5/15',
42
+ 2 => '5/24',
43
+ 3 => '5/30',
44
+ }
45
+ g.data(:Art, [0, 5, 8, 15], '#990000')
46
+ g.data(:Philosophy, [10, 3, 2, 8], '#009900')
47
+ g.data(:Science, [2, 15, 8, 11], '#990099')
48
+
49
+ g.minimum_value = 0
50
+
51
+ g.write("test/output/bar_manual_colors.png")
52
+ end
53
+
54
+ def test_bar_graph_small
55
+ g = Gruff::Bar.new(400)
56
+ g.title = "Visual Multi-Line Bar Graph Test"
57
+ g.labels = {
58
+ 0 => '5/6',
59
+ 1 => '5/15',
60
+ 2 => '5/24',
61
+ 3 => '5/30',
62
+ }
63
+ @datasets.each do |data|
64
+ g.data(data[0], data[1])
65
+ end
66
+
67
+ g.write("test/output/bar_keynote_small.png")
68
+ end
69
+
70
+ # Somewhat worthless test. Should an error be thrown?
71
+ # def test_nil_font
72
+ # g = setup_basic_graph 400
73
+ # g.title = "Nil Font"
74
+ # g.font = nil
75
+ # g.write "test/output/bar_nil_font.png"
76
+ # end
77
+
78
+
79
+ def test_no_line_markers
80
+ g = setup_basic_graph(400)
81
+ g.title = "No Line Markers"
82
+ g.hide_line_markers = true
83
+ g.write("test/output/bar_no_line_markers.png")
84
+ end
85
+
86
+ def test_no_legend
87
+ g = setup_basic_graph(400)
88
+ g.title = "No Legend"
89
+ g.hide_legend = true
90
+ g.write("test/output/bar_no_legend.png")
91
+ end
92
+
93
+ def test_no_title
94
+ g = setup_basic_graph(400)
95
+ g.title = "No Title"
96
+ g.hide_title = true
97
+ g.write("test/output/bar_no_title.png")
98
+ end
99
+
100
+ def test_no_title_or_legend
101
+ g = setup_basic_graph(400)
102
+ g.title = "No Title or Legend"
103
+ g.hide_legend = true
104
+ g.hide_title = true
105
+ g.write("test/output/bar_no_title_or_legend.png")
106
+ end
107
+
108
+ def test_set_marker_count
109
+ g = setup_basic_graph(400)
110
+ g.title = "Set marker"
111
+ g.marker_count = 10
112
+ g.write("test/output/bar_set_marker.png")
113
+ end
114
+
115
+ def test_set_legend_box_size
116
+ g = setup_basic_graph(400)
117
+ g.title = "Set Small Legend Box Size"
118
+ g.legend_box_size = 10.0
119
+ g.write("test/output/bar_set_legend_box_size_sm.png")
120
+
121
+ g = setup_basic_graph(400)
122
+ g.title = "Set Large Legend Box Size"
123
+ g.legend_box_size = 50.0
124
+ g.write("test/output/bar_set_legend_box_size_lg.png")
125
+ end
126
+
127
+ def test_x_y_labels
128
+ g = setup_basic_graph(400)
129
+ g.title = "X Y Labels"
130
+ g.x_axis_label = 'Score (%)'
131
+ g.y_axis_label = "Students"
132
+ g.write("test/output/bar_x_y_labels.png")
133
+ end
134
+
135
+ def test_wide_graph
136
+ g = setup_basic_graph('800x400')
137
+ g.title = "Wide Graph"
138
+ g.write("test/output/bar_wide_graph.png")
139
+
140
+ g = setup_basic_graph('400x200')
141
+ g.title = "Wide Graph Small"
142
+ g.write("test/output/bar_wide_graph_small.png")
143
+ end
144
+
145
+
146
+ def test_tall_graph
147
+ g = setup_basic_graph('400x600')
148
+ g.title = "Tall Graph"
149
+ g.write("test/output/bar_tall_graph.png")
150
+
151
+ g = setup_basic_graph('200x400')
152
+ g.title = "Tall Graph Small"
153
+ g.write("test/output/bar_tall_graph_small.png")
154
+ end
155
+
156
+
157
+ def test_one_value
158
+ g = Gruff::Bar.new
159
+ g.title = "One Value Graph Test"
160
+ g.labels = {
161
+ 0 => '1',
162
+ 1 => '2'
163
+ }
164
+ g.data('one', [1,1])
165
+
166
+ g.write("test/output/bar_one_value.png")
167
+ end
168
+
169
+
170
+ def test_negative
171
+ g = Gruff::Bar.new
172
+ g.title = "Pos/Neg Bar Graph Test"
173
+ g.labels = {
174
+ 0 => '5/6',
175
+ 1 => '5/15',
176
+ 2 => '5/24',
177
+ 3 => '5/30',
178
+ }
179
+ g.data(:apples, [-1, 0, 4, -4])
180
+ g.data(:peaches, [10, 8, 6, 3])
181
+
182
+ g.write("test/output/bar_pos_neg.png")
183
+ end
184
+
185
+
186
+ def test_nearly_zero
187
+ g = Gruff::Bar.new
188
+ g.title = "Nearly Zero Graph"
189
+ g.labels = {
190
+ 0 => '5/6',
191
+ 1 => '5/15',
192
+ 2 => '5/24',
193
+ 3 => '5/30',
194
+ }
195
+ g.data(:apples, [1, 2, 3, 4])
196
+ g.data(:peaches, [4, 3, 2, 1])
197
+ g.minimum_value = 0
198
+ g.maximum_value = 10
199
+ g.write("test/output/bar_nearly_zero_max_10.png")
200
+ end
201
+
202
+ def test_y_axis_increment
203
+ generate_with_y_axis_increment 2.0
204
+ generate_with_y_axis_increment 1
205
+ generate_with_y_axis_increment 5
206
+ generate_with_y_axis_increment 20
207
+ end
208
+
209
+ def generate_with_y_axis_increment(increment)
210
+ g = Gruff::Bar.new
211
+ g.title = "Y Axis Set to #{increment}"
212
+ g.labels = {
213
+ 0 => '5/6',
214
+ 1 => '5/15',
215
+ 2 => '5/24',
216
+ 3 => '5/30',
217
+ }
218
+ g.y_axis_increment = increment
219
+ g.data(:apples, [1, 0.2, 0.5, 0.7])
220
+ g.data(:peaches, [2.5, 2.3, 2, 6.1])
221
+ g.write("test/output/bar_y_increment_#{increment}.png")
222
+ end
223
+
224
+
225
+ def test_custom_theme
226
+ g = Gruff::Bar.new
227
+ g.title = "Custom Theme"
228
+ g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH'])
229
+ g.title_font_size = 60
230
+ g.legend_font_size = 32
231
+ g.marker_font_size = 32
232
+ g.theme = {
233
+ :colors => %w(#efd250 #666699 #e5573f #9595e2),
234
+ :marker_color => 'white',
235
+ :font_color => 'blue',
236
+ :background_image => "assets/pc306715.jpg"
237
+ }
238
+ g.labels = {
239
+ 0 => '5/6',
240
+ 1 => '5/15',
241
+ 2 => '5/24',
242
+ 3 => '5/30',
243
+ }
244
+ g.data(:vancouver, [1, 2, 3, 4])
245
+ g.data(:seattle, [2, 4, 6, 8])
246
+ g.data(:portland, [3, 1, 7, 3])
247
+ g.data(:victoria, [4, 3, 5, 7])
248
+ g.minimum_value = 0
249
+ g.write("test/output/bar_themed.png")
250
+ end
251
+
252
+ def test_july_enhancements
253
+ g = Gruff::Bar.new(600)
254
+ g.hide_legend = true
255
+ g.title = "Full speed ahead"
256
+ g.labels = (0..10).inject({}) { |memo, i| memo.merge({ i => (i*10).to_s}) }
257
+ g.data(:apples, (0..9).map { rand(20)/10.0 })
258
+ g.y_axis_increment = 1.0
259
+ g.x_axis_label = 'Score (%)'
260
+ g.y_axis_label = 'Students'
261
+ write_test_file g, 'enhancements.png'
262
+ end
263
+
264
+
265
+ protected
266
+
267
+ def setup_basic_graph(size=800)
268
+ g = Gruff::Bar.new(size)
269
+ g.title = "My Bar Graph"
270
+ g.labels = {
271
+ 0 => '5/6',
272
+ 1 => '5/15',
273
+ 2 => '5/24',
274
+ 3 => '5/30',
275
+ }
276
+ @datasets.each do |data|
277
+ g.data(data[0], data[1])
278
+ end
279
+ g
280
+ end
281
+
282
+ end
283
+