Class: CSVSchema

Inherits:
Object
  • Object
show all
Defined in:
lib/csv_schema.rb

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ CSVSchema

Returns a new instance of CSVSchema.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/csv_schema.rb', line 4

def initialize(args)
  @file = args[:file] || raise(":file argument is required")

  @allow_duplicate_headers = (args[:allow_duplicate_headers] == nil ? false : args[:allow_duplicate_headers])
  @headers_transform = args[:headers_transform]
  @allow_blank_headers = (args[:allow_blank_headers] == nil ? false : args[:allow_blank_headers])
  @required_headers = args[:required_headers]
  @allow_blank_rows = (args[:allow_blank_rows] == nil ? false : args[:allow_blank_rows])
  @allow_different_field_counts = (args[:allow_different_field_counts] == nil ? false : args[:allow_different_field_counts])

  @unique_fields = {}
  @cant_be_nil_fields = []
  @restrict_value_fields = {}
  field_requirements = args[:field_requirements] || []
  field_requirements.each do |field, requirements|
    @unique_fields[field] = [] if requirements[:unique]
    @cant_be_nil_fields << field if requirements[:cant_be_nil]
    @restrict_value_fields[field] = requirements[:restrict_values] << nil if requirements[:restrict_values]
  end
end

Instance Method Details

#validateObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/csv_schema.rb', line 25

def validate()
  raise "#{@file} cannot be found" unless File.exists?(@file)
  @current_row = 1
  FasterCSV.foreach(@file) do |row|
    if @current_row == 1
      headers = transform(row)
      index_field_requirements_by_column_number(headers)
      validate_duplicate_headers(headers) unless @allow_duplicate_headers
      validate_blank_headers(headers) unless @allow_blank_headers
      validate_required_headers(headers) if @required_headers
    else
      validate_blank_rows(row) unless @allow_blank_rows
      validate_restrict_value_fields(row) if !@restrict_value_fields.empty?
      validate_cant_be_nil_fields(row) if !@cant_be_nil_fields.empty?
      add_to_uniqueness_validator(row) if !@unique_fields.empty?
    end
    validate_different_field_counts(row) unless @allow_different_field_counts
    @current_row += 1
  end
  validate_unique_fields
end