Class: CSVUtils::CSVTransformer
- Inherits:
-
Object
- Object
- CSVUtils::CSVTransformer
- Defined in:
- lib/csv_utils/csv_transformer.rb
Overview
Transforms a CSV given a series of steps
Instance Attribute Summary collapse
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
Instance Method Summary collapse
- #additional_data(&block) ⇒ Object
- #append(additional_headers, &block) ⇒ Object
- #each(&block) ⇒ Object
-
#initialize(src_csv, dest_csv, csv_options = {}) ⇒ CSVTransformer
constructor
A new instance of CSVTransformer.
- #map(new_headers, &block) ⇒ Object
- #process(batch_size = 10_000, &block) ⇒ Object
- #read_headers ⇒ Object
- #reject(&block) ⇒ Object
- #select(&block) ⇒ Object
- #set_headers(headers) ⇒ Object
Constructor Details
#initialize(src_csv, dest_csv, csv_options = {}) ⇒ CSVTransformer
Returns a new instance of CSVTransformer.
5 6 7 8 |
# File 'lib/csv_utils/csv_transformer.rb', line 5 def initialize(src_csv, dest_csv, = {}) @src_csv = CSVUtils::CSVWrapper.new(src_csv, 'rb', ) @dest_csv = CSVUtils::CSVWrapper.new(dest_csv, 'wb', ) end |
Instance Attribute Details
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
3 4 5 |
# File 'lib/csv_utils/csv_transformer.rb', line 3 def headers @headers end |
Instance Method Details
#additional_data(&block) ⇒ Object
15 16 17 18 |
# File 'lib/csv_utils/csv_transformer.rb', line 15 def additional_data(&block) steps << [:additional_data, @headers, block] self end |
#append(additional_headers, &block) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/csv_utils/csv_transformer.rb', line 36 def append(additional_headers, &block) steps << [:append, @headers, block] if additional_headers @headers += additional_headers else @headers = nil end self end |
#each(&block) ⇒ Object
48 49 50 51 |
# File 'lib/csv_utils/csv_transformer.rb', line 48 def each(&block) steps << [:each, @headers, block] self end |
#map(new_headers, &block) ⇒ Object
30 31 32 33 34 |
# File 'lib/csv_utils/csv_transformer.rb', line 30 def map(new_headers, &block) steps << [:map, @headers, block] @headers = new_headers self end |
#process(batch_size = 10_000, &block) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/csv_utils/csv_transformer.rb', line 58 def process(batch_size = 10_000, &block) batch = [] @dest_csv << @headers if @headers steps_proc = Proc.new do steps.each do |step_type, current_headers, proc| batch = process_step(step_type, current_headers, batch, &proc) end batch.each { |row| @dest_csv << row } batch = [] end while (row = @src_csv.shift) batch << row steps_proc.call if batch.size >= batch_size end steps_proc.call if batch.size > 0 @src_csv.close @dest_csv.close end |
#read_headers ⇒ Object
10 11 12 13 |
# File 'lib/csv_utils/csv_transformer.rb', line 10 def read_headers @headers = @src_csv.shift self end |
#reject(&block) ⇒ Object
25 26 27 28 |
# File 'lib/csv_utils/csv_transformer.rb', line 25 def reject(&block) steps << [:reject, @headers, block] self end |
#select(&block) ⇒ Object
20 21 22 23 |
# File 'lib/csv_utils/csv_transformer.rb', line 20 def select(&block) steps << [:select, @headers, block] self end |
#set_headers(headers) ⇒ Object
53 54 55 56 |
# File 'lib/csv_utils/csv_transformer.rb', line 53 def set_headers(headers) @headers = headers self end |