caxlsx 3.0.3 → 3.0.4

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: 49062d90fcd29bac6406a90ad46894a3b0624b2a5c391d8fc24a4b35f4c7a0b3
4
- data.tar.gz: 18fbd2886127ae59169c94ce4b7025adf78bb15651dba590d1f2955a2e276940
3
+ metadata.gz: a1add2e0fe915a49d02b64fe4df1aac62541f75ed27c97d0b418cdea137077c6
4
+ data.tar.gz: d334797649d8ea1382ff2809359b7455cbde69365ecf798de4a51f0cfce903ca
5
5
  SHA512:
6
- metadata.gz: e5be713d4ea7daa76c58bbb648d37a146b094ea2cb9a132e3f02e58a536b20551aabef73513d4f1f619eb29c54294d02ec758f1fd959a50edbd4be565b368ade
7
- data.tar.gz: 8a58ee22d90bdd99a3b0a85c59441f926c15f5ce66fdcb6ec2bb969380ba5e2c12458ab16e97cc67291b69d9e4633d102385662733de130aa2cd7bb06e693130
6
+ metadata.gz: b164b9fe978fbc8866c3dbeea317c50d93c8b6796eeeb3a6b5214e9c11be439034543e1c1caaf9b4ddbf8a23713398a1bb4c6c207107a77b47353e183f59a226
7
+ data.tar.gz: c3b2eb3c86f0498ce1979bc3898a22baff4ca2e3eb0b9efe4751062fb2cb69ba6b0cfdce72c7366830627b5c912450303abceeb7ca81179781a4f865bd4d8186
@@ -3,10 +3,17 @@ CHANGELOG
3
3
 
4
4
  - **Unreleased**
5
5
 
6
+ - **January.5.21**: 3.0.4
7
+ - [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.
8
+ - [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
9
+ - [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.
10
+
11
+
6
12
  - **December.7.20**: 3.0.3
7
13
  - [PR #62](https://github.com/caxlsx/caxlsx/pull/62) - Fix edge cases in format detection for objects whose string representation made them look like numbers but the object didn’t respond to `#to_i` or `#to_f`.
8
14
  - [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
9
15
  - [PR #54](https://github.com/caxlsx/caxlsx/pull/54) - Fix type detection for floats with out-of-rage exponents
16
+ - [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)
10
17
 
11
18
  - **July.16.20**: 3.0.2
12
19
  - [I #51](https://github.com/caxlsx/caxlsx/issues/51) - Images do not import on Windows. IO read set explicitly to binary mode.
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Caxlsx (Community Continued Version)
2
2
  [![Build Status](https://travis-ci.com/caxlsx/caxlsx.svg?branch=master)](https://travis-ci.com/caxlsx/caxlsx)
3
+ [![Gem
4
+ Version](https://badge.fury.io/rb/caxlsx.svg)](http://badge.fury.io/rb/caxlsx)
3
5
 
4
6
  ## Notice: Community Axlsx Organization
5
7
 
@@ -269,7 +269,7 @@ module Axlsx
269
269
  # valid types must be one of custom, data, decimal, list, none, textLength, time, whole
270
270
  # @param [Any] v The value validated
271
271
  def self.validate_data_validation_type(v)
272
- RestrictionValidator.validate :data_validation_type, [:custom, :data, :decimal, :list, :none, :textLength, :time, :whole], v
272
+ RestrictionValidator.validate :data_validation_type, [:custom, :data, :decimal, :list, :none, :textLength, :date, :time, :whole], v
273
273
  end
274
274
 
275
275
  # Requires that the value is a valid sheet view type.
@@ -1,5 +1,5 @@
1
1
  module Axlsx
2
2
 
3
3
  # The current version
4
- VERSION = "3.0.3"
4
+ VERSION = "3.0.4"
5
5
  end
@@ -475,7 +475,11 @@ module Axlsx
475
475
  case type
476
476
  when :date
477
477
  self.style = STYLE_DATE if self.style == 0
478
- v
478
+ if !v.is_a?(Date) && v.respond_to?(:to_date)
479
+ v.to_date
480
+ else
481
+ v
482
+ end
479
483
  when :time
480
484
  self.style = STYLE_DATE if self.style == 0
481
485
  if !v.is_a?(Time) && v.respond_to?(:to_time)
@@ -171,7 +171,7 @@ module Axlsx
171
171
  def formula1=(v); Axlsx::validate_string(v); @formula1 = v end
172
172
 
173
173
  # @see formula2
174
- def formula2=(v); Axlsx::validate_string(v); @formula2 = v end
174
+ def formula2=(v); Axlsx::validate_string(v); @formula2 = v end
175
175
 
176
176
  # @see allowBlank
177
177
  def allowBlank=(v); Axlsx::validate_boolean(v); @allowBlank = v end
@@ -216,8 +216,8 @@ module Axlsx
216
216
  valid_attributes = get_valid_attributes
217
217
 
218
218
  str << '<dataValidation '
219
- str << instance_values.map do |key, value|
220
- '' << key << '="' << Axlsx.booleanize(value).to_s << '"' if (valid_attributes.include?(key.to_sym) && !CHILD_ELEMENTS.include?(key.to_sym))
219
+ str << instance_values.map do |key, value|
220
+ '' << key << '="' << Axlsx.booleanize(value).to_s << '"' if (valid_attributes.include?(key.to_sym) && !CHILD_ELEMENTS.include?(key.to_sym))
221
221
  end.join(' ')
222
222
  str << '>'
223
223
  str << ('<formula1>' << self.formula1 << '</formula1>') if @formula1 and valid_attributes.include?(:formula1)
@@ -229,7 +229,7 @@ module Axlsx
229
229
  def get_valid_attributes
230
230
  attributes = [:allowBlank, :error, :errorStyle, :errorTitle, :prompt, :promptTitle, :showErrorMessage, :showInputMessage, :sqref, :type ]
231
231
 
232
- if [:whole, :decimal, :data, :time, :textLength].include?(@type)
232
+ if [:whole, :decimal, :data, :time, :date, :textLength].include?(@type)
233
233
  attributes << [:operator, :formula1]
234
234
  attributes << [:formula2] if [:between, :notBetween].include?(@operator)
235
235
  elsif @type == :list
@@ -663,7 +663,9 @@ module Axlsx
663
663
 
664
664
  def validate_sheet_name(name)
665
665
  DataTypeValidator.validate :worksheet_name, String, name
666
- raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.bytesize > 31
666
+ # ignore first character (BOM) after encoding to utf16 because Excel does so, too.
667
+ character_length = name.encode("utf-16")[1..-1].encode("utf-16").bytesize / 2
668
+ raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if character_length > 31
667
669
  raise ArgumentError, (ERR_SHEET_NAME_CHARACTER_FORBIDDEN % name) if '[]*/\?:'.chars.any? { |char| name.include? char }
668
670
  name = Axlsx::coder.encode(name)
669
671
  sheet_names = @workbook.worksheets.reject { |s| s == self }.map { |s| s.name }
@@ -127,7 +127,7 @@ class TestValidators < Test::Unit::TestCase
127
127
  assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
128
128
 
129
129
  #data_validation_type
130
- [:custom, :data, :decimal, :list, :none, :textLength, :time, :whole].each do |sym|
130
+ [:custom, :data, :decimal, :list, :none, :textLength, :date, :time, :whole].each do |sym|
131
131
  assert_nothing_raised { Axlsx.validate_data_validation_type sym }
132
132
  end
133
133
  assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
@@ -71,6 +71,13 @@ class TestCell < Test::Unit::TestCase
71
71
  assert_equal(@c.value, now.to_time)
72
72
  end
73
73
 
74
+ def test_date
75
+ @c.type = :date
76
+ now = Time.now
77
+ @c.value = now
78
+ assert_equal(@c.value, now.to_date)
79
+ end
80
+
74
81
  def test_style
75
82
  assert_raise(ArgumentError, "must reject invalid style indexes") { @c.style=@c.row.worksheet.workbook.styles.cellXfs.size }
76
83
  assert_nothing_raised("must allow valid style index changes") {@c.style=1}
@@ -29,15 +29,28 @@ class TestWorksheet < Test::Unit::TestCase
29
29
  assert_raises(ArgumentError) { @ws.name = 'foo?bar' }
30
30
  end
31
31
 
32
+ def test_name_unique
33
+ assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
34
+ end
35
+
36
+ def test_name_unique_only_checks_other_worksheet_names
37
+ assert_nothing_raised { @ws.name = @ws.name }
38
+ assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' }
39
+ end
40
+
32
41
  def test_exception_if_name_too_long
33
42
  assert_nothing_raised { @ws.name = 'x' * 31 }
34
43
  assert_raises(ArgumentError) { @ws.name = 'x' * 32 }
35
44
  end
36
45
 
37
46
  def test_exception_if_name_too_long_because_of_multibyte_characters
38
- three_byte_character = ""
39
- assert_nothing_raised { @ws.name = 'x' * 28 + three_byte_character}
40
- assert_raises(ArgumentError) { @ws.name = 'x' * 29 + three_byte_character }
47
+ four_characters_for_excel = "\u{1F1EB 1F1F7}" # french flag emoji
48
+ assert_raises(ArgumentError, "name too long!") do
49
+ @ws.name = four_characters_for_excel + "x" * 28
50
+ end
51
+ assert_nothing_raised { @ws.name = "#{four_characters_for_excel}123456789012345678901234567" }
52
+ assert_nothing_raised { @ws.name = "123456789012345678901234567890…" }
53
+ assert_nothing_raised { @ws.name = "123456789012345678901234567890✔" }
41
54
  end
42
55
 
43
56
  def test_page_margins
@@ -460,21 +473,6 @@ class TestWorksheet < Test::Unit::TestCase
460
473
  assert_equal(@ws.relationships.size, 4, "adding a pivot table adds 1 relationship")
461
474
  end
462
475
 
463
-
464
- def test_name_unique
465
- assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
466
- end
467
-
468
- def test_name_unique_only_checks_other_worksheet_names
469
- assert_nothing_raised { @ws.name = @ws.name }
470
- assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' }
471
- end
472
-
473
- def test_name_size
474
- assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
475
- assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
476
- end
477
-
478
476
  def test_set_fixed_width_column
479
477
  @ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
480
478
  assert(@ws.column_info.size == 3, "a data item for each column")
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.0.3
4
+ version: 3.0.4
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: 2020-12-07 00:00:00.000000000 Z
12
+ date: 2021-01-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -458,7 +458,7 @@ require_paths:
458
458
  - lib
459
459
  required_ruby_version: !ruby/object:Gem::Requirement
460
460
  requirements:
461
- - - "~>"
461
+ - - ">="
462
462
  - !ruby/object:Gem::Version
463
463
  version: '2.3'
464
464
  required_rubygems_version: !ruby/object:Gem::Requirement