gruff 0.3.6 → 0.3.7
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/.gitignore +6 -0
- data/.rvmrc +5 -0
- data/.travis.yml +8 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +20 -0
- data/LICENSE.txt +22 -0
- data/README.md +49 -0
- data/README.txt +3 -0
- data/Rakefile +17 -34
- data/gruff.gemspec +33 -0
- data/lib/gruff.rb +3 -0
- data/lib/gruff/base.rb +17 -14
- data/lib/gruff/line.rb +104 -11
- data/lib/gruff/mini/legend.rb +50 -23
- data/lib/gruff/pie.rb +8 -6
- data/lib/gruff/scatter.rb +268 -0
- data/lib/gruff/scene.rb +1 -1
- data/lib/gruff/side_bar.rb +13 -7
- data/lib/gruff/side_stacked_bar.rb +9 -6
- data/lib/gruff/stacked_bar.rb +3 -0
- data/lib/gruff/version.rb +3 -0
- data/test/gruff_test_case.rb +2 -0
- data/test/test_bar.rb +16 -1
- data/test/test_line.rb +102 -64
- data/test/test_mini_bar.rb +1 -1
- data/test/test_mini_pie.rb +7 -2
- data/test/test_mini_side_bar.rb +1 -2
- data/test/test_scatter.rb +233 -0
- data/test/test_scene.rb +1 -1
- data/test/test_side_bar.rb +31 -0
- metadata +41 -27
data/test/test_mini_bar.rb
CHANGED
data/test/test_mini_pie.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require File.dirname(__FILE__) + "/gruff_test_case"
|
1
|
+
require File.expand_path('../gruff_test_case', __FILE__)
|
3
2
|
|
4
3
|
class TestMiniPie < GruffTestCase
|
5
4
|
|
@@ -7,6 +6,12 @@ class TestMiniPie < GruffTestCase
|
|
7
6
|
g = setup_basic_graph(Gruff::Mini::Pie, 200)
|
8
7
|
write_test_file g, 'mini_pie.png'
|
9
8
|
end
|
9
|
+
|
10
|
+
def test_pie_with_legend_right
|
11
|
+
g = setup_basic_graph(Gruff::Mini::Pie, 200)
|
12
|
+
g.legend_position = :right
|
13
|
+
write_test_file g, 'mini_pie_right_legend.png'
|
14
|
+
end
|
10
15
|
|
11
16
|
# def test_code_sample
|
12
17
|
# g = Gruff::Mini::Pie.new(200)
|
data/test/test_mini_side_bar.rb
CHANGED
@@ -0,0 +1,233 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + "/gruff_test_case"
|
4
|
+
|
5
|
+
class TestGruffScatter < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@datasets = [
|
9
|
+
[:Chuck, [20,10,5,12,11,6,10,7], [5,10,19,6,9,1,14,8] ],
|
10
|
+
[:Brown, [5,10,20,6,9,12,14,8], [20,10,5,12,11,6,10,7] ],
|
11
|
+
[:Lucy, [19,9,6,11,12,7,15,8], [6,11,18,8,12,8,10,6] ]
|
12
|
+
]
|
13
|
+
end
|
14
|
+
|
15
|
+
# Done
|
16
|
+
def test_scatter_graph
|
17
|
+
g = setup_basic_graph
|
18
|
+
g.title = "Basic Scatter Plot Test"
|
19
|
+
g.write("test/output/scatter_basic.png")
|
20
|
+
end
|
21
|
+
|
22
|
+
#~ # Done
|
23
|
+
def test_many_datapoints
|
24
|
+
g = Gruff::Scatter.new
|
25
|
+
g.title = "Many Datapoint Graph Test"
|
26
|
+
y_values = (0..50).collect {|i| rand(100) }
|
27
|
+
x_values = (0..50).collect {|i| rand(100) }
|
28
|
+
g.data('many points', y_values, x_values)
|
29
|
+
|
30
|
+
# Default theme
|
31
|
+
g.write("test/output/scatter_many.png")
|
32
|
+
end
|
33
|
+
|
34
|
+
# Done
|
35
|
+
def test_no_data
|
36
|
+
g = Gruff::Scatter.new(400)
|
37
|
+
g.title = "No Data"
|
38
|
+
# Default theme
|
39
|
+
g.write("test/output/scatter_no_data.png")
|
40
|
+
|
41
|
+
g = Gruff::Scatter.new(400)
|
42
|
+
g.title = "No Data Title"
|
43
|
+
g.no_data_message = 'There is no data'
|
44
|
+
g.write("test/output/scatter_no_data_msg.png")
|
45
|
+
end
|
46
|
+
|
47
|
+
# Done
|
48
|
+
def test_all_zeros
|
49
|
+
g = Gruff::Scatter.new(400)
|
50
|
+
g.title = "All Zeros"
|
51
|
+
|
52
|
+
g.data(:gus, [0,0,0,0], [0,0,0,0])
|
53
|
+
|
54
|
+
# Default theme
|
55
|
+
g.write("test/output/scatter_no_data_other.png")
|
56
|
+
end
|
57
|
+
|
58
|
+
# Done
|
59
|
+
def test_some_nil_points
|
60
|
+
g = Gruff::Scatter.new
|
61
|
+
g.title = "Some Nil Points"
|
62
|
+
|
63
|
+
@datasets = [
|
64
|
+
[:data1, [1, 2, 3, nil, 3, 5, 6], [5, nil, nil, nil, nil, 5, 7] ]
|
65
|
+
]
|
66
|
+
|
67
|
+
@datasets.each do |data|
|
68
|
+
assert_raise ArgumentError do
|
69
|
+
g.data(*data)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Done
|
75
|
+
def test_unequal_number_of_x_and_y_values
|
76
|
+
g = Gruff::Scatter.new
|
77
|
+
g.title = "Unequal number of X and Y values"
|
78
|
+
|
79
|
+
@datasets = [
|
80
|
+
[:data1, [1,2,3], [1,2]],
|
81
|
+
[:data2, [1,2,3,4,5], [1,2,3,4,5,6]],
|
82
|
+
]
|
83
|
+
|
84
|
+
@datasets.each do |data|
|
85
|
+
assert_raise ArgumentError do
|
86
|
+
g.data(*data)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Done
|
92
|
+
def test_empty_set_of_axis_values
|
93
|
+
g = Gruff::Scatter.new
|
94
|
+
g.title = "Missing Axis Values"
|
95
|
+
|
96
|
+
@datasets = [
|
97
|
+
[:data1, [1,2,3,4,5]]
|
98
|
+
]
|
99
|
+
|
100
|
+
@datasets.each do |data|
|
101
|
+
assert_raise ArgumentError do
|
102
|
+
g.data(*data)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Done
|
108
|
+
def test_no_title
|
109
|
+
g = Gruff::Scatter.new(400)
|
110
|
+
g.data(:data1, [1,2,3,4,5], [1,2,3,4,5])
|
111
|
+
g.write("test/output/scatter_no_title.png")
|
112
|
+
end
|
113
|
+
|
114
|
+
# Done
|
115
|
+
def test_no_line_markers
|
116
|
+
g = setup_basic_graph(400)
|
117
|
+
g.title = "No Line Markers"
|
118
|
+
g.hide_line_markers = true
|
119
|
+
g.write("test/output/scatter_no_line_markers.png")
|
120
|
+
end
|
121
|
+
|
122
|
+
# Done
|
123
|
+
def test_no_legend
|
124
|
+
g = setup_basic_graph(400)
|
125
|
+
g.title = "No Legend"
|
126
|
+
g.hide_legend = true
|
127
|
+
g.write("test/output/scatter_no_legend.png")
|
128
|
+
end
|
129
|
+
|
130
|
+
# Done
|
131
|
+
def test_nothing_but_the_graph
|
132
|
+
g = setup_basic_graph(400)
|
133
|
+
g.title = "THIS TITLE SHOULD NOT DISPLAY!!!"
|
134
|
+
g.hide_line_markers = true
|
135
|
+
g.hide_legend = true
|
136
|
+
g.hide_title = true
|
137
|
+
g.write("test/output/scatter_nothing_but_the_graph.png")
|
138
|
+
end
|
139
|
+
|
140
|
+
# TODO Implement baselines on x and y axis
|
141
|
+
#~ def test_baseline_larger_than_data
|
142
|
+
#~ g = setup_basic_graph(400)
|
143
|
+
#~ g.title = "Baseline Larger Than Data"
|
144
|
+
#~ g.baseline_value = 150
|
145
|
+
#~ g.write("test/output/scatter_large_baseline.png")
|
146
|
+
#~ end
|
147
|
+
|
148
|
+
# Done
|
149
|
+
def test_wide_graph
|
150
|
+
g = setup_basic_graph('800x400')
|
151
|
+
g.title = "Wide Graph"
|
152
|
+
g.write("test/output/scatter_wide_graph.png")
|
153
|
+
|
154
|
+
g = setup_basic_graph('400x200')
|
155
|
+
g.title = "Wide Graph Small"
|
156
|
+
g.write("test/output/scatter_wide_graph_small.png")
|
157
|
+
end
|
158
|
+
|
159
|
+
# Done
|
160
|
+
def test_negative
|
161
|
+
g = setup_pos_neg(800)
|
162
|
+
g.write("test/output/scatter_pos_neg.png")
|
163
|
+
|
164
|
+
g = setup_pos_neg(400)
|
165
|
+
g.title = 'Pos/Neg Line Test Small'
|
166
|
+
g.write("test/output/scatter_pos_neg_400.png")
|
167
|
+
end
|
168
|
+
|
169
|
+
# Done
|
170
|
+
def test_all_negative
|
171
|
+
g = setup_all_neg(800)
|
172
|
+
g.write("test/output/scatter_all_neg.png")
|
173
|
+
|
174
|
+
g = setup_all_neg(400)
|
175
|
+
g.title = 'All Neg Line Test Small'
|
176
|
+
g.write("test/output/scatter_all_neg_400.png")
|
177
|
+
end
|
178
|
+
|
179
|
+
# Done
|
180
|
+
def test_no_hide_line_no_labels
|
181
|
+
g = Gruff::Scatter.new
|
182
|
+
g.title = "No Hide Line No Labels"
|
183
|
+
@datasets.each do |data|
|
184
|
+
g.data(data[0], data[1], data[2])
|
185
|
+
end
|
186
|
+
g.hide_line_markers = false
|
187
|
+
g.write('test/output/scatter_no_hide.png')
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_no_set_labels
|
191
|
+
g = Gruff::Scatter.new
|
192
|
+
g.title = "Setting Labels Test"
|
193
|
+
g.labels = {
|
194
|
+
0 => 'This',
|
195
|
+
1 => 'should',
|
196
|
+
2 => 'not',
|
197
|
+
3 => 'show',
|
198
|
+
4 => 'up'
|
199
|
+
}
|
200
|
+
@datasets.each do |data|
|
201
|
+
g.data(data[0], data[1], data[2])
|
202
|
+
end
|
203
|
+
g.write('test/output/scatter_no_labels.png')
|
204
|
+
end
|
205
|
+
|
206
|
+
protected
|
207
|
+
|
208
|
+
def setup_basic_graph(size=800)
|
209
|
+
g = Gruff::Scatter.new(size)
|
210
|
+
g.title = "Rad Graph"
|
211
|
+
@datasets.each do |data|
|
212
|
+
g.data(data[0], data[1], data[2])
|
213
|
+
end
|
214
|
+
g
|
215
|
+
end
|
216
|
+
|
217
|
+
def setup_pos_neg(size=800)
|
218
|
+
g = Gruff::Scatter.new(size)
|
219
|
+
g.title = "Pos/Neg Scatter Graph Test"
|
220
|
+
g.data(:apples, [-1, 0, 4, -4], [-5, -1, 3, 4])
|
221
|
+
g.data(:peaches, [10, 8, 6, 3], [-1, 1, 3, 3])
|
222
|
+
return g
|
223
|
+
end
|
224
|
+
|
225
|
+
def setup_all_neg(size=800)
|
226
|
+
g = Gruff::Scatter.new(size)
|
227
|
+
g.title = "Neg Scatter Graph Test"
|
228
|
+
g.data(:apples, [-1, -1, -4, -4], [-5, -1, -3, -4])
|
229
|
+
g.data(:peaches, [-10, -8, -6, -3], [-1, -1, -3, -3])
|
230
|
+
return g
|
231
|
+
end
|
232
|
+
|
233
|
+
end # end GruffTestCase
|
data/test/test_scene.rb
CHANGED
@@ -51,7 +51,7 @@ class TestGruffScene < GruffTestCase
|
|
51
51
|
|
52
52
|
def test_layer
|
53
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
|
54
|
+
assert_equal %w(cloudy.png partly_cloudy.png stormy.png), l.filenames.sort
|
55
55
|
|
56
56
|
l = LayerStub.new(File.expand_path("../assets/city_scene", File.dirname(__FILE__)), "grass")
|
57
57
|
assert_equal 'default.png', l.selected_filename
|
data/test/test_side_bar.rb
CHANGED
@@ -8,5 +8,36 @@ class TestGruffSideBar < GruffTestCase
|
|
8
8
|
write_test_file g, 'side_bar.png'
|
9
9
|
end
|
10
10
|
|
11
|
+
def test_bar_spacing
|
12
|
+
g = setup_basic_graph(Gruff::SideBar, 800)
|
13
|
+
g.bar_spacing = 0
|
14
|
+
g.title = "100% spacing between bars"
|
15
|
+
g.write("test/output/side_bar_spacing_full.png")
|
16
|
+
|
17
|
+
g = setup_basic_graph(Gruff::SideBar, 800)
|
18
|
+
g.bar_spacing = 0.5
|
19
|
+
g.title = "50% spacing between bars"
|
20
|
+
g.write("test/output/side_bar_spacing_half.png")
|
21
|
+
|
22
|
+
g = setup_basic_graph(Gruff::SideBar, 800)
|
23
|
+
g.bar_spacing = 1
|
24
|
+
g.title = "0% spacing between bars"
|
25
|
+
g.write("test/output/side_bar_spacing_none.png")
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_x_axis_range
|
29
|
+
g = Gruff::SideBar.new('400x300')
|
30
|
+
g.title = 'Should run from 8 to 32'
|
31
|
+
g.hide_line_numbers = false
|
32
|
+
g.theme_37signals
|
33
|
+
g.data("Grapes", [8])
|
34
|
+
g.data("Apples", [24])
|
35
|
+
g.data("Oranges", [32])
|
36
|
+
g.data("Watermelon", [8])
|
37
|
+
g.data("Peaches", [12])
|
38
|
+
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
|
39
|
+
g.write("test/output/side_bar_data_range.png")
|
40
|
+
end
|
41
|
+
|
11
42
|
end
|
12
43
|
|
metadata
CHANGED
@@ -1,41 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gruff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
- 7
|
10
|
+
version: 0.3.7
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Geoffrey Grosenbach
|
14
|
+
- Uwe Kubosch
|
8
15
|
autorequire:
|
9
16
|
bindir: bin
|
10
17
|
cert_chain: []
|
11
18
|
|
12
|
-
date:
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: hoe
|
17
|
-
type: :development
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.12.1
|
24
|
-
version:
|
19
|
+
date: 2012-10-16 00:00:00 Z
|
20
|
+
dependencies: []
|
21
|
+
|
25
22
|
description: Beautiful graphs for one or multiple datasets. Can be used on websites or in documents.
|
26
23
|
email: boss@topfunky.com
|
27
24
|
executables: []
|
28
25
|
|
29
26
|
extensions: []
|
30
27
|
|
31
|
-
extra_rdoc_files:
|
32
|
-
|
33
|
-
- Manifest.txt
|
34
|
-
- README.txt
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
35
30
|
files:
|
31
|
+
- .gitignore
|
32
|
+
- .rvmrc
|
33
|
+
- .travis.yml
|
34
|
+
- Gemfile
|
35
|
+
- Gemfile.lock
|
36
36
|
- History.txt
|
37
|
+
- LICENSE.txt
|
37
38
|
- MIT-LICENSE
|
38
39
|
- Manifest.txt
|
40
|
+
- README.md
|
39
41
|
- README.txt
|
40
42
|
- Rakefile
|
41
43
|
- assets/bubble.png
|
@@ -65,6 +67,7 @@ files:
|
|
65
67
|
- assets/plastik/blue.png
|
66
68
|
- assets/plastik/green.png
|
67
69
|
- assets/plastik/red.png
|
70
|
+
- gruff.gemspec
|
68
71
|
- init.rb
|
69
72
|
- lib/gruff.rb
|
70
73
|
- lib/gruff/accumulator_bar.rb
|
@@ -83,6 +86,7 @@ files:
|
|
83
86
|
- lib/gruff/net.rb
|
84
87
|
- lib/gruff/photo_bar.rb
|
85
88
|
- lib/gruff/pie.rb
|
89
|
+
- lib/gruff/scatter.rb
|
86
90
|
- lib/gruff/scene.rb
|
87
91
|
- lib/gruff/side_bar.rb
|
88
92
|
- lib/gruff/side_stacked_bar.rb
|
@@ -90,6 +94,7 @@ files:
|
|
90
94
|
- lib/gruff/stacked_area.rb
|
91
95
|
- lib/gruff/stacked_bar.rb
|
92
96
|
- lib/gruff/stacked_mixin.rb
|
97
|
+
- lib/gruff/version.rb
|
93
98
|
- rails_generators/gruff/gruff_generator.rb
|
94
99
|
- rails_generators/gruff/templates/controller.rb
|
95
100
|
- rails_generators/gruff/templates/functional_test.rb
|
@@ -108,40 +113,48 @@ files:
|
|
108
113
|
- test/test_net.rb
|
109
114
|
- test/test_photo.rb
|
110
115
|
- test/test_pie.rb
|
116
|
+
- test/test_scatter.rb
|
111
117
|
- test/test_scene.rb
|
112
118
|
- test/test_side_bar.rb
|
113
119
|
- test/test_sidestacked_bar.rb
|
114
120
|
- test/test_spider.rb
|
115
121
|
- test/test_stacked_area.rb
|
116
122
|
- test/test_stacked_bar.rb
|
117
|
-
has_rdoc: true
|
118
123
|
homepage: http://nubyonrails.com/pages/gruff
|
124
|
+
licenses: []
|
125
|
+
|
119
126
|
post_install_message:
|
120
|
-
rdoc_options:
|
121
|
-
|
122
|
-
- README.txt
|
127
|
+
rdoc_options: []
|
128
|
+
|
123
129
|
require_paths:
|
124
130
|
- lib
|
125
131
|
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
126
133
|
requirements:
|
127
134
|
- - ">="
|
128
135
|
- !ruby/object:Gem::Version
|
136
|
+
hash: 3
|
137
|
+
segments:
|
138
|
+
- 0
|
129
139
|
version: "0"
|
130
|
-
version:
|
131
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
none: false
|
132
142
|
requirements:
|
133
143
|
- - ">="
|
134
144
|
- !ruby/object:Gem::Version
|
145
|
+
hash: 3
|
146
|
+
segments:
|
147
|
+
- 0
|
135
148
|
version: "0"
|
136
|
-
version:
|
137
149
|
requirements: []
|
138
150
|
|
139
|
-
rubyforge_project:
|
140
|
-
rubygems_version: 1.
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 1.8.24
|
141
153
|
signing_key:
|
142
|
-
specification_version:
|
154
|
+
specification_version: 3
|
143
155
|
summary: Beautiful graphs for one or multiple datasets.
|
144
156
|
test_files:
|
157
|
+
- test/gruff_test_case.rb
|
145
158
|
- test/test_accumulator_bar.rb
|
146
159
|
- test/test_area.rb
|
147
160
|
- test/test_bar.rb
|
@@ -156,6 +169,7 @@ test_files:
|
|
156
169
|
- test/test_net.rb
|
157
170
|
- test/test_photo.rb
|
158
171
|
- test/test_pie.rb
|
172
|
+
- test/test_scatter.rb
|
159
173
|
- test/test_scene.rb
|
160
174
|
- test/test_side_bar.rb
|
161
175
|
- test/test_sidestacked_bar.rb
|