gruff 0.19.0 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +5 -5
- data/.rubocop.yml +17 -1
- data/CHANGELOG.md +6 -0
- data/gruff.gemspec +4 -3
- data/lib/gruff/bar.rb +1 -1
- data/lib/gruff/base.rb +7 -8
- data/lib/gruff/box.rb +4 -4
- data/lib/gruff/candlestick.rb +3 -3
- data/lib/gruff/mini/bar.rb +19 -24
- data/lib/gruff/mini/legend.rb +93 -105
- data/lib/gruff/mini/pie.rb +18 -23
- data/lib/gruff/mini/side_bar.rb +18 -23
- data/lib/gruff/patch/rmagick.rb +2 -2
- data/lib/gruff/version.rb +1 -1
- data/lib/gruff.rb +3 -0
- metadata +22 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b90bcdac8af078c144bb5828eabf35c548c17c157e536c686809eb6cd7be104
|
4
|
+
data.tar.gz: '04963819fde8109bf2e351f1572deb50647053296fbc66bf0e166fcd47afca8c'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1af7d7ff21c4af8696e6172639cf058d02daf292d5494fbc8fa4cc424d86f1315c089f3995767d7562cf3fe436ae349f1eea440288ba550dab7556f81f75c752
|
7
|
+
data.tar.gz: c318384a85ae3be86fac9249c31bc36022da9585cafeed119adb0c7e040bd81b7d7cbb3b748c4a992aa82c79e39928de122ef3c69de1208f829d19b5544378ca
|
data/.github/workflows/ci.yml
CHANGED
@@ -18,10 +18,10 @@ jobs:
|
|
18
18
|
- uses: actions/checkout@v3
|
19
19
|
with:
|
20
20
|
ref: ${{ github.event.pull_request.head.sha }}
|
21
|
-
- name: Set up Ruby 2.
|
21
|
+
- name: Set up Ruby 2.6
|
22
22
|
uses: ruby/setup-ruby@master
|
23
23
|
with:
|
24
|
-
ruby-version: '2.
|
24
|
+
ruby-version: '2.6'
|
25
25
|
bundler-cache: true
|
26
26
|
- name: Install dependencies
|
27
27
|
run: bundle install --path=vendor/bundle --jobs 4 --retry 3
|
@@ -35,9 +35,9 @@ jobs:
|
|
35
35
|
timeout-minutes: 20
|
36
36
|
strategy:
|
37
37
|
matrix:
|
38
|
-
ruby-version: ['2.
|
38
|
+
ruby-version: ['2.6', '2.7', '3.0', '3.1', '3.2']
|
39
39
|
imagemagick-version:
|
40
|
-
- { full: 7.1.0-
|
40
|
+
- { full: 7.1.0-55, major-minor: '7.1' }
|
41
41
|
name: Ruby ${{ matrix.ruby-version }}
|
42
42
|
steps:
|
43
43
|
- uses: actions/checkout@v3
|
@@ -67,7 +67,7 @@ jobs:
|
|
67
67
|
timeout-minutes: 20
|
68
68
|
strategy:
|
69
69
|
matrix:
|
70
|
-
ruby-version: ['9.
|
70
|
+
ruby-version: ['9.3.10.0', '9.4.2.0']
|
71
71
|
name: JRuby ${{ matrix.ruby-version }}
|
72
72
|
steps:
|
73
73
|
- uses: actions/checkout@v3
|
data/.rubocop.yml
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
require:
|
2
|
+
- rubocop-minitest
|
2
3
|
- rubocop-performance
|
3
4
|
- rubocop-rake
|
4
5
|
|
5
6
|
AllCops:
|
6
7
|
EnabledByDefault: true
|
7
|
-
TargetRubyVersion: 2.
|
8
|
+
TargetRubyVersion: 2.6
|
8
9
|
Exclude:
|
9
10
|
- 'vendor/bundle/**/*'
|
10
11
|
- 'rails_generators/gruff/**/*'
|
@@ -12,6 +13,12 @@ AllCops:
|
|
12
13
|
Metrics:
|
13
14
|
Enabled: false
|
14
15
|
|
16
|
+
Gemspec/DependencyVersion:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Gemspec/DevelopmentDependencies:
|
20
|
+
Enabled: false
|
21
|
+
|
15
22
|
Gemspec/OrderedDependencies:
|
16
23
|
Enabled: false
|
17
24
|
|
@@ -21,6 +28,9 @@ Gemspec/RequiredRubyVersion:
|
|
21
28
|
Layout/AccessModifierIndentation:
|
22
29
|
EnforcedStyle: outdent
|
23
30
|
|
31
|
+
Layout/ClassStructure:
|
32
|
+
Enabled: false
|
33
|
+
|
24
34
|
Layout/FirstMethodArgumentLineBreak:
|
25
35
|
Enabled: false
|
26
36
|
|
@@ -111,11 +121,17 @@ Style/OptionHash:
|
|
111
121
|
Style/RedundantBegin:
|
112
122
|
Enabled: false
|
113
123
|
|
124
|
+
Style/RequireOrder:
|
125
|
+
Enabled: false
|
126
|
+
|
114
127
|
Style/SingleLineBlockParams:
|
115
128
|
Enabled: false
|
116
129
|
|
117
130
|
Style/StructInheritance:
|
118
131
|
Enabled: false
|
119
132
|
|
133
|
+
Style/YodaExpression:
|
134
|
+
Enabled: false
|
135
|
+
|
120
136
|
Performance/ChainArrayAllocation:
|
121
137
|
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.20.0
|
4
|
+
- Fix legend position when blank labels present (#614)
|
5
|
+
- Fixed NoMethodError (undefined method `format=' for Gruff::Line (#612)
|
6
|
+
- Drop Ruby 2.5 support (#611)
|
7
|
+
- Fix deprecation warning for Base#to_blob (#610)
|
8
|
+
|
3
9
|
## 0.19.0
|
4
10
|
- Draw the graph starting from zero point by default (#609)
|
5
11
|
- Improve joints in Gruff::Net using polyline method (#608)
|
data/gruff.gemspec
CHANGED
@@ -23,12 +23,13 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'rmagick4j'
|
24
24
|
else
|
25
25
|
s.add_dependency 'rmagick', '>= 4.2'
|
26
|
-
s.add_development_dependency 'rubocop', '~> 1.
|
27
|
-
s.add_development_dependency 'rubocop-
|
26
|
+
s.add_development_dependency 'rubocop', '~> 1.50.2'
|
27
|
+
s.add_development_dependency 'rubocop-minitest', '~> 0.30.0'
|
28
|
+
s.add_development_dependency 'rubocop-performance', '~> 1.17.1'
|
28
29
|
s.add_development_dependency 'rubocop-rake', '~> 0.6.0'
|
29
30
|
end
|
30
31
|
s.add_dependency 'histogram'
|
31
|
-
s.required_ruby_version = '>= 2.
|
32
|
+
s.required_ruby_version = '>= 2.6.0'
|
32
33
|
|
33
34
|
s.add_development_dependency 'rake'
|
34
35
|
s.add_development_dependency 'minitest-reporters'
|
data/lib/gruff/bar.rb
CHANGED
@@ -48,7 +48,7 @@ class Gruff::Bar < Gruff::Base
|
|
48
48
|
#
|
49
49
|
# Default value is +0.9+.
|
50
50
|
def spacing_factor=(space_percent)
|
51
|
-
raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00'
|
51
|
+
raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' if (space_percent < 0) || (space_percent > 1)
|
52
52
|
|
53
53
|
@spacing_factor = (1 - space_percent)
|
54
54
|
end
|
data/lib/gruff/base.rb
CHANGED
@@ -218,7 +218,7 @@ module Gruff
|
|
218
218
|
# g.labels = ['2005', nil, nil, '2006', nil, nil, '2007', nil, nil, '2008'] # same labels for columns
|
219
219
|
def labels=(labels)
|
220
220
|
if labels.is_a?(Array)
|
221
|
-
labels = labels.each_with_index.
|
221
|
+
labels = labels.each_with_index.with_object({}) do |(label, index), hash|
|
222
222
|
hash[index] = label
|
223
223
|
end
|
224
224
|
end
|
@@ -522,9 +522,8 @@ module Gruff
|
|
522
522
|
# @deprecated Please use +to_image.to_blob+ instead.
|
523
523
|
def to_blob(image_format = 'PNG')
|
524
524
|
warn '#to_blob is deprecated. Please use `to_image.to_blob` instead'
|
525
|
-
to_image.
|
526
|
-
|
527
|
-
end
|
525
|
+
to_image.format = image_format
|
526
|
+
to_image.to_blob
|
528
527
|
end
|
529
528
|
|
530
529
|
# Draw a graph.
|
@@ -822,7 +821,7 @@ module Gruff
|
|
822
821
|
end
|
823
822
|
|
824
823
|
def clip_value_if_greater_than(value, max_value)
|
825
|
-
value
|
824
|
+
[value, max_value].min
|
826
825
|
end
|
827
826
|
|
828
827
|
def significant(i)
|
@@ -908,7 +907,7 @@ module Gruff
|
|
908
907
|
bottom_label_width = extra_left_room_for_long_label
|
909
908
|
|
910
909
|
margin = line_number_width + y_axis_label_width
|
911
|
-
@left_margin +
|
910
|
+
@left_margin + [margin, bottom_label_width].max
|
912
911
|
end
|
913
912
|
|
914
913
|
def setup_right_margin
|
@@ -1036,7 +1035,7 @@ module Gruff
|
|
1036
1035
|
def calculate_legend_label_widths_for_each_line(legend_labels, legend_square_width)
|
1037
1036
|
label_widths = [[]]
|
1038
1037
|
label_lines = [[]]
|
1039
|
-
legend_labels.each do |label|
|
1038
|
+
legend_labels.reject(&:empty?).each do |label|
|
1040
1039
|
width = calculate_width(@legend_font, label)
|
1041
1040
|
label_width = width + (legend_square_width * 2.7)
|
1042
1041
|
label_widths.last.push label_width
|
@@ -1130,7 +1129,7 @@ module Gruff
|
|
1130
1129
|
-(width / 2.0)
|
1131
1130
|
end
|
1132
1131
|
end
|
1133
|
-
y_offset = (height / 2.0)
|
1132
|
+
y_offset = [(height / 2.0), margin].max
|
1134
1133
|
|
1135
1134
|
[x_offset, y_offset]
|
1136
1135
|
end
|
data/lib/gruff/box.rb
CHANGED
@@ -23,7 +23,7 @@ class Gruff::Box < Gruff::Base
|
|
23
23
|
#
|
24
24
|
# Default value is +0.8+.
|
25
25
|
def spacing_factor=(space_percent)
|
26
|
-
raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00'
|
26
|
+
raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' if (space_percent < 0) || (space_percent > 1)
|
27
27
|
|
28
28
|
@spacing_factor = (1 - space_percent)
|
29
29
|
end
|
@@ -134,7 +134,7 @@ private
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def median
|
137
|
-
if points.
|
137
|
+
if points.empty?
|
138
138
|
0
|
139
139
|
elsif points.size.odd?
|
140
140
|
points[points.size / 2]
|
@@ -144,7 +144,7 @@ private
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def first_quartile
|
147
|
-
if points.
|
147
|
+
if points.empty?
|
148
148
|
0
|
149
149
|
elsif points.size.odd?
|
150
150
|
points[points.size / 4]
|
@@ -154,7 +154,7 @@ private
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def third_quartile
|
157
|
-
if points.
|
157
|
+
if points.empty?
|
158
158
|
0
|
159
159
|
elsif points.size.odd?
|
160
160
|
points[(points.size * 3) / 4]
|
data/lib/gruff/candlestick.rb
CHANGED
@@ -33,7 +33,7 @@ class Gruff::Candlestick < Gruff::Base
|
|
33
33
|
#
|
34
34
|
# Default value is +0.9+.
|
35
35
|
def spacing_factor=(space_percent)
|
36
|
-
raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00'
|
36
|
+
raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' if (space_percent < 0) || (space_percent > 1)
|
37
37
|
|
38
38
|
@spacing_factor = (1 - space_percent)
|
39
39
|
end
|
@@ -90,10 +90,10 @@ private
|
|
90
90
|
Gruff::Renderer::Rectangle.new(renderer, color: color, opacity: @fill_opacity, width: @stroke_width).render(left_x, open_y, right_x, close_y)
|
91
91
|
|
92
92
|
low_y, = conversion.get_top_bottom_scaled(candlestick.low)
|
93
|
-
y = open_y
|
93
|
+
y = [open_y, close_y].max
|
94
94
|
Gruff::Renderer::Line.new(renderer, color: color, width: @stroke_width).render(center_x, low_y, center_x, y)
|
95
95
|
high_y, = conversion.get_top_bottom_scaled(candlestick.high)
|
96
|
-
y = open_y
|
96
|
+
y = [open_y, close_y].min
|
97
97
|
Gruff::Renderer::Line.new(renderer, color: color, width: @stroke_width).render(center_x, y, center_x, high_y)
|
98
98
|
end
|
99
99
|
end
|
data/lib/gruff/mini/bar.rb
CHANGED
@@ -12,36 +12,31 @@
|
|
12
12
|
# g.data :Science, [2, 15, 8, 11]
|
13
13
|
# g.write('mini_bar.png')
|
14
14
|
#
|
15
|
-
|
16
|
-
|
17
|
-
# A class for drawing a small bar graph.
|
18
|
-
class Bar < Gruff::Bar
|
19
|
-
private
|
15
|
+
class Gruff::Mini::Bar < Gruff::Bar
|
16
|
+
private
|
20
17
|
|
21
|
-
|
18
|
+
include Gruff::Mini::Legend
|
22
19
|
|
23
|
-
|
24
|
-
|
20
|
+
def initialize_attributes
|
21
|
+
super
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
@hide_legend = true
|
24
|
+
@hide_title = true
|
25
|
+
@hide_line_numbers = true
|
29
26
|
|
30
|
-
|
31
|
-
|
27
|
+
@marker_font.size = 50.0
|
28
|
+
@legend_font.size = 50.0
|
32
29
|
|
33
|
-
|
34
|
-
|
30
|
+
@minimum_value = 0.0
|
31
|
+
end
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
def setup_data
|
34
|
+
expand_canvas_for_vertical_legend
|
35
|
+
super
|
36
|
+
end
|
40
37
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
38
|
+
def draw_graph
|
39
|
+
super
|
40
|
+
draw_vertical_legend
|
46
41
|
end
|
47
42
|
end
|
data/lib/gruff/mini/legend.rb
CHANGED
@@ -1,110 +1,98 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
when :right
|
63
|
-
current_x_offset = @original_columns + @left_margin
|
64
|
-
current_y_offset = @top_margin + legend_top_margin
|
65
|
-
else
|
66
|
-
current_x_offset = @legend_left_margin
|
67
|
-
current_y_offset = @original_rows + legend_top_margin
|
68
|
-
end
|
69
|
-
|
70
|
-
@legend_labels.each_with_index do |legend_label, index|
|
71
|
-
# Draw label
|
72
|
-
x_offset = current_x_offset + (legend_square_width * 1.7)
|
73
|
-
label = truncate_legend_label(legend_label, x_offset)
|
74
|
-
text_renderer = Gruff::Renderer::Text.new(renderer, label, font: @legend_font)
|
75
|
-
text_renderer.add_to_render_queue(@raw_columns, 1.0, x_offset, current_y_offset, Magick::WestGravity)
|
76
|
-
|
77
|
-
# Now draw box with color of this dataset
|
78
|
-
rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: store.data[index].color)
|
79
|
-
rect_renderer.render(current_x_offset,
|
80
|
-
current_y_offset - (legend_square_width / 2.0),
|
81
|
-
current_x_offset + legend_square_width,
|
82
|
-
current_y_offset + (legend_square_width / 2.0))
|
83
|
-
|
84
|
-
current_y_offset += calculate_line_height
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
##
|
89
|
-
# Shorten long labels so they will fit on the canvas.
|
90
|
-
#
|
91
|
-
# Department of Hu...
|
92
|
-
|
93
|
-
def truncate_legend_label(label, x_offset)
|
94
|
-
truncated_label = label.to_s
|
95
|
-
|
96
|
-
font = @legend_font.dup
|
97
|
-
font.size = scale(font.size)
|
98
|
-
max_width = @columns - scale(x_offset) - @right_margin
|
99
|
-
while calculate_width(font, "#{truncated_label}...") > max_width && truncated_label.length > 1
|
100
|
-
truncated_label = truncated_label[0..truncated_label.length - 2]
|
101
|
-
end
|
102
|
-
truncated_label + (truncated_label.length < label.to_s.length ? '...' : '')
|
103
|
-
end
|
104
|
-
|
105
|
-
def scale(value)
|
106
|
-
value * @scale
|
107
|
-
end
|
3
|
+
# A module to handle the small legend.
|
4
|
+
# @private
|
5
|
+
module Gruff::Mini::Legend
|
6
|
+
attr_accessor :hide_mini_legend, :legend_position
|
7
|
+
|
8
|
+
def initialize(*)
|
9
|
+
@hide_mini_legend = false
|
10
|
+
@legend_position = nil
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
# The canvas needs to be bigger so we can put the legend beneath it.
|
15
|
+
def expand_canvas_for_vertical_legend
|
16
|
+
return if @hide_mini_legend
|
17
|
+
|
18
|
+
@legend_labels = store.data.map(&:label)
|
19
|
+
|
20
|
+
legend_height = scale((store.length * calculate_line_height) + @top_margin + @bottom_margin)
|
21
|
+
|
22
|
+
@original_rows = @raw_rows
|
23
|
+
@original_columns = @raw_columns
|
24
|
+
|
25
|
+
case @legend_position
|
26
|
+
when :right
|
27
|
+
@rows = [@rows, legend_height].max
|
28
|
+
@columns += calculate_legend_width + @left_margin
|
29
|
+
else
|
30
|
+
font = @legend_font.dup
|
31
|
+
font.size = scale(font.size)
|
32
|
+
@rows += store.length * calculate_caps_height(font) * 1.7
|
33
|
+
end
|
34
|
+
|
35
|
+
@renderer = Gruff::Renderer.new(@columns, @rows, @scale, @theme_options)
|
36
|
+
end
|
37
|
+
|
38
|
+
def calculate_line_height
|
39
|
+
calculate_caps_height(@legend_font) * 1.7
|
40
|
+
end
|
41
|
+
|
42
|
+
def calculate_legend_width
|
43
|
+
width = @legend_labels.map { |label| calculate_width(@legend_font, label) }.max
|
44
|
+
scale(width + (40 * 1.7))
|
45
|
+
end
|
46
|
+
|
47
|
+
# Draw the legend beneath the existing graph.
|
48
|
+
def draw_vertical_legend
|
49
|
+
return if @hide_mini_legend
|
50
|
+
|
51
|
+
legend_square_width = 40.0 # small square with color of this item
|
52
|
+
@legend_left_margin = 100.0
|
53
|
+
legend_top_margin = 40.0
|
54
|
+
|
55
|
+
case @legend_position
|
56
|
+
when :right
|
57
|
+
current_x_offset = @original_columns + @left_margin
|
58
|
+
current_y_offset = @top_margin + legend_top_margin
|
59
|
+
else
|
60
|
+
current_x_offset = @legend_left_margin
|
61
|
+
current_y_offset = @original_rows + legend_top_margin
|
108
62
|
end
|
63
|
+
|
64
|
+
@legend_labels.each_with_index do |legend_label, index|
|
65
|
+
# Draw label
|
66
|
+
x_offset = current_x_offset + (legend_square_width * 1.7)
|
67
|
+
label = truncate_legend_label(legend_label, x_offset)
|
68
|
+
text_renderer = Gruff::Renderer::Text.new(renderer, label, font: @legend_font)
|
69
|
+
text_renderer.add_to_render_queue(@raw_columns, 1.0, x_offset, current_y_offset, Magick::WestGravity)
|
70
|
+
|
71
|
+
# Now draw box with color of this dataset
|
72
|
+
rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: store.data[index].color)
|
73
|
+
rect_renderer.render(current_x_offset,
|
74
|
+
current_y_offset - (legend_square_width / 2.0),
|
75
|
+
current_x_offset + legend_square_width,
|
76
|
+
current_y_offset + (legend_square_width / 2.0))
|
77
|
+
|
78
|
+
current_y_offset += calculate_line_height
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Shorten long labels so they will fit on the canvas.
|
83
|
+
def truncate_legend_label(label, x_offset)
|
84
|
+
truncated_label = label.to_s
|
85
|
+
|
86
|
+
font = @legend_font.dup
|
87
|
+
font.size = scale(font.size)
|
88
|
+
max_width = @columns - scale(x_offset) - @right_margin
|
89
|
+
while calculate_width(font, "#{truncated_label}...") > max_width && truncated_label.length > 1
|
90
|
+
truncated_label = truncated_label[0..truncated_label.length - 2]
|
91
|
+
end
|
92
|
+
truncated_label + (truncated_label.length < label.to_s.length ? '...' : '')
|
93
|
+
end
|
94
|
+
|
95
|
+
def scale(value)
|
96
|
+
value * @scale
|
109
97
|
end
|
110
98
|
end
|
data/lib/gruff/mini/pie.rb
CHANGED
@@ -11,34 +11,29 @@
|
|
11
11
|
# g.data 'Hamburgers', 50
|
12
12
|
# g.write("mini_pie_keynote.png")
|
13
13
|
#
|
14
|
-
|
15
|
-
|
16
|
-
# A class for drawing a small pie graph.
|
17
|
-
class Pie < Gruff::Pie
|
18
|
-
private
|
14
|
+
class Gruff::Mini::Pie < Gruff::Pie
|
15
|
+
private
|
19
16
|
|
20
|
-
|
17
|
+
include Gruff::Mini::Legend
|
21
18
|
|
22
|
-
|
23
|
-
|
19
|
+
def initialize_attributes
|
20
|
+
super
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
@hide_legend = true
|
23
|
+
@hide_title = true
|
24
|
+
@hide_line_numbers = true
|
28
25
|
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
@marker_font.size = 50.0
|
27
|
+
@legend_font.size = 50.0
|
28
|
+
end
|
32
29
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
def setup_data
|
31
|
+
expand_canvas_for_vertical_legend
|
32
|
+
super
|
33
|
+
end
|
37
34
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
35
|
+
def draw_graph
|
36
|
+
super
|
37
|
+
draw_vertical_legend
|
43
38
|
end
|
44
39
|
end
|
data/lib/gruff/mini/side_bar.rb
CHANGED
@@ -19,33 +19,28 @@
|
|
19
19
|
# g.data :Science, [2, 15, 8, 11]
|
20
20
|
# g.write('mini_sidebar.png')
|
21
21
|
#
|
22
|
-
|
23
|
-
|
24
|
-
# A class for drawing a small side bar graph.
|
25
|
-
class SideBar < Gruff::SideBar
|
26
|
-
private
|
22
|
+
class Gruff::Mini::SideBar < Gruff::SideBar
|
23
|
+
private
|
27
24
|
|
28
|
-
|
25
|
+
include Gruff::Mini::Legend
|
29
26
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
27
|
+
def initialize_attributes
|
28
|
+
super
|
29
|
+
@hide_legend = true
|
30
|
+
@hide_title = true
|
31
|
+
@hide_line_numbers = true
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
@marker_font.size = 50.0
|
34
|
+
@legend_font.size = 50.0
|
35
|
+
end
|
39
36
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
def setup_data
|
38
|
+
expand_canvas_for_vertical_legend
|
39
|
+
super
|
40
|
+
end
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
42
|
+
def draw_graph
|
43
|
+
super
|
44
|
+
draw_vertical_legend
|
50
45
|
end
|
51
46
|
end
|
data/lib/gruff/patch/rmagick.rb
CHANGED
@@ -7,8 +7,8 @@ module Magick
|
|
7
7
|
refine Draw do
|
8
8
|
# Additional method to scale annotation text since Draw.scale doesn't.
|
9
9
|
def annotate_scaled(img, width, height, x, y, text, scale)
|
10
|
-
scaled_width = (width * scale)
|
11
|
-
scaled_height = (height * scale)
|
10
|
+
scaled_width = [(width * scale), 1].max
|
11
|
+
scaled_height = [(height * scale), 1].max
|
12
12
|
|
13
13
|
annotate(img,
|
14
14
|
scaled_width, scaled_height,
|
data/lib/gruff/version.rb
CHANGED
data/lib/gruff.rb
CHANGED
@@ -45,6 +45,7 @@ module Gruff
|
|
45
45
|
autoload :Layer, Gruff.libpath('scene')
|
46
46
|
autoload :Themes, Gruff.libpath('themes')
|
47
47
|
|
48
|
+
# @private
|
48
49
|
class Renderer
|
49
50
|
autoload :Bezier, Gruff.libpath('renderer/bezier')
|
50
51
|
autoload :Circle, Gruff.libpath('renderer/circle')
|
@@ -58,12 +59,14 @@ module Gruff
|
|
58
59
|
autoload :Text, Gruff.libpath('renderer/text')
|
59
60
|
end
|
60
61
|
|
62
|
+
# @private
|
61
63
|
class Store
|
62
64
|
autoload :BasicData, Gruff.libpath('store/basic_data')
|
63
65
|
autoload :XYData, Gruff.libpath('store/xy_data')
|
64
66
|
autoload :XYPointsizeData, Gruff.libpath('store/xy_pointsizes_data')
|
65
67
|
end
|
66
68
|
|
69
|
+
# A module for small graphs
|
67
70
|
module Mini
|
68
71
|
autoload :Bar, Gruff.libpath('mini/bar')
|
69
72
|
autoload :Legend, Gruff.libpath('mini/legend')
|
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.
|
4
|
+
version: 0.20.0
|
5
5
|
platform: ruby
|
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:
|
12
|
+
date: 2023-06-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rmagick
|
@@ -31,28 +31,42 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 1.
|
34
|
+
version: 1.50.2
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 1.
|
41
|
+
version: 1.50.2
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rubocop-minitest
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.30.0
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.30.0
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: rubocop-performance
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
45
59
|
requirements:
|
46
60
|
- - "~>"
|
47
61
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.
|
62
|
+
version: 1.17.1
|
49
63
|
type: :development
|
50
64
|
prerelease: false
|
51
65
|
version_requirements: !ruby/object:Gem::Requirement
|
52
66
|
requirements:
|
53
67
|
- - "~>"
|
54
68
|
- !ruby/object:Gem::Version
|
55
|
-
version: 1.
|
69
|
+
version: 1.17.1
|
56
70
|
- !ruby/object:Gem::Dependency
|
57
71
|
name: rubocop-rake
|
58
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,14 +239,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
225
239
|
requirements:
|
226
240
|
- - ">="
|
227
241
|
- !ruby/object:Gem::Version
|
228
|
-
version: 2.
|
242
|
+
version: 2.6.0
|
229
243
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
230
244
|
requirements:
|
231
245
|
- - ">="
|
232
246
|
- !ruby/object:Gem::Version
|
233
247
|
version: '0'
|
234
248
|
requirements: []
|
235
|
-
rubygems_version: 3.
|
249
|
+
rubygems_version: 3.2.22
|
236
250
|
signing_key:
|
237
251
|
specification_version: 4
|
238
252
|
summary: Beautiful graphs for one or multiple datasets.
|