class CSVUtils::CSVExtender
Utility class for appending data to a csv file.
Public Class Methods
new(src_csv, dest_csv, csv_options = {})
click to toggle source
# File lib/csv_utils/csv_extender.rb, line 3 def initialize(src_csv, dest_csv, csv_options = {}) @src_csv = CSVUtils::CSVWrapper.new(src_csv, 'rb', csv_options) @dest_csv = CSVUtils::CSVWrapper.new(dest_csv, 'wb', csv_options) end
Public Instance Methods
append(additional_headers) { |row, current_headers| ... }
click to toggle source
# File lib/csv_utils/csv_extender.rb, line 8 def append(additional_headers) process(additional_headers) do |current_headers| while (row = @src_csv.shift) additional_columns = yield row, current_headers @dest_csv << (row + additional_columns) end end end
append_in_batches(additional_headers, batch_size = 1_000) { |batch, current_headers| ... }
click to toggle source
# File lib/csv_utils/csv_extender.rb, line 17 def append_in_batches(additional_headers, batch_size = 1_000) process(additional_headers) do |current_headers| batch = [] process_batch_proc = Proc.new do additional_rows = yield batch, current_headers batch.each_with_index do |row, idx| @dest_csv << (row + additional_rows[idx]) end batch = [] end while (row = @src_csv.shift) batch << row process_batch_proc.call if batch.size >= batch_size end process_batch_proc.call if batch.size > 0 end end
Private Instance Methods
append_headers(additional_headers)
click to toggle source
# File lib/csv_utils/csv_extender.rb, line 56 def append_headers(additional_headers) return nil unless additional_headers current_headers = @src_csv.shift @dest_csv << (current_headers + additional_headers) current_headers end
close()
click to toggle source
# File lib/csv_utils/csv_extender.rb, line 51 def close @src_csv.close @dest_csv.close end
process(additional_headers) { |current_headers| ... }
click to toggle source
# File lib/csv_utils/csv_extender.rb, line 43 def process(additional_headers) current_headers = append_headers(additional_headers) yield current_headers close end