gruff 0.6.0-java → 0.11.0-java

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 (121) hide show
  1. checksums.yaml +5 -5
  2. data/.editorconfig +14 -0
  3. data/.github/ISSUE_TEMPLATE.md +18 -0
  4. data/.gitignore +3 -0
  5. data/.rubocop.yml +109 -0
  6. data/.rubocop_todo.yml +112 -0
  7. data/.travis.yml +24 -15
  8. data/.yardopts +1 -0
  9. data/{History.txt → CHANGELOG.md} +72 -25
  10. data/Gemfile +3 -7
  11. data/README.md +57 -25
  12. data/Rakefile +21 -192
  13. data/assets/plastik/blue.png +0 -0
  14. data/assets/plastik/green.png +0 -0
  15. data/assets/plastik/red.png +0 -0
  16. data/docker/Dockerfile +14 -0
  17. data/docker/build.sh +4 -0
  18. data/docker/launch.sh +4 -0
  19. data/gruff.gemspec +21 -13
  20. data/init.rb +2 -0
  21. data/lib/gruff.rb +26 -2
  22. data/lib/gruff/accumulator_bar.rb +18 -8
  23. data/lib/gruff/area.rb +33 -19
  24. data/lib/gruff/bar.rb +76 -45
  25. data/lib/gruff/base.rb +435 -704
  26. data/lib/gruff/bezier.rb +32 -17
  27. data/lib/gruff/bullet.rb +62 -68
  28. data/lib/gruff/dot.rb +38 -82
  29. data/lib/gruff/helper/bar_conversion.rb +47 -0
  30. data/lib/gruff/helper/bar_value_label_mixin.rb +30 -0
  31. data/lib/gruff/helper/stacked_mixin.rb +23 -0
  32. data/lib/gruff/histogram.rb +60 -0
  33. data/lib/gruff/line.rb +134 -170
  34. data/lib/gruff/mini/bar.rb +17 -10
  35. data/lib/gruff/mini/legend.rb +24 -36
  36. data/lib/gruff/mini/pie.rb +18 -12
  37. data/lib/gruff/mini/side_bar.rb +26 -12
  38. data/lib/gruff/net.rb +68 -81
  39. data/lib/gruff/patch/rmagick.rb +33 -0
  40. data/lib/gruff/patch/string.rb +10 -0
  41. data/lib/gruff/photo_bar.rb +39 -42
  42. data/lib/gruff/pie.rb +180 -89
  43. data/lib/gruff/renderer/bezier.rb +21 -0
  44. data/lib/gruff/renderer/circle.rb +21 -0
  45. data/lib/gruff/renderer/dash_line.rb +22 -0
  46. data/lib/gruff/renderer/dot.rb +39 -0
  47. data/lib/gruff/renderer/ellipse.rb +21 -0
  48. data/lib/gruff/renderer/line.rb +42 -0
  49. data/lib/gruff/renderer/polygon.rb +23 -0
  50. data/lib/gruff/renderer/polyline.rb +21 -0
  51. data/lib/gruff/renderer/rectangle.rb +19 -0
  52. data/lib/gruff/renderer/renderer.rb +132 -0
  53. data/lib/gruff/renderer/text.rb +53 -0
  54. data/lib/gruff/scatter.rb +163 -182
  55. data/lib/gruff/scene.rb +31 -41
  56. data/lib/gruff/side_bar.rb +81 -65
  57. data/lib/gruff/side_stacked_bar.rb +78 -62
  58. data/lib/gruff/spider.rb +49 -57
  59. data/lib/gruff/stacked_area.rb +40 -32
  60. data/lib/gruff/stacked_bar.rb +86 -53
  61. data/lib/gruff/store/base_data.rb +38 -0
  62. data/lib/gruff/store/custom_data.rb +38 -0
  63. data/lib/gruff/store/store.rb +80 -0
  64. data/lib/gruff/store/xy_data.rb +59 -0
  65. data/lib/gruff/themes.rb +32 -33
  66. data/lib/gruff/version.rb +3 -1
  67. metadata +80 -102
  68. data/Manifest.txt +0 -81
  69. data/RELEASE.md +0 -30
  70. data/assets/bubble.png +0 -0
  71. data/assets/city_scene/background/0000.png +0 -0
  72. data/assets/city_scene/background/0600.png +0 -0
  73. data/assets/city_scene/background/2000.png +0 -0
  74. data/assets/city_scene/clouds/cloudy.png +0 -0
  75. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  76. data/assets/city_scene/clouds/stormy.png +0 -0
  77. data/assets/city_scene/grass/default.png +0 -0
  78. data/assets/city_scene/haze/true.png +0 -0
  79. data/assets/city_scene/number_sample/1.png +0 -0
  80. data/assets/city_scene/number_sample/2.png +0 -0
  81. data/assets/city_scene/number_sample/default.png +0 -0
  82. data/assets/city_scene/sky/0000.png +0 -0
  83. data/assets/city_scene/sky/0200.png +0 -0
  84. data/assets/city_scene/sky/0400.png +0 -0
  85. data/assets/city_scene/sky/0600.png +0 -0
  86. data/assets/city_scene/sky/0800.png +0 -0
  87. data/assets/city_scene/sky/1000.png +0 -0
  88. data/assets/city_scene/sky/1200.png +0 -0
  89. data/assets/city_scene/sky/1400.png +0 -0
  90. data/assets/city_scene/sky/1500.png +0 -0
  91. data/assets/city_scene/sky/1700.png +0 -0
  92. data/assets/city_scene/sky/2000.png +0 -0
  93. data/assets/pc306715.jpg +0 -0
  94. data/lib/gruff/bar_conversion.rb +0 -46
  95. data/lib/gruff/deprecated.rb +0 -39
  96. data/lib/gruff/stacked_mixin.rb +0 -23
  97. data/test/gruff_test_case.rb +0 -154
  98. data/test/image_compare.rb +0 -58
  99. data/test/test_accumulator_bar.rb +0 -51
  100. data/test/test_area.rb +0 -134
  101. data/test/test_bar.rb +0 -505
  102. data/test/test_base.rb +0 -8
  103. data/test/test_bezier.rb +0 -33
  104. data/test/test_bullet.rb +0 -26
  105. data/test/test_dot.rb +0 -263
  106. data/test/test_labels_for_null_data.rb +0 -27
  107. data/test/test_legend.rb +0 -68
  108. data/test/test_line.rb +0 -657
  109. data/test/test_mini_bar.rb +0 -33
  110. data/test/test_mini_pie.rb +0 -25
  111. data/test/test_mini_side_bar.rb +0 -36
  112. data/test/test_net.rb +0 -231
  113. data/test/test_photo.rb +0 -41
  114. data/test/test_pie.rb +0 -161
  115. data/test/test_scatter.rb +0 -233
  116. data/test/test_scene.rb +0 -100
  117. data/test/test_side_bar.rb +0 -56
  118. data/test/test_sidestacked_bar.rb +0 -105
  119. data/test/test_spider.rb +0 -226
  120. data/test/test_stacked_area.rb +0 -52
  121. data/test/test_stacked_bar.rb +0 -68
@@ -1,51 +0,0 @@
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
- super
9
- @datasets = [
10
- (1..20).to_a.map { rand(10) }
11
- ]
12
- end
13
-
14
- def test_accumulator
15
- g = Gruff::AccumulatorBar.new 500
16
- g.title = 'Your Savings'
17
- g.hide_legend = true
18
-
19
- # g.font = File.expand_path(File.dirname(__FILE__) + "/../assets/fonts/ATMA____.TTF")
20
-
21
- g.marker_font_size = 18
22
-
23
- g.theme = {
24
- :colors => ['#aedaa9', '#12a702'],
25
- :marker_color => '#dddddd',
26
- :font_color => 'black',
27
- :background_colors => 'white'
28
- # :background_image => File.expand_path(File.dirname(__FILE__) + "/../assets/backgrounds/43things.png")
29
- }
30
-
31
- # Attempt at negative numbers
32
- # g.data 'Savings', (1..20).to_a.map { rand(10) * (rand(2) > 0 ? 1 : -1) }
33
- g.data 'Savings', (1..12).to_a.map { rand(100) }
34
- g.labels = (0..11).to_a.inject({}) {|memo, index| {index => '12-26'}.merge(memo)}
35
-
36
- g.maximum_value = 1000
37
- g.minimum_value = 0
38
-
39
- g.write('test/output/accum_bar.png')
40
- end
41
-
42
- def test_too_many_args
43
- assert_raise(Gruff::IncorrectNumberOfDatasetsException) {
44
- g = Gruff::AccumulatorBar.new
45
- g.data 'First', [1,1,1]
46
- g.data 'Too Many', [1,1,1]
47
- g.write('test/output/_SHOULD_NOT_ACTUALLY_BE_WRITTEN.png')
48
- }
49
- end
50
-
51
- end
@@ -1,134 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- require File.dirname(__FILE__) + "/gruff_test_case"
4
-
5
- class TestGruffArea < GruffTestCase
6
-
7
- def setup
8
- super
9
- @datasets = [
10
- [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]],
11
- [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]],
12
- [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]],
13
- [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
14
- [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
15
- ["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
16
- ]
17
- @sample_labels = {
18
- 0 => '5/6',
19
- 1 => '5/15',
20
- 2 => '5/24',
21
- 3 => '5/30',
22
- 4 => '6/4',
23
- 5 => '6/12',
24
- 6 => '6/21',
25
- 7 => '6/28',
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
@@ -1,505 +0,0 @@
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
- super
11
- @datasets = [
12
- [:Jimmy, [25, 36, 86, 39]],
13
- [:Charles, [80, 54, 67, 54]],
14
- [:Julie, [22, 29, 35, 38]],
15
- #[:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
16
- #[:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
17
- #["Arthur", [5, 10, 13, 11, 6, 16, 22, 32]],
18
- ]
19
- end
20
-
21
- def test_bar_graph
22
- g = setup_basic_graph
23
- g.title = 'Bar Chart'
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 = Gruff::Themes::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 = Gruff::Themes::ODEO
34
- g.write('test/output/bar_odeo.png')
35
- end
36
-
37
- def test_title_margin
38
- g = setup_basic_graph
39
- g.title = 'Bar Graph with Title Margin = 100'
40
- g.title_margin = 100
41
- g.write('test/output/bar_title_margin.png')
42
- end
43
-
44
- def test_thousand_separators
45
- g = Gruff::Bar.new(600)
46
- g.title = 'Formatted numbers'
47
- g.marker_count = 8
48
- g.data('data', [4025, 1024, 50257, 703672, 1580456])
49
- g.write('test/output/bar_formatted_numbers.png')
50
- end
51
-
52
- def test_bar_graph_set_colors
53
- g = Gruff::Bar.new
54
- g.title = 'Bar Graph With Manual Colors'
55
- g.legend_margin = 50
56
- g.labels = {
57
- 0 => '5/6',
58
- 1 => '5/15',
59
- 2 => '5/24',
60
- 3 => '5/30',
61
- }
62
- g.data(:Art, [0, 5, 8, 15], '#990000')
63
- g.data(:Philosophy, [10, 3, 2, 8], '#009900')
64
- g.data(:Science, [2, 15, 8, 11], '#990099')
65
-
66
- g.minimum_value = 0
67
-
68
- g.write('test/output/bar_manual_colors.png')
69
- end
70
-
71
- def test_bar_graph_small
72
- g = Gruff::Bar.new(400)
73
- g.title = 'Visual Multi-Line Bar Graph Test'
74
- g.labels = {
75
- 0 => '5/6',
76
- 1 => '5/15',
77
- 2 => '5/24',
78
- 3 => '5/30',
79
- }
80
- @datasets.each do |data|
81
- g.data(data[0], data[1])
82
- end
83
-
84
- g.write('test/output/bar_keynote_small.png')
85
- end
86
-
87
- # Somewhat worthless test. Should an error be thrown?
88
- # def test_nil_font
89
- # g = setup_basic_graph 400
90
- # g.title = "Nil Font"
91
- # g.font = nil
92
- # g.write "test/output/bar_nil_font.png"
93
- # end
94
-
95
-
96
- def test_no_line_markers
97
- g = setup_basic_graph(400)
98
- g.title = 'No Line Markers'
99
- g.hide_line_markers = true
100
- g.write('test/output/bar_no_line_markers.png')
101
- end
102
-
103
- def test_no_legend
104
- g = setup_basic_graph(400)
105
- g.title = 'No Legend'
106
- g.hide_legend = true
107
- g.write('test/output/bar_no_legend.png')
108
- end
109
-
110
- def test_no_title
111
- g = setup_basic_graph(400)
112
- g.title = 'No Title'
113
- g.hide_title = true
114
- g.write('test/output/bar_no_title.png')
115
- end
116
-
117
- def test_no_title_or_legend
118
- g = setup_basic_graph(400)
119
- g.title = 'No Title or Legend'
120
- g.hide_legend = true
121
- g.hide_title = true
122
- g.write('test/output/bar_no_title_or_legend.png')
123
- end
124
-
125
- def test_set_marker_count
126
- g = setup_basic_graph(400)
127
- g.title = 'Set marker'
128
- g.marker_count = 10
129
- g.write('test/output/bar_set_marker.png')
130
- end
131
-
132
- def test_set_legend_box_size
133
- g = setup_basic_graph(400)
134
- g.title = 'Set Small Legend Box Size'
135
- g.legend_box_size = 10.0
136
- g.write('test/output/bar_set_legend_box_size_sm.png')
137
-
138
- g = setup_basic_graph(400)
139
- g.title = 'Set Large Legend Box Size'
140
- g.legend_box_size = 50.0
141
- g.write('test/output/bar_set_legend_box_size_lg.png')
142
- end
143
-
144
- def test_x_y_labels
145
- g = setup_basic_graph(400)
146
- g.title = 'X Y Labels'
147
- g.x_axis_label = 'Score (%)'
148
- g.y_axis_label = 'Students'
149
- g.write('test/output/bar_x_y_labels.png')
150
- end
151
-
152
- def test_wide_graph
153
- g = setup_basic_graph('800x400')
154
- g.title = 'Wide Graph'
155
- g.write('test/output/bar_wide_graph.png')
156
-
157
- g = setup_basic_graph('400x200')
158
- g.title = 'Wide Graph Small'
159
- g.write('test/output/bar_wide_graph_small.png')
160
- end
161
-
162
-
163
- def test_tall_graph
164
- g = setup_basic_graph('400x600')
165
- g.title = 'Tall Graph'
166
- g.write('test/output/bar_tall_graph.png')
167
-
168
- g = setup_basic_graph('200x400')
169
- g.title = 'Tall Graph Small'
170
- g.write('test/output/bar_tall_graph_small.png')
171
- end
172
-
173
-
174
- def test_one_value
175
- g = Gruff::Bar.new
176
- g.title = 'One Value Graph Test'
177
- g.labels = {
178
- 0 => '1',
179
- 1 => '2'
180
- }
181
- g.data('one', [1, 1])
182
-
183
- g.write('test/output/bar_one_value.png')
184
- end
185
-
186
-
187
- def test_negative
188
- g = Gruff::Bar.new
189
- g.title = 'Pos/Neg Bar Graph Test'
190
- g.labels = {
191
- 0 => '5/6',
192
- 1 => '5/15',
193
- 2 => '5/24',
194
- 3 => '5/30',
195
- }
196
- g.data(:apples, [-1, 0, 4, -4])
197
- g.data(:peaches, [10, 8, 6, 3])
198
-
199
- g.write('test/output/bar_pos_neg.png')
200
- end
201
-
202
-
203
- def test_nearly_zero
204
- g = Gruff::Bar.new
205
- g.title = 'Nearly Zero Graph'
206
- g.labels = {
207
- 0 => '5/6',
208
- 1 => '5/15',
209
- 2 => '5/24',
210
- 3 => '5/30',
211
- }
212
- g.data(:apples, [1, 2, 3, 4])
213
- g.data(:peaches, [4, 3, 2, 1])
214
- g.minimum_value = 0
215
- g.maximum_value = 10
216
- g.write('test/output/bar_nearly_zero_max_10.png')
217
- end
218
-
219
- def test_y_axis_increment
220
- generate_with_y_axis_increment 2.0
221
- generate_with_y_axis_increment 1
222
- generate_with_y_axis_increment 5
223
- generate_with_y_axis_increment 20
224
- end
225
-
226
- def generate_with_y_axis_increment(increment)
227
- g = Gruff::Bar.new
228
- g.title = "Y Axis Set to #{increment}"
229
- g.labels = {
230
- 0 => '5/6',
231
- 1 => '5/15',
232
- 2 => '5/24',
233
- 3 => '5/30',
234
- }
235
- g.y_axis_increment = increment
236
- g.data(:apples, [1, 0.2, 0.5, 0.7])
237
- g.data(:peaches, [2.5, 2.3, 2, 6.1])
238
- g.write("test/output/bar_y_increment_#{increment}.png")
239
- end
240
-
241
- def test_custom_spacing
242
- g = Gruff::Bar.new
243
- g.spacing_factor = 0
244
- g.title = 'Zero spacing graff'
245
- g.labels = {
246
- 0 => '5/6',
247
- 1 => '5/15',
248
- 2 => '5/24',
249
- 3 => '5/30',
250
- }
251
-
252
- g.data(:apples, [1, 5, 8, 4])
253
- g.data(:peaches, [4, 1, 2, 10])
254
- g.minimum_value = 0
255
- g.maximum_value = 10
256
- g.write('test/output/bar_zero_spacing.png')
257
- end
258
-
259
- def test_spacing_factor_does_not_accept_values_lt_0_and_gt_1
260
- g = Gruff::Bar.new
261
-
262
- assert_raise ArgumentError do
263
- g.spacing_factor = 1.01
264
- end
265
-
266
- assert_raise ArgumentError do
267
- g.spacing_factor = -0.01
268
- end
269
- end
270
-
271
- def test_custom_theme
272
- g = Gruff::Bar.new
273
- g.title = 'Custom Theme'
274
- g.font = File.expand_path('CREABBRG.TTF', ENV['MAGICK_FONT_PATH'])
275
- g.title_font_size = 60
276
- g.legend_font_size = 32
277
- g.marker_font_size = 32
278
- g.theme = {
279
- :colors => %w(#efd250 #666699 #e5573f #9595e2),
280
- :marker_color => 'white',
281
- :font_color => 'blue',
282
- :background_image => 'assets/pc306715.jpg'
283
- }
284
- g.labels = {
285
- 0 => '5/6',
286
- 1 => '5/15',
287
- 2 => '5/24',
288
- 3 => '5/30',
289
- }
290
- g.data(:vancouver, [1, 2, 3, 4])
291
- g.data(:seattle, [2, 4, 6, 8])
292
- g.data(:portland, [3, 1, 7, 3])
293
- g.data(:victoria, [4, 3, 5, 7])
294
- g.minimum_value = 0
295
- g.write('test/output/bar_themed.png')
296
- end
297
-
298
- def test_background_gradient_top_bottom
299
- g = Gruff::Bar.new
300
- g.title = 'Background gradient top to bottom'
301
- g.theme = {
302
- :background_colors => %w(#ff0000 #00ff00),
303
- :background_direction => :top_bottom,
304
- }
305
- g.labels = @labels
306
- @datasets.each do |name, values|
307
- g.data(name, values)
308
- end
309
- g.minimum_value = 0
310
- write_test_file(g, 'bar_background_gradient_top_bottom.png')
311
- end
312
-
313
- def test_background_gradient_bottom_top
314
- g = Gruff::Bar.new
315
- g.title = 'Background gradient top to bottom'
316
- g.theme = {
317
- :background_colors => %w(#ff0000 #00ff00),
318
- :background_direction => :bottom_top,
319
- }
320
- g.labels = @labels
321
- @datasets.each do |name, values|
322
- g.data(name, values)
323
- end
324
- g.minimum_value = 0
325
- write_test_file(g, 'bar_background_gradient_bottom_top.png')
326
- end
327
-
328
- def test_background_gradient_left_right
329
- g = Gruff::Bar.new
330
- g.title = 'Background gradient left to right'
331
- g.theme = {
332
- :background_colors => %w(#ff0000 #00ff00),
333
- :background_direction => :left_right,
334
- }
335
- g.labels = @labels
336
- @datasets.each do |name, values|
337
- g.data(name, values)
338
- end
339
- g.minimum_value = 0
340
- write_test_file(g, 'bar_background_gradient_left_right.png')
341
- end
342
-
343
- def test_background_gradient_right_left
344
- g = Gruff::Bar.new
345
- g.title = 'Background gradient right to left'
346
- g.theme = {
347
- :background_colors => %w(#ff0000 #00ff00),
348
- :background_direction => :right_left,
349
- }
350
- g.labels = @labels
351
- @datasets.each do |name, values|
352
- g.data(name, values)
353
- end
354
- g.minimum_value = 0
355
- write_test_file(g, 'bar_background_gradient_right_left.png')
356
- end
357
-
358
- def test_background_gradient_topleft_bottomright
359
- g = Gruff::Bar.new
360
- g.title = 'Background gradient top left to bottom right'
361
- g.theme = {
362
- :background_colors => %w(#ff0000 #00ff00),
363
- :background_direction => :topleft_bottomright,
364
- }
365
- g.labels = @labels
366
- @datasets.each do |name, values|
367
- g.data(name, values)
368
- end
369
- g.minimum_value = 0
370
- write_test_file(g, 'bar_background_gradient_topleft_bottomright.png')
371
- end
372
-
373
- def test_background_gradient_topright_bottomleft
374
- g = Gruff::Bar.new
375
- g.title = 'Background gradient top right to bottom left'
376
- g.title_font_size = 30
377
- g.theme = {
378
- :background_colors => %w(#ff0000 #00ff00),
379
- :background_direction => :topright_bottomleft,
380
- }
381
- g.labels = @labels
382
- @datasets.each do |name, values|
383
- g.data(name, values)
384
- end
385
- g.minimum_value = 0
386
- write_test_file(g, 'bar_background_gradient_topright_bottomleft.png')
387
- end
388
-
389
- def test_legend_should_not_overlap
390
- g = Gruff::Bar.new(400)
391
- g.theme_37signals()
392
- g.title = 'My Graph'
393
- g.data('Apples Oranges Watermelon Apples Oranges', [1, 2, 3, 4, 4, 3])
394
- g.data('Oranges', [4, 8, 7, 9, 8, 9])
395
- g.data('Watermelon', [2, 3, 1, 5, 6, 8])
396
- g.data('Peaches', [9, 9, 10, 8, 7, 9])
397
- g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
398
- g.write('test/output/bar_long_legend_text.png')
399
- end
400
-
401
- def test_july_enhancements
402
- g = Gruff::Bar.new(600)
403
- g.hide_legend = true
404
- g.title = 'Full speed ahead'
405
- g.labels = (0..10).inject({}) { |memo, i| memo.merge({i => (i*10).to_s}) }
406
- g.data(:apples, (0..9).map { rand(20)/10.0 })
407
- g.y_axis_increment = 1.0
408
- g.x_axis_label = 'Score (%)'
409
- g.y_axis_label = 'Students'
410
- write_test_file g, 'enhancements.png'
411
- end
412
-
413
- def test_bar_spacing
414
- g = setup_basic_graph
415
- g.bar_spacing = 0
416
- g.title = '100% spacing between bars'
417
- g.write('test/output/bar_spacing_full.png')
418
-
419
- g = setup_basic_graph
420
- g.bar_spacing = 0.5
421
- g.title = '50% spacing between bars'
422
- g.write('test/output/bar_spacing_half.png')
423
-
424
- g = setup_basic_graph
425
- g.bar_spacing = 1
426
- g.title = '0% spacing between bars'
427
- g.write('test/output/bar_spacing_none.png')
428
- end
429
-
430
- def test_set_label_stagger_height
431
- g = setup_long_labelled_graph
432
- g.title = 'Staggered labels'
433
- g.label_stagger_height = 30
434
- g.write('test/output/bar_set_label_stagger_height.png')
435
- end
436
-
437
- def test_set_label_max_size_and_label_truncation_style
438
- # Absolute trunc
439
- g = setup_long_labelled_graph
440
- g.title = 'Absolute truncation (13 chars)'
441
- g.label_max_size = 13
442
- g.label_truncation_style = :absolute
443
- g.write('test/output/bar_set_absolute_trunc.png')
444
-
445
- # Trailing Dots trunc
446
- g = setup_long_labelled_graph
447
- g.title = 'Trailing dots truncation (6 chars inc dots)'
448
- g.label_max_size = 6
449
- g.label_truncation_style = :trailing_dots
450
- g.write('test/output/bar_set_trailing_dots_trunc.png')
451
- end
452
-
453
- def test_bar_value_labels
454
- g = setup_basic_graph
455
- g.show_labels_for_bar_values = true
456
- g.write('test/output/bar_value_labels.png')
457
- end
458
-
459
- def test_zero_marker_count
460
- g = setup_basic_graph
461
- g.marker_count = 0
462
- g.write('test/output/bar_zero_marker_count.png')
463
- end
464
-
465
- def test_zero_marker_shadow
466
- g = setup_basic_graph
467
- g.title = 'Bar Chart with Marker Shadow'
468
- g.marker_shadow_color = '#888888'
469
- g.write('test/output/bar_marker_shadow.png')
470
- end
471
-
472
- protected
473
-
474
- def setup_basic_graph(size=800)
475
- g = Gruff::Bar.new(size)
476
- g.title = 'My Bar Graph'
477
- g.labels = {
478
- 0 => '5/6',
479
- 1 => '5/15',
480
- 2 => '5/24',
481
- 3 => '5/30',
482
- }
483
- @datasets.each do |data|
484
- g.data(data[0], data[1])
485
- end
486
- g
487
- end
488
-
489
- def setup_long_labelled_graph(size=500)
490
- g = Gruff::Bar.new(size)
491
- g.title = 'A Graph for All Seasons'
492
- g.labels = {
493
- 0 => 'January was a cold one',
494
- 1 => 'February is little better',
495
- 2 => 'March will bring me hares',
496
- 3 => 'April and I\'m a fool'
497
- }
498
-
499
- @datasets.each do |data|
500
- g.data(data[0], data[1])
501
- end
502
- g
503
- end
504
- end
505
-