class ExcelWalker::Reader::Reader

Public Class Methods

new(file_path) click to toggle source
# File lib/excel_walker/reader/reader.rb, line 4
def initialize(file_path)
  @xl = Creek::Book.new(file_path)
  @hooks = {}
  @max_rows = {}
  @current_sheet = 1
  @max_sheets = 1
end

Public Instance Methods

exit() click to toggle source
# File lib/excel_walker/reader/reader.rb, line 58
def exit
  raise StopIteration.new
end
for_sheet(sheet_num) click to toggle source
# File lib/excel_walker/reader/reader.rb, line 12
def for_sheet(sheet_num)
  @current_sheet = sheet_num
  @max_sheets = sheet_num if sheet_num > @max_sheets
  self
end
Also aliased as: set_sheet
hooks() click to toggle source
# File lib/excel_walker/reader/reader.rb, line 35
def hooks
  @hooks[@current_sheet]
end
max_rows(max) click to toggle source
# File lib/excel_walker/reader/reader.rb, line 20
def max_rows(max)
  @max_rows[@current_sheet] = max
  self
end
on_row(condition = nil, &block) click to toggle source
# File lib/excel_walker/reader/reader.rb, line 25
def on_row(condition = nil, &block)
  condition = block if block_given?
  Hook.new(condition).tap do |hook|
    @hooks[@current_sheet] ||= []
    @hooks[@current_sheet] << hook
  end
end
Also aliased as: on_rows
on_rows(condition = nil, &block)
Alias for: on_row
set_sheet(sheet_num)
Alias for: for_sheet
start() click to toggle source
# File lib/excel_walker/reader/reader.rb, line 39
def start
  sheet_num = 0
  sheets_done = []
  begin
    @xl.sheets.each do |sheet|
      sheet_num += 1
      break if sheet_num > @max_sheets
      process_rows(sheet, sheet_num)
      sheets_done << sheet.name
    end
  rescue StopIteration
  end
  sheets_done
ensure
  @xl.close
end
Also aliased as: walk
walk()
Alias for: start

Protected Instance Methods

process_rows(sheet, sheet_num) click to toggle source
# File lib/excel_walker/reader/reader.rb, line 64
def process_rows(sheet, sheet_num)
  row_num = 0
  sheet.rows.each do |row|
    row_num += 1
    break if @max_rows[sheet_num] && row_num > @max_rows[sheet_num]
    @hooks[sheet_num].each do |hook|
      hook.call(row.values, row_num, sheet, sheet_num) if hook.match?(row_num, sheet_num)
    end
  end
end