topfunky-gruff 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +98 -0
- data/MIT-LICENSE +21 -0
- data/Manifest.txt +76 -0
- data/README.txt +40 -0
- data/Rakefile +54 -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 +83 -0
- data/lib/gruff/bar_conversion.rb +46 -0
- data/lib/gruff/base.rb +1073 -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 +114 -0
- data/lib/gruff/side_stacked_bar.rb +73 -0
- data/lib/gruff/spider.rb +130 -0
- data/lib/gruff/stacked_area.rb +66 -0
- data/lib/gruff/stacked_bar.rb +53 -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 +71 -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_bar.rb +52 -0
- metadata +157 -0
data/History.txt
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
== 0.3.2
|
2
|
+
|
3
|
+
* Include init.rb for use as a Rails plugin.
|
4
|
+
|
5
|
+
|
6
|
+
== 0.3.1
|
7
|
+
|
8
|
+
* Fixed missing bullet graph bug (experimental, will be in a future release).
|
9
|
+
|
10
|
+
== 0.3.0
|
11
|
+
|
12
|
+
* Fixed bug where pie graphs weren't drawing their label correctly.
|
13
|
+
|
14
|
+
== 0.2.9
|
15
|
+
|
16
|
+
* Patch to make SideBar accurate instead of stacked [Marik]
|
17
|
+
* Will be extracting net, pie, stacked, and side-stacked to separate gem
|
18
|
+
in next release.
|
19
|
+
|
20
|
+
== 0.2.8
|
21
|
+
|
22
|
+
* New accumulator bar graph (experimental)
|
23
|
+
* Better mini graphs
|
24
|
+
* Bug fixes
|
25
|
+
|
26
|
+
== 0.2.7
|
27
|
+
|
28
|
+
* Regenerated Manifest.txt
|
29
|
+
* Added scene sample to package
|
30
|
+
* Added mini side_bar (EXPERIMENTAL)
|
31
|
+
* Added @zero_degree option to Gruff::Pie so first slice can start somewhere other than 3 o'clock
|
32
|
+
* Increased size of numbers in Gruff::Mini::Pie
|
33
|
+
* Added legend_box_size accessor
|
34
|
+
|
35
|
+
== 0.2.6
|
36
|
+
|
37
|
+
* Fixed missing side_bar.rb in Manifest.txt
|
38
|
+
|
39
|
+
== 0.2.5
|
40
|
+
|
41
|
+
* New mini graph types (Experimental)
|
42
|
+
* Marker lines can be different color than text labels
|
43
|
+
* Theme definition cleanup
|
44
|
+
|
45
|
+
== 0.2.4
|
46
|
+
|
47
|
+
* Added option to hide line numbers
|
48
|
+
* Fixed code that was causing warnings
|
49
|
+
|
50
|
+
== 0.2.3
|
51
|
+
|
52
|
+
* Cleaned up measurements so the graph expands to fill the available space
|
53
|
+
* Added x-axis and y-axis label options
|
54
|
+
|
55
|
+
== 0.1.2
|
56
|
+
|
57
|
+
* minimum_value and maximum_value can be set after data() to manually scale the graph
|
58
|
+
* Fixed infinite loop bug when values are all equal
|
59
|
+
* Added experimental net and spider graphs
|
60
|
+
* Added non-linear scene graph for a simple interface to complex layered graphs
|
61
|
+
* Initial refactoring of tests
|
62
|
+
* A host of other bug fixes
|
63
|
+
|
64
|
+
== 0.0.8
|
65
|
+
|
66
|
+
* NEW Sidestacked Bar Graphs. [Alun Eyre]
|
67
|
+
* baseline_value larger than data will now show correctly. [Mike Perham]
|
68
|
+
* hide_dots and hide_lines are now options for line graphs.
|
69
|
+
|
70
|
+
== 0.0.6
|
71
|
+
|
72
|
+
* Fixed hang when no data is passed.
|
73
|
+
|
74
|
+
== 0.0.4
|
75
|
+
|
76
|
+
* Added bar graphs
|
77
|
+
* Added area graphs
|
78
|
+
* Added pie graphs
|
79
|
+
* Added render_image_background for using images as background on a theme
|
80
|
+
* Fixed small size legend centering issue
|
81
|
+
* Added initial line marker rounding to significant digits (Christian Winkler)
|
82
|
+
* Line graphs line width is scaled with number of points being drawn (Christian Winkler)
|
83
|
+
|
84
|
+
== 0.0.3
|
85
|
+
|
86
|
+
* Added option to draw line graphs without the lines (points only), thanks to Eric Hodel
|
87
|
+
* Removed font-minimum check so graphs look better at 300px width
|
88
|
+
|
89
|
+
== 0.0.2
|
90
|
+
|
91
|
+
* Fixed to_blob (thanks to Carlos Villela)
|
92
|
+
* Added bar graphs (initial functionality...will be enhanced)
|
93
|
+
* Removed rendered test output from gem
|
94
|
+
|
95
|
+
== 0.0.1
|
96
|
+
|
97
|
+
* Initial release.
|
98
|
+
* Line graphs only. Other graph styles coming soon.
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) 2005 Geoffrey Grosenbach boss@topfunky.com
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
data/Manifest.txt
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
History.txt
|
2
|
+
MIT-LICENSE
|
3
|
+
Manifest.txt
|
4
|
+
README.txt
|
5
|
+
Rakefile
|
6
|
+
assets/bubble.png
|
7
|
+
assets/city_scene/background/0000.png
|
8
|
+
assets/city_scene/background/0600.png
|
9
|
+
assets/city_scene/background/2000.png
|
10
|
+
assets/city_scene/clouds/cloudy.png
|
11
|
+
assets/city_scene/clouds/partly_cloudy.png
|
12
|
+
assets/city_scene/clouds/stormy.png
|
13
|
+
assets/city_scene/grass/default.png
|
14
|
+
assets/city_scene/haze/true.png
|
15
|
+
assets/city_scene/number_sample/1.png
|
16
|
+
assets/city_scene/number_sample/2.png
|
17
|
+
assets/city_scene/number_sample/default.png
|
18
|
+
assets/city_scene/sky/0000.png
|
19
|
+
assets/city_scene/sky/0200.png
|
20
|
+
assets/city_scene/sky/0400.png
|
21
|
+
assets/city_scene/sky/0600.png
|
22
|
+
assets/city_scene/sky/0800.png
|
23
|
+
assets/city_scene/sky/1000.png
|
24
|
+
assets/city_scene/sky/1200.png
|
25
|
+
assets/city_scene/sky/1400.png
|
26
|
+
assets/city_scene/sky/1500.png
|
27
|
+
assets/city_scene/sky/1700.png
|
28
|
+
assets/city_scene/sky/2000.png
|
29
|
+
assets/pc306715.jpg
|
30
|
+
assets/plastik/blue.png
|
31
|
+
assets/plastik/green.png
|
32
|
+
assets/plastik/red.png
|
33
|
+
init.rb
|
34
|
+
lib/gruff.rb
|
35
|
+
lib/gruff/accumulator_bar.rb
|
36
|
+
lib/gruff/area.rb
|
37
|
+
lib/gruff/bar.rb
|
38
|
+
lib/gruff/bar_conversion.rb
|
39
|
+
lib/gruff/base.rb
|
40
|
+
lib/gruff/deprecated.rb
|
41
|
+
lib/gruff/line.rb
|
42
|
+
lib/gruff/mini/bar.rb
|
43
|
+
lib/gruff/mini/legend.rb
|
44
|
+
lib/gruff/mini/pie.rb
|
45
|
+
lib/gruff/mini/side_bar.rb
|
46
|
+
lib/gruff/net.rb
|
47
|
+
lib/gruff/photo_bar.rb
|
48
|
+
lib/gruff/pie.rb
|
49
|
+
lib/gruff/scene.rb
|
50
|
+
lib/gruff/side_bar.rb
|
51
|
+
lib/gruff/side_stacked_bar.rb
|
52
|
+
lib/gruff/spider.rb
|
53
|
+
lib/gruff/stacked_area.rb
|
54
|
+
lib/gruff/stacked_bar.rb
|
55
|
+
lib/gruff/stacked_mixin.rb
|
56
|
+
rails_generators/gruff/gruff_generator.rb
|
57
|
+
rails_generators/gruff/templates/controller.rb
|
58
|
+
rails_generators/gruff/templates/functional_test.rb
|
59
|
+
test/gruff_test_case.rb
|
60
|
+
test/test_accumulator_bar.rb
|
61
|
+
test/test_area.rb
|
62
|
+
test/test_bar.rb
|
63
|
+
test/test_base.rb
|
64
|
+
test/test_legend.rb
|
65
|
+
test/test_line.rb
|
66
|
+
test/test_mini_bar.rb
|
67
|
+
test/test_mini_pie.rb
|
68
|
+
test/test_mini_side_bar.rb
|
69
|
+
test/test_net.rb
|
70
|
+
test/test_photo.rb
|
71
|
+
test/test_pie.rb
|
72
|
+
test/test_scene.rb
|
73
|
+
test/test_side_bar.rb
|
74
|
+
test/test_sidestacked_bar.rb
|
75
|
+
test/test_spider.rb
|
76
|
+
test/test_stacked_bar.rb
|
data/README.txt
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
== Gruff Graphs
|
2
|
+
|
3
|
+
A library for making beautiful graphs.
|
4
|
+
|
5
|
+
== Samples
|
6
|
+
|
7
|
+
http://nubyonrails.com/pages/gruff
|
8
|
+
|
9
|
+
== Documentation
|
10
|
+
|
11
|
+
http://gruff.rubyforge.org
|
12
|
+
|
13
|
+
See the test suite in test/line_test.rb for examples.
|
14
|
+
|
15
|
+
== Rails Plugin
|
16
|
+
|
17
|
+
Gruff is easy to use with Rails.
|
18
|
+
|
19
|
+
gem install gruff
|
20
|
+
cd vendor/plugins && gem unpack gruff
|
21
|
+
|
22
|
+
== WARNING
|
23
|
+
|
24
|
+
This is beta-quality software. It works well according to my tests, but the API may change and other features will be added.
|
25
|
+
|
26
|
+
== Source
|
27
|
+
|
28
|
+
The source for this project is now kept at GitHub:
|
29
|
+
|
30
|
+
http://github.com/topfunky/gruff/tree/master
|
31
|
+
|
32
|
+
== CONTRIBUTE
|
33
|
+
|
34
|
+
Patches appreciated, especially if they are in Git format (with metadata so your name shows up in the commit logs).
|
35
|
+
|
36
|
+
Use these instructions:
|
37
|
+
|
38
|
+
http://gweezlebur.com/2008/2/1/so-you-want-to-contribute-to-merb-core-part-1
|
39
|
+
|
40
|
+
http://gweezlebur.com/2008/2/9/contributing-to-merb-part-2
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'hoe'
|
3
|
+
$:.unshift(File.dirname(__FILE__) + "/lib")
|
4
|
+
require 'gruff'
|
5
|
+
|
6
|
+
Hoe.new('Gruff', Gruff::VERSION) do |p|
|
7
|
+
p.name = "gruff"
|
8
|
+
p.author = "Geoffrey Grosenbach"
|
9
|
+
p.description = "Beautiful graphs for one or multiple datasets. Can be used on websites or in documents."
|
10
|
+
p.email = 'boss@topfunky.com'
|
11
|
+
p.summary = "Beautiful graphs for one or multiple datasets."
|
12
|
+
p.url = "http://nubyonrails.com/pages/gruff"
|
13
|
+
p.clean_globs = ['test/output/*.png']
|
14
|
+
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
15
|
+
p.remote_rdoc_dir = '' # Release to root
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Simple require on packaged files to make sure they are all there"
|
19
|
+
task :verify => :package do
|
20
|
+
# An error message will be displayed if files are missing
|
21
|
+
if system %(ruby -e "require 'pkg/gruff-#{Gruff::VERSION}/lib/gruff'")
|
22
|
+
puts "\nThe library files are present"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
task :release => :verify
|
27
|
+
|
28
|
+
namespace :test do
|
29
|
+
|
30
|
+
desc "Run mini tests"
|
31
|
+
task :mini => :clean do
|
32
|
+
Dir['test/test_mini*'].each do |file|
|
33
|
+
system "ruby #{file}"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Catch unmatched tasks and run them as a unit test.
|
42
|
+
#
|
43
|
+
# Makes it possible to do
|
44
|
+
#
|
45
|
+
# rake pie
|
46
|
+
#
|
47
|
+
# To run the +test/test_pie+ and +test/test_mini_pie+ files.
|
48
|
+
|
49
|
+
rule '' do |t|
|
50
|
+
# Rake::Task["clean"].invoke
|
51
|
+
Dir["test/test_*#{t.name}*.rb"].each do |filename|
|
52
|
+
system "ruby #{filename}"
|
53
|
+
end
|
54
|
+
end
|
data/assets/bubble.png
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/assets/pc306715.jpg
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/init.rb
ADDED
data/lib/gruff.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Extra full path added to fix loading errors on some installations.
|
2
|
+
|
3
|
+
%w(
|
4
|
+
base
|
5
|
+
area
|
6
|
+
bar
|
7
|
+
line
|
8
|
+
pie
|
9
|
+
spider
|
10
|
+
net
|
11
|
+
stacked_area
|
12
|
+
stacked_bar
|
13
|
+
side_stacked_bar
|
14
|
+
side_bar
|
15
|
+
accumulator_bar
|
16
|
+
|
17
|
+
scene
|
18
|
+
|
19
|
+
mini/legend
|
20
|
+
mini/bar
|
21
|
+
mini/pie
|
22
|
+
mini/side_bar
|
23
|
+
).each do |filename|
|
24
|
+
require File.dirname(__FILE__) + "/gruff/#{filename}"
|
25
|
+
end
|
26
|
+
|
27
|
+
# TODO bullet
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base'
|
2
|
+
|
3
|
+
##
|
4
|
+
# A special bar graph that shows a single dataset as a set of
|
5
|
+
# stacked bars. The bottom bar shows the running total and
|
6
|
+
# the top bar shows the new value being added to the array.
|
7
|
+
|
8
|
+
class Gruff::AccumulatorBar < Gruff::StackedBar
|
9
|
+
|
10
|
+
def draw
|
11
|
+
raise(Gruff::IncorrectNumberOfDatasetsException) unless @data.length == 1
|
12
|
+
|
13
|
+
accumulator_array = []
|
14
|
+
index = 0
|
15
|
+
|
16
|
+
increment_array = @data.first[DATA_VALUES_INDEX].inject([]) {|memo, value|
|
17
|
+
memo << ((index > 0) ? (value + memo.max) : value)
|
18
|
+
accumulator_array << memo[index] - value
|
19
|
+
index += 1
|
20
|
+
memo
|
21
|
+
}
|
22
|
+
data "Accumulator", accumulator_array
|
23
|
+
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/lib/gruff/area.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/base'
|
3
|
+
|
4
|
+
class Gruff::Area < Gruff::Base
|
5
|
+
|
6
|
+
def draw
|
7
|
+
super
|
8
|
+
|
9
|
+
return unless @has_data
|
10
|
+
|
11
|
+
@x_increment = @graph_width / (@column_count - 1).to_f
|
12
|
+
@d = @d.stroke 'transparent'
|
13
|
+
|
14
|
+
@norm_data.each do |data_row|
|
15
|
+
poly_points = Array.new
|
16
|
+
prev_x = prev_y = 0.0
|
17
|
+
@d = @d.fill data_row[DATA_COLOR_INDEX]
|
18
|
+
|
19
|
+
data_row[1].each_with_index do |data_point, index|
|
20
|
+
# Use incremented x and scaled y
|
21
|
+
new_x = @graph_left + (@x_increment * index)
|
22
|
+
new_y = @graph_top + (@graph_height - data_point * @graph_height)
|
23
|
+
|
24
|
+
if prev_x > 0 and prev_y > 0 then
|
25
|
+
poly_points << new_x
|
26
|
+
poly_points << new_y
|
27
|
+
|
28
|
+
#@d = @d.polyline(prev_x, prev_y, new_x, new_y)
|
29
|
+
else
|
30
|
+
poly_points << @graph_left
|
31
|
+
poly_points << @graph_bottom - 1
|
32
|
+
poly_points << new_x
|
33
|
+
poly_points << new_y
|
34
|
+
|
35
|
+
#@d = @d.polyline(@graph_left, @graph_bottom, new_x, new_y)
|
36
|
+
end
|
37
|
+
|
38
|
+
draw_label(new_x, index)
|
39
|
+
|
40
|
+
prev_x = new_x
|
41
|
+
prev_y = new_y
|
42
|
+
end
|
43
|
+
|
44
|
+
# Add closing points, draw polygon
|
45
|
+
poly_points << @graph_right
|
46
|
+
poly_points << @graph_bottom - 1
|
47
|
+
poly_points << @graph_left
|
48
|
+
poly_points << @graph_bottom - 1
|
49
|
+
|
50
|
+
@d = @d.polyline(*poly_points)
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
@d.draw(@base_image)
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
end
|