Module: RemoteTable::Format::Rooable

Included in:
Excel, Excelx, OpenOffice
Defined in:
lib/remote_table/format/mixins/rooable.rb

Instance Method Summary collapse

Instance Method Details

#each(&blk) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/remote_table/format/mixins/rooable.rb', line 5

def each(&blk)
  spreadsheet = roo_class.new t.local_file.path, nil, :ignore
  spreadsheet.default_sheet = t.properties.sheet.is_a?(::Numeric) ? spreadsheet.sheets[t.properties.sheet] : t.properties.sheet
  column_references = ::Hash.new
  if t.properties.headers == false
    # zero-based numeric keys
    for col in (1..spreadsheet.last_column)
      column_references[col] = col - 1
    end
  elsif t.properties.headers.is_a? ::Array
    # names
    for col in (1..spreadsheet.last_column)
      column_references[col] = t.properties.headers[col - 1]
    end
  else
    # read t.properties.headers from the file itself
    for col in (1..spreadsheet.last_column)
      column_references[col] = spreadsheet.cell(header_row, col)
      column_references[col] = spreadsheet.cell(header_row - 1, col) if column_references[col].blank? # lspreadsheetk up
    end
  end
  first_data_row.upto(spreadsheet.last_row) do |raw_row|
    ordered_hash = ::ActiveSupport::OrderedHash.new
    for col in (1..spreadsheet.last_column)
      next if column_references[col].blank?
      ordered_hash[column_references[col]] = spreadsheet.cell(raw_row, col).to_s.gsub(/<[^>]+>/, '').strip
    end
    yield ordered_hash if t.properties.keep_blank_rows or ordered_hash.any? { |k, v| v.present? }
  end
ensure
  t.local_file.delete
end