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
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
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