gruff 0.1.1 → 0.1.2
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/CHANGELOG +9 -1
- data/Rakefile +11 -1
- data/lib/gruff.rb +4 -0
- data/lib/gruff/bar.rb +0 -1
- data/lib/gruff/base.rb +162 -12
- data/lib/gruff/line.rb +3 -4
- data/lib/gruff/net.rb +133 -0
- data/lib/gruff/pie.rb +8 -46
- data/lib/gruff/scene.rb +196 -0
- data/lib/gruff/spider.rb +130 -0
- data/test/area_test.rb +2 -6
- data/test/bar_test.rb +61 -41
- data/test/base_test.rb +8 -0
- data/test/gruff_test_case.rb +13 -0
- data/test/legend_test.rb +71 -0
- data/test/line_test.rb +13 -54
- data/test/net_test.rb +230 -0
- data/test/photo_test.rb +2 -5
- data/test/pie_test.rb +2 -6
- data/test/scene_test.rb +94 -0
- data/test/sidestacked_bar_test.rb +2 -6
- data/test/spider_test.rb +216 -0
- data/test/stacked_bar_test.rb +2 -6
- metadata +54 -37
data/test/scene_test.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
class LayerStub < Gruff::Layer; attr_reader :base_dir, :filenames, :selected_filename; end
|
7
|
+
|
8
|
+
class TestGruffScene < GruffTestCase
|
9
|
+
|
10
|
+
def test_hazy
|
11
|
+
g = setup_scene
|
12
|
+
g.weather = "cloudy"
|
13
|
+
g.haze = true
|
14
|
+
g.time = Time.mktime(2006, 7, 4, 4, 35)
|
15
|
+
g.write "test/output/scene_hazy_night.png"
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_stormy_night
|
19
|
+
g = setup_scene
|
20
|
+
g.weather = "stormy"
|
21
|
+
g.time = Time.mktime(2006, 7, 4, 0, 0)
|
22
|
+
g.write "test/output/scene_stormy_night.png"
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def test_not_hazy
|
27
|
+
g = setup_scene
|
28
|
+
g.weather = "cloudy"
|
29
|
+
g.haze = false
|
30
|
+
g.time = Time.mktime(2006, 7, 4, 6, 00)
|
31
|
+
g.write "test/output/scene_not_hazy_day.png"
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_partly_cloudy
|
35
|
+
g = setup_scene
|
36
|
+
g.weather = "partly cloudy"
|
37
|
+
g.haze = false
|
38
|
+
g.time = Time.mktime(2006, 7, 4, 13, 00)
|
39
|
+
g.write "test/output/scene_partly_cloudy_day.png"
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
def test_stormy_day
|
44
|
+
g = setup_scene
|
45
|
+
g.weather = "stormy"
|
46
|
+
g.haze = false
|
47
|
+
g.time = Time.mktime(2006, 7, 4, 8, 00)
|
48
|
+
g.write "test/output/scene_stormy_day.png"
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def test_layer
|
53
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "clouds")
|
54
|
+
assert_equal %w(cloudy.png partly_cloudy.png stormy.png), l.filenames
|
55
|
+
|
56
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "grass")
|
57
|
+
assert_equal 'default.png', l.selected_filename
|
58
|
+
|
59
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
|
60
|
+
l.update Time.mktime(2006, 7, 4, 12, 35) # 12:35, July 4, 2006
|
61
|
+
assert_equal '1200.png', l.selected_filename
|
62
|
+
|
63
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
|
64
|
+
l.update Time.mktime(2006, 7, 4, 0, 0) # 00:00, July 4, 2006
|
65
|
+
assert_equal '0000.png', l.selected_filename
|
66
|
+
|
67
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
|
68
|
+
l.update Time.mktime(2006, 7, 4, 23, 35) # 23:35, July 4, 2006
|
69
|
+
assert_equal '2000.png', l.selected_filename
|
70
|
+
|
71
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
|
72
|
+
l.update Time.mktime(2006, 7, 4, 0, 1) # 00:01, July 4, 2006
|
73
|
+
assert_equal '0000.png', l.selected_filename
|
74
|
+
|
75
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
|
76
|
+
l.update Time.mktime(2006, 7, 4, 2, 0) # 02:00, July 4, 2006
|
77
|
+
assert_equal '0200.png', l.selected_filename
|
78
|
+
|
79
|
+
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "sky")
|
80
|
+
l.update Time.mktime(2006, 7, 4, 4, 00) # 04:00, July 4, 2006
|
81
|
+
assert_equal '0400.png', l.selected_filename
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def setup_scene
|
87
|
+
g = Gruff::Scene.new("500x100", File.expand_path("../assets/city_scene", File.dirname(__FILE__)) )
|
88
|
+
g.layers = %w(background haze sky clouds)
|
89
|
+
g.weather_group = %w(clouds)
|
90
|
+
g.time_group = %w(background sky)
|
91
|
+
g
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -1,12 +1,8 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
|
4
|
-
#$:.unshift File.dirname(__FILE__) + "/fixtures/helpers"
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
5
4
|
|
6
|
-
|
7
|
-
require 'gruff'
|
8
|
-
|
9
|
-
class TestGruffSideSideStackedBar < Test::Unit::TestCase
|
5
|
+
class TestGruffSideStackedBar < GruffTestCase
|
10
6
|
|
11
7
|
# TODO Delete old output files once when starting tests
|
12
8
|
|
data/test/spider_test.rb
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
4
|
+
|
5
|
+
class TestGruffSpider < GruffTestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@datasets = [
|
9
|
+
[:Strength, [10]],
|
10
|
+
[:Dexterity, [16]],
|
11
|
+
[:Constitution, [12]],
|
12
|
+
[:Intelligence, [12]],
|
13
|
+
[:Wisdom, [10]],
|
14
|
+
["Charisma", [16]],
|
15
|
+
]
|
16
|
+
|
17
|
+
# @datasets = [
|
18
|
+
# [:Darren, [25]],
|
19
|
+
# [:Chris, [80]],
|
20
|
+
# [:Egbert, [22]],
|
21
|
+
# [:Adam, [95]],
|
22
|
+
# [:Bill, [90]],
|
23
|
+
# ["Frank", [5]],
|
24
|
+
# ["Zero", [0]],
|
25
|
+
# ]
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_spider_graph
|
29
|
+
g = Gruff::Spider.new(20)
|
30
|
+
g.title = "Spider Graph Test"
|
31
|
+
@datasets.each do |data|
|
32
|
+
g.data(data[0], data[1])
|
33
|
+
end
|
34
|
+
|
35
|
+
# Default theme
|
36
|
+
g.write("test/output/spider_keynote.png")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_pie_graph_small
|
40
|
+
g = Gruff::Spider.new(20, 400)
|
41
|
+
g.title = "Visual Spider Graph Test Small"
|
42
|
+
@datasets.each do |data|
|
43
|
+
g.data(data[0], data[1])
|
44
|
+
end
|
45
|
+
|
46
|
+
# Default theme
|
47
|
+
g.write("test/output/spider_small.png")
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_spider_graph_nearly_equal
|
51
|
+
g = Gruff::Spider.new(50)
|
52
|
+
g.title = "Spider Graph Nearly Equal"
|
53
|
+
|
54
|
+
g.data(:Blake, [41])
|
55
|
+
g.data(:Aaron, [42])
|
56
|
+
g.data(:Grouch, [40])
|
57
|
+
# g.data(:Snuffleupagus, [43])
|
58
|
+
|
59
|
+
g.write("test/output/spider_nearly_equal.png")
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_pie_graph_equal
|
63
|
+
g = Gruff::Spider.new(50)
|
64
|
+
g.title = "Spider Graph Equal"
|
65
|
+
|
66
|
+
g.data(:Bert, [41])
|
67
|
+
g.data(:Adam, [41])
|
68
|
+
g.data(:Joe, [41])
|
69
|
+
|
70
|
+
g.write("test/output/spider_equal.png")
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_pie_graph_zero
|
74
|
+
g = Gruff::Spider.new(2)
|
75
|
+
g.title = "Pie Graph Two One Zero"
|
76
|
+
|
77
|
+
g.data(:Bert, [0])
|
78
|
+
g.data(:Adam, [1])
|
79
|
+
g.data(:Sam, [2])
|
80
|
+
|
81
|
+
g.write("test/output/spider_zero.png")
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_wide
|
85
|
+
g = setup_basic_graph('800x400')
|
86
|
+
g.title = "Wide spider"
|
87
|
+
g.write("test/output/spider_wide.png")
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_label_size
|
91
|
+
g = setup_basic_graph()
|
92
|
+
g.title = "Spider With Small Legend"
|
93
|
+
g.legend_font_size = 10
|
94
|
+
g.write("test/output/spider_legend.png")
|
95
|
+
|
96
|
+
g = setup_basic_graph(400)
|
97
|
+
g.title = "Small spider With Small Legend"
|
98
|
+
g.legend_font_size = 10
|
99
|
+
g.write("test/output/spider_legend_small.png")
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_theme_37signals
|
103
|
+
g = Gruff::Spider.new(20)
|
104
|
+
g.title = "Spider Graph Test"
|
105
|
+
@datasets.each do |data|
|
106
|
+
g.data(data[0], data[1])
|
107
|
+
end
|
108
|
+
|
109
|
+
g.theme_37signals
|
110
|
+
|
111
|
+
# Default theme
|
112
|
+
g.write("test/output/spider_37signals.png")
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_no_axes
|
116
|
+
g = Gruff::Spider.new(20)
|
117
|
+
g.title = "Look ma, no axes"
|
118
|
+
g.hide_axes = true
|
119
|
+
@datasets.each do |data|
|
120
|
+
g.data(data[0], data[1])
|
121
|
+
end
|
122
|
+
g.write("test/output/spider_no_axes.png")
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_no_print
|
127
|
+
g = Gruff::Spider.new(20)
|
128
|
+
g.title = "Should not print"
|
129
|
+
g.hide_text = true
|
130
|
+
@datasets.each do |data|
|
131
|
+
g.data(data[0], data[1])
|
132
|
+
end
|
133
|
+
g.write("test/output/spider_no_print.png")
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_transparency
|
137
|
+
g = Gruff::Spider.new(20)
|
138
|
+
g.title = "Transparent background"
|
139
|
+
g.hide_text = true
|
140
|
+
g.transparent_background = true
|
141
|
+
g.hide_axes = true
|
142
|
+
@datasets.each do |data|
|
143
|
+
g.data(data[0], data[1])
|
144
|
+
end
|
145
|
+
g.write("test/output/spider_no_background.png")
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_overlay
|
149
|
+
g = Gruff::Spider.new(20)
|
150
|
+
g.title = "George (blue) vs Sarah (white)"
|
151
|
+
@datasets.each do |data|
|
152
|
+
g.data(data[0], data[1])
|
153
|
+
end
|
154
|
+
g.write("test/output/spider_overlay_1.png")
|
155
|
+
|
156
|
+
g = Gruff::Spider.new(20)
|
157
|
+
g.title = "Transparent background"
|
158
|
+
g.hide_text = true
|
159
|
+
g.hide_axes = true
|
160
|
+
g.transparent_background = true
|
161
|
+
@datasets = [
|
162
|
+
[:Strength, [18]],
|
163
|
+
[:Dexterity, [10]],
|
164
|
+
[:Constitution, [18]],
|
165
|
+
[:Intelligence, [8]],
|
166
|
+
[:Wisdom, [14]],
|
167
|
+
["Charisma", [4]],
|
168
|
+
]
|
169
|
+
@datasets.each do |data|
|
170
|
+
g.data(data[0], data[1])
|
171
|
+
end
|
172
|
+
g.marker_color = "#4F6EFF"
|
173
|
+
g.write("test/output/spider_overlay_2.png")
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_lots_of_data
|
177
|
+
g = Gruff::Spider.new(10)
|
178
|
+
@datasets = [[:a, [1]], [:b, [5]], [:c, [3]], [:d, [9]], [:e, [4]],
|
179
|
+
[:f, [7]], [:g, [0]], [:h, [4]], [:i, [6]], [:j, [0]],
|
180
|
+
[:k, [4]], [:l, [8]]]
|
181
|
+
|
182
|
+
@datasets.each do |data|
|
183
|
+
g.data(data[0], data[1])
|
184
|
+
end
|
185
|
+
|
186
|
+
g.title = "Sample Data"
|
187
|
+
g.write("test/output/spider_lots_of_data.png")
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_lots_of_data_with_large_names
|
191
|
+
g = Gruff::Spider.new(10)
|
192
|
+
@datasets = [[:anteaters, [1]], [:bulls, [5]], [:cats, [3]], [:dogs, [9]], [:elephants, [4]],
|
193
|
+
[:frogs, [7]], [:giraffes, [0]], [:hamsters, [4]], [:iguanas, [6]],
|
194
|
+
[:jaguar, [0]], [:kangaroo, [4]], [:locust, [8]]]
|
195
|
+
|
196
|
+
@datasets.each do |data|
|
197
|
+
g.data(data[0], data[1])
|
198
|
+
end
|
199
|
+
|
200
|
+
g.title = "Zoo Inventory"
|
201
|
+
g.write("test/output/spider_lots_of_data_normal_names.png")
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
protected
|
206
|
+
|
207
|
+
def setup_basic_graph(size=800, max = 20)
|
208
|
+
g = Gruff::Spider.new(max, size)
|
209
|
+
g.title = "My Graph Title"
|
210
|
+
@datasets.each do |data|
|
211
|
+
g.data(data[0], data[1])
|
212
|
+
end
|
213
|
+
return g
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
data/test/stacked_bar_test.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
|
4
|
-
#$:.unshift File.dirname(__FILE__) + "/fixtures/helpers"
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
5
4
|
|
6
|
-
|
7
|
-
require 'gruff'
|
8
|
-
|
9
|
-
class TestGruffStackedBar < Test::Unit::TestCase
|
5
|
+
class TestGruffStackedBar < GruffTestCase
|
10
6
|
|
11
7
|
def setup
|
12
8
|
@datasets = [
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.11
|
3
3
|
specification_version: 1
|
4
4
|
name: gruff
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.1.2
|
7
|
+
date: 2006-04-20 00:00:00 -07:00
|
8
8
|
summary: Beautiful graphs for one or multiple datasets.
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- lib
|
11
11
|
email: boss@topfunky.com
|
12
12
|
homepage: http://www.topfunky.com
|
13
13
|
rubyforge_project: gruff
|
@@ -18,46 +18,63 @@ bindir: bin
|
|
18
18
|
has_rdoc: true
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
27
28
|
authors:
|
28
|
-
|
29
|
+
- Geoffrey Grosenbach
|
29
30
|
files:
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
31
|
+
- Rakefile
|
32
|
+
- README
|
33
|
+
- CHANGELOG
|
34
|
+
- MIT-LICENSE
|
35
|
+
- lib/gruff
|
36
|
+
- lib/gruff.rb
|
37
|
+
- lib/gruff/area.rb
|
38
|
+
- lib/gruff/bar.rb
|
39
|
+
- lib/gruff/bar_conversion.rb
|
40
|
+
- lib/gruff/base.rb
|
41
|
+
- lib/gruff/line.rb
|
42
|
+
- lib/gruff/net.rb
|
43
|
+
- lib/gruff/photo_bar.rb
|
44
|
+
- lib/gruff/pie.rb
|
45
|
+
- lib/gruff/scene.rb
|
46
|
+
- lib/gruff/side_stacked_bar.rb
|
47
|
+
- lib/gruff/spider.rb
|
48
|
+
- lib/gruff/stacked_bar.rb
|
49
|
+
- assets/bubble.png
|
50
|
+
- assets/city_scene
|
51
|
+
- assets/pc306715.jpg
|
52
|
+
- assets/plastik
|
53
|
+
- test/area_test.rb
|
54
|
+
- test/bar_test.rb
|
55
|
+
- test/base_test.rb
|
56
|
+
- test/gruff_test_case.rb
|
57
|
+
- test/legend_test.rb
|
58
|
+
- test/line_test.rb
|
59
|
+
- test/net_test.rb
|
60
|
+
- test/output
|
61
|
+
- test/photo_test.rb
|
62
|
+
- test/pie_test.rb
|
63
|
+
- test/scene_test.rb
|
64
|
+
- test/sidestacked_bar_test.rb
|
65
|
+
- test/spider_test.rb
|
66
|
+
- test/stacked_bar_test.rb
|
56
67
|
test_files: []
|
68
|
+
|
57
69
|
rdoc_options: []
|
70
|
+
|
58
71
|
extra_rdoc_files: []
|
72
|
+
|
59
73
|
executables: []
|
74
|
+
|
60
75
|
extensions: []
|
76
|
+
|
61
77
|
requirements:
|
62
|
-
|
63
|
-
dependencies: []
|
78
|
+
- none
|
79
|
+
dependencies: []
|
80
|
+
|