module Eco module API module Common module People class DefaultParsers class CSVParser < People::BaseParser def process @parsers.define_attribute(:csv, dependencies: @options) do |parser| parser.def_parser do |data, deps| arr_hash = [] CSV.parse(data, headers: true).each do |row| row_hash = row.headers.uniq.each_with_object({}) do |attr, hash| hash[attr] = row[attr] end arr_hash.push(row_hash) end arr_hash end.def_serializer do |array_hash, deps| arr_rows = [] unless array_hash.empty? header = array_hash.first.keys arr_rows = array_hash.map do |csv_row| CSV::Row.new(header, csv_row.values_at(*header)) end end CSV::Table.new(arr_rows).to_csv end end end end end end end end end