gruff 0.11.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/gruff.gemspec +7 -3
  4. data/lib/gruff.rb +8 -3
  5. data/lib/gruff/accumulator_bar.rb +0 -2
  6. data/lib/gruff/area.rb +0 -4
  7. data/lib/gruff/bar.rb +18 -5
  8. data/lib/gruff/base.rb +78 -41
  9. data/lib/gruff/bezier.rb +0 -4
  10. data/lib/gruff/bullet.rb +2 -9
  11. data/lib/gruff/dot.rb +1 -5
  12. data/lib/gruff/helper/bar_conversion.rb +1 -1
  13. data/lib/gruff/helper/bar_value_label_mixin.rb +3 -0
  14. data/lib/gruff/histogram.rb +0 -1
  15. data/lib/gruff/line.rb +5 -11
  16. data/lib/gruff/mini/bar.rb +1 -1
  17. data/lib/gruff/mini/legend.rb +9 -4
  18. data/lib/gruff/mini/pie.rb +1 -2
  19. data/lib/gruff/mini/side_bar.rb +1 -2
  20. data/lib/gruff/net.rb +5 -6
  21. data/lib/gruff/patch/rmagick.rb +22 -24
  22. data/lib/gruff/patch/string.rb +7 -4
  23. data/lib/gruff/photo_bar.rb +0 -4
  24. data/lib/gruff/pie.rb +1 -5
  25. data/lib/gruff/renderer/bezier.rb +4 -3
  26. data/lib/gruff/renderer/circle.rb +4 -3
  27. data/lib/gruff/renderer/dash_line.rb +4 -3
  28. data/lib/gruff/renderer/dot.rb +4 -3
  29. data/lib/gruff/renderer/ellipse.rb +4 -3
  30. data/lib/gruff/renderer/line.rb +5 -4
  31. data/lib/gruff/renderer/polygon.rb +5 -4
  32. data/lib/gruff/renderer/polyline.rb +4 -3
  33. data/lib/gruff/renderer/rectangle.rb +3 -2
  34. data/lib/gruff/renderer/renderer.rb +31 -43
  35. data/lib/gruff/renderer/text.rb +10 -6
  36. data/lib/gruff/scatter.rb +1 -5
  37. data/lib/gruff/scene.rb +0 -1
  38. data/lib/gruff/side_bar.rb +22 -6
  39. data/lib/gruff/side_stacked_bar.rb +19 -6
  40. data/lib/gruff/spider.rb +2 -6
  41. data/lib/gruff/stacked_area.rb +0 -5
  42. data/lib/gruff/stacked_bar.rb +17 -5
  43. data/lib/gruff/store/{base_data.rb → basic_data.rb} +5 -7
  44. data/lib/gruff/store/custom_data.rb +4 -6
  45. data/lib/gruff/store/store.rb +5 -4
  46. data/lib/gruff/store/xy_data.rb +6 -7
  47. data/lib/gruff/version.rb +1 -1
  48. metadata +18 -15
  49. data/.editorconfig +0 -14
  50. data/.github/ISSUE_TEMPLATE.md +0 -18
  51. data/.gitignore +0 -10
  52. data/.rubocop.yml +0 -109
  53. data/.rubocop_todo.yml +0 -112
  54. data/.travis.yml +0 -26
  55. data/.yardopts +0 -1
  56. data/Rakefile +0 -47
  57. data/docker/Dockerfile +0 -14
  58. data/docker/build.sh +0 -4
  59. data/docker/launch.sh +0 -4
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gruff
4
+ # @private
4
5
  class Renderer::Polygon
5
- def initialize(args = {})
6
- @color = args[:color]
7
- @width = args[:width] || 1.0
8
- @opacity = args[:opacity] || 1.0
6
+ def initialize(color:, width: 1.0, opacity: 1.0)
7
+ @color = color
8
+ @width = width
9
+ @opacity = opacity
9
10
  end
10
11
 
11
12
  def render(points)
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gruff
4
+ # @private
4
5
  class Renderer::Polyline
5
- def initialize(args = {})
6
- @color = args[:color]
7
- @width = args[:width]
6
+ def initialize(color:, width:)
7
+ @color = color
8
+ @width = width
8
9
  end
9
10
 
10
11
  def render(points)
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gruff
4
+ # @private
4
5
  class Renderer::Rectangle
5
- def initialize(args = {})
6
- @color = args[:color]
6
+ def initialize(color: nil)
7
+ @color = color
7
8
  end
8
9
 
9
10
  def render(upper_left_x, upper_left_y, lower_right_x, lower_right_y)
@@ -9,61 +9,49 @@ module Gruff
9
9
 
10
10
  attr_accessor :draw, :image, :scale, :text_renderers
11
11
 
12
- class << self
13
- def setup(columns, rows, font, scale, theme_options)
14
- draw = Magick::Draw.new
15
- draw.font = font if font
16
- # Scale down from 800x600 used to calculate drawing.
17
- draw.scale(scale, scale)
18
-
19
- image = Renderer.instance.background(columns, rows, scale, theme_options)
20
-
21
- Renderer.instance.draw = draw
22
- Renderer.instance.scale = scale
23
- Renderer.instance.image = image
24
- Renderer.instance.text_renderers = []
25
- end
26
-
27
- def setup_transparent_background(columns, rows)
28
- image = Renderer.instance.render_transparent_background(columns, rows)
29
- Renderer.instance.image = image
30
- end
31
-
32
- def background_image=(image)
33
- Renderer.instance.image = image
34
- end
12
+ def self.setup(columns, rows, font, scale, theme_options)
13
+ draw = Magick::Draw.new
14
+ draw.font = font if font
15
+ # Scale down from 800x600 used to calculate drawing.
16
+ draw.scale(scale, scale)
17
+
18
+ image = Renderer.instance.background(columns, rows, scale, theme_options)
19
+
20
+ Renderer.instance.draw = draw
21
+ Renderer.instance.scale = scale
22
+ Renderer.instance.image = image
23
+ Renderer.instance.text_renderers = []
24
+ end
35
25
 
36
- def font=(font)
37
- draw = Renderer.instance.draw
38
- draw.font = font if font
39
- end
26
+ def self.setup_transparent_background(columns, rows)
27
+ image = Renderer.instance.render_transparent_background(columns, rows)
28
+ Renderer.instance.image = image
29
+ end
40
30
 
41
- def finish
42
- draw = Renderer.instance.draw
43
- image = Renderer.instance.image
31
+ def self.background_image=(image)
32
+ Renderer.instance.image = image
33
+ end
44
34
 
45
- draw.draw(image)
35
+ def self.font=(font)
36
+ draw = Renderer.instance.draw
37
+ draw.font = font if font
38
+ end
46
39
 
47
- Renderer.instance.text_renderers.each do |renderer|
48
- renderer.render(renderer.width, renderer.height, renderer.x, renderer.y, renderer.gravity)
49
- end
50
- end
40
+ def self.finish
41
+ draw = Renderer.instance.draw
42
+ image = Renderer.instance.image
51
43
 
52
- def write(file_name)
53
- Renderer.instance.image.write(file_name)
54
- end
44
+ draw.draw(image)
55
45
 
56
- def to_blob(file_format)
57
- Renderer.instance.image.to_blob do
58
- self.format = file_format
59
- end
46
+ Renderer.instance.text_renderers.each do |renderer|
47
+ renderer.render(renderer.width, renderer.height, renderer.x, renderer.y, renderer.gravity)
60
48
  end
61
49
  end
62
50
 
63
51
  def background(columns, rows, scale, theme_options)
64
52
  case theme_options[:background_colors]
65
53
  when Array
66
- gradated_background(columns, rows, theme_options[:background_colors][0], theme_options[:background_colors][1], theme_options[:background_direction])
54
+ gradated_background(columns, rows, *theme_options[:background_colors][0..1], theme_options[:background_direction])
67
55
  when String
68
56
  solid_background(columns, rows, theme_options[:background_colors])
69
57
  else
@@ -1,17 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gruff
4
+ # @private
4
5
  class Renderer::Text
5
- def initialize(text, args = {})
6
+ using Magick::GruffAnnotate
7
+
8
+ def initialize(text, font:, size:, color:, weight: Magick::NormalWeight, rotation: nil)
6
9
  @text = text.to_s
7
- @font = args[:font]
8
- @font_size = args[:size]
9
- @font_color = args[:color]
10
- @font_weight = args[:weight] || Magick::NormalWeight
11
- @rotation = args[:rotation]
10
+ @font = font
11
+ @font_size = size
12
+ @font_color = color
13
+ @font_weight = weight
14
+ @rotation = rotation
12
15
  end
13
16
 
14
17
  attr_reader :width, :height, :x, :y, :gravity
18
+
15
19
  def add_to_render_queue(width, height, x, y, gravity = Magick::NorthGravity)
16
20
  @width = width
17
21
  @height = height
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
-
5
3
  #
6
4
  # Here's how to set up a Gruff::Scatter.
7
5
  #
@@ -84,8 +82,6 @@ class Gruff::Scatter < Gruff::Base
84
82
  Gruff::Renderer::Circle.new(color: data_row.color, width: stroke_width).render(new_x, new_y, new_x - circle_radius, new_y)
85
83
  end
86
84
  end
87
-
88
- Gruff::Renderer.finish
89
85
  end
90
86
 
91
87
  # The first parameter is the name of the dataset. The next two are the
@@ -195,7 +191,7 @@ private
195
191
  calculate_spread
196
192
  normalize
197
193
 
198
- @marker_count = (@x_spread / @x_axis_increment).to_i
194
+ self.marker_count = (@x_spread / @x_axis_increment).to_i
199
195
  @x_increment = @x_axis_increment
200
196
  end
201
197
  increment_x_scaled = @graph_width.to_f / (@x_spread / @x_increment)
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'observer'
4
- require 'gruff/base'
5
4
 
6
5
  # A scene is a non-linear graph that assembles layers together to tell a story.
7
6
  # Layers are folders with appropriately named files (see below). You can group
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
-
5
3
  # Graph with individual horizontal bars instead of vertical bars.
6
4
  #
7
5
  # Here's how to set up a Gruff::SideBar.
@@ -21,6 +19,8 @@ require 'gruff/base'
21
19
  # g.write('sidebar.png')
22
20
  #
23
21
  class Gruff::SideBar < Gruff::Base
22
+ using String::GruffCommify
23
+
24
24
  # Spacing factor applied between bars.
25
25
  attr_writer :bar_spacing
26
26
 
@@ -35,12 +35,16 @@ class Gruff::SideBar < Gruff::Base
35
35
  # Default is +false+.
36
36
  attr_writer :show_labels_for_bar_values
37
37
 
38
+ # Prevent drawing of column labels left of a side bar graph. Default is +false+.
39
+ attr_writer :hide_labels
40
+
38
41
  def initialize_ivars
39
42
  super
40
43
  @bar_spacing = 0.9
41
44
  @group_spacing = 10
42
45
  @label_formatting = nil
43
46
  @show_labels_for_bar_values = false
47
+ @hide_labels = false
44
48
  end
45
49
  private :initialize_ivars
46
50
 
@@ -53,6 +57,20 @@ class Gruff::SideBar < Gruff::Base
53
57
  draw_bars
54
58
  end
55
59
 
60
+ protected
61
+
62
+ def hide_labels?
63
+ @hide_labels
64
+ end
65
+
66
+ def hide_left_label_area?
67
+ hide_labels?
68
+ end
69
+
70
+ def hide_bottom_label_area?
71
+ @hide_line_markers
72
+ end
73
+
56
74
  private
57
75
 
58
76
  def draw_bars
@@ -73,7 +91,7 @@ private
73
91
  data_row.points.each_with_index do |data_point, point_index|
74
92
  group_spacing = @group_spacing * @scale * point_index
75
93
 
76
- # Using the original calcs from the stacked bar chart
94
+ # Using the original calculations from the stacked bar chart
77
95
  # to get the difference between
78
96
  # part of the bart chart we wish to stack.
79
97
  temp1 = @graph_left + (@graph_width - data_point * @graph_width - height[point_index])
@@ -105,8 +123,6 @@ private
105
123
  end
106
124
  end
107
125
  end
108
-
109
- Gruff::Renderer.finish
110
126
  end
111
127
 
112
128
  # Instead of base class version, draws vertical background lines and label
@@ -114,7 +130,7 @@ private
114
130
  return if @hide_line_markers
115
131
 
116
132
  # Draw horizontal line markers and annotate with numbers
117
- number_of_lines = @marker_count || 5
133
+ number_of_lines = marker_count
118
134
  number_of_lines = 1 if number_of_lines == 0
119
135
 
120
136
  # TODO: Round maximum marker value to a round number like 100, 0.1, 0.5, etc.
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/side_bar'
4
- require 'gruff/helper/stacked_mixin'
5
-
6
3
  #
7
4
  # New gruff graph type added to enable sideways stacking bar charts
8
5
  # (basically looks like a x/y flip of a standard stacking bar chart)
@@ -40,12 +37,16 @@ class Gruff::SideStackedBar < Gruff::SideBar
40
37
  # Default is +false+.
41
38
  attr_writer :show_labels_for_bar_values
42
39
 
40
+ # Prevent drawing of column labels left of a side stacked bar graph. Default is +false+.
41
+ attr_writer :hide_labels
42
+
43
43
  def initialize_ivars
44
44
  super
45
45
  @bar_spacing = 0.9
46
46
  @segment_spacing = 2.0
47
47
  @label_formatting = nil
48
48
  @show_labels_for_bar_values = false
49
+ @hide_labels = false
49
50
  end
50
51
  private :initialize_ivars
51
52
 
@@ -55,6 +56,20 @@ class Gruff::SideStackedBar < Gruff::SideBar
55
56
  super
56
57
  end
57
58
 
59
+ protected
60
+
61
+ def hide_labels?
62
+ @hide_labels
63
+ end
64
+
65
+ def hide_left_label_area?
66
+ hide_labels?
67
+ end
68
+
69
+ def hide_bottom_label_area?
70
+ @hide_line_markers
71
+ end
72
+
58
73
  private
59
74
 
60
75
  def draw_bars
@@ -69,7 +84,7 @@ private
69
84
 
70
85
  store.norm_data.each_with_index do |data_row, row_index|
71
86
  data_row.points.each_with_index do |data_point, point_index|
72
- ## using the original calcs from the stacked bar chart to get the difference between
87
+ ## using the original calculations from the stacked bar chart to get the difference between
73
88
  ## part of the bart chart we wish to stack.
74
89
  temp1 = @graph_left + (@graph_width -
75
90
  data_point * @graph_width -
@@ -107,7 +122,5 @@ private
107
122
  draw_value_label(x, y, text, true)
108
123
  end
109
124
  end
110
-
111
- Gruff::Renderer.finish
112
125
  end
113
126
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
-
5
3
  # Experimental!!! See also the Net graph.
6
4
  #
7
5
  # Here's how to set up a Gruff::Spider.
@@ -15,7 +13,7 @@ require 'gruff/base'
15
13
  # g.data :Wisdom, [10]
16
14
  # g.data 'Charisma', [16]
17
15
  # g.write("spider.png")
18
-
16
+ #
19
17
  class Gruff::Spider < Gruff::Base
20
18
  # Hide all text.
21
19
  attr_writer :hide_axes
@@ -64,8 +62,6 @@ class Gruff::Spider < Gruff::Base
64
62
 
65
63
  # Draw polygon
66
64
  draw_polygon(center_x, center_y, additive_angle)
67
-
68
- Gruff::Renderer.finish
69
65
  end
70
66
 
71
67
  private
@@ -118,6 +114,6 @@ private
118
114
  end
119
115
 
120
116
  def sums_for_spider
121
- store.data.reduce(0.0) { |sum, data_row| sum + data_row.points.first }
117
+ store.data.sum { |data_row| data_row.points.first }
122
118
  end
123
119
  end
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
- require 'gruff/helper/stacked_mixin'
5
-
6
3
  #
7
4
  # Here's how to set up a Gruff::StackedArea.
8
5
  #
@@ -69,7 +66,5 @@ class Gruff::StackedArea < Gruff::Base
69
66
 
70
67
  Gruff::Renderer::Polygon.new(color: data_row.color).render(poly_points)
71
68
  end
72
-
73
- Gruff::Renderer.finish
74
69
  end
75
70
  end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
- require 'gruff/helper/stacked_mixin'
5
- require 'gruff/helper/bar_value_label_mixin'
6
-
7
3
  #
8
4
  # Here's how to set up a Gruff::StackedBar.
9
5
  #
@@ -32,12 +28,16 @@ class Gruff::StackedBar < Gruff::Base
32
28
  # Default is +false+.
33
29
  attr_writer :show_labels_for_bar_values
34
30
 
31
+ # Prevent drawing of column labels below a stacked bar graph. Default is +false+.
32
+ attr_writer :hide_labels
33
+
35
34
  def initialize_ivars
36
35
  super
37
36
  @bar_spacing = 0.9
38
37
  @segment_spacing = 2
39
38
  @label_formatting = nil
40
39
  @show_labels_for_bar_values = false
40
+ @hide_labels = false
41
41
  end
42
42
  private :initialize_ivars
43
43
 
@@ -88,7 +88,19 @@ class Gruff::StackedBar < Gruff::Base
88
88
  draw_value_label(x, y, text, true)
89
89
  end
90
90
  end
91
+ end
92
+
93
+ protected
94
+
95
+ def hide_labels?
96
+ @hide_labels
97
+ end
98
+
99
+ def hide_left_label_area?
100
+ @hide_line_markers
101
+ end
91
102
 
92
- Gruff::Renderer.finish
103
+ def hide_bottom_label_area?
104
+ hide_labels?
93
105
  end
94
106
  end
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gruff
4
- # @private
5
4
  class Store
6
- class BaseData < Struct.new(:label, :points, :color)
5
+ # @private
6
+ class BasicData < Struct.new(:label, :points, :color)
7
7
  def initialize(label, points, color)
8
- self.label = label.to_s
9
- self.points = Array(points)
10
- self.color = color
8
+ super(label.to_s, Array(points), color)
11
9
  end
12
10
 
13
11
  def empty?
@@ -26,9 +24,9 @@ module Gruff
26
24
  points.compact.max
27
25
  end
28
26
 
29
- def normalize(args = {})
27
+ def normalize(minimum:, spread:)
30
28
  norm_points = points.map do |point|
31
- point.nil? ? nil : (point.to_f - args[:minimum].to_f) / args[:spread]
29
+ point.nil? ? nil : (point.to_f - minimum.to_f) / spread
32
30
  end
33
31
 
34
32
  self.class.new(label, norm_points, color)