class ArcFurnace::MergingHash
This allows one to merge multiple rows into one such as:
key, value 1, foo 1, bar 2, baz
Results in:
1 => { key => 1, value: [foo, bar] } 2 => { key => 2, value: baz }
Public Instance Methods
prepare()
click to toggle source
# File lib/arc-furnace/merging_hash.rb, line 13 def prepare loop do break if source.empty? row = source.row row_key = row[key_column] if row_key row_entry = hash[row_key] ||= {} row.each do |column, values| existing_column_values = row_entry[column] if existing_column_values && column != key_column if existing_column_values.is_a?(Array) existing_column_values.concat(Array.wrap(values)) else new_row_entry = Array.wrap(existing_column_values) new_row_entry.concat(Array.wrap(values)) row_entry[column] = new_row_entry end else unless values.nil? row_entry[column] = values.dup end end end end end end