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.
- checksums.yaml +5 -5
- data/.editorconfig +14 -0
- data/.github/ISSUE_TEMPLATE.md +18 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +109 -0
- data/.rubocop_todo.yml +112 -0
- data/.travis.yml +24 -15
- data/.yardopts +1 -0
- data/{History.txt → CHANGELOG.md} +72 -25
- data/Gemfile +3 -7
- data/README.md +57 -25
- data/Rakefile +21 -192
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/docker/Dockerfile +14 -0
- data/docker/build.sh +4 -0
- data/docker/launch.sh +4 -0
- data/gruff.gemspec +21 -13
- data/init.rb +2 -0
- data/lib/gruff.rb +26 -2
- data/lib/gruff/accumulator_bar.rb +18 -8
- data/lib/gruff/area.rb +33 -19
- data/lib/gruff/bar.rb +76 -45
- data/lib/gruff/base.rb +435 -704
- data/lib/gruff/bezier.rb +32 -17
- data/lib/gruff/bullet.rb +62 -68
- data/lib/gruff/dot.rb +38 -82
- data/lib/gruff/helper/bar_conversion.rb +47 -0
- data/lib/gruff/helper/bar_value_label_mixin.rb +30 -0
- data/lib/gruff/helper/stacked_mixin.rb +23 -0
- data/lib/gruff/histogram.rb +60 -0
- data/lib/gruff/line.rb +134 -170
- data/lib/gruff/mini/bar.rb +17 -10
- data/lib/gruff/mini/legend.rb +24 -36
- data/lib/gruff/mini/pie.rb +18 -12
- data/lib/gruff/mini/side_bar.rb +26 -12
- data/lib/gruff/net.rb +68 -81
- data/lib/gruff/patch/rmagick.rb +33 -0
- data/lib/gruff/patch/string.rb +10 -0
- data/lib/gruff/photo_bar.rb +39 -42
- data/lib/gruff/pie.rb +180 -89
- data/lib/gruff/renderer/bezier.rb +21 -0
- data/lib/gruff/renderer/circle.rb +21 -0
- data/lib/gruff/renderer/dash_line.rb +22 -0
- data/lib/gruff/renderer/dot.rb +39 -0
- data/lib/gruff/renderer/ellipse.rb +21 -0
- data/lib/gruff/renderer/line.rb +42 -0
- data/lib/gruff/renderer/polygon.rb +23 -0
- data/lib/gruff/renderer/polyline.rb +21 -0
- data/lib/gruff/renderer/rectangle.rb +19 -0
- data/lib/gruff/renderer/renderer.rb +132 -0
- data/lib/gruff/renderer/text.rb +53 -0
- data/lib/gruff/scatter.rb +163 -182
- data/lib/gruff/scene.rb +31 -41
- data/lib/gruff/side_bar.rb +81 -65
- data/lib/gruff/side_stacked_bar.rb +78 -62
- data/lib/gruff/spider.rb +49 -57
- data/lib/gruff/stacked_area.rb +40 -32
- data/lib/gruff/stacked_bar.rb +86 -53
- data/lib/gruff/store/base_data.rb +38 -0
- data/lib/gruff/store/custom_data.rb +38 -0
- data/lib/gruff/store/store.rb +80 -0
- data/lib/gruff/store/xy_data.rb +59 -0
- data/lib/gruff/themes.rb +32 -33
- data/lib/gruff/version.rb +3 -1
- metadata +80 -102
- data/Manifest.txt +0 -81
- data/RELEASE.md +0 -30
- 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/lib/gruff/bar_conversion.rb +0 -46
- data/lib/gruff/deprecated.rb +0 -39
- data/lib/gruff/stacked_mixin.rb +0 -23
- data/test/gruff_test_case.rb +0 -154
- data/test/image_compare.rb +0 -58
- data/test/test_accumulator_bar.rb +0 -51
- data/test/test_area.rb +0 -134
- data/test/test_bar.rb +0 -505
- data/test/test_base.rb +0 -8
- data/test/test_bezier.rb +0 -33
- data/test/test_bullet.rb +0 -26
- data/test/test_dot.rb +0 -263
- data/test/test_labels_for_null_data.rb +0 -27
- data/test/test_legend.rb +0 -68
- data/test/test_line.rb +0 -657
- data/test/test_mini_bar.rb +0 -33
- data/test/test_mini_pie.rb +0 -25
- data/test/test_mini_side_bar.rb +0 -36
- data/test/test_net.rb +0 -231
- data/test/test_photo.rb +0 -41
- data/test/test_pie.rb +0 -161
- data/test/test_scatter.rb +0 -233
- data/test/test_scene.rb +0 -100
- data/test/test_side_bar.rb +0 -56
- data/test/test_sidestacked_bar.rb +0 -105
- data/test/test_spider.rb +0 -226
- data/test/test_stacked_area.rb +0 -52
- 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
|
data/test/test_area.rb
DELETED
@@ -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
|
data/test/test_bar.rb
DELETED
@@ -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
|
-
|