caxlsx 3.1.0 → 3.1.1

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: dfea731879b2415d4ed0ac46abfbad17483d7e9f2c27802aef87a93823589af7
4
- data.tar.gz: 709606e3d36fe21ac41a8f9381d4017c31103d6ce0a8686eb195a935c3626538
3
+ metadata.gz: ef44b04d373e873848cd74d5bebae4d327cd0d9cba06ee74de6d0aac35b51ab9
4
+ data.tar.gz: b54abdd82f277253216da4ad9d938c2508c9f1ed54abd080d4437e5523c470e1
5
5
  SHA512:
6
- metadata.gz: cd1fd47bfe33dafa4909960d326f81433b4fa3e18d1a6f6f99e7a13617eecc98f212e2a938788d53466a47b52a0a2325a8dfcb3a6c3b52def5325b75ead9d402
7
- data.tar.gz: bd9deebebd7cfc2222e64a8485ec9951ece3a69bb695fad5f4a790166324dab45134e835d02dc503e6c37e70b27d586db8bccf0c847448944f50ef37205e53d6
6
+ metadata.gz: bce9d28013a2ec3ffec4be335a2b933ba38fb508dbc4f486a3df135dc81122a236ff9439792ac8bc64c4150e523af261deea02c5a86b9f3838a38b2a26e0d537
7
+ data.tar.gz: 1bca0d82c582818a822feefbb499caef3b622f8d4203543a1c6d11f57876944df01db0bafb30d6238f9a268d731a0a78de0ed4efa97a205db43465d73dab7d74
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  CHANGELOG
2
2
  ---------
3
3
 
4
+ - **September.22.21**: 3.1.1
5
+ - [PR #107](https://github.com/caxlsx/caxlsx/pull/107) - Add overlap to bar charts
6
+ - [PR #108](https://github.com/caxlsx/caxlsx/pull/108) - Fix gap depth and gap depth validators for bar charts and 3D bar charts
7
+
4
8
  - **March.27.21**: 3.1.0
5
9
  - [PR #95](https://github.com/caxlsx/caxlsx/pull/95) - Replace mimemagic with marcel
6
10
  - [PR #87](https://github.com/caxlsx/caxlsx/pull/87) - Implement :offset option for worksheet#add_row
@@ -11,7 +15,7 @@ CHANGELOG
11
15
  - **January.5.21**: 3.0.4
12
16
  - [PR #72](https://github.com/caxlsx/caxlsx/pull/72) - Relax Ruby dependency to allow for Ruby 3. This required Travis to be upgraded from Ubuntu Trusty to Ubuntu Bionic. rbx-3 was dropped.
13
17
  - [PR #71](https://github.com/caxlsx/caxlsx/pull/71) - Adds date type to validator so sheet.add_data_validation works with date type. Addresses [I #26](https://github.com/caxlsx/caxlsx/issues/26) - Date Data Validation not working
14
- - [PR #70](https://github.com/caxlsx/caxlsx/pull/70) - Fix worksheet title length enforcement caused by switching from size to bytesize. Addresses [I #67](https://github.com/caxlsx/caxlsx/issues/67) - character length error in worksheet name when using Japanese, which was introduced by addressing [I #588](https://github.com/randym/axlsx/issues/588) in the old Axlsx repo.
18
+ - [PR #70](https://github.com/caxlsx/caxlsx/pull/70) - Fix worksheet title length enforcement caused by switching from size to bytesize. Addresses [I #67](https://github.com/caxlsx/caxlsx/issues/67) - character length error in worksheet name when using Japanese, which was introduced by addressing [I #588](https://github.com/randym/axlsx/issues/588) in the old Axlsx repo.
15
19
 
16
20
 
17
21
  - **December.7.20**: 3.0.3
@@ -19,7 +23,7 @@ CHANGELOG
19
23
  - [PR #56](https://github.com/caxlsx/caxlsx/pull/56) - Add `zip_command` option to `#serialize` for faster serialization of large Excel files by using a zip binary
20
24
  - [PR #54](https://github.com/caxlsx/caxlsx/pull/54) - Fix type detection for floats with out-of-rage exponents
21
25
  - [I #67](https://github.com/caxlsx/caxlsx/issues/67) - Fix regression in worksheet name length enforcement: Some unicode characters were counted incorrectly, so that names that previously worked fine now stopped working. (This was introduced in 3.0.2)
22
-
26
+
23
27
  - **July.16.20**: 3.0.2
24
28
  - [I #51](https://github.com/caxlsx/caxlsx/issues/51) - Images do not import on Windows. IO read set explicitly to binary mode.
25
29
  - [PR #53](https://github.com/caxlsx/caxlsx/pull/53) - Limit column width to 255. Maximum column width limit in MS Excel is 255 characters, see https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3
@@ -152,7 +156,7 @@ CHANGELOG
152
156
  - added in interop requirements so that charts are properly exported
153
157
  to PDF from Libra Office
154
158
  - various readability improvements and work standardizing attribute
155
- names to snake_case. Aliases are provided for backward compatiblity
159
+ names to snake_case. Aliases are provided for backward compatiblity
156
160
 
157
161
  - **June.11.12**: 1.1.7
158
162
  - fix chart rendering issue when label offset is specified as a
@@ -193,23 +197,23 @@ in value caches
193
197
  - Added support for specifying the color of data series in charts.
194
198
  - bugfix using add_cell on row mismanaged calls to update_column_info.
195
199
 
196
- - ** April.25.12:**: 1.1.3
200
+ - **April.25.12:**: 1.1.3
197
201
  - Primarily because I am stupid.....Updates to readme to properly report version, add in missing docs and restructure example directory.
198
202
 
199
- - ** April.25.12:**: 1.1.2
203
+ - **April.25.12:**: 1.1.2
200
204
  - Conditional Formatting completely implemented.
201
205
  - refactoring / documentation for Style#add_style
202
206
  - added in label rotation for chart axis labels
203
207
  - bugfix to properly assign style and type info to cells when only partial information is provided in the types/style option
204
208
 
205
- - ** April.18.12**: 1.1.1
209
+ - **April.18.12**: 1.1.1
206
210
  - bugfix for autowidth calculations across multiple rows
207
211
  - bugfix for dimension calculations with nil cells.
208
212
  - REMOVED RMAGICK dependency WOOT!
209
213
  - Update readme to show screenshot of gem output.
210
214
  - Cleanup benchmark and add benchmark rake task
211
215
 
212
- - ** April.3.12**: 1.1.0
216
+ - **April.3.12**: 1.1.0
213
217
  - bugfix patch name_to_indecies to properly handle extended ranges.
214
218
  - bugfix properly serialize chart title.
215
219
  - lower rake minimum requirement for 1.8.7 apps that don't want to move on to 0.9 NOTE this will be reverted for 2.0.0 with workbook parsing!
@@ -224,7 +228,7 @@ in value caches
224
228
  - Major (like 7x faster!) performance updates.
225
229
  - Gem now supports for JRuby 1.6.7, as well as experimental support for Rubinius
226
230
 
227
- - ** March.5.12**: 1.0.18
231
+ - **March.5.12**: 1.0.18
228
232
  https://github.com/randym/axlsx/compare/1.0.17...1.0.18
229
233
  - bugfix custom borders are not properly applied when using styles.add_style
230
234
  - interop worksheet names must be 31 characters or less or some versions of office complain about repairs
@@ -234,14 +238,14 @@ in value caches
234
238
  - added << alias for add_row
235
239
  - removed presetting of date1904 based on authoring platform. Now defaults to use 1900 epoch (date1904 = false)
236
240
 
237
- - ** February.14.12**: 1.0.17
241
+ - **February.14.12**: 1.0.17
238
242
  https://github.com/randym/axlsx/compare/1.0.16...1.0.17
239
243
  - Added in support for serializing to StringIO
240
244
  - Added in support for using shared strings table. This makes most of the features in axlsx interoperable with iWorks Numbers
241
245
  - Added in support for fixed column_widths
242
246
  - Removed unneeded dependencies on active-support and i18n
243
247
 
244
- - ** February.2.12**: 1.0.16
248
+ - **February.2.12**: 1.0.16
245
249
  https://github.com/randym/axlsx/compare/1.0.15...1.0.16
246
250
  - Bug fix for schema file locations when validating in rails
247
251
  - Added hyperlink to images
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Gem
4
4
  Version](https://badge.fury.io/rb/caxlsx.svg)](http://badge.fury.io/rb/caxlsx)
5
5
  ![Total downloads](http://ruby-gem-downloads-badge.herokuapp.com/caxlsx?type=total)
6
- ![Downloads for 3.0.4 (latest)](http://ruby-gem-downloads-badge.herokuapp.com/caxlsx/3.0.4?label=downloads%203.0.4)
6
+ ![Downloads for 3.1.1 (latest)](http://ruby-gem-downloads-badge.herokuapp.com/caxlsx/3.1.1?label=downloads%203.1.1)
7
7
 
8
8
  ## Notice: Community Axlsx Organization
9
9
 
@@ -31,17 +31,17 @@ module Axlsx
31
31
  alias :barDir :bar_dir
32
32
 
33
33
  # space between bar or column clusters, as a percentage of the bar or column width.
34
- # @return [String]
34
+ # @return [Integer]
35
35
  attr_reader :gap_depth
36
36
  alias :gapDepth :gap_depth
37
37
 
38
38
  # space between bar or column clusters, as a percentage of the bar or column width.
39
- # @return [String]
39
+ # @return [Integer]
40
40
  def gap_width
41
41
  @gap_width ||= 150
42
42
  end
43
43
  alias :gapWidth :gap_width
44
-
44
+
45
45
  #grouping for a column, line, or area chart.
46
46
  # must be one of [:percentStacked, :clustered, :standard, :stacked]
47
47
  # @return [Symbol]
@@ -56,9 +56,6 @@ module Axlsx
56
56
  @shape ||= :box
57
57
  end
58
58
 
59
- # validation regex for gap amount percent
60
- GAP_AMOUNT_PERCENT = /0*(([0-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)%/
61
-
62
59
  # Creates a new bar chart object
63
60
  # @param [GraphicFrame] frame The workbook that owns this chart.
64
61
  # @option options [Cell, String] title
@@ -102,14 +99,14 @@ module Axlsx
102
99
 
103
100
  # space between bar or column clusters, as a percentage of the bar or column width.
104
101
  def gap_width=(v)
105
- RegexValidator.validate "Bar3DChart.gap_width", GAP_AMOUNT_PERCENT, v
102
+ RangeValidator.validate "Bar3DChart.gap_width", 0, 500, v
106
103
  @gap_width=(v)
107
104
  end
108
105
  alias :gapWidth= :gap_width=
109
106
 
110
107
  # space between bar or column clusters, as a percentage of the bar or column width.
111
108
  def gap_depth=(v)
112
- RegexValidator.validate "Bar3DChart.gap_didth", GAP_AMOUNT_PERCENT, v
109
+ RangeValidator.validate "Bar3DChart.gap_depth", 0, 500, v
113
110
  @gap_depth=(v)
114
111
  end
115
112
  alias :gapDepth= :gap_depth=
@@ -31,12 +31,7 @@ module Axlsx
31
31
  alias :barDir :bar_dir
32
32
 
33
33
  # space between bar or column clusters, as a percentage of the bar or column width.
34
- # @return [String]
35
- attr_reader :gap_depth
36
- alias :gapDepth :gap_depth
37
-
38
- # space between bar or column clusters, as a percentage of the bar or column width.
39
- # @return [String]
34
+ # @return [Integer]
40
35
  def gap_width
41
36
  @gap_width ||= 150
42
37
  end
@@ -49,6 +44,12 @@ module Axlsx
49
44
  @grouping ||= :clustered
50
45
  end
51
46
 
47
+ # Overlap between series
48
+ # @return [Integer]
49
+ def overlap
50
+ @overlap ||= 0
51
+ end
52
+
52
53
  # The shape of the bars or columns
53
54
  # must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
54
55
  # @return [Symbol]
@@ -56,9 +57,6 @@ module Axlsx
56
57
  @shape ||= :box
57
58
  end
58
59
 
59
- # validation regex for gap amount percent
60
- GAP_AMOUNT_PERCENT = /0*(([0-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)%/
61
-
62
60
  # Creates a new bar chart object
63
61
  # @param [GraphicFrame] frame The workbook that owns this chart.
64
62
  # @option options [Cell, String] title
@@ -66,12 +64,11 @@ module Axlsx
66
64
  # @option options [Symbol] bar_dir
67
65
  # @option options [Symbol] grouping
68
66
  # @option options [String] gap_width
69
- # @option options [String] gap_depth
70
67
  # @option options [Symbol] shape
71
68
  # @see Chart
72
69
  def initialize(frame, options={})
73
70
  @vary_colors = true
74
- @gap_width, @gap_depth, @shape = nil, nil, nil
71
+ @gap_width, @overlap, @shape = nil, nil, nil
75
72
  super(frame, options)
76
73
  @series_type = BarSeries
77
74
  @d_lbls = nil
@@ -94,17 +91,15 @@ module Axlsx
94
91
 
95
92
  # space between bar or column clusters, as a percentage of the bar or column width.
96
93
  def gap_width=(v)
97
- RegexValidator.validate "BarChart.gap_width", GAP_AMOUNT_PERCENT, v
94
+ RangeValidator.validate "BarChart.gap_width", 0, 500, v
98
95
  @gap_width=(v)
99
96
  end
100
97
  alias :gapWidth= :gap_width=
101
98
 
102
- # space between bar or column clusters, as a percentage of the bar or column width.
103
- def gap_depth=(v)
104
- RegexValidator.validate "BarChart.gap_didth", GAP_AMOUNT_PERCENT, v
105
- @gap_depth=(v)
99
+ def overlap=(v)
100
+ RangeValidator.validate "BarChart.overlap", -100, 100, v
101
+ @overlap=(v)
106
102
  end
107
- alias :gapDepth= :gap_depth=
108
103
 
109
104
  # The shape of the bars or columns
110
105
  # must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
@@ -124,8 +119,8 @@ module Axlsx
124
119
  str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
125
120
  @series.each { |ser| ser.to_xml_string(str) }
126
121
  @d_lbls.to_xml_string(str) if @d_lbls
122
+ str << ('<c:overlap val="' << @overlap.to_s << '"/>') unless @overlap.nil?
127
123
  str << ('<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil?
128
- str << ('<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil?
129
124
  str << ('<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil?
130
125
  axes.to_xml_string(str, :ids => true)
131
126
  str << '</c:barChart>'
@@ -22,12 +22,18 @@ module Axlsx
22
22
  # An array of rgb colors to apply to your bar chart.
23
23
  attr_reader :colors
24
24
 
25
+ # The fill color for this series.
26
+ # Red, green, and blue is expressed as sequence of hex digits, RRGGBB.
27
+ # @return [String]
28
+ attr_reader :series_color
29
+
25
30
  # Creates a new series
26
31
  # @option options [Array, SimpleTypedList] data
27
32
  # @option options [Array, SimpleTypedList] labels
28
33
  # @option options [String] title
29
34
  # @option options [String] shape
30
35
  # @option options [String] colors an array of colors to use when rendering each data point
36
+ # @option options [String] series_color a color to use when rendering series
31
37
  # @param [Chart] chart
32
38
  def initialize(chart, options={})
33
39
  @shape = :box
@@ -40,6 +46,10 @@ module Axlsx
40
46
  # @see colors
41
47
  def colors=(v) DataTypeValidator.validate "BarSeries.colors", [Array], v; @colors = v end
42
48
 
49
+ def series_color=(v)
50
+ @series_color = v
51
+ end
52
+
43
53
  # @see shape
44
54
  def shape=(v)
45
55
  RestrictionValidator.validate "BarSeries.shape", [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax], v
@@ -60,9 +70,16 @@ module Axlsx
60
70
  str << '</a:solidFill></c:spPr></c:dPt>'
61
71
  end
62
72
 
73
+ if series_color
74
+ str << '<c:spPr><a:solidFill>'
75
+ str << ('<a:srgbClr val="' << series_color << '"/>')
76
+ str << '</a:solidFill>'
77
+ str << '</c:spPr>'
78
+ end
79
+
63
80
  @labels.to_xml_string(str) unless @labels.nil?
64
81
  @data.to_xml_string(str) unless @data.nil?
65
- # this is actually only required for shapes other than box
82
+ # this is actually only required for shapes other than box
66
83
  str << ('<c:shape val="' << shape.to_s << '"></c:shape>')
67
84
  end
68
85
  end
data/lib/axlsx/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Axlsx
2
2
 
3
3
  # The current version
4
- VERSION = "3.1.0"
4
+ VERSION = "3.1.1"
5
5
  end
@@ -57,7 +57,7 @@ module Axlsx
57
57
  attr_reader :outline_level
58
58
  alias :outlineLevel :outline_level
59
59
 
60
- # The style applied ot the row. This affects the entire row.
60
+ # The style applied to the row. This affects the entire row.
61
61
  # @return [Integer]
62
62
  attr_reader :s
63
63
 
data/lib/axlsx.rb CHANGED
@@ -51,10 +51,11 @@ module Axlsx
51
51
  # determines the cell range for the items provided
52
52
  def self.cell_range(cells, absolute=true)
53
53
  return "" unless cells.first.is_a? Cell
54
- cells = sort_cells(cells)
55
- reference = "#{cells.first.reference(absolute)}:#{cells.last.reference(absolute)}"
54
+
55
+ first_cell, last_cell = cells.minmax_by(&:pos)
56
+ reference = "#{first_cell.reference(absolute)}:#{last_cell.reference(absolute)}"
56
57
  if absolute
57
- escaped_name = cells.first.row.worksheet.name.gsub '&apos;', "''"
58
+ escaped_name = first_cell.row.worksheet.name.gsub '&apos;', "''"
58
59
  "'#{escaped_name}'!#{reference}"
59
60
  else
60
61
  reference
@@ -66,7 +67,7 @@ module Axlsx
66
67
  # @param [Array] cells
67
68
  # @return [Array]
68
69
  def self.sort_cells(cells)
69
- cells.sort { |x, y| [x.index, x.row.row_index] <=> [y.index, y.row.row_index] }
70
+ cells.sort_by(&:pos)
70
71
  end
71
72
 
72
73
  #global reference html entity encoding
@@ -32,18 +32,19 @@ class TestBar3DChart < Test::Unit::TestCase
32
32
  assert(@chart.grouping == :standard)
33
33
  end
34
34
 
35
+ def test_gap_width
36
+ assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = -1 }
37
+ assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = 501 }
38
+ assert_nothing_raised("allow valid gapWidth") { @chart.gap_width = 200 }
39
+ assert_equal(@chart.gap_width, 200, 'gap width is incorrect')
40
+ end
35
41
 
36
- def test_gapWidth
37
- assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = 200 }
38
- assert_nothing_raised("allow valid gapWidth") { @chart.gap_width = "200%" }
39
- assert(@chart.gap_width == "200%")
40
- end
41
-
42
- def test_gapDepth
43
- assert_raise(ArgumentError, "require valid gap_depth") { @chart.gap_depth = 200 }
44
- assert_nothing_raised("allow valid gap_depth") { @chart.gap_depth = "200%" }
45
- assert(@chart.gap_depth == "200%")
46
- end
42
+ def test_gap_depth
43
+ assert_raise(ArgumentError, "require valid gap_depth") { @chart.gap_depth = -1 }
44
+ assert_raise(ArgumentError, "require valid gap_depth") { @chart.gap_depth = 501 }
45
+ assert_nothing_raised("allow valid gap_depth") { @chart.gap_depth = 200 }
46
+ assert_equal(@chart.gap_depth, 200, 'gap depth is incorrect')
47
+ end
47
48
 
48
49
  def test_shape
49
50
  assert_raise(ArgumentError, "require valid shape") { @chart.shape = :star }
@@ -68,4 +69,18 @@ class TestBar3DChart < Test::Unit::TestCase
68
69
  val_axis_position = str.index(@chart.axes[:val_axis].id.to_s)
69
70
  assert(cat_axis_position < val_axis_position, "cat_axis must occur earlier than val_axis in the XML")
70
71
  end
72
+
73
+ def test_to_xml_string_has_gap_depth
74
+ gap_depth_value = rand(0..500)
75
+ @chart.gap_depth = gap_depth_value
76
+ doc = Nokogiri::XML(@chart.to_xml_string)
77
+ assert_equal(doc.xpath("//c:bar3DChart/c:gapDepth").first.attribute('val').value, gap_depth_value.to_s)
78
+ end
79
+
80
+ def test_to_xml_string_has_gap_width
81
+ gap_width_value = rand(0..500)
82
+ @chart.gap_width = gap_width_value
83
+ doc = Nokogiri::XML(@chart.to_xml_string)
84
+ assert_equal(doc.xpath("//c:bar3DChart/c:gapWidth").first.attribute('val').value, gap_width_value.to_s)
85
+ end
71
86
  end
@@ -32,18 +32,19 @@ class TestBarChart < Test::Unit::TestCase
32
32
  assert(@chart.grouping == :standard)
33
33
  end
34
34
 
35
+ def test_gap_width
36
+ assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = -1 }
37
+ assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = 501 }
38
+ assert_nothing_raised("allow valid gap width") { @chart.gap_width = 200 }
39
+ assert_equal(@chart.gap_width, 200, 'gap width is incorrect')
40
+ end
35
41
 
36
- def test_gapWidth
37
- assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = 200 }
38
- assert_nothing_raised("allow valid gapWidth") { @chart.gap_width = "200%" }
39
- assert(@chart.gap_width == "200%")
40
- end
41
-
42
- def test_gapDepth
43
- assert_raise(ArgumentError, "require valid gap_depth") { @chart.gap_depth = 200 }
44
- assert_nothing_raised("allow valid gap_depth") { @chart.gap_depth = "200%" }
45
- assert(@chart.gap_depth == "200%")
46
- end
42
+ def test_overlap
43
+ assert_raise(ArgumentError, "require valid overlap") { @chart.overlap = -101 }
44
+ assert_raise(ArgumentError, "require valid overlap") { @chart.overlap = 101 }
45
+ assert_nothing_raised("allow valid overlap") { @chart.overlap = 100 }
46
+ assert_equal(@chart.overlap, 100, 'overlap is incorrect')
47
+ end
47
48
 
48
49
  def test_shape
49
50
  assert_raise(ArgumentError, "require valid shape") { @chart.shape = :star }
@@ -68,4 +69,18 @@ class TestBarChart < Test::Unit::TestCase
68
69
  val_axis_position = str.index(@chart.axes[:val_axis].id.to_s)
69
70
  assert(cat_axis_position < val_axis_position, "cat_axis must occur earlier than val_axis in the XML")
70
71
  end
72
+
73
+ def test_to_xml_string_has_gap_width
74
+ gap_width_value = rand(0..500)
75
+ @chart.gap_width = gap_width_value
76
+ doc = Nokogiri::XML(@chart.to_xml_string)
77
+ assert_equal(doc.xpath("//c:barChart/c:gapWidth").first.attribute('val').value, gap_width_value.to_s)
78
+ end
79
+
80
+ def test_to_xml_string_has_overlap
81
+ overlap_value = rand(-100..100)
82
+ @chart.overlap = overlap_value
83
+ doc = Nokogiri::XML(@chart.to_xml_string)
84
+ assert_equal(doc.xpath("//c:barChart/c:overlap").first.attribute('val').value, overlap_value.to_s)
85
+ end
71
86
  end
@@ -6,13 +6,21 @@ class TestBarSeries < Test::Unit::TestCase
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
8
8
  @chart = @ws.add_chart Axlsx::Bar3DChart, :title => "fishery"
9
- @series = @chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ['FF0000', '00FF00', '0000FF'], :shape => :cone
9
+ @series = @chart.add_series(
10
+ data: [0, 1, 2],
11
+ labels: ['zero', 'one', 'two'],
12
+ title: 'bob',
13
+ colors: ['FF0000', '00FF00', '0000FF'],
14
+ shape: :cone,
15
+ series_color: '5A5A5A'
16
+ )
10
17
  end
11
18
 
12
19
  def test_initialize
13
20
  assert_equal(@series.title.text, "bob", "series title has been applied")
14
21
  assert_equal(@series.data.class, Axlsx::NumDataSource, "data option applied")
15
22
  assert_equal(@series.shape, :cone, "series shape has been applied")
23
+ assert_equal(@series.series_color, '5A5A5A', 'series color has been applied')
16
24
  assert(@series.data.is_a?(Axlsx::NumDataSource))
17
25
  assert(@series.labels.is_a?(Axlsx::AxDataSource))
18
26
  end
@@ -33,5 +41,6 @@ class TestBarSeries < Test::Unit::TestCase
33
41
  assert_equal(doc.xpath("//c:dPt/c:idx[@val='#{index}']").size,1)
34
42
  assert_equal(doc.xpath("//c:dPt/c:spPr/a:solidFill/a:srgbClr[@val='#{@series.colors[index]}']").size,1)
35
43
  end
44
+ assert_equal(doc.xpath('//c:spPr[not(ancestor::c:dPt)]/a:solidFill/a:srgbClr').first.get_attribute('val'), '5A5A5A', 'series color has been applied')
36
45
  end
37
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caxlsx
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Randy Morgan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-03-28 00:00:00.000000000 Z
12
+ date: 2021-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -467,132 +467,132 @@ required_rubygems_version: !ruby/object:Gem::Requirement
467
467
  - !ruby/object:Gem::Version
468
468
  version: '0'
469
469
  requirements: []
470
- rubygems_version: 3.0.3
470
+ rubygems_version: 3.0.9
471
471
  signing_key:
472
472
  specification_version: 4
473
473
  summary: Excel OOXML (xlsx) with charts, styles, images and autowidth columns.
474
474
  test_files:
475
- - test/benchmark.rb
476
- - test/content_type/tc_content_type.rb
477
- - test/content_type/tc_default.rb
478
- - test/content_type/tc_override.rb
479
- - test/doc_props/tc_app.rb
480
- - test/doc_props/tc_core.rb
481
- - test/drawing/tc_area_chart.rb
482
- - test/drawing/tc_area_series.rb
483
- - test/drawing/tc_axes.rb
484
- - test/drawing/tc_axis.rb
485
- - test/drawing/tc_bar_3D_chart.rb
486
- - test/drawing/tc_bar_chart.rb
487
- - test/drawing/tc_bar_series.rb
488
- - test/drawing/tc_bubble_chart.rb
489
- - test/drawing/tc_bubble_series.rb
475
+ - test/drawing/tc_num_data.rb
476
+ - test/drawing/tc_two_cell_anchor.rb
477
+ - test/drawing/tc_view_3D.rb
478
+ - test/drawing/tc_series_title.rb
490
479
  - test/drawing/tc_cat_axis.rb
491
- - test/drawing/tc_cat_axis_data.rb
492
480
  - test/drawing/tc_chart.rb
481
+ - test/drawing/tc_num_val.rb
482
+ - test/drawing/tc_axis.rb
483
+ - test/drawing/tc_line_chart.rb
484
+ - test/drawing/tc_marker.rb
485
+ - test/drawing/tc_bubble_series.rb
493
486
  - test/drawing/tc_d_lbls.rb
494
- - test/drawing/tc_data_source.rb
495
- - test/drawing/tc_drawing.rb
496
- - test/drawing/tc_graphic_frame.rb
497
- - test/drawing/tc_hyperlink.rb
487
+ - test/drawing/tc_str_val.rb
488
+ - test/drawing/tc_bar_chart.rb
498
489
  - test/drawing/tc_line_3d_chart.rb
499
- - test/drawing/tc_line_chart.rb
490
+ - test/drawing/tc_cat_axis_data.rb
491
+ - test/drawing/tc_area_chart.rb
500
492
  - test/drawing/tc_line_series.rb
501
- - test/drawing/tc_marker.rb
502
- - test/drawing/tc_named_axis_data.rb
503
- - test/drawing/tc_num_data.rb
504
- - test/drawing/tc_num_val.rb
505
- - test/drawing/tc_one_cell_anchor.rb
493
+ - test/drawing/tc_scatter_series.rb
494
+ - test/drawing/tc_bar_series.rb
495
+ - test/drawing/tc_hyperlink.rb
506
496
  - test/drawing/tc_pic.rb
507
- - test/drawing/tc_picture_locking.rb
508
- - test/drawing/tc_pie_3D_chart.rb
509
- - test/drawing/tc_pie_series.rb
510
- - test/drawing/tc_scaling.rb
497
+ - test/drawing/tc_named_axis_data.rb
498
+ - test/drawing/tc_bubble_chart.rb
499
+ - test/drawing/tc_str_data.rb
500
+ - test/drawing/tc_drawing.rb
511
501
  - test/drawing/tc_scatter_chart.rb
512
- - test/drawing/tc_scatter_series.rb
513
- - test/drawing/tc_ser_axis.rb
514
502
  - test/drawing/tc_series.rb
515
- - test/drawing/tc_series_title.rb
516
- - test/drawing/tc_str_data.rb
517
- - test/drawing/tc_str_val.rb
518
503
  - test/drawing/tc_title.rb
519
- - test/drawing/tc_two_cell_anchor.rb
520
- - test/drawing/tc_val_axis.rb
521
- - test/drawing/tc_view_3D.rb
522
- - test/drawing/tc_vml_drawing.rb
504
+ - test/drawing/tc_ser_axis.rb
505
+ - test/drawing/tc_picture_locking.rb
506
+ - test/drawing/tc_pie_series.rb
523
507
  - test/drawing/tc_vml_shape.rb
524
- - test/fixtures/image1.gif
525
- - test/fixtures/image1.jpeg
526
- - test/fixtures/image1.jpg
527
- - test/fixtures/image1.png
528
- - test/fixtures/image1_fake.jpg
529
- - test/profile.rb
530
- - test/rels/tc_relationship.rb
531
- - test/rels/tc_relationships.rb
508
+ - test/drawing/tc_axes.rb
509
+ - test/drawing/tc_vml_drawing.rb
510
+ - test/drawing/tc_pie_3D_chart.rb
511
+ - test/drawing/tc_area_series.rb
512
+ - test/drawing/tc_graphic_frame.rb
513
+ - test/drawing/tc_one_cell_anchor.rb
514
+ - test/drawing/tc_data_source.rb
515
+ - test/drawing/tc_val_axis.rb
516
+ - test/drawing/tc_scaling.rb
517
+ - test/drawing/tc_bar_3D_chart.rb
518
+ - test/util/tc_simple_typed_list.rb
519
+ - test/util/tc_mime_type_utils.rb
520
+ - test/util/tc_validators.rb
521
+ - test/util/tc_serialized_attributes.rb
522
+ - test/tc_axlsx.rb
523
+ - test/stylesheet/tc_fill.rb
532
524
  - test/stylesheet/tc_border.rb
525
+ - test/stylesheet/tc_gradient_stop.rb
526
+ - test/stylesheet/tc_gradient_fill.rb
527
+ - test/stylesheet/tc_table_style.rb
528
+ - test/stylesheet/tc_font.rb
529
+ - test/stylesheet/tc_pattern_fill.rb
530
+ - test/stylesheet/tc_color.rb
531
+ - test/stylesheet/tc_num_fmt.rb
532
+ - test/stylesheet/tc_styles.rb
533
533
  - test/stylesheet/tc_border_pr.rb
534
- - test/stylesheet/tc_cell_alignment.rb
535
534
  - test/stylesheet/tc_cell_protection.rb
535
+ - test/stylesheet/tc_xf.rb
536
536
  - test/stylesheet/tc_cell_style.rb
537
- - test/stylesheet/tc_color.rb
537
+ - test/stylesheet/tc_table_styles.rb
538
538
  - test/stylesheet/tc_dxf.rb
539
- - test/stylesheet/tc_fill.rb
540
- - test/stylesheet/tc_font.rb
541
- - test/stylesheet/tc_gradient_fill.rb
542
- - test/stylesheet/tc_gradient_stop.rb
543
- - test/stylesheet/tc_num_fmt.rb
544
- - test/stylesheet/tc_pattern_fill.rb
545
- - test/stylesheet/tc_styles.rb
546
- - test/stylesheet/tc_table_style.rb
547
539
  - test/stylesheet/tc_table_style_element.rb
548
- - test/stylesheet/tc_table_styles.rb
549
- - test/stylesheet/tc_xf.rb
550
- - test/tc_axlsx.rb
540
+ - test/stylesheet/tc_cell_alignment.rb
551
541
  - test/tc_helper.rb
542
+ - test/doc_props/tc_core.rb
543
+ - test/doc_props/tc_app.rb
544
+ - test/content_type/tc_override.rb
545
+ - test/content_type/tc_content_type.rb
546
+ - test/content_type/tc_default.rb
547
+ - test/rels/tc_relationship.rb
548
+ - test/rels/tc_relationships.rb
549
+ - test/profile.rb
550
+ - test/fixtures/image1_fake.jpg
551
+ - test/fixtures/image1.jpeg
552
+ - test/fixtures/image1.gif
553
+ - test/fixtures/image1.png
554
+ - test/fixtures/image1.jpg
555
+ - test/benchmark.rb
552
556
  - test/tc_package.rb
553
- - test/util/tc_mime_type_utils.rb
554
- - test/util/tc_serialized_attributes.rb
555
- - test/util/tc_simple_typed_list.rb
556
- - test/util/tc_validators.rb
557
- - test/workbook/tc_defined_name.rb
558
- - test/workbook/tc_shared_strings_table.rb
559
- - test/workbook/tc_workbook.rb
560
557
  - test/workbook/tc_workbook_view.rb
561
- - test/workbook/worksheet/auto_filter/tc_auto_filter.rb
562
- - test/workbook/worksheet/auto_filter/tc_filter_column.rb
563
- - test/workbook/worksheet/auto_filter/tc_filters.rb
564
- - test/workbook/worksheet/tc_break.rb
565
- - test/workbook/worksheet/tc_cell.rb
566
- - test/workbook/worksheet/tc_cfvo.rb
567
- - test/workbook/worksheet/tc_col.rb
568
- - test/workbook/worksheet/tc_color_scale.rb
569
- - test/workbook/worksheet/tc_comment.rb
570
- - test/workbook/worksheet/tc_comments.rb
571
- - test/workbook/worksheet/tc_conditional_formatting.rb
558
+ - test/workbook/tc_defined_name.rb
572
559
  - test/workbook/worksheet/tc_data_bar.rb
560
+ - test/workbook/worksheet/tc_worksheet_hyperlink.rb
573
561
  - test/workbook/worksheet/tc_data_validation.rb
574
- - test/workbook/worksheet/tc_date_time_converter.rb
575
- - test/workbook/worksheet/tc_header_footer.rb
576
- - test/workbook/worksheet/tc_icon_set.rb
577
- - test/workbook/worksheet/tc_outline_pr.rb
578
- - test/workbook/worksheet/tc_page_margins.rb
579
- - test/workbook/worksheet/tc_page_set_up_pr.rb
580
- - test/workbook/worksheet/tc_page_setup.rb
581
- - test/workbook/worksheet/tc_pane.rb
582
- - test/workbook/worksheet/tc_pivot_table.rb
583
562
  - test/workbook/worksheet/tc_pivot_table_cache_definition.rb
584
- - test/workbook/worksheet/tc_print_options.rb
585
563
  - test/workbook/worksheet/tc_protected_range.rb
586
- - test/workbook/worksheet/tc_rich_text.rb
587
- - test/workbook/worksheet/tc_rich_text_run.rb
588
- - test/workbook/worksheet/tc_row.rb
589
564
  - test/workbook/worksheet/tc_selection.rb
565
+ - test/workbook/worksheet/tc_rich_text.rb
566
+ - test/workbook/worksheet/tc_date_time_converter.rb
567
+ - test/workbook/worksheet/tc_table_style_info.rb
568
+ - test/workbook/worksheet/tc_conditional_formatting.rb
569
+ - test/workbook/worksheet/tc_page_setup.rb
570
+ - test/workbook/worksheet/tc_comments.rb
571
+ - test/workbook/worksheet/tc_sheet_view.rb
590
572
  - test/workbook/worksheet/tc_sheet_calc_pr.rb
591
- - test/workbook/worksheet/tc_sheet_format_pr.rb
573
+ - test/workbook/worksheet/tc_color_scale.rb
574
+ - test/workbook/worksheet/tc_worksheet.rb
575
+ - test/workbook/worksheet/tc_rich_text_run.rb
592
576
  - test/workbook/worksheet/tc_sheet_pr.rb
577
+ - test/workbook/worksheet/auto_filter/tc_filters.rb
578
+ - test/workbook/worksheet/auto_filter/tc_auto_filter.rb
579
+ - test/workbook/worksheet/auto_filter/tc_filter_column.rb
580
+ - test/workbook/worksheet/tc_cell.rb
593
581
  - test/workbook/worksheet/tc_sheet_protection.rb
594
- - test/workbook/worksheet/tc_sheet_view.rb
582
+ - test/workbook/worksheet/tc_pane.rb
583
+ - test/workbook/worksheet/tc_header_footer.rb
595
584
  - test/workbook/worksheet/tc_table.rb
596
- - test/workbook/worksheet/tc_table_style_info.rb
597
- - test/workbook/worksheet/tc_worksheet.rb
598
- - test/workbook/worksheet/tc_worksheet_hyperlink.rb
585
+ - test/workbook/worksheet/tc_page_margins.rb
586
+ - test/workbook/worksheet/tc_cfvo.rb
587
+ - test/workbook/worksheet/tc_col.rb
588
+ - test/workbook/worksheet/tc_pivot_table.rb
589
+ - test/workbook/worksheet/tc_break.rb
590
+ - test/workbook/worksheet/tc_sheet_format_pr.rb
591
+ - test/workbook/worksheet/tc_print_options.rb
592
+ - test/workbook/worksheet/tc_comment.rb
593
+ - test/workbook/worksheet/tc_outline_pr.rb
594
+ - test/workbook/worksheet/tc_row.rb
595
+ - test/workbook/worksheet/tc_icon_set.rb
596
+ - test/workbook/worksheet/tc_page_set_up_pr.rb
597
+ - test/workbook/tc_shared_strings_table.rb
598
+ - test/workbook/tc_workbook.rb