From 2ddb0ea00993d0a592403d559d56c54ffa73ebfe Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Thu, 11 Jan 2018 17:52:57 +0100 Subject: [PATCH] Improve XLSX parsing with Roo [SCI-1915] --- app/models/repository.rb | 3 +-- app/models/team.rb | 3 +-- app/services/spreadsheet_parser.rb | 11 +++++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index 349651882..809876bab 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -132,8 +132,7 @@ class Repository < ActiveRecord::Base end total_nr += 1 - # Creek XLSX parser returns Hash of the row, Roo - Array - row = row.is_a?(Hash) ? row.values.map(&:to_s) : row.map(&:to_s) + row = SpreadsheetParser.parse_row(row, sheet) record_row = RepositoryRow.new(name: row[name_index], repository: self, diff --git a/app/models/team.rb b/app/models/team.rb index 62423b35d..62517b0d2 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -80,8 +80,7 @@ class Team < ActiveRecord::Base next end total_nr += 1 - # Creek XLSX parser returns Hash of the row, Roo - Array - row = row.is_a?(Hash) ? row.values.map(&:to_s) : row.map(&:to_s) + row = SpreadsheetParser.parse_row(row, sheet) sample = Sample.new(name: row[sname_index], team: self, diff --git a/app/services/spreadsheet_parser.rb b/app/services/spreadsheet_parser.rb index 73e04b119..622881f77 100644 --- a/app/services/spreadsheet_parser.rb +++ b/app/services/spreadsheet_parser.rb @@ -52,4 +52,15 @@ class SpreadsheetParser end return header, columns end + + def self.parse_row(row, sheet) + # Creek XLSX parser returns Hash of the row, Roo - Array + if row.is_a?(Hash) + row.values.map(&:to_s) + elsif sheet.is_a?(Roo::Excelx) + row.map { |cell| cell.value.to_s } + else + row.map(&:to_s) + end + end end