Sha256: 3fd3ffee76ed09a8a50f3a0231d276b1fa90f877d3b613a1a8ecb52d45f79df4

Contents?: true

Size: 1.64 KB

Versions: 5

Compression:

Stored size: 1.64 KB

Contents

module ExcelWalker
  module Reader
    class Reader
      def initialize(file_path)
        @xl = Creek::Book.new(file_path)
        @hooks = {}
        @max_rows = {}
        @current_sheet = 1
        @max_sheets = 1
      end

      def for_sheet(sheet_num)
        @current_sheet = sheet_num
        @max_sheets = sheet_num if sheet_num > @max_sheets
        self
      end

      alias set_sheet for_sheet

      def max_rows(max)
        @max_rows[@current_sheet] = max
        self
      end

      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

      alias on_rows on_row

      def hooks
        @hooks[@current_sheet]
      end

      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

      alias walk start

      def exit
        raise StopIteration.new
      end

      protected

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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
excel_walker-0.1.7 lib/excel_walker/reader/reader.rb
excel_walker-0.1.5 lib/excel_walker/reader/reader.rb
excel_walker-0.1.4 lib/excel_walker/reader/reader.rb
excel_walker-0.1.3 lib/excel_walker/reader/reader.rb
excel_walker-0.1.2 lib/excel_walker/reader/reader.rb