roo 2.8.2 → 2.9.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +34 -0
- data/CHANGELOG.md +18 -0
- data/Gemfile +1 -0
- data/README.md +15 -3
- data/lib/roo/base.rb +1 -1
- data/lib/roo/csv.rb +10 -4
- data/lib/roo/excelx/cell/number.rb +2 -1
- data/lib/roo/excelx/cell/time.rb +1 -1
- data/lib/roo/excelx/sheet_doc.rb +7 -11
- data/lib/roo/excelx.rb +13 -7
- data/lib/roo/spreadsheet.rb +8 -2
- data/lib/roo/version.rb +1 -1
- data/roo.gemspec +10 -3
- data/spec/lib/roo/excelx/cell/time_spec.rb +15 -0
- data/spec/lib/roo/excelx_spec.rb +9 -1
- data/spec/lib/roo/spreadsheet_spec.rb +1 -1
- data/spec/lib/roo/utils_spec.rb +0 -9
- data/test/excelx/cell/test_attr_reader_default.rb +1 -1
- data/test/excelx/cell/test_number.rb +2 -0
- data/test/roo/test_excelx.rb +22 -1
- data/test/roo/test_open_office.rb +1 -1
- metadata +31 -17
- data/.travis.yml +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae372e5e7ed6c045de6911c323a805fa4f60c68c2e8cd96358db03a01ff3beef
|
4
|
+
data.tar.gz: 6a2f09854519bd5d1b233aafcd1cf58d29343dc48e3cc735498ea2696785fd24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dae710a3f90d9d7038b0c4813ac0b400e6c587c2cf00be9239e27294f60046b2748b090207fce2ebaa3139a3adc681d0063bec9c1e6ee7c91cde51de1ae5861
|
7
|
+
data.tar.gz: 34691a95ee37cf9af6640c2090d2542db2a84558829a42b4ecab13870e2d9e73ee1d0c243cb01d536d5709158cb746bf69b1e0d0a0888226f5906bf41566e542
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: Ruby
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- master
|
6
|
+
pull_request:
|
7
|
+
branches:
|
8
|
+
- master
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
fail-fast: false
|
14
|
+
matrix:
|
15
|
+
ruby:
|
16
|
+
- '2.7'
|
17
|
+
- '3.0'
|
18
|
+
- '3.1'
|
19
|
+
- ruby-head
|
20
|
+
- jruby-9.3.3.0
|
21
|
+
include:
|
22
|
+
- ruby: ruby-head
|
23
|
+
env:
|
24
|
+
RUBYOPT: '--jit'
|
25
|
+
steps:
|
26
|
+
- uses: actions/checkout@v2
|
27
|
+
- uses: ruby/setup-ruby@v1
|
28
|
+
with:
|
29
|
+
ruby-version: ${{ matrix.ruby }}
|
30
|
+
bundler-cache: true
|
31
|
+
- run: bundle exec rake
|
32
|
+
env:
|
33
|
+
LONG_RUN: true
|
34
|
+
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
+
## [2.9.0] 2022-03-19
|
4
|
+
|
5
|
+
### Changed/Added
|
6
|
+
- Ruby 3.x Support [555](https://github.com/roo-rb/roo/pull/555)
|
7
|
+
- Ignore all richdata at 'xl/richData' of XSLX [552](https://github.com/roo-rb/roo/pull/552)
|
8
|
+
- Only copy if cell is present when `expand_merged_ranges: true` [557](https://github.com/roo-rb/roo/pull/557)
|
9
|
+
- Fixes issue where the contents of hidden sheet was returned when parsing visible sheets only. [536](https://github.com/roo-rb/roo/pull/536)
|
10
|
+
- Add formats [525](https://github.com/roo-rb/roo/pull/525)
|
11
|
+
- Fix warnings caused by Ruby 2.7 update [530](https://github.com/roo-rb/roo/pull/530)
|
12
|
+
- Add formats [525](https://github.com/roo-rb/roo/pull/525)
|
13
|
+
|
14
|
+
### Removed
|
15
|
+
- Support for ruby 2.4, 2.5, 2.6(excluded jRuby)
|
16
|
+
|
17
|
+
## [2.8.3] 2020-02-03
|
18
|
+
### Changed/Added
|
19
|
+
- Updated rubyzip version. Now minimal version is 1.3.0 [515](https://github.com/roo-rb/roo/pull/515) - [CVE-2019-16892](https://github.com/rubyzip/rubyzip/pull/403)
|
20
|
+
|
3
21
|
## [2.8.2] 2019-02-01
|
4
22
|
### Changed/Added
|
5
23
|
- Support range cell for Excelx's links [490](https://github.com/roo-rb/roo/pull/490)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,7 @@ Install as a gem
|
|
18
18
|
Or add it to your Gemfile
|
19
19
|
|
20
20
|
```ruby
|
21
|
-
gem "roo", "~> 2.
|
21
|
+
gem "roo", "~> 2.8.0"
|
22
22
|
```
|
23
23
|
## Usage
|
24
24
|
|
@@ -249,7 +249,7 @@ ods.formula('A', 2)
|
|
249
249
|
csv = Roo::CSV.new("mycsv.csv")
|
250
250
|
```
|
251
251
|
|
252
|
-
Because Roo uses the
|
252
|
+
Because Roo uses the standard CSV library, you can use options available to that library to parse csv files. You can pass options using the ``csv_options`` key.
|
253
253
|
|
254
254
|
For instance, you can load tab-delimited files (``.tsv``), and you can use a particular encoding when opening the file.
|
255
255
|
|
@@ -262,6 +262,18 @@ csv = Roo::CSV.new("mytsv.tsv", csv_options: {col_sep: "\t"})
|
|
262
262
|
csv = Roo::CSV.new("mycsv.csv", csv_options: {encoding: Encoding::ISO_8859_1})
|
263
263
|
```
|
264
264
|
|
265
|
+
You can also open csv files through the Roo::Spreadsheet class (useful if you accept both CSV and Excel types from a user file upload, for example).
|
266
|
+
|
267
|
+
```ruby
|
268
|
+
# Load a spreadsheet from a file path
|
269
|
+
# Roo figures out the right parser based on file extension
|
270
|
+
spreadsheet = Roo::Spreadsheet.open(csv_or_xlsx_file)
|
271
|
+
|
272
|
+
# Load a csv and auto-strip the BOM (byte order mark)
|
273
|
+
# csv files saved from MS Excel typically have the BOM marker at the beginning of the file
|
274
|
+
spreadsheet = Roo::Spreadsheet.open("mycsv.csv", { csv_options: { encoding: 'bom|utf-8' } })
|
275
|
+
```
|
276
|
+
|
265
277
|
## Upgrading from Roo 1.13.x
|
266
278
|
If you use ``.xls`` or Google spreadsheets, you will need to install ``roo-xls`` or ``roo-google`` to continue using that functionality.
|
267
279
|
|
@@ -271,7 +283,7 @@ Roo's public methods have stayed relatively consistent between 1.13.x and 2.0.0,
|
|
271
283
|
|
272
284
|
## Contributing
|
273
285
|
### Features
|
274
|
-
1. Fork it ( https://github.com/
|
286
|
+
1. Fork it ( https://github.com/roo-rb/roo/fork )
|
275
287
|
2. Install it (`bundle install --with local_development`)
|
276
288
|
3. Create your feature branch (`git checkout -b my-new-feature`)
|
277
289
|
4. Commit your changes (`git commit -am 'My new feature'`)
|
data/lib/roo/base.rb
CHANGED
@@ -544,7 +544,7 @@ class Roo::Base
|
|
544
544
|
tempfilename = File.join(tmpdir, find_basename(uri))
|
545
545
|
begin
|
546
546
|
File.open(tempfilename, "wb") do |file|
|
547
|
-
open(uri, "User-Agent" => "Ruby/#{RUBY_VERSION}") do |net|
|
547
|
+
URI.open(uri, "User-Agent" => "Ruby/#{RUBY_VERSION}") do |net|
|
548
548
|
file.write(net.read)
|
549
549
|
end
|
550
550
|
end
|
data/lib/roo/csv.rb
CHANGED
@@ -90,17 +90,23 @@ module Roo
|
|
90
90
|
def each_row(options, &block)
|
91
91
|
if uri?(filename)
|
92
92
|
each_row_using_tempdir(options, &block)
|
93
|
-
elsif is_stream?(filename_or_stream)
|
94
|
-
::CSV.new(filename_or_stream, options).each(&block)
|
95
93
|
else
|
96
|
-
|
94
|
+
csv_foreach(filename_or_stream, options, &block)
|
97
95
|
end
|
98
96
|
end
|
99
97
|
|
100
98
|
def each_row_using_tempdir(options, &block)
|
101
99
|
::Dir.mktmpdir(Roo::TEMP_PREFIX, ENV["ROO_TMP"]) do |tmpdir|
|
102
100
|
tmp_filename = download_uri(filename, tmpdir)
|
103
|
-
|
101
|
+
csv_foreach(tmp_filename, options, &block)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def csv_foreach(path_or_io, options, &block)
|
106
|
+
if is_stream?(path_or_io)
|
107
|
+
::CSV.new(path_or_io, **options).each(&block)
|
108
|
+
else
|
109
|
+
::CSV.foreach(path_or_io, **options, &block)
|
104
110
|
end
|
105
111
|
end
|
106
112
|
|
@@ -48,7 +48,7 @@ module Roo
|
|
48
48
|
when /^(0+)$/ then "%0#{$1.size}d"
|
49
49
|
when /^0\.(0+)$/ then "%.#{$1.size}f"
|
50
50
|
when '#,##0' then number_format('%.0f')
|
51
|
-
when
|
51
|
+
when /^#,##0.(0+)$/ then number_format("%.#{$1.size}f")
|
52
52
|
when '0%'
|
53
53
|
proc do |number|
|
54
54
|
Kernel.format('%d%%', number.to_f * 100)
|
@@ -64,6 +64,7 @@ module Roo
|
|
64
64
|
when '#,##0.00;[Red](#,##0.00)' then number_format('%.2f', '[Red](%.2f)')
|
65
65
|
# FIXME: not quite sure what the format should look like in this case.
|
66
66
|
when '##0.0E+0' then '%.1E'
|
67
|
+
when "_-* #,##0.00\\ _€_-;\\-* #,##0.00\\ _€_-;_-* \"-\"??\\ _€_-;_-@_-" then number_format('%.2f', '-%.2f')
|
67
68
|
when '@' then proc { |number| number }
|
68
69
|
else
|
69
70
|
raise "Unknown format: #{format.inspect}"
|
data/lib/roo/excelx/cell/time.rb
CHANGED
@@ -13,7 +13,7 @@ module Roo
|
|
13
13
|
super
|
14
14
|
@format = excelx_type.last
|
15
15
|
@datetime = create_datetime(base_date, value)
|
16
|
-
@value = link ? Roo::Link.new(link, value) : (value.to_f * 86_400).to_i
|
16
|
+
@value = link ? Roo::Link.new(link, value) : (value.to_f * 86_400).round.to_i
|
17
17
|
end
|
18
18
|
|
19
19
|
def formatted_value
|
data/lib/roo/excelx/sheet_doc.rb
CHANGED
@@ -101,12 +101,7 @@ module Roo
|
|
101
101
|
cell_xml_children.each do |cell|
|
102
102
|
case cell.name
|
103
103
|
when 'is'
|
104
|
-
content =
|
105
|
-
cell.children.each do |inline_str|
|
106
|
-
if inline_str.name == 't'
|
107
|
-
content << inline_str.content
|
108
|
-
end
|
109
|
-
end
|
104
|
+
content = cell.search('t').map(&:content).join
|
110
105
|
unless content.empty?
|
111
106
|
return Excelx::Cell.cell_class(:string).new(content, formula, style, hyperlink, coordinate)
|
112
107
|
end
|
@@ -197,11 +192,12 @@ module Roo
|
|
197
192
|
# Extract merged ranges from xml
|
198
193
|
merges = {}
|
199
194
|
doc.xpath('/worksheet/mergeCells/mergeCell').each do |mergecell_xml|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
195
|
+
src, dst = mergecell_xml["ref"].split(/:/).map { |ref| ::Roo::Utils.ref_to_key(ref) }
|
196
|
+
next unless cells[src]
|
197
|
+
for row in src[0]..dst[0] do
|
198
|
+
for col in src[1]..dst[1] do
|
199
|
+
next if row == src[0] && col == src[1]
|
200
|
+
merges[[row, col]] = src
|
205
201
|
end
|
206
202
|
end
|
207
203
|
end
|
data/lib/roo/excelx.rb
CHANGED
@@ -60,15 +60,16 @@ module Roo
|
|
60
60
|
@filename = local_filename(filename_or_stream, @tmpdir, packed)
|
61
61
|
process_zipfile(@filename || filename_or_stream)
|
62
62
|
|
63
|
-
@sheet_names =
|
64
|
-
unless options[:only_visible_sheets] && sheet['state'] == 'hidden'
|
65
|
-
sheet['name']
|
66
|
-
end
|
67
|
-
end.compact
|
63
|
+
@sheet_names = []
|
68
64
|
@sheets = []
|
69
65
|
@sheets_by_name = {}
|
70
|
-
|
71
|
-
|
66
|
+
|
67
|
+
workbook.sheets.each_with_index do |sheet, index|
|
68
|
+
next if options[:only_visible_sheets] && sheet['state'] == 'hidden'
|
69
|
+
|
70
|
+
sheet_name = sheet['name']
|
71
|
+
@sheet_names << sheet_name
|
72
|
+
@sheets_by_name[sheet_name] = @sheets[index] = Sheet.new(sheet_name, @shared, index, sheet_options)
|
72
73
|
end
|
73
74
|
|
74
75
|
if cell_max
|
@@ -428,6 +429,11 @@ module Roo
|
|
428
429
|
entries.each do |entry|
|
429
430
|
path =
|
430
431
|
case entry.name.downcase
|
432
|
+
when /richdata/
|
433
|
+
# FIXME: Ignore richData as parsing is not implemented yet and can cause
|
434
|
+
# Zip::DestinationFileExistsError when including a second "styles.xml" entry
|
435
|
+
# see http://schemas.microsoft.com/office/spreadsheetml/2017/richdata2
|
436
|
+
nil
|
431
437
|
when /sharedstrings.xml$/
|
432
438
|
"#{@tmpdir}/roo_sharedStrings.xml"
|
433
439
|
when /styles.xml$/
|
data/lib/roo/spreadsheet.rb
CHANGED
@@ -24,8 +24,14 @@ module Roo
|
|
24
24
|
options[:file_warning] = :ignore
|
25
25
|
extension.tr('.', '').downcase.to_sym
|
26
26
|
else
|
27
|
-
|
28
|
-
|
27
|
+
parsed_path =
|
28
|
+
if path =~ /\A#{::URI::DEFAULT_PARSER.make_regexp}\z/
|
29
|
+
# path is 7th match
|
30
|
+
Regexp.last_match[7]
|
31
|
+
else
|
32
|
+
path
|
33
|
+
end
|
34
|
+
::File.extname(parsed_path).tr('.', '').downcase.to_sym
|
29
35
|
end
|
30
36
|
end
|
31
37
|
end
|
data/lib/roo/version.rb
CHANGED
data/roo.gemspec
CHANGED
@@ -17,12 +17,19 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.files.reject! { |fn| fn.include?('test/files') }
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
|
20
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
21
|
+
spec.required_ruby_version = ">= 2.6.0"
|
22
|
+
else
|
23
|
+
spec.required_ruby_version = ">= 2.7.0"
|
24
|
+
end
|
21
25
|
|
22
26
|
spec.add_dependency 'nokogiri', '~> 1'
|
23
|
-
spec.add_dependency 'rubyzip', '>= 1.
|
27
|
+
spec.add_dependency 'rubyzip', '>= 1.3.0', '< 3.0.0'
|
24
28
|
|
25
|
-
spec.add_development_dependency 'rake'
|
29
|
+
spec.add_development_dependency 'rake'
|
26
30
|
spec.add_development_dependency 'minitest', '~> 5.4', '>= 5.4.3'
|
27
31
|
spec.add_development_dependency 'rack', '~> 1.6', '< 2.0.0'
|
32
|
+
if RUBY_VERSION >= '3.0.0'
|
33
|
+
spec.add_development_dependency 'matrix'
|
34
|
+
end
|
28
35
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Roo::Excelx::Cell::Time do
|
4
|
+
it "should set the cell value to the correct number of seconds" do
|
5
|
+
value = 0.05513888888888888 # '1:19:24'
|
6
|
+
excelx_type = [:numeric_or_formula, "h:mm:ss"]
|
7
|
+
base_timestamp = Date.new(1899, 12, 30).to_time.to_i
|
8
|
+
time_cell = Roo::Excelx::Cell::Time.new(value, nil, excelx_type, 1, nil, base_timestamp, nil)
|
9
|
+
expect(time_cell.value).to eq(1*60*60 + 19*60 + 24) # '1:19:24' in seconds
|
10
|
+
# use case from https://github.com/roo-rb/roo/issues/310
|
11
|
+
value = 0.523761574074074 # '12:34:13' in seconds
|
12
|
+
time_cell = Roo::Excelx::Cell::Time.new(value, nil, excelx_type, 1, nil, base_timestamp, nil)
|
13
|
+
expect(time_cell.value).to eq(12*60*60 + 34*60 + 13) # 12:34:13 in seconds
|
14
|
+
end
|
15
|
+
end
|
data/spec/lib/roo/excelx_spec.rb
CHANGED
@@ -86,6 +86,14 @@ describe Roo::Excelx do
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
+
describe 'for a workbook with hidden sheets' do
|
90
|
+
let(:path) { 'test/files/hidden_sheets.xlsx' }
|
91
|
+
|
92
|
+
it 'returns the cell contents from the visible sheet' do
|
93
|
+
expect(Roo::Excelx.new(path, only_visible_sheets: true).cell('A', 1)).to eq "visible sheet 1"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
89
97
|
describe '#parse' do
|
90
98
|
let(:path) { 'test/files/numeric-link.xlsx' }
|
91
99
|
|
@@ -653,4 +661,4 @@ describe 'Roo::Excelx with options set' do
|
|
653
661
|
end
|
654
662
|
end
|
655
663
|
end
|
656
|
-
end
|
664
|
+
end
|
@@ -25,7 +25,7 @@ describe Roo::Spreadsheet do
|
|
25
25
|
let(:filename) { tempfile.path }
|
26
26
|
|
27
27
|
it 'loads the proper type' do
|
28
|
-
expect(Roo::CSV).to receive(:new).with(filename, file_warning: :ignore).and_call_original
|
28
|
+
expect(Roo::CSV).to receive(:new).with(filename, {file_warning: :ignore}).and_call_original
|
29
29
|
expect(Roo::Spreadsheet.open(tempfile, extension: :csv)).to be_a(Roo::CSV)
|
30
30
|
end
|
31
31
|
end
|
data/spec/lib/roo/utils_spec.rb
CHANGED
@@ -43,15 +43,6 @@ RSpec.describe ::Roo::Utils do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
context '.split_coordinate' do
|
47
|
-
it "returns the expected result" do
|
48
|
-
expect(described_class.split_coordinate('A1')).to eq [1, 1]
|
49
|
-
expect(described_class.split_coordinate('B2')).to eq [2, 2]
|
50
|
-
expect(described_class.split_coordinate('R2')).to eq [2, 18]
|
51
|
-
expect(described_class.split_coordinate('AR31')).to eq [31, 18 + 26]
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
46
|
context '.extract_coordinate' do
|
56
47
|
it "returns the expected result" do
|
57
48
|
expect(described_class.extract_coordinate('A1')).to eq [1, 1]
|
@@ -66,6 +66,7 @@ class TestRooExcelxCellNumber < Minitest::Test
|
|
66
66
|
['0.000000000', '1042.000000000'],
|
67
67
|
['#,##0', '1,042'],
|
68
68
|
['#,##0.00', '1,042.00'],
|
69
|
+
['#,##0.000', '1,042.000'],
|
69
70
|
['0%', '104200%'],
|
70
71
|
['0.00%', '104200.00%'],
|
71
72
|
['0.00E+00', '1.04E+03'],
|
@@ -74,6 +75,7 @@ class TestRooExcelxCellNumber < Minitest::Test
|
|
74
75
|
['#,##0.00;(#,##0.00)', '1,042.00'],
|
75
76
|
['#,##0.00;[Red](#,##0.00)', '1,042.00'],
|
76
77
|
['##0.0E+0', '1.0E+03'],
|
78
|
+
["_-* #,##0.00\\ _€_-;\\-* #,##0.00\\ _€_-;_-* \"-\"??\\ _€_-;_-@_-", '1,042.00'],
|
77
79
|
['@', '1042']
|
78
80
|
].each do |style_format, result|
|
79
81
|
cell = Roo::Excelx::Cell::Number.new '1042', nil, [style_format], nil, nil, nil
|
data/test/roo/test_excelx.rb
CHANGED
@@ -3,7 +3,7 @@ require "test_helper"
|
|
3
3
|
class TestRworkbookExcelx < Minitest::Test
|
4
4
|
def test_download_uri_with_invalid_host
|
5
5
|
assert_raises(RuntimeError) do
|
6
|
-
Roo::Excelx.new("http://
|
6
|
+
Roo::Excelx.new("http://examples.com/file.xlsx")
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -133,6 +133,20 @@ class TestRworkbookExcelx < Minitest::Test
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
def test_expand_merged_range_doesnt_insert_nil_values
|
137
|
+
options = { expand_merged_ranges: true }
|
138
|
+
xlsx = roo_class.new(File.join(TESTDIR, "merged_ranges.xlsx"), options)
|
139
|
+
|
140
|
+
refute_includes xlsx.sheet_for(0).cells.values, nil, "`nil` was copied into the cells hash from an empty merged range"
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_expand_merged_range_doesnt_raise_issue_506
|
144
|
+
# Issue 506 sent an example test.xlsx file that would raise an error upon parsing.
|
145
|
+
xl = Roo::Spreadsheet.open(File.join(TESTDIR, "expand_merged_ranges_issue_506.xlsx"), expand_merged_ranges: true)
|
146
|
+
data = xl.parse(one: /one/i, two: /two/i, clean: true)
|
147
|
+
assert_equal [{:one=>"John", :two=>"Johnson"}, {:one=>"Sam", :two=>nil}, {:one=>"Dave", :two=>nil}], data
|
148
|
+
end
|
149
|
+
|
136
150
|
def test_noexpand_merged_range
|
137
151
|
xlsx = roo_class.new(File.join(TESTDIR, "merged_ranges.xlsx"))
|
138
152
|
|
@@ -320,6 +334,13 @@ class TestRworkbookExcelx < Minitest::Test
|
|
320
334
|
end
|
321
335
|
end
|
322
336
|
|
337
|
+
def test_parsing_xlsx_with_richtext
|
338
|
+
xlsx = roo_class.new(File.join(TESTDIR, "richtext_example.xlsx"))
|
339
|
+
|
340
|
+
assert_equal "Example richtext", xlsx.cell("a", 1)
|
341
|
+
assert_equal "Example richtext", xlsx.cell("b", 1)
|
342
|
+
end
|
343
|
+
|
323
344
|
def roo_class
|
324
345
|
Roo::Excelx
|
325
346
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Preymesser
|
@@ -10,10 +10,10 @@ authors:
|
|
10
10
|
- Oleksandr Simonov
|
11
11
|
- Steven Daniels
|
12
12
|
- Anmol Chopra
|
13
|
-
autorequire:
|
13
|
+
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2022-03-19 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: nokogiri
|
@@ -35,34 +35,34 @@ dependencies:
|
|
35
35
|
requirements:
|
36
36
|
- - ">="
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: 1.
|
38
|
+
version: 1.3.0
|
39
39
|
- - "<"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 3.0.0
|
42
42
|
type: :runtime
|
43
43
|
prerelease: false
|
44
44
|
version_requirements: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.
|
48
|
+
version: 1.3.0
|
49
49
|
- - "<"
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version:
|
51
|
+
version: 3.0.0
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
53
|
name: rake
|
54
54
|
requirement: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
|
-
- - "
|
56
|
+
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: '
|
58
|
+
version: '0'
|
59
59
|
type: :development
|
60
60
|
prerelease: false
|
61
61
|
version_requirements: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
|
-
- - "
|
63
|
+
- - ">="
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: '
|
65
|
+
version: '0'
|
66
66
|
- !ruby/object:Gem::Dependency
|
67
67
|
name: minitest
|
68
68
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,6 +103,20 @@ dependencies:
|
|
103
103
|
- - "<"
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: 2.0.0
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: matrix
|
108
|
+
requirement: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
type: :development
|
114
|
+
prerelease: false
|
115
|
+
version_requirements: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
106
120
|
description: |-
|
107
121
|
Roo can access the contents of various spreadsheet files. It can handle
|
108
122
|
* OpenOffice
|
@@ -119,10 +133,10 @@ files:
|
|
119
133
|
- ".codeclimate.yml"
|
120
134
|
- ".github/issue_template.md"
|
121
135
|
- ".github/pull_request_template.md"
|
136
|
+
- ".github/workflows/ruby.yml"
|
122
137
|
- ".gitignore"
|
123
138
|
- ".rubocop.yml"
|
124
139
|
- ".simplecov"
|
125
|
-
- ".travis.yml"
|
126
140
|
- CHANGELOG.md
|
127
141
|
- Gemfile
|
128
142
|
- Guardfile
|
@@ -181,6 +195,7 @@ files:
|
|
181
195
|
- spec/helpers.rb
|
182
196
|
- spec/lib/roo/base_spec.rb
|
183
197
|
- spec/lib/roo/csv_spec.rb
|
198
|
+
- spec/lib/roo/excelx/cell/time_spec.rb
|
184
199
|
- spec/lib/roo/excelx/format_spec.rb
|
185
200
|
- spec/lib/roo/excelx/relationships_spec.rb
|
186
201
|
- spec/lib/roo/excelx/sheet_doc_spec.rb
|
@@ -225,7 +240,7 @@ homepage: https://github.com/roo-rb/roo
|
|
225
240
|
licenses:
|
226
241
|
- MIT
|
227
242
|
metadata: {}
|
228
|
-
post_install_message:
|
243
|
+
post_install_message:
|
229
244
|
rdoc_options: []
|
230
245
|
require_paths:
|
231
246
|
- lib
|
@@ -233,16 +248,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
233
248
|
requirements:
|
234
249
|
- - ">="
|
235
250
|
- !ruby/object:Gem::Version
|
236
|
-
version: 2.
|
251
|
+
version: 2.7.0
|
237
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
238
253
|
requirements:
|
239
254
|
- - ">="
|
240
255
|
- !ruby/object:Gem::Version
|
241
256
|
version: '0'
|
242
257
|
requirements: []
|
243
|
-
|
244
|
-
|
245
|
-
signing_key:
|
258
|
+
rubygems_version: 3.3.3
|
259
|
+
signing_key:
|
246
260
|
specification_version: 4
|
247
261
|
summary: Roo can access the contents of various spreadsheet files.
|
248
262
|
test_files: []
|
data/.travis.yml
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.3
|
4
|
-
- 2.4
|
5
|
-
- 2.5
|
6
|
-
- 2.6
|
7
|
-
- ruby-head
|
8
|
-
- jruby-9.1.6.0
|
9
|
-
env:
|
10
|
-
- LONG_RUN=true
|
11
|
-
matrix:
|
12
|
-
include:
|
13
|
-
- rvm: 2.6
|
14
|
-
env: RUBYOPT=--jit LONG_RUN=true
|
15
|
-
- rvm: ruby-head
|
16
|
-
env: RUBYOPT=--jit LONG_RUN=true
|
17
|
-
allow_failures:
|
18
|
-
- rvm: ruby-head
|
19
|
-
- rvm: ruby-head
|
20
|
-
env: RUBYOPT=--jit LONG_RUN=true
|
21
|
-
- rvm: jruby-9.1.6.0
|
22
|
-
bundler_args: --without local_development
|