gruff 0.5.1 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +5 -5
  2. data/.editorconfig +14 -0
  3. data/.github/ISSUE_TEMPLATE.md +18 -0
  4. data/.gitignore +3 -0
  5. data/.rubocop.yml +109 -0
  6. data/.rubocop_todo.yml +130 -0
  7. data/.travis.yml +24 -12
  8. data/.yardopts +1 -0
  9. data/{History.txt → CHANGELOG.md} +61 -25
  10. data/Gemfile +3 -7
  11. data/README.md +57 -25
  12. data/Rakefile +6 -201
  13. data/assets/plastik/blue.png +0 -0
  14. data/assets/plastik/green.png +0 -0
  15. data/assets/plastik/red.png +0 -0
  16. data/docker/Dockerfile +14 -0
  17. data/docker/build.sh +4 -0
  18. data/docker/launch.sh +4 -0
  19. data/gruff.gemspec +19 -14
  20. data/init.rb +2 -0
  21. data/lib/gruff.rb +26 -2
  22. data/lib/gruff/accumulator_bar.rb +18 -8
  23. data/lib/gruff/area.rb +33 -19
  24. data/lib/gruff/bar.rb +76 -45
  25. data/lib/gruff/base.rb +337 -613
  26. data/lib/gruff/bezier.rb +34 -19
  27. data/lib/gruff/bullet.rb +51 -62
  28. data/lib/gruff/dot.rb +38 -62
  29. data/lib/gruff/helper/bar_conversion.rb +47 -0
  30. data/lib/gruff/helper/bar_value_label_mixin.rb +30 -0
  31. data/lib/gruff/helper/stacked_mixin.rb +23 -0
  32. data/lib/gruff/histogram.rb +59 -0
  33. data/lib/gruff/line.rb +130 -150
  34. data/lib/gruff/mini/bar.rb +17 -10
  35. data/lib/gruff/mini/legend.rb +24 -36
  36. data/lib/gruff/mini/pie.rb +18 -12
  37. data/lib/gruff/mini/side_bar.rb +26 -12
  38. data/lib/gruff/net.rb +60 -84
  39. data/lib/gruff/patch/rmagick.rb +33 -0
  40. data/lib/gruff/patch/string.rb +10 -0
  41. data/lib/gruff/photo_bar.rb +27 -30
  42. data/lib/gruff/pie.rb +190 -93
  43. data/lib/gruff/renderer/bezier.rb +21 -0
  44. data/lib/gruff/renderer/circle.rb +21 -0
  45. data/lib/gruff/renderer/dash_line.rb +22 -0
  46. data/lib/gruff/renderer/dot.rb +39 -0
  47. data/lib/gruff/renderer/ellipse.rb +21 -0
  48. data/lib/gruff/renderer/line.rb +34 -0
  49. data/lib/gruff/renderer/polygon.rb +23 -0
  50. data/lib/gruff/renderer/polyline.rb +21 -0
  51. data/lib/gruff/renderer/rectangle.rb +19 -0
  52. data/lib/gruff/renderer/renderer.rb +127 -0
  53. data/lib/gruff/renderer/text.rb +42 -0
  54. data/lib/gruff/scatter.rb +156 -180
  55. data/lib/gruff/scene.rb +31 -41
  56. data/lib/gruff/side_bar.rb +77 -63
  57. data/lib/gruff/side_stacked_bar.rb +77 -60
  58. data/lib/gruff/spider.rb +37 -50
  59. data/lib/gruff/stacked_area.rb +32 -30
  60. data/lib/gruff/stacked_bar.rb +87 -49
  61. data/lib/gruff/store/base_data.rb +34 -0
  62. data/lib/gruff/store/custom_data.rb +34 -0
  63. data/lib/gruff/store/store.rb +80 -0
  64. data/lib/gruff/store/xy_data.rb +55 -0
  65. data/lib/gruff/themes.rb +32 -33
  66. data/lib/gruff/version.rb +3 -1
  67. metadata +99 -92
  68. data/Manifest.txt +0 -81
  69. data/RELEASE.md +0 -30
  70. data/assets/bubble.png +0 -0
  71. data/assets/city_scene/background/0000.png +0 -0
  72. data/assets/city_scene/background/0600.png +0 -0
  73. data/assets/city_scene/background/2000.png +0 -0
  74. data/assets/city_scene/clouds/cloudy.png +0 -0
  75. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  76. data/assets/city_scene/clouds/stormy.png +0 -0
  77. data/assets/city_scene/grass/default.png +0 -0
  78. data/assets/city_scene/haze/true.png +0 -0
  79. data/assets/city_scene/number_sample/1.png +0 -0
  80. data/assets/city_scene/number_sample/2.png +0 -0
  81. data/assets/city_scene/number_sample/default.png +0 -0
  82. data/assets/city_scene/sky/0000.png +0 -0
  83. data/assets/city_scene/sky/0200.png +0 -0
  84. data/assets/city_scene/sky/0400.png +0 -0
  85. data/assets/city_scene/sky/0600.png +0 -0
  86. data/assets/city_scene/sky/0800.png +0 -0
  87. data/assets/city_scene/sky/1000.png +0 -0
  88. data/assets/city_scene/sky/1200.png +0 -0
  89. data/assets/city_scene/sky/1400.png +0 -0
  90. data/assets/city_scene/sky/1500.png +0 -0
  91. data/assets/city_scene/sky/1700.png +0 -0
  92. data/assets/city_scene/sky/2000.png +0 -0
  93. data/assets/pc306715.jpg +0 -0
  94. data/lib/gruff/bar_conversion.rb +0 -46
  95. data/lib/gruff/deprecated.rb +0 -39
  96. data/lib/gruff/stacked_mixin.rb +0 -23
  97. data/test/gruff_test_case.rb +0 -154
  98. data/test/image_compare.rb +0 -58
  99. data/test/test_accumulator_bar.rb +0 -51
  100. data/test/test_area.rb +0 -134
  101. data/test/test_bar.rb +0 -505
  102. data/test/test_base.rb +0 -8
  103. data/test/test_bezier.rb +0 -33
  104. data/test/test_bullet.rb +0 -26
  105. data/test/test_dot.rb +0 -263
  106. data/test/test_legend.rb +0 -68
  107. data/test/test_line.rb +0 -657
  108. data/test/test_mini_bar.rb +0 -33
  109. data/test/test_mini_pie.rb +0 -25
  110. data/test/test_mini_side_bar.rb +0 -36
  111. data/test/test_net.rb +0 -231
  112. data/test/test_photo.rb +0 -41
  113. data/test/test_pie.rb +0 -154
  114. data/test/test_scatter.rb +0 -233
  115. data/test/test_scene.rb +0 -100
  116. data/test/test_side_bar.rb +0 -56
  117. data/test/test_sidestacked_bar.rb +0 -105
  118. data/test/test_spider.rb +0 -226
  119. data/test/test_stacked_area.rb +0 -52
  120. data/test/test_stacked_bar.rb +0 -52
@@ -1,226 +0,0 @@
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 = Gruff::Themes::THIRTYSEVEN_SIGNALS
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
- def test_rotation
205
- g = Gruff::Spider.new(20)
206
- g.title = "Rotation"
207
- @datasets.each do |data|
208
- g.data(data[0], data[1])
209
- end
210
-
211
- g.rotation = 45 # degrees
212
- g.write("test/output/spider_rotation.png")
213
- end
214
-
215
- protected
216
-
217
- def setup_basic_graph(size=800, max = 20)
218
- g = Gruff::Spider.new(max, size)
219
- g.title = "My Graph Title"
220
- @datasets.each do |data|
221
- g.data(data[0], data[1])
222
- end
223
- return g
224
- end
225
-
226
- end
@@ -1,52 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- require File.dirname(__FILE__) + '/gruff_test_case'
4
-
5
- class TestGruffStackedArea < GruffTestCase
6
-
7
- def setup
8
- @datasets = [
9
- [:Jimmy, [25, 36, 86, 39]],
10
- [:Charles, [80, 54, 67, 54]],
11
- [:Julie, [22, 29, 35, 38]],
12
- ]
13
- @sample_labels = {
14
- 0 => '5/6',
15
- 1 => '5/15',
16
- 2 => '5/24'
17
- }
18
-
19
- end
20
-
21
- def test_area_graph
22
- g = Gruff::StackedArea.new
23
- g.title = 'Visual Stacked Area Graph Test'
24
- g.labels = {
25
- 0 => '5/6',
26
- 1 => '5/15',
27
- 2 => '5/24',
28
- 3 => '5/30',
29
- }
30
- @datasets.each do |data|
31
- g.data(data[0], data[1])
32
- end
33
- g.write 'test/output/stacked_area_keynote.png'
34
- end
35
-
36
-
37
- def test_area_graph_small
38
- g = Gruff::StackedArea.new(400)
39
- g.title = 'Visual Stacked Area Graph Test'
40
- g.labels = {
41
- 0 => '5/6',
42
- 1 => '5/15',
43
- 2 => '5/24',
44
- 3 => '5/30',
45
- }
46
- @datasets.each do |data|
47
- g.data(data[0], data[1])
48
- end
49
- g.write 'test/output/stacked_area_keynote_small.png'
50
- end
51
-
52
- end
@@ -1,52 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- require File.dirname(__FILE__) + "/gruff_test_case"
4
-
5
- class TestGruffStackedBar < GruffTestCase
6
-
7
- def setup
8
- @datasets = [
9
- [:Jimmy, [25, 36, 86, 39]],
10
- [:Charles, [80, 54, 67, 54]],
11
- [:Julie, [22, 29, 35, 38]],
12
- ]
13
- @sample_labels = {
14
- 0 => '5/6',
15
- 1 => '5/15',
16
- 2 => '5/24'
17
- }
18
-
19
- end
20
-
21
- def test_bar_graph
22
- g = Gruff::StackedBar.new
23
- g.title = "Visual Stacked Bar Graph Test"
24
- g.labels = {
25
- 0 => '5/6',
26
- 1 => '5/15',
27
- 2 => '5/24',
28
- 3 => '5/30',
29
- }
30
- @datasets.each do |data|
31
- g.data(data[0], data[1])
32
- end
33
- g.write "test/output/stacked_bar_keynote.png"
34
- end
35
-
36
-
37
- def test_bar_graph_small
38
- g = Gruff::StackedBar.new(400)
39
- g.title = "Visual Stacked Bar Graph Test"
40
- g.labels = {
41
- 0 => '5/6',
42
- 1 => '5/15',
43
- 2 => '5/24',
44
- 3 => '5/30',
45
- }
46
- @datasets.each do |data|
47
- g.data(data[0], data[1])
48
- end
49
- g.write "test/output/stacked_bar_keynote_small.png"
50
- end
51
-
52
- end