class Inspec::Resources::CsvConfig

def parse(content)

]
{ 'name' => 'row2', 'col1' => 'value3', 'col2' => 'value4' }
{ 'name' => 'row1', 'col1' => 'value1', 'col2' => 'value2' },
[
Assuming a header row of name,col1,col2, it will output an array of hashes like so:
override the parse method from JsonConfig
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)
rescue => e
  raise Inspec::Exceptions::ResourceFailed, "Unable to parse CSV: #{e.message}"
end

def resource_base_name

based on whether a file path, content, or command was supplied.
used by JsonConfig to build up a full to_s method
def resource_base_name
  'CSV'
end

def value(key)

doesn't make sense here.
#value method from JsonConfig (which uses ObjectTraverser.extract_value)
than what the YAML, JSON, and INI resources create, so using the
The format of the CSV hash as created by #parse is very different
override the value method from JsonConfig
def value(key)
  @params.map { |x| x[key.first.to_s] }.compact
end