Sha256: 1a470db6a65c5adb4a15fae6efd9bd3d55ae41cc245b9207c00980d5c754dd0a
Contents?: true
Size: 1.06 KB
Versions: 6
Compression:
Stored size: 1.06 KB
Contents
require 'arc-furnace/source' require 'arc-furnace/csv_to_hash_with_duplicate_headers' require 'csv' module ArcFurnace class MultiCSVSource < Source include CSVToHashWithDuplicateHeaders private_attr_reader :csv, :file, :filenames, :encoding attr_reader :value def initialize(filenames: , encoding: 'UTF-8') @encoding = encoding @filenames = filenames.reverse open_next_file end # Is this source empty? def empty? !value end def advance advance_in_current_file || open_next_file end private def advance_in_current_file @value = begin csv_to_hash_with_duplicates(csv.next) rescue StopIteration nil end value end def open_next_file file.close if file @file = nil if filenames.empty? nil else @file = File.open(filenames.pop, encoding: encoding) @csv = CSV.new(file, encoding: encoding, headers: true).each advance_in_current_file || open_next_file end end end end
Version data entries
6 entries across 6 versions & 1 rubygems