2015-09-21 08:31:31 +00:00
|
|
|
# encoding: utf-8
|
2015-10-06 16:55:44 +00:00
|
|
|
# author: Christoph Hartmann
|
|
|
|
# author: Dominik Richter
|
2015-09-21 08:31:31 +00:00
|
|
|
|
|
|
|
# Parses a csv document
|
|
|
|
# Usage:
|
|
|
|
# describe csv('example.csv') do
|
|
|
|
# its('name') { should eq(['John', 'Alice']) }
|
|
|
|
# end
|
|
|
|
#
|
|
|
|
# This implementation was inspired by a blog post
|
|
|
|
# @see http://technicalpickles.com/posts/parsing-csv-with-ruby
|
|
|
|
class CsvConfig < JsonConfig
|
|
|
|
name 'csv'
|
|
|
|
|
|
|
|
# override file load and parse hash from csv
|
|
|
|
def parse(content)
|
|
|
|
require 'csv'
|
|
|
|
# convert empty field to nil
|
|
|
|
CSV::Converters[:blank_to_nil] = lambda do |field|
|
|
|
|
field && field.empty? ? nil : field
|
|
|
|
end
|
|
|
|
# implicit conversion of values
|
|
|
|
csv = CSV.new(content, headers: true, converters: [:all, :blank_to_nil])
|
|
|
|
# convert to hash
|
|
|
|
csv.to_a.map(&:to_hash)
|
|
|
|
end
|
2015-10-12 11:01:58 +00:00
|
|
|
|
|
|
|
def to_s
|
|
|
|
"Csv #{@path}"
|
|
|
|
end
|
2015-09-21 08:31:31 +00:00
|
|
|
end
|