Sha256: 6e77193349b7c65b4253ef350dca07d40c7faee37a7b3e65e99dba57e7170422

Contents?: true

Size: 1.17 KB

Versions: 8

Compression:

Stored size: 1.17 KB

Contents

class Eco::API::Common::People::DefaultParsers::XLSParser < Eco::API::Common::Loaders::Parser
  attribute :xls

  attr_accessor :already_required
  attr_reader   :file

  def parser(file, deps)
    @file = file
    rows.tap {|r| @file = nil}
  end

  def serializer(array_hash, deps)
    raise "Not implemented. TODO: using axlsx or rubyXL gems. See: https://spin.atomicobject.com/2017/03/22/parsing-excel-files-ruby/"
  end

  private

  def headers
    raise "You should implement this method"
  end

  def sheet_name
    0
  end

  def workbook
    require_reading_libs!
    Roo::Spreadsheet.open(file)
  end

  def spreadheet(name_or_index = sheet_name)
    workbook.sheet(name_or_index)
  end

  def rows(target = headers)
    begin
      spreadheet.parse(header_search: target)
    rescue Roo::HeaderRowNotFoundError => e
      missing  = JSON.parse(e.message)
      logger.warn("The input file is missing these headers: #{missing}")
      present = target - missing
      rows(present)
    end
  end

  def require_reading_libs!
    return if already_required
    require 'roo'
    require 'roo-xls'
    already_required = true
  end

end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
eco-helpers-2.0.29 lib/eco/api/common/people/default_parsers/xls_parser.rb
eco-helpers-2.0.28 lib/eco/api/common/people/default_parsers/xls_parser.rb
eco-helpers-2.0.27 lib/eco/api/common/people/default_parsers/xls_parser.rb
eco-helpers-2.0.26 lib/eco/api/common/people/default_parsers/xls_parser.rb
eco-helpers-2.0.25 lib/eco/api/common/people/default_parsers/xls_parser.rb
eco-helpers-2.0.24 lib/eco/api/common/people/default_parsers/xls_parser.rb
eco-helpers-2.0.23 lib/eco/api/common/people/default_parsers/xls_parser.rb
eco-helpers-2.0.22 lib/eco/api/common/people/default_parsers/xls_parser.rb