gruff 0.26.0 → 0.27.0

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/report.yml +1 -1
  3. data/.github/workflows/ci.yml +37 -0
  4. data/.rubocop.yml +3 -0
  5. data/CHANGELOG.md +18 -1
  6. data/Gemfile +5 -0
  7. data/README.md +7 -1
  8. data/gruff.gemspec +1 -1
  9. data/lib/gruff/accumulator_bar.rb +3 -1
  10. data/lib/gruff/area.rb +5 -2
  11. data/lib/gruff/bar.rb +18 -9
  12. data/lib/gruff/base.rb +193 -68
  13. data/lib/gruff/bezier.rb +6 -3
  14. data/lib/gruff/box.rb +40 -16
  15. data/lib/gruff/bubble.rb +9 -2
  16. data/lib/gruff/bullet.rb +8 -1
  17. data/lib/gruff/candlestick.rb +30 -8
  18. data/lib/gruff/dot.rb +13 -3
  19. data/lib/gruff/font.rb +12 -4
  20. data/lib/gruff/helper/bar_conversion.rb +12 -1
  21. data/lib/gruff/helper/bar_mixin.rb +19 -1
  22. data/lib/gruff/helper/bar_value_label.rb +22 -4
  23. data/lib/gruff/helper/stacked_mixin.rb +21 -1
  24. data/lib/gruff/histogram.rb +14 -5
  25. data/lib/gruff/line.rb +31 -12
  26. data/lib/gruff/mini/bar.rb +2 -2
  27. data/lib/gruff/mini/legend.rb +10 -1
  28. data/lib/gruff/mini/pie.rb +2 -2
  29. data/lib/gruff/mini/side_bar.rb +2 -2
  30. data/lib/gruff/net.rb +12 -7
  31. data/lib/gruff/patch/rmagick.rb +2 -0
  32. data/lib/gruff/patch/string.rb +1 -1
  33. data/lib/gruff/pie.rb +46 -11
  34. data/lib/gruff/renderer/bezier.rb +7 -0
  35. data/lib/gruff/renderer/circle.rb +11 -0
  36. data/lib/gruff/renderer/dash_line.rb +11 -0
  37. data/lib/gruff/renderer/dot.rb +11 -0
  38. data/lib/gruff/renderer/ellipse.rb +12 -0
  39. data/lib/gruff/renderer/line.rb +10 -0
  40. data/lib/gruff/renderer/polygon.rb +6 -0
  41. data/lib/gruff/renderer/polyline.rb +8 -0
  42. data/lib/gruff/renderer/rectangle.rb +11 -0
  43. data/lib/gruff/renderer/renderer.rb +16 -5
  44. data/lib/gruff/renderer/text.rb +19 -2
  45. data/lib/gruff/scatter.rb +16 -8
  46. data/lib/gruff/side_bar.rb +19 -10
  47. data/lib/gruff/side_stacked_bar.rb +15 -11
  48. data/lib/gruff/spider.rb +9 -2
  49. data/lib/gruff/stacked_area.rb +6 -1
  50. data/lib/gruff/stacked_bar.rb +16 -10
  51. data/lib/gruff/store/basic_data.rb +36 -2
  52. data/lib/gruff/store/store.rb +16 -3
  53. data/lib/gruff/store/xy_data.rb +32 -2
  54. data/lib/gruff/store/xy_pointsizes_data.rb +36 -3
  55. data/lib/gruff/themes.rb +2 -0
  56. data/lib/gruff/version.rb +3 -1
  57. data/lib/gruff.rb +3 -1
  58. data/sig/generated/gruff/accumulator_bar.rbs +19 -0
  59. data/sig/generated/gruff/area.rbs +27 -0
  60. data/sig/generated/gruff/bar.rbs +74 -0
  61. data/sig/generated/gruff/base.rbs +672 -0
  62. data/sig/generated/gruff/bezier.rbs +24 -0
  63. data/sig/generated/gruff/box.rbs +88 -0
  64. data/sig/generated/gruff/bubble.rbs +69 -0
  65. data/sig/generated/gruff/bullet.rbs +30 -0
  66. data/sig/generated/gruff/candlestick.rbs +79 -0
  67. data/sig/generated/gruff/dot.rbs +44 -0
  68. data/sig/generated/gruff/font.rbs +35 -0
  69. data/sig/generated/gruff/helper/bar_conversion.rbs +27 -0
  70. data/sig/generated/gruff/helper/bar_mixin.rbs +22 -0
  71. data/sig/generated/gruff/helper/bar_value_label.rbs +41 -0
  72. data/sig/generated/gruff/helper/stacked_mixin.rbs +27 -0
  73. data/sig/generated/gruff/histogram.rbs +42 -0
  74. data/sig/generated/gruff/line.rbs +165 -0
  75. data/sig/generated/gruff/net.rbs +52 -0
  76. data/sig/generated/gruff/pie.rbs +131 -0
  77. data/sig/generated/gruff/renderer/bezier.rbs +15 -0
  78. data/sig/generated/gruff/renderer/circle.rbs +19 -0
  79. data/sig/generated/gruff/renderer/dash_line.rbs +19 -0
  80. data/sig/generated/gruff/renderer/dot.rbs +27 -0
  81. data/sig/generated/gruff/renderer/ellipse.rbs +20 -0
  82. data/sig/generated/gruff/renderer/line.rbs +24 -0
  83. data/sig/generated/gruff/renderer/polyline.rbs +16 -0
  84. data/sig/generated/gruff/renderer/rectangle.rbs +19 -0
  85. data/sig/generated/gruff/renderer/renderer.rbs +43 -0
  86. data/sig/generated/gruff/renderer/text.rbs +38 -0
  87. data/sig/generated/gruff/scatter.rbs +112 -0
  88. data/sig/generated/gruff/side_bar.rbs +78 -0
  89. data/sig/generated/gruff/side_stacked_bar.rbs +52 -0
  90. data/sig/generated/gruff/spider.rbs +50 -0
  91. data/sig/generated/gruff/stacked_area.rbs +25 -0
  92. data/sig/generated/gruff/stacked_bar.rbs +56 -0
  93. data/sig/generated/gruff/store/basic_data.rbs +48 -0
  94. data/sig/generated/gruff/store/store.rbs +53 -0
  95. data/sig/generated/gruff/store/xy_data.rbs +58 -0
  96. data/sig/generated/gruff/store/xy_pointsizes_data.rbs +61 -0
  97. data/sig/generated/gruff/themes.rbs +24 -0
  98. data/sig/generated/gruff/version.rbs +5 -0
  99. data/sig/generated/gruff.rbs +20 -0
  100. metadata +43 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3c04a6fc48f83e530a5a26a084a1f79993cbb7781e7b6b06ad7208ee205a787
4
- data.tar.gz: 52cd0e2ef0f9f4f6a433e65a9c65cba9c7fb4420203ece2ccd461b876ad43042
3
+ metadata.gz: f6da763173e4c2d9acfb25a240f68edc12c49bd2d35a835ea52b4306f727b5aa
4
+ data.tar.gz: 7ce9635d6efacb40300c959db94f40fcd09205491c33e8bbac3269e64b1f9048
5
5
  SHA512:
6
- metadata.gz: b41c3bcd833b9bbbf2e36541552015c0a714e51b79f168c8875e891ad7d51db5bc1b03438f1ce419c55fcc4b3299274c24f4e817d681b748a649222a8c92db88
7
- data.tar.gz: f9c017e0264b608160d779526f3ddcd1a9daf129dbd55dbb0eb96193aa2902e5a6cd1c439cdd101c43686fac6fad4130bf0eab2d2ec226439a05df13e12ec07a
6
+ metadata.gz: 736e2cfb7ecadcd212a0ac92c78a84ff1e69184c440e2a5dc2b9b465f5bbbc25cd6f84215def0306e2b9d27039c939c6f54a3f6b302b7b164b4e48c03e3917b3
7
+ data.tar.gz: 45a7508c2722f357b95578aa9a4b1d68576caa3c662b35c6cde983be258835d485ff5ee32f7f525a3791d6e3c3971e332eee9bbc0c79318f29b6ae92b866cfd9
@@ -33,7 +33,7 @@ body:
33
33
  validations:
34
34
  required: true
35
35
  - type: textarea
36
- id: addtional-context
36
+ id: additional-context
37
37
  attributes:
38
38
  label: Additional context
39
39
  description: Add any other context about the problem here.
@@ -46,6 +46,43 @@ jobs:
46
46
  - name: Run tests
47
47
  run: bundle exec rubocop
48
48
 
49
+ RBS:
50
+ runs-on: ubuntu-24.04
51
+ timeout-minutes: 20
52
+ strategy:
53
+ matrix:
54
+ ruby-version: ['3.4']
55
+ imagemagick-version:
56
+ - { full: 7.1.1-33, major-minor: '7.1' }
57
+ name: Check RBS (Ruby ${{ matrix.ruby-version }}, ImageMagick ${{ matrix.imagemagick-version.major-minor }})
58
+ steps:
59
+ - uses: actions/checkout@v4
60
+ with:
61
+ ref: ${{ github.event.pull_request.head.sha }}
62
+ - name: Cache ImageMagick
63
+ uses: actions/cache@v4
64
+ with:
65
+ path: ./build-ImageMagick
66
+ key: v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
67
+ restore-keys: |
68
+ v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
69
+ - name: Install ImageMagick ${{ matrix.imagemagick-version.full }}
70
+ run: |
71
+ export IMAGEMAGICK_VERSION=${{ matrix.imagemagick-version.full }}
72
+ ./before_install_linux.sh
73
+ - name: Set up Ruby ${{ matrix.ruby-version }}
74
+ uses: ruby/setup-ruby@master
75
+ with:
76
+ ruby-version: ${{ matrix.ruby-version }}
77
+ bundler-cache: true
78
+ - name: Install dependencies
79
+ run: bundle install --path=vendor/bundle --jobs 4 --retry 3
80
+ - name: Run tests
81
+ run: |
82
+ bundle exec rake rbs:update
83
+ git --no-pager diff --exit-code
84
+ bundle exec steep check
85
+
49
86
  test-ruby:
50
87
  runs-on: ubuntu-24.04
51
88
  timeout-minutes: 20
data/.rubocop.yml CHANGED
@@ -35,6 +35,9 @@ Layout/ClassStructure:
35
35
  Layout/FirstMethodArgumentLineBreak:
36
36
  Enabled: false
37
37
 
38
+ Layout/LeadingCommentSpace:
39
+ Enabled: false
40
+
38
41
  Layout/LineLength:
39
42
  Max: 150
40
43
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.27.0
4
+
5
+ - Add RBS signatures (#661)
6
+ - Fix Gruff::Bezier raises exception if data contains nil (#660)
7
+ - Fix Gruff::Pie raises exception if data contains nil (#659)
8
+ - Fix Gruff::Net raises exception if data contains nil (#658)
9
+ - Fix Gruff::Histogram raises exception if data contains nil (#657)
10
+ - Fix Gruff::Dot raises exception if data contains nil (#656)
11
+ - Fix Gruff::Candlestick raises exception if data contains nil (#655)
12
+ - Fix Gruff::AccumulatorBar raises exception if data contains nil (#654)
13
+ - Fix Gruff::Area raises exception if data contains nil (#653)
14
+ - Fix Gruff::StackedArea raises exception if data contains nil (#652)
15
+ - Stop using Struct to make it easier to write type definitions (#651)
16
+ - Fix Gruff::Box raises exception if data contains nil (#648)
17
+ - Fix Gruff::SideStackedBar raises exception if data contains nil (#647)
18
+ - Fix Gruff::StackedBar raises exception if data contains nil (#646)
19
+
3
20
  ## 0.26.0
4
21
 
5
22
  - Allow customizing No Data font size (#642)
@@ -56,7 +73,7 @@
56
73
  - Fix error when input empty data in Gruff::Histogram (#592)
57
74
  - Fix error when input empty data in Gruff::Area (#591)
58
75
  - Stop adjusting the square radius in Gruff::Line (#589)
59
- - Add diamond dot stype in Gruff::Line (#588)
76
+ - Add diamond dot style in Gruff::Line (#588)
60
77
  - Allow title to be set as an array (#587)
61
78
  - Allow labels to be set as an array corresponding to the data values (#586)
62
79
  - Fixed a bug that breaks the colors in the theme when using the add_color method (#583)
data/Gemfile CHANGED
@@ -16,3 +16,8 @@ gem 'minitest-reporters'
16
16
  gem 'rake'
17
17
  gem 'simplecov'
18
18
  gem 'yard', '~> 0.9.28'
19
+
20
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.1') && !RUBY_PLATFORM.include?('java')
21
+ gem 'rbs-inline', '~> 0.11'
22
+ gem 'steep', '~> 1.10'
23
+ end
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  A library for making beautiful graphs.
7
7
 
8
8
  Built on top of [rmagick](https://github.com/rmagick/rmagick); see its web page
9
- for a list of the system-level prerequisities (ImageMagick etc) and how to install them.
9
+ for a list of the system-level prerequisites (ImageMagick etc) and how to install them.
10
10
 
11
11
  ## Installation
12
12
 
@@ -169,6 +169,12 @@ If you have made changes that involve updating the expected image, you need to u
169
169
  $ bundle exec rake test:image:update
170
170
  ```
171
171
 
172
+ If you change the method, you need to update RBS signatures.
173
+
174
+ ```
175
+ $ rake rbs:update
176
+ ```
177
+
172
178
  ## Contributing
173
179
 
174
180
  ### Source
data/gruff.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.authors = ['Geoffrey Grosenbach', 'Uwe Kubosch']
12
12
  s.description = 'Beautiful graphs for one or multiple datasets. Can be used on websites or in documents.'
13
13
  s.email = 'boss@topfunky.com'
14
- s.files = `git ls-files`.split.grep_v(/^test|^docker|^before_install_linux.sh|^Rakefile/i)
14
+ s.files = `git ls-files`.split.grep_v(/^test|^docker|^before_install_linux.sh|^Rakefile|^Steepfile/i)
15
15
  s.homepage = 'https://github.com/topfunky/gruff'
16
16
  s.require_paths = %w[lib]
17
17
  s.summary = 'Beautiful graphs for one or multiple datasets.'
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  #
4
6
  # Gruff::AccumulatorBar is a special bar graph that shows a
5
7
  # single dataset as a set of stacked bars.
@@ -19,7 +21,7 @@ private
19
21
  def setup_data
20
22
  raise(Gruff::IncorrectNumberOfDatasetsException) unless store.length == 1
21
23
 
22
- accum_array = store.data.first.points[0..-2].reduce([0]) { |a, v| a << (a.last + v) }
24
+ accum_array = store.data.first.points[0..-2].reduce([0]) { |a, v| a << (a.last + v.to_f) } # steep:ignore
23
25
  data 'Accumulator', accum_array
24
26
  set_colors
25
27
  store.reverse!
data/lib/gruff/area.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  #
4
6
  # Gruff::Area provides an area graph which displays graphically
5
7
  # quantitative data.
@@ -15,10 +17,10 @@
15
17
  #
16
18
  class Gruff::Area < Gruff::Base
17
19
  # Specifies the filling opacity in area graph. Default is +0.85+.
18
- attr_writer :fill_opacity
20
+ attr_writer :fill_opacity #: Float | Integer
19
21
 
20
22
  # Specifies the stroke width in line around area graph. Default is +2.0+.
21
- attr_writer :stroke_width
23
+ attr_writer :stroke_width #: Float | Integer
22
24
 
23
25
  private
24
26
 
@@ -38,6 +40,7 @@ private
38
40
  poly_points = []
39
41
 
40
42
  data_row.points.each_with_index do |data_point, index|
43
+ data_point = data_point.to_f
41
44
  # Use incremented x and scaled y
42
45
  new_x = @graph_left + (x_increment * index)
43
46
  new_y = @graph_top + (@graph_height - (data_point * @graph_height))
data/lib/gruff/bar.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rbs_inline: enabled
4
+
3
5
  require_relative 'helper/bar_mixin'
4
6
 
5
7
  #
@@ -18,24 +20,24 @@ require_relative 'helper/bar_mixin'
18
20
  # g.write('bar.png')
19
21
  #
20
22
  class Gruff::Bar < Gruff::Base
21
- include BarMixin
23
+ include Gruff::Base::BarMixin
22
24
 
23
25
  # Spacing factor applied between bars.
24
- attr_writer :bar_spacing
26
+ attr_writer :bar_spacing #: Float | Integer
25
27
 
26
28
  # Spacing factor applied between a group of bars belonging to the same label.
27
- attr_writer :group_spacing
29
+ attr_writer :group_spacing #: Float | Integer
28
30
 
29
31
  # Set the number output format string or lambda.
30
32
  # Default is +"%.2f"+.
31
- attr_writer :label_formatting
33
+ attr_writer :label_formatting #: nil | String | Proc
32
34
 
33
35
  # Output the values for the bars on a bar graph.
34
36
  # Default is +false+.
35
- attr_writer :show_labels_for_bar_values
37
+ attr_writer :show_labels_for_bar_values #: bool
36
38
 
37
39
  # Prevent drawing of column labels below a bar graph. Default is +false+.
38
- attr_writer :hide_labels
40
+ attr_writer :hide_labels #: bool
39
41
 
40
42
  # Value to avoid completely overwriting the coordinate axis
41
43
  AXIS_MARGIN = 0.5
@@ -47,10 +49,12 @@ class Gruff::Bar < Gruff::Base
47
49
  # line with no x dimension).
48
50
  #
49
51
  # Default value is +0.9+.
52
+ #
53
+ # @rbs space_percent: Float | Integer
50
54
  def spacing_factor=(space_percent)
51
55
  raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' if (space_percent < 0) || (space_percent > 1)
52
56
 
53
- @spacing_factor = (1 - space_percent)
57
+ @spacing_factor = (1.0 - space_percent)
54
58
  end
55
59
 
56
60
  private
@@ -73,14 +77,17 @@ private
73
77
  super
74
78
  end
75
79
 
80
+ # @rbs return: bool
76
81
  def hide_labels?
77
82
  @hide_labels
78
83
  end
79
84
 
85
+ # @rbs return: bool
80
86
  def hide_left_label_area?
81
87
  @hide_line_markers && @y_axis_label.nil?
82
88
  end
83
89
 
90
+ # @rbs return: bool
84
91
  def hide_bottom_label_area?
85
92
  hide_labels? && @x_axis_label.nil? && @legend_at_bottom == false
86
93
  end
@@ -106,7 +113,7 @@ private
106
113
  @bar_spacing ||= @spacing_factor # space between the bars
107
114
 
108
115
  bar_width = (@graph_width - calculate_spacing) / (column_count * store.length)
109
- padding = (bar_width * (1 - @bar_spacing)) / 2.0
116
+ padding = (bar_width * (1.0 - @bar_spacing)) / 2.0
110
117
 
111
118
  # Setup the BarConversion Object
112
119
  conversion = Gruff::BarConversion.new(
@@ -117,7 +124,7 @@ private
117
124
  group_left_x = @graph_left
118
125
 
119
126
  normalized_group_bars.each_with_index do |group_bars, group_index|
120
- right_x = 0
127
+ right_x = 0.0
121
128
  group_bars.each_with_index do |bar, index|
122
129
  left_x = group_left_x + (bar_width * index) + padding
123
130
  right_x = left_x + (bar_width * @bar_spacing)
@@ -146,10 +153,12 @@ private
146
153
  draw_label(@graph_right, column_count, Magick::NorthWestGravity) if @center_labels_over_point
147
154
  end
148
155
 
156
+ # @rbs return: Float | Integer
149
157
  def calculate_spacing
150
158
  @group_spacing * (column_count - 1)
151
159
  end
152
160
 
161
+ # @rbs return: Proc
153
162
  def proc_text_metrics
154
163
  ->(text) { text_metrics(@marker_font, text) }
155
164
  end