Roo Gem invalid value for Integer(): "" Hatası

Herkese Merhaba :raised_hand: ,

Öncelikle sorunumu anlatıp kodumu paylaşmak istiyorum. Elimde xlsx uzantılı bir dosya var ve hali hazırda bu dosyaları Roo gem i ile okuyabiliyorum. Ama bugün karşılaştığım case de elimdeki xlsx dosyasını okurken invalid value for Integer(): "" hatası aldım. Amacım excelde bulunan ilk sayfadaki ilk satırın varlığını kontrol etmekti. Kodum:

 def read_excel
    spread_sheet = Roo::Spreadsheet.open(file_path).sheet(0)
    if spread_sheet.first_row.blank? # throws the error (invalid value for Integer(): "")
      fail Errors::ExcelImport::EmptyFile
    end
    spread_sheet
  end

Sürekli olarak aynı hatayı almaya devam ettim ama sayfa ismini değiştirdiğimde hatanın ortadan kalktığını farkettim. Araştırdığımda ise Roo gem i için açılmış bir issue ya rastladım.
Issue: https://github.com/roo-rb/roo/issues/478
Gem i update etsemde yaşadığım problem düzelmedi. Eğer sorun gem kaynaklı ise sistemimde bunu nasıl handle etmeliyim? Veya sorun kodum kaynaklı ise hatam nerede olabilir ?

Anladığım kadarıyla sorun Integer() methoduna boş bir string geçilmesinden kaynaklanıyor. Integer() methodu roo gem’inde explicit olarak create_numeric methodunda çağırılıyor, şu dosya: https://github.com/roo-rb/roo/blob/3ae128fc05d330842852b897eb0c321755a2ba41/lib/roo/excelx/cell/number.rb

Emin olmak için Integer() çağırıldığı yerin hemen üstüne binding.pry koysanız ve emin olsanız sorunun ordan kaynaklandığından. Ondan sonra bekli ona göre bir çözüm üretilebilir. Bu arada gem dosyasında değişiklik yaptıktan sonra rails server veya consolu yeniden başlatmanız gerekir.

1 Beğeni
/Users/aa/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/roo-2.7.1/lib/roo/excelx/cell/number.rb:24:in `Integer' 

şeklinde bir çıktı aldım :bowing_man: .

Tam olarak nasıl debug yaptınız, anlayamadım. Ekran görüntüsü veya kod paylaşabilir misiniz?


numberın değeri boş string olduğu zaman bu methodun ne döndürmesini beklersiniz?

create_numeric methodunun içinde 20 satırdan sonra şöyle bir kod eklediğinizde beklediğiniz çıktıyı alıyor musunuz?

if number.respond_to?(:blank?) && number.blank?
  # buraya da number'ın blank olması durumunda döndürmek istediğiniz
  # değer, `0` veya `nil` veya `number` olabilir?
  return number
end

Ya da Excelx::ERROR_VALUES'a boş string’i mi eklesek, emin olmadım :slight_smile:

1 Beğeni

Bunu deneyeceğim sonucu yazıyor olacağım :smiley: sistemde şöyle bir çözüm buldum hızlıca yazmak istedim:

  def read_excel
    spread_sheet = Roo::Spreadsheet.open(file_path).sheet(0)
    begin
      if spread_sheet.first_row.blank?
        fail Errors::ExcelImport::EmptyFile
      end
      spread_sheet
    rescue StandardError
      fail Errors::ExcelImport::InvalidSheetName
    end

  end

Hata gem kaynaklı olduğu için böyle bir durum oluşması durumunda yeni bir error oluşturdum ve kullanıcıya sayfa isim hatası çıkardım. Sayfa ismi editlendiğinde hata ortadan kalkıyor :frowning:

1 Beğeni