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.
- data/History.txt +111 -0
- data/MIT-LICENSE +21 -0
- data/Manifest.txt +79 -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.rb +27 -0
- data/lib/gruff/accumulator_bar.rb +27 -0
- data/lib/gruff/area.rb +58 -0
- data/lib/gruff/bar.rb +84 -0
- data/lib/gruff/bar_conversion.rb +46 -0
- data/lib/gruff/base.rb +1112 -0
- data/lib/gruff/bullet.rb +109 -0
- data/lib/gruff/deprecated.rb +39 -0
- data/lib/gruff/line.rb +105 -0
- data/lib/gruff/mini/bar.rb +32 -0
- data/lib/gruff/mini/legend.rb +77 -0
- data/lib/gruff/mini/pie.rb +36 -0
- data/lib/gruff/mini/side_bar.rb +35 -0
- data/lib/gruff/net.rb +142 -0
- data/lib/gruff/photo_bar.rb +100 -0
- data/lib/gruff/pie.rb +124 -0
- data/lib/gruff/scene.rb +209 -0
- data/lib/gruff/side_bar.rb +115 -0
- data/lib/gruff/side_stacked_bar.rb +74 -0
- data/lib/gruff/spider.rb +130 -0
- data/lib/gruff/stacked_area.rb +67 -0
- data/lib/gruff/stacked_bar.rb +54 -0
- data/lib/gruff/stacked_mixin.rb +23 -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 +283 -0
- data/test/test_base.rb +8 -0
- data/test/test_bullet.rb +26 -0
- data/test/test_legend.rb +68 -0
- data/test/test_line.rb +513 -0
- data/test/test_mini_bar.rb +32 -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_spider.rb +216 -0
- data/test/test_stacked_area.rb +52 -0
- data/test/test_stacked_bar.rb +52 -0
- 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
|
+
|