gruff 0.8.0-java → 0.9.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +18 -0
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +93 -0
  5. data/.rubocop_todo.yml +23 -810
  6. data/.travis.yml +4 -4
  7. data/.yardopts +1 -0
  8. data/CHANGELOG.md +22 -0
  9. data/Gemfile +3 -1
  10. data/README.md +44 -21
  11. data/Rakefile +2 -206
  12. data/docker/Dockerfile +14 -0
  13. data/docker/build.sh +4 -0
  14. data/docker/launch.sh +4 -0
  15. data/gruff.gemspec +11 -8
  16. data/init.rb +2 -0
  17. data/lib/gruff.rb +23 -0
  18. data/lib/gruff/accumulator_bar.rb +6 -6
  19. data/lib/gruff/area.rb +13 -17
  20. data/lib/gruff/bar.rb +58 -41
  21. data/lib/gruff/base.rb +243 -566
  22. data/lib/gruff/bezier.rb +12 -14
  23. data/lib/gruff/bullet.rb +39 -57
  24. data/lib/gruff/dot.rb +25 -59
  25. data/lib/gruff/{bar_conversion.rb → helper/bar_conversion.rb} +13 -12
  26. data/lib/gruff/helper/bar_value_label_mixin.rb +30 -0
  27. data/lib/gruff/{stacked_mixin.rb → helper/stacked_mixin.rb} +7 -6
  28. data/lib/gruff/line.rb +95 -177
  29. data/lib/gruff/mini/bar.rb +6 -7
  30. data/lib/gruff/mini/legend.rb +16 -32
  31. data/lib/gruff/mini/pie.rb +6 -7
  32. data/lib/gruff/mini/side_bar.rb +4 -5
  33. data/lib/gruff/net.rb +37 -65
  34. data/lib/gruff/patch/rmagick.rb +33 -0
  35. data/lib/gruff/patch/string.rb +8 -0
  36. data/lib/gruff/photo_bar.rb +19 -19
  37. data/lib/gruff/pie.rb +22 -73
  38. data/lib/gruff/renderer/bezier.rb +21 -0
  39. data/lib/gruff/renderer/circle.rb +21 -0
  40. data/lib/gruff/renderer/dash_line.rb +22 -0
  41. data/lib/gruff/renderer/dot.rb +39 -0
  42. data/lib/gruff/renderer/ellipse.rb +21 -0
  43. data/lib/gruff/renderer/line.rb +34 -0
  44. data/lib/gruff/renderer/polygon.rb +23 -0
  45. data/lib/gruff/renderer/polyline.rb +21 -0
  46. data/lib/gruff/renderer/rectangle.rb +19 -0
  47. data/lib/gruff/renderer/renderer.rb +127 -0
  48. data/lib/gruff/renderer/text.rb +42 -0
  49. data/lib/gruff/scatter.rb +85 -156
  50. data/lib/gruff/scene.rb +22 -30
  51. data/lib/gruff/side_bar.rb +62 -58
  52. data/lib/gruff/side_stacked_bar.rb +47 -43
  53. data/lib/gruff/spider.rb +19 -36
  54. data/lib/gruff/stacked_area.rb +17 -21
  55. data/lib/gruff/stacked_bar.rb +50 -24
  56. data/lib/gruff/store/base_data.rb +34 -0
  57. data/lib/gruff/store/custom_data.rb +34 -0
  58. data/lib/gruff/store/store.rb +80 -0
  59. data/lib/gruff/store/xy_data.rb +55 -0
  60. data/lib/gruff/themes.rb +3 -3
  61. data/lib/gruff/version.rb +3 -1
  62. metadata +41 -30
  63. data/Manifest.txt +0 -81
  64. data/assets/bubble.png +0 -0
  65. data/assets/city_scene/background/0000.png +0 -0
  66. data/assets/city_scene/background/0600.png +0 -0
  67. data/assets/city_scene/background/2000.png +0 -0
  68. data/assets/city_scene/clouds/cloudy.png +0 -0
  69. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  70. data/assets/city_scene/clouds/stormy.png +0 -0
  71. data/assets/city_scene/grass/default.png +0 -0
  72. data/assets/city_scene/haze/true.png +0 -0
  73. data/assets/city_scene/number_sample/1.png +0 -0
  74. data/assets/city_scene/number_sample/2.png +0 -0
  75. data/assets/city_scene/number_sample/default.png +0 -0
  76. data/assets/city_scene/sky/0000.png +0 -0
  77. data/assets/city_scene/sky/0200.png +0 -0
  78. data/assets/city_scene/sky/0400.png +0 -0
  79. data/assets/city_scene/sky/0600.png +0 -0
  80. data/assets/city_scene/sky/0800.png +0 -0
  81. data/assets/city_scene/sky/1000.png +0 -0
  82. data/assets/city_scene/sky/1200.png +0 -0
  83. data/assets/city_scene/sky/1400.png +0 -0
  84. data/assets/city_scene/sky/1500.png +0 -0
  85. data/assets/city_scene/sky/1700.png +0 -0
  86. data/assets/city_scene/sky/2000.png +0 -0
  87. data/assets/pc306715.jpg +0 -0
  88. data/lib/gruff/deprecated.rb +0 -38
@@ -1,5 +1,7 @@
1
- require File.dirname(__FILE__) + '/base'
2
- require File.dirname(__FILE__) + '/stacked_mixin'
1
+ # frozen_string_literal: true
2
+
3
+ require 'gruff/base'
4
+ require 'gruff/helper/stacked_mixin'
3
5
 
4
6
  class Gruff::StackedArea < Gruff::Base
5
7
  include StackedMixin
@@ -9,24 +11,21 @@ class Gruff::StackedArea < Gruff::Base
9
11
  get_maximum_by_stack
10
12
  super
11
13
 
12
- return unless @has_data
14
+ return unless data_given?
13
15
 
14
- @x_increment = @graph_width / (@column_count - 1).to_f
15
- @d = @d.stroke 'transparent'
16
+ x_increment = @graph_width / (column_count - 1).to_f
16
17
 
17
- height = Array.new(@column_count, 0)
18
+ height = Array.new(column_count, 0)
18
19
 
19
20
  data_points = nil
20
21
  iterator = last_series_goes_on_bottom ? :reverse_each : :each
21
- @norm_data.send(iterator) do |data_row|
22
+ store.norm_data.public_send(iterator) do |data_row|
22
23
  prev_data_points = data_points
23
- data_points = Array.new
24
-
25
- @d = @d.fill data_row[DATA_COLOR_INDEX]
24
+ data_points = []
26
25
 
27
- data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index|
26
+ data_row.points.each_with_index do |data_point, index|
28
27
  # Use incremented x and scaled y
29
- new_x = @graph_left + (@x_increment * index)
28
+ new_x = @graph_left + (x_increment * index)
30
29
  new_y = @graph_top + (@graph_height - data_point * @graph_height - height[index])
31
30
 
32
31
  height[index] += (data_point * @graph_height)
@@ -37,27 +36,24 @@ class Gruff::StackedArea < Gruff::Base
37
36
  draw_label(new_x, index)
38
37
  end
39
38
 
39
+ poly_points = data_points.dup
40
40
  if prev_data_points
41
- poly_points = data_points.dup
42
41
  (prev_data_points.length / 2 - 1).downto(0) do |i|
43
42
  poly_points << prev_data_points[2 * i]
44
43
  poly_points << prev_data_points[2 * i + 1]
45
44
  end
46
- poly_points << data_points[0]
47
- poly_points << data_points[1]
48
45
  else
49
- poly_points = data_points.dup
50
46
  poly_points << @graph_right
51
47
  poly_points << @graph_bottom - 1
52
48
  poly_points << @graph_left
53
49
  poly_points << @graph_bottom - 1
54
- poly_points << data_points[0]
55
- poly_points << data_points[1]
56
50
  end
57
- @d = @d.polyline(*poly_points)
51
+ poly_points << data_points[0]
52
+ poly_points << data_points[1]
53
+
54
+ Gruff::Renderer::Polygon.new(color: data_row.color).render(poly_points)
58
55
  end
59
56
 
60
- @d.draw(@base_image)
57
+ Gruff::Renderer.finish
61
58
  end
62
-
63
59
  end
@@ -1,59 +1,85 @@
1
- require File.dirname(__FILE__) + '/base'
2
- require File.dirname(__FILE__) + '/stacked_mixin'
1
+ # frozen_string_literal: true
2
+
3
+ require 'gruff/base'
4
+ require 'gruff/helper/stacked_mixin'
5
+ require 'gruff/helper/bar_value_label_mixin'
3
6
 
4
7
  class Gruff::StackedBar < Gruff::Base
5
8
  include StackedMixin
9
+ include BarValueLabelMixin
6
10
 
7
- # Spacing factor applied between bars
11
+ # Spacing factor applied between bars.
8
12
  attr_accessor :bar_spacing
9
13
 
10
- # Number of pixels between bar segments
14
+ # Number of pixels between bar segments.
11
15
  attr_accessor :segment_spacing
12
16
 
17
+ # Set the number output format for labels using sprintf.
18
+ # Default is +"%.2f"+.
19
+ attr_accessor :label_formatting
20
+
21
+ # Output the values for the bars on a bar graph.
22
+ # Default is +false+.
23
+ attr_accessor :show_labels_for_bar_values
24
+
25
+ def initialize_ivars
26
+ super
27
+ @label_formatting = nil
28
+ @show_labels_for_bar_values = false
29
+ end
30
+ private :initialize_ivars
31
+
13
32
  # Draws a bar graph, but multiple sets are stacked on top of each other.
14
33
  def draw
15
34
  get_maximum_by_stack
16
35
  super
17
- return unless @has_data
36
+ return unless data_given?
18
37
 
19
38
  # Setup spacing.
20
39
  #
21
40
  # Columns sit stacked.
22
41
  @bar_spacing ||= 0.9
23
- @segment_spacing ||= 1
24
- @bar_width = @graph_width / @column_count.to_f
25
- padding = (@bar_width * (1 - @bar_spacing)) / 2
26
-
27
- @d = @d.stroke_opacity 0.0
42
+ @segment_spacing ||= 2
28
43
 
29
- height = Array.new(@column_count, 0)
44
+ bar_width = @graph_width / column_count.to_f
45
+ padding = (bar_width * (1 - @bar_spacing)) / 2
30
46
 
31
- @norm_data.each_with_index do |data_row, row_index|
32
- data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index|
33
- @d = @d.fill data_row[DATA_COLOR_INDEX]
34
-
35
- # Calculate center based on bar_width and current row
36
- label_center = @graph_left + (@bar_width * point_index) + (@bar_width * @bar_spacing / 2.0)
37
- draw_label(label_center, point_index)
47
+ height = Array.new(column_count, 0)
48
+ bar_value_label = BarValueLabel.new(column_count, bar_width)
38
49
 
50
+ store.norm_data.each_with_index do |data_row, row_index|
51
+ data_row.points.each_with_index do |data_point, point_index|
39
52
  next if data_point == 0
40
53
 
41
54
  # Use incremented x and scaled y
42
- left_x = @graph_left + (@bar_width * point_index) + padding
55
+ left_x = @graph_left + (bar_width * point_index) + padding
43
56
  left_y = @graph_top + (@graph_height -
44
57
  data_point * @graph_height -
45
58
  height[point_index]) + @segment_spacing
46
- right_x = left_x + @bar_width * @bar_spacing
47
- right_y = @graph_top + @graph_height - height[point_index] - @segment_spacing
59
+ right_x = left_x + bar_width * @bar_spacing
60
+ right_y = @graph_top + @graph_height - height[point_index]
48
61
 
49
62
  # update the total height of the current stacked bar
50
63
  height[point_index] += (data_point * @graph_height)
51
64
 
52
- @d = @d.rectangle(left_x, left_y, right_x, right_y)
65
+ rect_renderer = Gruff::Renderer::Rectangle.new(color: data_row.color)
66
+ rect_renderer.render(left_x, left_y, right_x, right_y)
67
+
68
+ # Calculate center based on bar_width and current row
69
+ label_center = left_x + bar_width * @bar_spacing / 2.0
70
+ draw_label(label_center, point_index)
71
+
72
+ bar_value_label.coordinates[point_index] = [left_x, left_y, right_x, right_y]
73
+ bar_value_label.values[point_index] += store.data[row_index].points[point_index]
53
74
  end
54
75
  end
55
76
 
56
- @d.draw(@base_image)
57
- end
77
+ if @show_labels_for_bar_values
78
+ bar_value_label.prepare_rendering(@label_formatting) do |x, y, text|
79
+ draw_value_label(x, y, text, true)
80
+ end
81
+ end
58
82
 
83
+ Gruff::Renderer.finish
84
+ end
59
85
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gruff
4
+ # @private
5
+ class Store
6
+ class BaseData < Struct.new(:label, :points, :color)
7
+ def initialize(label, points, color)
8
+ self.label = label
9
+ self.points = Array(points)
10
+ self.color = color
11
+ end
12
+
13
+ def columns
14
+ points.length
15
+ end
16
+
17
+ def min
18
+ points.compact.min
19
+ end
20
+
21
+ def max
22
+ points.compact.max
23
+ end
24
+
25
+ def normalize(args = {})
26
+ norm_points = points.map do |point|
27
+ point.nil? ? nil : (point.to_f - args[:minimum].to_f) / args[:spread]
28
+ end
29
+
30
+ self.class.new(label, norm_points, color)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gruff
4
+ class Store
5
+ class CustomData < Struct.new(:label, :points, :color, :custom)
6
+ def initialize(label, points, color, custom = nil)
7
+ self.label = label
8
+ self.points = Array(points)
9
+ self.color = color
10
+ self.custom = custom
11
+ end
12
+
13
+ def columns
14
+ points.length
15
+ end
16
+
17
+ def min
18
+ points.compact.min
19
+ end
20
+
21
+ def max
22
+ points.compact.max
23
+ end
24
+
25
+ def normalize(args = {})
26
+ norm_points = points.map do |point|
27
+ point.nil? ? nil : (point.to_f - args[:minimum].to_f) / args[:spread]
28
+ end
29
+
30
+ self.class.new(label, norm_points, color, custom)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gruff
4
+ class Store
5
+ attr_reader :data, :norm_data
6
+
7
+ def initialize(data_class)
8
+ @data_class = data_class
9
+ @data = []
10
+ @norm_data = []
11
+ @normalized = false
12
+ end
13
+
14
+ def add(*args)
15
+ @data << @data_class.new(*args)
16
+ end
17
+
18
+ def normalize(args = {})
19
+ unless @normalized
20
+ @data.each do |data_row|
21
+ @norm_data << data_row.normalize(args)
22
+ end
23
+
24
+ @normalized = true
25
+ end
26
+ end
27
+
28
+ def empty?
29
+ @data.empty?
30
+ end
31
+
32
+ def length
33
+ @data.length
34
+ end
35
+
36
+ def columns
37
+ @columns ||= @data.empty? ? 0 : @data.map(&:columns).max
38
+ end
39
+
40
+ def min
41
+ @min ||= @data.map(&:min).compact.min
42
+ end
43
+ alias min_y min
44
+
45
+ def max
46
+ @max ||= @data.map(&:max).compact.max
47
+ end
48
+ alias max_y max
49
+
50
+ def min_x
51
+ @min_x ||= @data.map(&:min_x).compact.min
52
+ end
53
+
54
+ def max_x
55
+ @max_x ||= @data.map(&:max_x).compact.max
56
+ end
57
+
58
+ def sort_data!
59
+ @data = @data.sort_by { |a| -a.points.reduce(0) { |acc, elem| acc + elem.to_f } }
60
+ end
61
+
62
+ def sort_norm_data!
63
+ @norm_data = @norm_data.sort_by { |a| -a.points.reduce(0) { |acc, elem| acc + elem.to_f } }
64
+ end
65
+
66
+ def reverse!
67
+ @data.reverse!
68
+ end
69
+
70
+ def set_colors!(colors)
71
+ index = 0
72
+ @data.each do |data_row|
73
+ data_row.color ||= begin
74
+ index = (index + 1) % colors.length
75
+ colors[index - 1]
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gruff
4
+ class Store
5
+ class XYData < Struct.new(:label, :y_points, :color, :x_points)
6
+ def initialize(label, y_points, color, x_points = nil)
7
+ self.label = label
8
+ self.y_points = Array(y_points)
9
+ self.color = color
10
+ self.x_points = Array(x_points) if x_points
11
+ end
12
+
13
+ def x_points
14
+ self[:x_points] || Array.new(y_points.length)
15
+ end
16
+
17
+ def coordinates
18
+ x_points.zip(y_points)
19
+ end
20
+
21
+ def columns
22
+ y_points.length
23
+ end
24
+
25
+ def min
26
+ y_points.compact.min
27
+ end
28
+ alias min_y min
29
+
30
+ def max
31
+ y_points.compact.max
32
+ end
33
+ alias max_y max
34
+
35
+ def min_x
36
+ x_points.compact.min
37
+ end
38
+
39
+ def max_x
40
+ x_points.compact.max
41
+ end
42
+
43
+ def normalize(args = {})
44
+ norm_x_points = x_points.map do |x|
45
+ x.nil? ? nil : (x.to_f - args[:minimum_x].to_f) / args[:spread_x]
46
+ end
47
+ norm_y_points = y_points.map do |y|
48
+ y.nil? ? nil : (y.to_f - args[:minimum_y].to_f) / args[:spread_y]
49
+ end
50
+
51
+ self.class.new(label, norm_y_points, color, norm_x_points)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gruff
2
4
  module Themes
3
-
4
5
  # A color scheme similar to the popular presentation software.
5
6
  KEYNOTE = {
6
7
  colors: [
@@ -90,12 +91,11 @@ module Gruff
90
91
  '#686868',
91
92
  '#989898',
92
93
  '#c8c8c8',
93
- '#e8e8e8',
94
+ '#e8e8e8'
94
95
  ],
95
96
  marker_color: '#aea9a9', # Grey
96
97
  font_color: 'black',
97
98
  background_colors: 'white'
98
99
  }
99
-
100
100
  end
101
101
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gruff
2
- VERSION = '0.8.0'
4
+ VERSION = '0.9.0'
3
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gruff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: java
6
6
  authors:
7
7
  - Geoffrey Grosenbach
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-04-05 00:00:00.000000000 Z
12
+ date: 2020-05-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: !ruby/object:Gem::Requirement
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.25
62
+ name: yard
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.9.25
56
70
  description: Beautiful graphs for one or multiple datasets. Can be used on websites
57
71
  or in documents.
58
72
  email: boss@topfunky.com
@@ -61,63 +75,57 @@ extensions: []
61
75
  extra_rdoc_files: []
62
76
  files:
63
77
  - ".editorconfig"
78
+ - ".github/ISSUE_TEMPLATE.md"
64
79
  - ".gitignore"
65
80
  - ".rubocop.yml"
66
81
  - ".rubocop_todo.yml"
67
82
  - ".travis.yml"
83
+ - ".yardopts"
68
84
  - CHANGELOG.md
69
85
  - Gemfile
70
86
  - MIT-LICENSE
71
- - Manifest.txt
72
87
  - README.md
73
88
  - Rakefile
74
- - assets/bubble.png
75
- - assets/city_scene/background/0000.png
76
- - assets/city_scene/background/0600.png
77
- - assets/city_scene/background/2000.png
78
- - assets/city_scene/clouds/cloudy.png
79
- - assets/city_scene/clouds/partly_cloudy.png
80
- - assets/city_scene/clouds/stormy.png
81
- - assets/city_scene/grass/default.png
82
- - assets/city_scene/haze/true.png
83
- - assets/city_scene/number_sample/1.png
84
- - assets/city_scene/number_sample/2.png
85
- - assets/city_scene/number_sample/default.png
86
- - assets/city_scene/sky/0000.png
87
- - assets/city_scene/sky/0200.png
88
- - assets/city_scene/sky/0400.png
89
- - assets/city_scene/sky/0600.png
90
- - assets/city_scene/sky/0800.png
91
- - assets/city_scene/sky/1000.png
92
- - assets/city_scene/sky/1200.png
93
- - assets/city_scene/sky/1400.png
94
- - assets/city_scene/sky/1500.png
95
- - assets/city_scene/sky/1700.png
96
- - assets/city_scene/sky/2000.png
97
- - assets/pc306715.jpg
98
89
  - assets/plastik/blue.png
99
90
  - assets/plastik/green.png
100
91
  - assets/plastik/red.png
92
+ - docker/Dockerfile
93
+ - docker/build.sh
94
+ - docker/launch.sh
101
95
  - gruff.gemspec
102
96
  - init.rb
103
97
  - lib/gruff.rb
104
98
  - lib/gruff/accumulator_bar.rb
105
99
  - lib/gruff/area.rb
106
100
  - lib/gruff/bar.rb
107
- - lib/gruff/bar_conversion.rb
108
101
  - lib/gruff/base.rb
109
102
  - lib/gruff/bezier.rb
110
103
  - lib/gruff/bullet.rb
111
- - lib/gruff/deprecated.rb
112
104
  - lib/gruff/dot.rb
105
+ - lib/gruff/helper/bar_conversion.rb
106
+ - lib/gruff/helper/bar_value_label_mixin.rb
107
+ - lib/gruff/helper/stacked_mixin.rb
113
108
  - lib/gruff/line.rb
114
109
  - lib/gruff/mini/bar.rb
115
110
  - lib/gruff/mini/legend.rb
116
111
  - lib/gruff/mini/pie.rb
117
112
  - lib/gruff/mini/side_bar.rb
118
113
  - lib/gruff/net.rb
114
+ - lib/gruff/patch/rmagick.rb
115
+ - lib/gruff/patch/string.rb
119
116
  - lib/gruff/photo_bar.rb
120
117
  - lib/gruff/pie.rb
118
+ - lib/gruff/renderer/bezier.rb
119
+ - lib/gruff/renderer/circle.rb
120
+ - lib/gruff/renderer/dash_line.rb
121
+ - lib/gruff/renderer/dot.rb
122
+ - lib/gruff/renderer/ellipse.rb
123
+ - lib/gruff/renderer/line.rb
124
+ - lib/gruff/renderer/polygon.rb
125
+ - lib/gruff/renderer/polyline.rb
126
+ - lib/gruff/renderer/rectangle.rb
127
+ - lib/gruff/renderer/renderer.rb
128
+ - lib/gruff/renderer/text.rb
121
129
  - lib/gruff/scatter.rb
122
130
  - lib/gruff/scene.rb
123
131
  - lib/gruff/side_bar.rb
@@ -125,7 +133,10 @@ files:
125
133
  - lib/gruff/spider.rb
126
134
  - lib/gruff/stacked_area.rb
127
135
  - lib/gruff/stacked_bar.rb
128
- - lib/gruff/stacked_mixin.rb
136
+ - lib/gruff/store/base_data.rb
137
+ - lib/gruff/store/custom_data.rb
138
+ - lib/gruff/store/store.rb
139
+ - lib/gruff/store/xy_data.rb
129
140
  - lib/gruff/themes.rb
130
141
  - lib/gruff/version.rb
131
142
  - rails_generators/gruff/gruff_generator.rb