gruff 0.15.0 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6b8682f3d05aa7d0a91ea58fbe907aa581f9a2ed7549f28376390fc0f2101ec
4
- data.tar.gz: 31dc3d1b680b887405a66d8c1d14a2baea76b549958f4cd92bf3d2a6adae8ba3
3
+ metadata.gz: 53adc2df58a382381368665252e0e5862ea81ebd4d513e051058aa5369d379a9
4
+ data.tar.gz: a63a2c06b2f2f936a8ee663463248faab871cab07ba0b58c84febff858b3c08b
5
5
  SHA512:
6
- metadata.gz: 5b5e6a29b5acf50408dd03a75f7acaa8830d96cf23bc02d6ac7a5ef9d713afcc41157fc2e94be8ab1611c624bc36398ba0e6793228f9ce75be009f59a9ac9f7c
7
- data.tar.gz: 15766e34990536075a856d716d75f5e6d940f7bcb5d4dc9074040c82a8d418f95c0e3780bdbe36821a1c2aca66a07eaeaa11ff10622da7e29faf6347cac303af
6
+ metadata.gz: fa57dd19908889380ac8ca2ad4cf3d71da6349370ad90e6c318a01aa79fafd1db9c09f5118a4c1034aaad026596d5b42e4a5837e69ea360909c2b16e054c9fa3
7
+ data.tar.gz: 2334380acbf92ebbcfc2c090912e79955c5d28f6de4fb714f2d30de4a4b2b922fd661068641a4057ba94bba90359bd1a45fd0902da941e246df93bf80e9a0601
@@ -8,7 +8,7 @@ on:
8
8
 
9
9
  jobs:
10
10
  lint:
11
- runs-on: ubuntu-18.04
11
+ runs-on: ubuntu-20.04
12
12
  timeout-minutes: 20
13
13
  name: Lint
14
14
  steps:
@@ -28,26 +28,39 @@ jobs:
28
28
  run: bundle exec rubocop
29
29
 
30
30
  test-ruby:
31
- runs-on: ubuntu-18.04
31
+ runs-on: ubuntu-20.04
32
32
  timeout-minutes: 20
33
33
  strategy:
34
34
  matrix:
35
35
  ruby-version: ['2.5', '2.6', '2.7', '3.0', '3.1']
36
+ imagemagick-version:
37
+ - { full: 7.1.0-31, major-minor: '7.0' }
36
38
  name: Ruby ${{ matrix.ruby-version }}
37
39
  steps:
38
40
  - uses: actions/checkout@v3
41
+ - name: Cache ImageMagick
42
+ uses: actions/cache@v3
43
+ with:
44
+ path: ./build-ImageMagick
45
+ key: v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
46
+ restore-keys: |
47
+ v1-linux-imagemagick-${{ matrix.imagemagick-version.full }}
48
+ - name: Install ImageMagick ${{ matrix.imagemagick-version.full }}
49
+ run: |
50
+ export IMAGEMAGICK_VERSION=${{ matrix.imagemagick-version.full }}
51
+ ./before_install_linux.sh
39
52
  - name: Set up Ruby
40
53
  uses: ruby/setup-ruby@master
41
54
  with:
42
55
  ruby-version: ${{ matrix.ruby-version }}
43
- bundler-cache: true
56
+ bundler-cache: false
44
57
  - name: Install dependencies
45
58
  run: bundle install --path=vendor/bundle --jobs 4 --retry 3
46
59
  - name: Run tests
47
60
  run: bundle exec rake
48
61
 
49
62
  test-jruby:
50
- runs-on: ubuntu-18.04
63
+ runs-on: ubuntu-20.04
51
64
  timeout-minutes: 20
52
65
  strategy:
53
66
  matrix:
data/.rubocop.yml CHANGED
@@ -21,9 +21,6 @@ Gemspec/RequiredRubyVersion:
21
21
  Layout/AccessModifierIndentation:
22
22
  EnforcedStyle: outdent
23
23
 
24
- Layout/ClassStructure:
25
- Enabled: false
26
-
27
24
  Layout/FirstMethodArgumentLineBreak:
28
25
  Enabled: false
29
26
 
@@ -42,9 +39,6 @@ Layout/RedundantLineBreak:
42
39
  Layout/SingleLineBlockChain:
43
40
  Enabled: false
44
41
 
45
- Lint/AmbiguousOperatorPrecedence:
46
- Enabled: false
47
-
48
42
  Lint/ConstantResolution:
49
43
  Enabled: false
50
44
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.16.0
4
+ - Add Candlestick (#575)
5
+ - Add BoxPlot (#574)
6
+ - Raise exception if less data set was given in Gruff::Spider (#573)
7
+ - Adjust default label offset value in Gruff::Pie
8
+ - Remove has_left_labels from attribute (#571)
9
+ - Remove center_labels_over_point from attribute (#570)
10
+ - Adjust legend label / box position
11
+ - Fix right margin when truncate the label
12
+ - Adjust axis label position
13
+ - Adjust left label margin
14
+ - Fix axis label position with hide_line_markers
15
+ - Fix margin of value label in Bar/StackedBar (#568)
16
+ - Fix label position in Gruff::Spider (#567)
17
+ - Fix axis label position with legend_at_bottom
18
+ - Fix axis label position with hide_line_markers
19
+ - Refactor: Remove instance variable usage
20
+ - Remove Gruff::Scene (#566)
21
+ - Fix exception with zero value in StackBar (#565)
22
+ - Fix segment spacing in SideStackedBar (#564)
23
+ - Fix margin of value label in SideBar/SideStackedBar (#563)
24
+ - Raise exception if negative values were given in stacked graph (#562)
25
+ - Fix centering in value label position (#561)
26
+ - Fix duck typing support in Gruff::Histogram (#560)
27
+ - Fix start drawing position to top in Pie and enabled sort option by default (#559)
28
+
3
29
  ## 0.15.0
4
30
  - Fix SideStackedBar which bars overlap on the coordinate axes if data contains 0 (#558)
5
31
  - Lazy loading library to reduce memory usage (#556)
data/README.md CHANGED
@@ -126,6 +126,13 @@ In progress!
126
126
 
127
127
  ![Histogram chart](https://raw.github.com/topfunky/gruff/master/test/expected/histogram.png)
128
128
 
129
+ ### Box plot
130
+
131
+ ![Box plot](https://raw.github.com/topfunky/gruff/master/test/expected/box_plot.png)
132
+
133
+ ### Candlestick
134
+
135
+ ![Candlestick](https://raw.github.com/topfunky/gruff/master/test/expected/candlestick.png)
129
136
 
130
137
  ## Documentation
131
138
 
@@ -133,7 +140,7 @@ http://www.rubydoc.info/github/topfunky/gruff/frames
133
140
 
134
141
  ## Supported Ruby Versions
135
142
 
136
- - Ruby 2.4 or later
143
+ - Ruby 2.5 or later
137
144
  - JRuby 9.2.x or later
138
145
 
139
146
  ## Development
@@ -149,13 +156,13 @@ $ ./docker-launch.sh
149
156
 
150
157
  3. Run tests
151
158
  ```sh
152
- $ rake
159
+ $ bundle exec rake
153
160
  ```
154
161
 
155
162
  If you have made changes that involve updating the expected image, you need to update the image with the following command after running tests.
156
163
 
157
164
  ```sh
158
- $ rake test:image:update
165
+ $ bundle exec rake test:image:update
159
166
  ```
160
167
 
161
168
  ## Contributing
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|^Rakefile/i)
14
+ s.files = `git ls-files`.split.grep_v(/^test|^docker|^before_install_linux.sh|^Rakefile/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.'
@@ -19,7 +19,7 @@ private
19
19
  def setup_data
20
20
  raise(Gruff::IncorrectNumberOfDatasetsException) unless store.length == 1
21
21
 
22
- accum_array = store.data.first.points[0..-2].reduce([0]) { |a, v| a << a.last + v }
22
+ accum_array = store.data.first.points[0..-2].reduce([0]) { |a, v| a << (a.last + v) }
23
23
  data 'Accumulator', accum_array
24
24
  set_colors
25
25
  store.reverse!
data/lib/gruff/area.rb CHANGED
@@ -30,7 +30,7 @@ private
30
30
  end
31
31
 
32
32
  def draw_graph
33
- x_increment = @graph_width / (column_count - 1).to_f
33
+ x_increment = @graph_width / (column_count - 1)
34
34
 
35
35
  store.norm_data.each do |data_row|
36
36
  poly_points = []
@@ -38,7 +38,7 @@ private
38
38
  data_row.points.each_with_index do |data_point, index|
39
39
  # Use incremented x and scaled y
40
40
  new_x = @graph_left + (x_increment * index)
41
- new_y = @graph_top + (@graph_height - data_point * @graph_height)
41
+ new_y = @graph_top + (@graph_height - (data_point * @graph_height))
42
42
 
43
43
  poly_points << new_x
44
44
  poly_points << new_y
@@ -48,9 +48,9 @@ private
48
48
 
49
49
  # Add closing points, draw polygon
50
50
  poly_points << @graph_right
51
- poly_points << @graph_bottom - 1
51
+ poly_points << (@graph_bottom - 1)
52
52
  poly_points << @graph_left
53
- poly_points << @graph_bottom - 1
53
+ poly_points << (@graph_bottom - 1)
54
54
 
55
55
  Gruff::Renderer::Polygon.new(renderer, color: data_row.color, width: @stroke_width, opacity: @fill_opacity).render(poly_points)
56
56
  end
data/lib/gruff/bar.rb CHANGED
@@ -33,6 +33,10 @@ class Gruff::Bar < Gruff::Base
33
33
  # Prevent drawing of column labels below a bar graph. Default is +false+.
34
34
  attr_writer :hide_labels
35
35
 
36
+ # Value to avoid completely overwriting the coordinate axis
37
+ AXIS_MARGIN = 0.5
38
+ private_constant :AXIS_MARGIN
39
+
36
40
  # Can be used to adjust the spaces between the bars.
37
41
  # Accepts values between 0.00 and 1.00 where 0.00 means no spacing at all
38
42
  # and 1 means that each bars' width is nearly 0 (so each bar is a simple
@@ -70,15 +74,28 @@ private
70
74
  end
71
75
 
72
76
  def hide_left_label_area?
73
- @hide_line_markers
77
+ @hide_line_markers && @y_axis_label.nil?
74
78
  end
75
79
 
76
80
  def hide_bottom_label_area?
77
- hide_labels?
81
+ hide_labels? && @x_axis_label.nil? && @legend_at_bottom == false
78
82
  end
79
83
 
80
- # Value to avoid completely overwriting the coordinate axis
81
- AXIS_MARGIN = 0.5
84
+ def setup_graph_measurements
85
+ super
86
+ return if @hide_line_markers
87
+
88
+ if @show_labels_for_bar_values
89
+ proc_text_metrics = ->(text) { text_metrics(@marker_font, text) }
90
+
91
+ if maximum_value >= 0
92
+ _, metrics = Gruff::BarValueLabel.metrics(maximum_value, @label_formatting, proc_text_metrics)
93
+ @graph_top += metrics.height
94
+ end
95
+
96
+ @graph_height = @graph_bottom - @graph_top
97
+ end
98
+ end
82
99
 
83
100
  def draw_graph
84
101
  # Setup spacing.
@@ -86,8 +103,8 @@ private
86
103
  # Columns sit side-by-side.
87
104
  @bar_spacing ||= @spacing_factor # space between the bars
88
105
 
89
- bar_width = (@graph_width - calculate_spacing) / (column_count * store.length).to_f
90
- padding = (bar_width * (1 - @bar_spacing)) / 2
106
+ bar_width = (@graph_width - calculate_spacing) / (column_count * store.length)
107
+ padding = (bar_width * (1 - @bar_spacing)) / 2.0
91
108
 
92
109
  # Setup the BarConversion Object
93
110
  conversion = Gruff::BarConversion.new(
@@ -95,6 +112,8 @@ private
95
112
  minimum_value: minimum_value, maximum_value: maximum_value, spread: @spread
96
113
  )
97
114
 
115
+ proc_text_metrics = ->(text) { text_metrics(@marker_font, text) }
116
+
98
117
  # iterate over all normalised data
99
118
  store.norm_data.each_with_index do |data_row, row_index|
100
119
  data_row.points.each_with_index do |data_point, point_index|
@@ -103,7 +122,7 @@ private
103
122
  # Use incremented x and scaled y
104
123
  # x
105
124
  left_x = @graph_left + (bar_width * (row_index + point_index + ((store.length - 1) * point_index))) + padding + group_spacing
106
- right_x = left_x + bar_width * @bar_spacing
125
+ right_x = left_x + (bar_width * @bar_spacing)
107
126
  # y
108
127
  left_y, right_y = conversion.get_top_bottom_scaled(data_point)
109
128
 
@@ -118,8 +137,8 @@ private
118
137
  draw_label(label_center, point_index)
119
138
  if @show_labels_for_bar_values
120
139
  bar_value_label = Gruff::BarValueLabel::Bar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
121
- bar_value_label.prepare_rendering(@label_formatting, bar_width) do |x, y, text|
122
- draw_value_label(x, y, text)
140
+ bar_value_label.prepare_rendering(@label_formatting, proc_text_metrics) do |x, y, text, _text_width, text_height|
141
+ draw_value_label(bar_width * @bar_spacing, text_height, x, y, text)
123
142
  end
124
143
  end
125
144
  end