Class: Habdsl::SheetParser

Inherits:
Object
  • Object
show all
Defined in:
lib/habdsl/sheet_parser.rb

Overview

Parser for Spreadsheet input

Class Method Summary collapse

Class Method Details

.parse(input_code:, excel_path:) ⇒ Object

Raises:

  • (ArgumentError)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/habdsl/sheet_parser.rb', line 9

def self.parse(input_code:, excel_path:)
  raise ArgumentError, "Excel file does not exist: #{excel_path}" unless File.exist?(excel_path)

  xlsx = Roo::Spreadsheet.open(excel_path.to_s)
  sheet = xlsx.sheet(0)
  headers = sheet.row(1).map(&:to_sym)

  table = []
  (2..sheet.last_row).each do |row_num|
    row = sheet.row(row_num)
    data = Hash[headers.zip(row)]
    table << data
  end

  raise ArgumentError, "No data rows found in sheet" if table.empty?

  BaseParser.evaluate_dsl(input_code: input_code, table: table)
end