inspec/lib/resources/csv.rb

29 lines
750 B
Ruby
Raw Normal View History

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
end