rggen / rggen

Code generation tool for control and status registers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NoMethodError is raised when loading XLSX spreadsheet

taichi-ishitani opened this issue · comments

Describe the bug
Unexpected NoMethodError is raised when using rggen-spreadsheet-loader plugin with SimpleXlsxReader gem v2.0.0.

To Reproduce
Steps to reproduce the behavior:

  1. update SimpleXlsxReader gem to v2.0.0
  2. run rake spec on rggen-spreadsheet-loader
  3. See following error report
$ rake spec
/opt/rbenv/versions/3.1.2/bin/ruby -I/opt/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/rspec-core-3.11.0/lib:/opt/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/rspec-support-3.11.0/lib /opt/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/rspec-core-3.11.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

Randomized with seed 40864
.......F.............

Failures:

  1) RgGen::SpreadsheetLoader::XLSXLoader xlsx形式のスプレッドシートをロードできる
     Failure/Error: sheet.rows.size.positive? &&

     NoMethodError:
       undefined method `size' for #<SimpleXlsxReader::Document::RowsProxy:0x00007f80115ee7d0 @sheet_parser=#<SimpleXlsxReader::Loader::SheetParser:0x00007f80115e1f58 @file_io=#<Zip::InputStream:0x00007f80115def38 @lineno=0, @pos=0, @output_buffer="", @archive_io=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @decompressor=#<Zip::Inflater:0x00007f80115e2750 @input_stream=#<Zip::DecryptedIo:0x00007f80115e27c8 @io=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @decrypter=#<Zip::NullDecrypter:0x00007f80115de560>>, @decompressed_size=2136, @buffer="", @zlib_inflater=#<Zlib::Inflate:0x00007f80115e2480 @dictionaries={}>>, @decrypter=#<Zip::NullDecrypter:0x00007f80115de560>, @current_entry=#<Zip::Entry:0x00007f80115de4e8 @local_header_offset=3156, @local_header_size=54, @internal_file_attributes=1, @external_file_attributes=0, @header_signature=67324752, @version_needed_to_extract=20, @version=20, @ftype=:file, @filepath=nil, @gp_flags=6, @follow_symlinks=false, @restore_times=false, @restore_permissions=false, @restore_ownership=false, @unix_uid=nil, @unix_gid=nil, @unix_perms=nil, @dirty=false, @fstype=0, @zipfile=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @name="xl/worksheets/sheet1.xml", @comment="", @extra={}, @compressed_size=757, @crc=4195036083, @compression_method=8, @size=2136, @time=1980-01-01 00:00:00 +0900, @last_mod_time=0, @last_mod_date=33, @name_length=24, @extra_length=0>, @complete_entry=#<Zip::Entry:0x00007f801175aec0 @local_header_offset=3156, @local_header_size=nil, @internal_file_attributes=0, @external_file_attributes=0, @header_signature=33639248, @version_needed_to_extract=20, @version=45, @ftype=:file, @filepath=nil, @gp_flags=6, @follow_symlinks=false, @restore_times=false, @restore_permissions=false, @restore_ownership=false, @unix_uid=nil, @unix_gid=nil, @unix_perms=nil, @dirty=false, @fstype=0, @zipfile="/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx", @name="xl/worksheets/sheet1.xml", @comment="", @extra={}, @compressed_size=757, @crc=4195036083, @compression_method=8, @size=2136, @time=1980-01-01 00:00:00 +0900, @last_mod_time=0, @last_mod_date=33, @name_length=24, @extra_length=0, @comment_length=0>, @decrypted_io=#<Zip::DecryptedIo:0x00007f80115e27c8 @io=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @decrypter=#<Zip::NullDecrypter:0x00007f80115de560>>>, @loader=#<struct SimpleXlsxReader::Loader file_path="/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx">, @xrels_file=#<Zip::InputStream:0x00007f80115e1210 @lineno=0, @pos=0, @output_buffer="", @archive_io=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @decompressor=#<Zip::Inflater:0x00007f80115e0518 @input_stream=#<Zip::DecryptedIo:0x00007f80115e0540 @io=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @decrypter=#<Zip::NullDecrypter:0x00007f80115e1030>>, @decompressed_size=322, @buffer="", @zlib_inflater=#<Zlib::Inflate:0x00007f80115e0310 @dictionaries={}>>, @decrypter=#<Zip::NullDecrypter:0x00007f80115e1030>, @current_entry=#<Zip::Entry:0x00007f80115e0fb8 @local_header_offset=7836, @local_header_size=65, @internal_file_attributes=1, @external_file_attributes=0, @header_signature=67324752, @version_needed_to_extract=20, @version=20, @ftype=:file, @filepath=nil, @gp_flags=6, @follow_symlinks=false, @restore_times=false, @restore_permissions=false, @restore_ownership=false, @unix_uid=nil, @unix_gid=nil, @unix_perms=nil, @dirty=false, @fstype=0, @zipfile=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @name="xl/worksheets/_rels/sheet1.xml.rels", @comment="", @extra={}, @compressed_size=193, @crc=1261595963, @compression_method=8, @size=322, @time=1980-01-01 00:00:00 +0900, @last_mod_time=0, @last_mod_date=33, @name_length=35, @extra_length=0>, @complete_entry=#<Zip::Entry:0x00007f801175c4a0 @local_header_offset=7836, @local_header_size=nil, @internal_file_attributes=0, @external_file_attributes=0, @header_signature=33639248, @version_needed_to_extract=20, @version=45, @ftype=:file, @filepath=nil, @gp_flags=6, @follow_symlinks=false, @restore_times=false, @restore_permissions=false, @restore_ownership=false, @unix_uid=nil, @unix_gid=nil, @unix_perms=nil, @dirty=false, @fstype=0, @zipfile="/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx", @name="xl/worksheets/_rels/sheet1.xml.rels", @comment="", @extra={}, @compressed_size=193, @crc=1261595963, @compression_method=8, @size=322, @time=1980-01-01 00:00:00 +0900, @last_mod_time=0, @last_mod_date=33, @name_length=35, @extra_length=0, @comment_length=0>, @decrypted_io=#<Zip::DecryptedIo:0x00007f80115e0540 @io=#<File:/home/taichi/workspace/rggen/rggen-spreadsheet-loader/spec/files/test.xlsx>, @decrypter=#<Zip::NullDecrypter:0x00007f80115e1030>>>>, @slurped=nil, @load_errors={}>

               sheet.rows.size.positive? &&
                         ^^^^^
     # ./lib/rggen/spreadsheet_loader/xlsx_loader.rb:19:in `process_sheet'
     # ./lib/rggen/spreadsheet_loader/xlsx_loader.rb:13:in `block in read_spreadsheet'
     # ./lib/rggen/spreadsheet_loader/xlsx_loader.rb:13:in `each'
     # ./lib/rggen/spreadsheet_loader/xlsx_loader.rb:13:in `read_spreadsheet'
     # ./lib/rggen/spreadsheet_loader/spreadsheet_loader.rb:9:in `block in read_file'
     # ./lib/rggen/spreadsheet_loader/spreadsheet/book.rb:10:in `initialize'
     # ./lib/rggen/spreadsheet_loader/spreadsheet_loader.rb:9:in `new'
     # ./lib/rggen/spreadsheet_loader/spreadsheet_loader.rb:9:in `read_file'
     # /home/taichi/workspace/rggen/rggen-core/lib/rggen/core/input_base/loader.rb:28:in `load_file'
     # ./spec/rggen/spreadsheet_loader/xlsx_loader_spec.rb:20:in `block (2 levels) in <top (required)>'

Finished in 0.30134 seconds (files took 0.14654 seconds to load)
21 examples, 1 failure

Failed examples:

rspec ./spec/rggen/spreadsheet_loader/xlsx_loader_spec.rb:18 # RgGen::SpreadsheetLoader::XLSXLoader xlsx形式のスプレッドシートをロードできる

Randomized with seed 40864

/opt/rbenv/versions/3.1.2/bin/ruby -I/opt/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/rspec-core-3.11.0/lib:/opt/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/rspec-support-3.11.0/lib /opt/rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/rspec-core-3.11.0/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb failed

From v2.0.0, RowsProxy is introduced instead of raw Array.
However it does not have the #size method.
To fix this error, replace #size method with #count method.