diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4df0f0b..7fbf996 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,7 +6,7 @@ jobs: fail-fast: false matrix: os: [ ubuntu-latest, macos-latest ] - ruby: [ '3.1', '3.2' ] + ruby: [ '3.3', '3.4' ] runs-on: ${{ matrix.os }} steps: diff --git a/.github/workflows/gem-push.yml b/.github/workflows/gem-push.yml index fdc0965..9e6341e 100644 --- a/.github/workflows/gem-push.yml +++ b/.github/workflows/gem-push.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '3.2' + ruby-version: '3.3' bundler-cache: true - name: Publish to RubyGems diff --git a/.rubocop.yml b/.rubocop.yml index d5e423c..908b21e 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,6 +3,9 @@ inherit_mode: - Exclude - Include +AllCops: + TargetRubyVersion: 3.3 + # Allow one line around block body (Layout/EmptyLines will still disallow two or more) Layout/EmptyLinesAroundBlockBody: Enabled: false diff --git a/.ruby-version b/.ruby-version index ef538c2..0ddaf4d 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.1.2 +~> 3.3 diff --git a/berkeley_library-location.gemspec b/berkeley_library-location.gemspec index 2e55f10..07b5b02 100644 --- a/berkeley_library-location.gemspec +++ b/berkeley_library-location.gemspec @@ -14,7 +14,7 @@ Gem::Specification.new do |spec| spec.version = BerkeleyLibrary::Location::ModuleInfo::VERSION spec.homepage = BerkeleyLibrary::Location::ModuleInfo::HOMEPAGE - spec.required_ruby_version = '>= 3.1.0' + spec.required_ruby_version = '>= 3.3.0' spec.metadata['homepage_uri'] = spec.homepage spec.metadata['source_code_uri'] = spec.homepage @@ -31,6 +31,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'berkeley_library-util', '~> 0.1', '>= 0.1.9' spec.add_dependency 'jsonpath', '~> 0.5.8' spec.add_dependency 'marcel', '~> 1.0.2' + spec.add_dependency 'nokogiri', '>= 1.19.1' spec.add_dependency 'rest-client', '~> 2.1' spec.add_dependency 'rubyXL', '~> 3.4' @@ -40,7 +41,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'dotenv', '~> 2.7' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec', '~> 3.10' - spec.add_development_dependency 'rubocop', '= 1.39' + spec.add_development_dependency 'rubocop', '~> 1.75' spec.add_development_dependency 'rubocop-rake', '= 0.6.0' spec.add_development_dependency 'rubocop-rspec', '= 2.4.0' spec.add_development_dependency 'ruby-prof', '~> 1.7.1' diff --git a/lib/berkeley_library/location/xlsx_reader.rb b/lib/berkeley_library/location/xlsx_reader.rb index 67b4ac3..dd87c7c 100644 --- a/lib/berkeley_library/location/xlsx_reader.rb +++ b/lib/berkeley_library/location/xlsx_reader.rb @@ -19,6 +19,8 @@ def each_oclc_number return to_enum(:each_oclc_number) unless block_given? ss.each_value(oclc_col_index, include_header: false) do |v| + # convert to integer if oclc number is a float in the spreadsheet" + v = v.to_i if v.is_a?(Float) next if (v_str = v.to_s).strip == '' yield v_str diff --git a/spec/.rubocop.yml b/spec/.rubocop.yml index cc8f998..da85d02 100644 --- a/spec/.rubocop.yml +++ b/spec/.rubocop.yml @@ -123,5 +123,5 @@ RSpec/VerifiedDoubles: RSpec/IdenticalEqualityAssertion: # new in 2.4 Enabled: true -RSpec/Rails/AvoidSetupHook: # new in 2.4 +RSpecRails/AvoidSetupHook: Enabled: true diff --git a/spec/berkeley_library/location/xlsx_reader_spec.rb b/spec/berkeley_library/location/xlsx_reader_spec.rb index a8d5aa0..038e8f7 100644 --- a/spec/berkeley_library/location/xlsx_reader_spec.rb +++ b/spec/berkeley_library/location/xlsx_reader_spec.rb @@ -73,12 +73,40 @@ module Location .to yield_successive_args(*oclc_numbers_expected) end + # Added this since oclc floats in oclc-numbers-float.xlsx weren't being read + # in as floats at runtime. + it 'processes OCLC numbers converted to floats from the base spreadsheet' do + source_xlsx_path = 'spec/data/excel/oclc-numbers.xlsx' + source_oclc_numbers = XLSXReader.new(source_xlsx_path).each_oclc_number.to_a + + Dir.mktmpdir(File.basename(__FILE__)) do |tmpdir| + xlsx_path = File.join(tmpdir, 'oclc-numbers-from-source-as-floats.xlsx') + + ss = BerkeleyLibrary::Util::XLSX::Spreadsheet.new + c_index = ss.ensure_column!(BerkeleyLibrary::Location::Constants::OCLC_COL_HEADER) + source_oclc_numbers.each_with_index do |oclc_num, i| + r_index = 1 + i # skip header row + ss.set_value_at(r_index, c_index, oclc_num.to_f) + end + ss.save_as(xlsx_path) + + reader = XLSXReader.new(xlsx_path) + expect(reader.each_oclc_number.to_a).to eq(source_oclc_numbers) + end + end + it 'finds OCLC numbers as strings' do reader = XLSXReader.new('spec/data/excel/oclc-numbers-text.xlsx') expect { |b| reader.each_oclc_number(&b) } .to yield_successive_args(*oclc_numbers_expected) end + it 'finds OCLC numbers when column is formatted as Excel number' do + reader = XLSXReader.new('spec/data/excel/oclc-numbers-float.xlsx') + expect { |b| reader.each_oclc_number(&b) } + .to yield_successive_args(*oclc_numbers_expected) + end + it 'skips blank cells' do reader = XLSXReader.new('spec/data/excel/oclc-numbers-sparse.xlsx') expect { |b| reader.each_oclc_number(&b) } diff --git a/spec/data/excel/oclc-numbers-float.xlsx b/spec/data/excel/oclc-numbers-float.xlsx new file mode 100644 index 0000000..ed24d8d Binary files /dev/null and b/spec/data/excel/oclc-numbers-float.xlsx differ