Skip to content

Header Validations

Tilo edited this page Feb 13, 2022 · 7 revisions

Pre-defined Header Validations

The main reason for :header_validations is for you to be able to abort processing the CSV file if the headers are not correct. e.g. if someone uploads an incorrect file to your application.

:unique_headers

You probably don't want to disable this validation.

It checks what the column headers of your CSV file look after transformation, and throws SmarterCSV::DuplicateHeaders if there are duplicates.

employee_id,email,first_name,last_name,email,department

Which of the columns labeled email would you like to use for the values in your data hashes? For an application this is a no-go, and that's why an exception is thrown.

Note: If you manually process such a file, the :user_provided_headers option comes in handy.

:required_headers

Let's say someone uploads this kind of CSV file:

employee_id,email,first_name,last_name,department

But you really need the manager_email column for your application.

options = { 
  header_validations: [ required_headers: [:email,:manager_email] ]
}

In previous versions (only tested against v1.2.6) this is passed in like this:

options = {
  required_headers: [:email, :manager_email]
}

If a CSV file does not contain both of these headers after transformation, the validation will throw SmarterCSV::MissingHeaders.

The invalid_headers_spec.rb has some examples on how to use this.

As with the header_transformations, you can also define custom header_validations through Procs.

Custom Header Validations via Procs

You can always define your own custom Procs to do header validations.

Check out the sample code in header_validations.rb