Module: SmarterCSV::HeaderTransformations
- Included in:
- Reader
- Defined in:
- lib/smarter_csv/header_transformations.rb
Instance Method Summary collapse
- #disambiguate_headers(headers, options) ⇒ Object
-
#header_transformations(header_array, options) ⇒ Object
transform the headers that were in the file:.
-
#remap_headers(headers, options) ⇒ Object
do some key mapping on the keys in the file header if you want to completely delete a key, then map it to nil or to ”.
Instance Method Details
#disambiguate_headers(headers, options) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/smarter_csv/header_transformations.rb', line 25 def disambiguate_headers(headers, ) counts = Hash.new(0) headers.map do |header| counts[header] += 1 counts[header] > 1 ? "#{header}#{[:duplicate_header_suffix]}#{counts[header]}" : header end end |
#header_transformations(header_array, options) ⇒ Object
transform the headers that were in the file:
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/smarter_csv/header_transformations.rb', line 6 def header_transformations(header_array, ) header_array.map!{|x| x.gsub(%r/#{[:quote_char]}/, '')} header_array.map!{|x| x.strip} if [:strip_whitespace] unless [:keep_original_headers] header_array.map!{|x| x.gsub(/\s+|-+/, '_')} header_array.map!{|x| x.downcase} if [:downcase_header] end # detect duplicate headers and disambiguate header_array = disambiguate_headers(header_array, ) if [:duplicate_header_suffix] # symbolize headers header_array = header_array.map{|x| x.to_sym } unless [:strings_as_keys] || [:keep_original_headers] # doesn't make sense to re-map when we have user_provided_headers header_array = remap_headers(header_array, ) if [:key_mapping] header_array end |
#remap_headers(headers, options) ⇒ Object
do some key mapping on the keys in the file header if you want to completely delete a key, then map it to nil or to ”
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/smarter_csv/header_transformations.rb', line 35 def remap_headers(headers, ) key_mapping = [:key_mapping] if key_mapping.empty? || !key_mapping.is_a?(Hash) || key_mapping.keys.empty? raise(SmarterCSV::IncorrectOption, "ERROR: incorrect format for key_mapping! Expecting hash with from -> to mappings") end key_mapping = [:key_mapping] # if silence_missing_keys are not set, raise error if missing header missing_keys = key_mapping.keys - headers # if the user passes a list of speciffic mapped keys that are optional missing_keys -= [:silence_missing_keys] if [:silence_missing_keys].is_a?(Array) unless missing_keys.empty? || [:silence_missing_keys] == true raise SmarterCSV::KeyMappingError, "ERROR: can not map headers: #{missing_keys.join(', ')}" end headers.map! do |header| if key_mapping.has_key?(header) key_mapping[header].nil? ? nil : key_mapping[header] elsif [:remove_unmapped_keys] nil else header end end headers end |