Module: SmarterCSV::Headers
- Included in:
- Reader
- Defined in:
- lib/smarter_csv/headers.rb
Instance Method Summary collapse
Instance Method Details
#process_headers(filehandle, options) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/smarter_csv/headers.rb', line 5 def process_headers(filehandle, ) @raw_header = nil # header as it appears in the file @headers = nil # the processed headers header_array = [] file_header_size = nil # if headers_in_file, get the headers -> We get the number of columns, even when user provided headers if [:headers_in_file] # extract the header line # process the header line in the CSV file.. # the first line of a CSV file contains the header .. it might be commented out, so we need to read it anyhow header_line = @raw_header = readline_with_counts(filehandle, ) header_line = preprocess_header_line(header_line, ) file_header_array, file_header_size = parse(header_line, ) file_header_array = header_transformations(file_header_array, ) else unless [:user_provided_headers] raise SmarterCSV::IncorrectOption, "ERROR: If :headers_in_file is set to false, you have to provide :user_provided_headers" end end if [:user_provided_headers] unless [:user_provided_headers].is_a?(Array) && ![:user_provided_headers].empty? raise(SmarterCSV::IncorrectOption, "ERROR: incorrect format for user_provided_headers! Expecting array with headers.") end # use user-provided headers user_header_array = [:user_provided_headers] # user_provided_headers: their count should match the headers_in_file if any if defined?(file_header_size) && !file_header_size.nil? if user_header_array.size != file_header_size raise SmarterCSV::HeaderSizeMismatch, "ERROR: :user_provided_headers defines #{user_header_array.size} headers != CSV-file has #{file_header_size} headers" else # we could print out the mapping of file_header_array to header_array here end end header_array = user_header_array else header_array = file_header_array end [header_array, header_array.size] end |