# File lib/hammer_cli_import/csvhelper.rb, line 34
  def self.csv_each(filename, headers)
    raise CSVHelperError, 'Expecting block' unless block_given?
    reader = CSV.open(filename, 'r')
    real_header = reader.shift
    raise CSVHelperError, "No header in #{filename}" if real_header.nil?
    to_discard = real_header - headers
    headers.each do |col|
      raise CSVHelperError, "Column #{col} expected in #{filename}" unless real_header.include? col
    end
    reader.each do |row|
      data = Hash[real_header.zip row]
      to_discard.each { |key| data.delete key }
      class << data
        def[](key)
          raise CSVHelperError, "Referencing undeclared key: #{key}" unless key? key
          super
        end
      end
      yield data
    end
  end