gruff 0.7.0-java → 0.12.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.
Files changed (113) hide show
  1. checksums.yaml +5 -5
  2. data/{History.txt → CHANGELOG.md} +81 -25
  3. data/Gemfile +3 -1
  4. data/README.md +51 -23
  5. data/assets/plastik/blue.png +0 -0
  6. data/assets/plastik/green.png +0 -0
  7. data/assets/plastik/red.png +0 -0
  8. data/gruff.gemspec +23 -13
  9. data/init.rb +2 -0
  10. data/lib/gruff.rb +33 -4
  11. data/lib/gruff/accumulator_bar.rb +17 -9
  12. data/lib/gruff/area.rb +31 -21
  13. data/lib/gruff/bar.rb +90 -46
  14. data/lib/gruff/base.rb +476 -710
  15. data/lib/gruff/bezier.rb +29 -18
  16. data/lib/gruff/bullet.rb +58 -71
  17. data/lib/gruff/dot.rb +35 -83
  18. data/lib/gruff/helper/bar_conversion.rb +47 -0
  19. data/lib/gruff/helper/bar_value_label_mixin.rb +33 -0
  20. data/lib/gruff/helper/stacked_mixin.rb +23 -0
  21. data/lib/gruff/histogram.rb +59 -0
  22. data/lib/gruff/line.rb +121 -199
  23. data/lib/gruff/mini/bar.rb +17 -10
  24. data/lib/gruff/mini/legend.rb +26 -38
  25. data/lib/gruff/mini/pie.rb +18 -13
  26. data/lib/gruff/mini/side_bar.rb +25 -12
  27. data/lib/gruff/net.rb +69 -83
  28. data/lib/gruff/patch/rmagick.rb +31 -0
  29. data/lib/gruff/patch/string.rb +13 -0
  30. data/lib/gruff/photo_bar.rb +36 -43
  31. data/lib/gruff/pie.rb +42 -103
  32. data/lib/gruff/renderer/bezier.rb +22 -0
  33. data/lib/gruff/renderer/circle.rb +22 -0
  34. data/lib/gruff/renderer/dash_line.rb +23 -0
  35. data/lib/gruff/renderer/dot.rb +40 -0
  36. data/lib/gruff/renderer/ellipse.rb +22 -0
  37. data/lib/gruff/renderer/line.rb +43 -0
  38. data/lib/gruff/renderer/polygon.rb +24 -0
  39. data/lib/gruff/renderer/polyline.rb +22 -0
  40. data/lib/gruff/renderer/rectangle.rb +20 -0
  41. data/lib/gruff/renderer/renderer.rb +120 -0
  42. data/lib/gruff/renderer/text.rb +57 -0
  43. data/lib/gruff/scatter.rb +128 -201
  44. data/lib/gruff/scene.rb +30 -41
  45. data/lib/gruff/side_bar.rb +100 -68
  46. data/lib/gruff/side_stacked_bar.rb +92 -63
  47. data/lib/gruff/spider.rb +47 -53
  48. data/lib/gruff/stacked_area.rb +37 -34
  49. data/lib/gruff/stacked_bar.rb +99 -54
  50. data/lib/gruff/store/basic_data.rb +36 -0
  51. data/lib/gruff/store/custom_data.rb +36 -0
  52. data/lib/gruff/store/store.rb +81 -0
  53. data/lib/gruff/store/xy_data.rb +58 -0
  54. data/lib/gruff/themes.rb +32 -33
  55. data/lib/gruff/version.rb +3 -1
  56. metadata +74 -102
  57. data/.gitignore +0 -7
  58. data/.travis.yml +0 -19
  59. data/Manifest.txt +0 -81
  60. data/RELEASE.md +0 -30
  61. data/Rakefile +0 -218
  62. data/assets/bubble.png +0 -0
  63. data/assets/city_scene/background/0000.png +0 -0
  64. data/assets/city_scene/background/0600.png +0 -0
  65. data/assets/city_scene/background/2000.png +0 -0
  66. data/assets/city_scene/clouds/cloudy.png +0 -0
  67. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  68. data/assets/city_scene/clouds/stormy.png +0 -0
  69. data/assets/city_scene/grass/default.png +0 -0
  70. data/assets/city_scene/haze/true.png +0 -0
  71. data/assets/city_scene/number_sample/1.png +0 -0
  72. data/assets/city_scene/number_sample/2.png +0 -0
  73. data/assets/city_scene/number_sample/default.png +0 -0
  74. data/assets/city_scene/sky/0000.png +0 -0
  75. data/assets/city_scene/sky/0200.png +0 -0
  76. data/assets/city_scene/sky/0400.png +0 -0
  77. data/assets/city_scene/sky/0600.png +0 -0
  78. data/assets/city_scene/sky/0800.png +0 -0
  79. data/assets/city_scene/sky/1000.png +0 -0
  80. data/assets/city_scene/sky/1200.png +0 -0
  81. data/assets/city_scene/sky/1400.png +0 -0
  82. data/assets/city_scene/sky/1500.png +0 -0
  83. data/assets/city_scene/sky/1700.png +0 -0
  84. data/assets/city_scene/sky/2000.png +0 -0
  85. data/assets/pc306715.jpg +0 -0
  86. data/lib/gruff/bar_conversion.rb +0 -46
  87. data/lib/gruff/deprecated.rb +0 -39
  88. data/lib/gruff/stacked_mixin.rb +0 -23
  89. data/test/gruff_test_case.rb +0 -152
  90. data/test/image_compare.rb +0 -58
  91. data/test/test_accumulator_bar.rb +0 -51
  92. data/test/test_area.rb +0 -134
  93. data/test/test_bar.rb +0 -505
  94. data/test/test_base.rb +0 -33
  95. data/test/test_bezier.rb +0 -33
  96. data/test/test_bullet.rb +0 -26
  97. data/test/test_dot.rb +0 -263
  98. data/test/test_labels_for_null_data.rb +0 -27
  99. data/test/test_legend.rb +0 -68
  100. data/test/test_line.rb +0 -674
  101. data/test/test_mini_bar.rb +0 -33
  102. data/test/test_mini_pie.rb +0 -25
  103. data/test/test_mini_side_bar.rb +0 -36
  104. data/test/test_net.rb +0 -231
  105. data/test/test_photo.rb +0 -41
  106. data/test/test_pie.rb +0 -194
  107. data/test/test_scatter.rb +0 -270
  108. data/test/test_scene.rb +0 -100
  109. data/test/test_side_bar.rb +0 -56
  110. data/test/test_sidestacked_bar.rb +0 -105
  111. data/test/test_spider.rb +0 -226
  112. data/test/test_stacked_area.rb +0 -52
  113. data/test/test_stacked_bar.rb +0 -68
@@ -1,39 +0,0 @@
1
-
2
- ##
3
- # A mixin for methods that need to be deleted or have been
4
- # replaced by cleaner code.
5
-
6
- module Gruff
7
- module Deprecated
8
-
9
- def scale_measurements
10
- setup_graph_measurements
11
- end
12
-
13
- def total_height
14
- @rows + 10
15
- end
16
-
17
- def graph_top
18
- @graph_top * @scale
19
- end
20
-
21
- def graph_height
22
- @graph_height * @scale
23
- end
24
-
25
- def graph_left
26
- @graph_left * @scale
27
- end
28
-
29
- def graph_width
30
- @graph_width * @scale
31
- end
32
-
33
- # TODO Should be calculate_graph_height
34
- # def setup_graph_height
35
- # @graph_height = @graph_bottom - @graph_top
36
- # end
37
-
38
- end
39
- end
@@ -1,23 +0,0 @@
1
-
2
- module Gruff::Base::StackedMixin
3
- # Used by StackedBar and child classes.
4
- #
5
- # tsal: moved from Base 03 FEB 2007
6
- DATA_VALUES_INDEX = Gruff::Base::DATA_VALUES_INDEX
7
- def get_maximum_by_stack
8
- # Get sum of each stack
9
- max_hash = {}
10
- @data.each do |data_set|
11
- data_set[DATA_VALUES_INDEX].each_with_index do |data_point, i|
12
- max_hash[i] = 0.0 unless max_hash[i]
13
- max_hash[i] += data_point.to_f
14
- end
15
- end
16
-
17
- # @maximum_value = 0
18
- max_hash.keys.each do |key|
19
- @maximum_value = max_hash[key] if max_hash[key] > @maximum_value
20
- end
21
- @minimum_value = 0
22
- end
23
- end
@@ -1,152 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../lib/')
2
-
3
- RMAGICK_BYPASS_VERSION_TEST = true
4
-
5
- require 'gruff'
6
- require 'fileutils'
7
-
8
- TEST_OUTPUT_DIR = File.dirname(__FILE__) + "/output#{'_java' if RUBY_PLATFORM == 'java'}"
9
- FileUtils.mkdir_p(TEST_OUTPUT_DIR)
10
- FileUtils.rm_f Dir[TEST_OUTPUT_DIR + '/*']
11
-
12
- require 'minitest/autorun'
13
- require 'minitest/reporters'
14
- Minitest::Reporters.use!
15
-
16
- class Gruff::Base
17
- alias :write_org :write
18
-
19
- def write(filename='graph.png')
20
- basefilename = File.basename(filename).split('.')[0..-2].join('.')
21
- extension = filename.slice(/\.[^\.]*$/)
22
- testfilename = File.join(TEST_OUTPUT_DIR, basefilename) + extension
23
- counter = 0
24
- while File.exist?(testfilename)
25
- counter += 1
26
- testfilename = File.join(TEST_OUTPUT_DIR, basefilename) + "-#{counter}#{extension}"
27
- end
28
- write_org(testfilename)
29
- end
30
- end
31
-
32
- class GruffTestCase < Minitest::Test
33
- def setup
34
- srand 42
35
- @datasets = [
36
- [:Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]],
37
- [:Charles, [80, 54, 67, 54, 68, 70, 90, 95]],
38
- [:Julie, [22, 29, 35, 38, 36, 40, 46, 57]],
39
- [:Jane, [95, 95, 95, 90, 85, 80, 88, 100]],
40
- [:Philip, [90, 34, 23, 12, 78, 89, 98, 88]],
41
- [:Arthur, [5, 10, 13, 11, 6, 16, 22, 32]],
42
- ]
43
-
44
- @labels = {
45
- 0 => '5/6',
46
- 1 => '5/15',
47
- 2 => '5/24',
48
- 3 => '5/30',
49
- 4 => '6/4',
50
- 5 => '6/12',
51
- 6 => '6/21',
52
- 7 => '6/28',
53
- }
54
- end
55
-
56
- def setup_single_dataset
57
- @datasets = [
58
- [:Jimmy, [25, 36, 86]]
59
- ]
60
-
61
- @labels = {
62
- 0 => 'You',
63
- 1 => 'Average',
64
- 2 => 'Lifetime'
65
- }
66
- end
67
-
68
- def setup_wide_dataset
69
- @datasets = [
70
- ['Auto', 25],
71
- ['Food', 5],
72
- ['Entertainment', 15]
73
- ]
74
-
75
- @labels = {0 => 'This Month'}
76
- end
77
-
78
- def test_dummy
79
- assert true
80
- end
81
-
82
- protected
83
-
84
- # Generate graphs at several sizes.
85
- #
86
- # Also writes the graph to disk.
87
- #
88
- # graph_sized 'bar_basic' do |g|
89
- # g.data('students', [1, 2, 3, 4])
90
- # end
91
- #
92
- def graph_sized(filename, sizes=['', 400])
93
- class_name = self.class.name.gsub(/^TestGruff/, '')
94
- Array(sizes).each do |size|
95
- g = instance_eval("Gruff::#{class_name}.new #{size}")
96
- g.title = "#{class_name} Graph"
97
- yield g
98
- write_test_file g, "#{filename}_#{size}.png"
99
- end
100
- end
101
-
102
- def write_test_file(graph, filename)
103
- testfilename = [TEST_OUTPUT_DIR, filename].join('/')
104
- basefilename = filename.split('.')[0..-2].join('.')
105
- extension = filename.slice(/\..*$/)
106
- counter = 0
107
- while File.exist? testfilename
108
- counter += 1
109
- testfilename = [TEST_OUTPUT_DIR, basefilename].join('/') + "-#{counter}#{extension}"
110
- end
111
- graph.write(testfilename)
112
- end
113
-
114
- ##
115
- # Example:
116
- #
117
- # setup_basic_graph Gruff::Pie, 400
118
- #
119
- def setup_basic_graph(*args)
120
- klass, size = Gruff::Bar, 400
121
- # Allow args to be klass, size or just klass or just size.
122
- #
123
- # TODO Refactor
124
- case args.length
125
- when 1
126
- case args[0]
127
- when Fixnum
128
- size = args[0]
129
- klass = eval("Gruff::#{self.class.name.gsub(/^TestGruff/, '')}")
130
- when String
131
- size = args[0]
132
- klass = eval("Gruff::#{self.class.name.gsub(/^TestGruff/, '')}")
133
- else
134
- klass = args[0]
135
- end
136
- when 2
137
- klass, size = args[0], args[1]
138
- end
139
-
140
- g = klass.new(size)
141
- g.title = 'My Bar Graph'
142
- g.labels = @labels
143
- g.font = '/Library/Fonts/Verdana.ttf'
144
-
145
-
146
- @datasets.each do |data|
147
- g.data(data[0], data[1])
148
- end
149
- g
150
- end
151
-
152
- end
@@ -1,58 +0,0 @@
1
- #!ruby
2
-
3
- require 'chunky_png'
4
-
5
- class ImageCompare
6
- include ChunkyPNG::Color
7
-
8
- def self.compare(file_name, old_file_name)
9
- name = file_name.chomp('.png')
10
- org_file_name = "#{name}_0.png~"
11
- new_file_name = "#{name}_1.png~"
12
-
13
- return nil unless File.exists? old_file_name
14
- images = [
15
- ChunkyPNG::Image.from_file(old_file_name),
16
- ChunkyPNG::Image.from_file(file_name),
17
- ]
18
-
19
- sizes = images.map(&:width).uniq + images.map(&:height).uniq
20
- if sizes.size != 2
21
- logger.warn "Image size has changed for #{name}: #{sizes}"
22
- return nil
23
- end
24
-
25
- diff = []
26
- images.first.height.times do |y|
27
- images.first.row(y).each_with_index do |pixel, x|
28
- unless pixel == images.last[x, y]
29
- diff << [x, y]
30
- end
31
- end
32
- end
33
-
34
- if diff.empty?
35
- File.delete(org_file_name) if File.exists? org_file_name
36
- File.delete(new_file_name) if File.exists? new_file_name
37
- return false
38
- end
39
-
40
- x, y = diff.map { |xy| xy[0] }, diff.map { |xy| xy[1] }
41
- (1..2).each do |i|
42
- images.each do |image|
43
- image.rect(x.min - i, y.min - i, x.max + i, y.max + i, ChunkyPNG::Color.rgb(255, 0, 0))
44
- end
45
- end
46
- images.first.save(org_file_name)
47
- images.last.save(new_file_name)
48
- true
49
- end
50
- end
51
-
52
- if $0 == __FILE__
53
- unless ARGV.size == 2
54
- puts "Usage: #$0 <image1> <image2>"
55
- exit 1
56
- end
57
- ImageCompare.compare(ARGV[0], ARGV[1])
58
- end
@@ -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_raises(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
@@ -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