Module: FlatFile::QSV

Defined in:
lib/flat_file/qsv.rb

Overview

Read data exports from Postico

Constant Summary collapse

OPTIONS =

Returns:

  • (Hash)
{
  col_sep:    ";",
  headers:    true,
  quote_char: "'",
  converters: ::CSV::Converters.keys + [:json],
}.freeze()

Class Method Summary collapse

Class Method Details

.from_file(filepath) ⇒ Array<Hash{String => String}>

Parameters:

  • filepath (String)

    Path to the file.

Returns:

  • (Array<Hash{String => String}>)


18
19
20
21
# File 'lib/flat_file/qsv.rb', line 18

def self.from_file(filepath)
  # ::CSV::Converters[:json] = ->(s) { self.parse_postico_json(s) }
  return ::CSV.read(filepath, self.options).map(&:to_hash)
end

.optionsHash

Returns:

  • (Hash)


24
25
26
27
28
29
30
31
32
# File 'lib/flat_file/qsv.rb', line 24

def self.options()
  custom_converter = ->(value, field_info) { self.parse_postico_json(value, field_info) }
  return {
    col_sep: ";",
    headers: true,
    quote_char: '"',
    converters: [custom_converter],
  }
end

.parse_postico_json(value, _field_info) ⇒ Object

Parameters:

  • value (Object)
  • _field_info (Hash)

Returns:

  • (Object)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/flat_file/qsv.rb', line 37

def self.parse_postico_json(value, _field_info)
  return value if value.nil?()
  return value if value.length == 0
  return value unless value[0] == "{"
  return ::JSON.parse(value)
rescue ::JSON::ParserError => e
  # if defined?(Rails)
  #   Rails.logger.error({
  #     message: "Rescued from 'JSON::ParserError' in parse_postico_json",
  #     error: e,
  #   })
  # end
  return value
rescue StandardError => e
  # if defined?(Rails)
  #   Rails.logger.error({
  #     message: "Rescued from 'StandardError' in parse_postico_json",
  #     error: e,
  #   })
  # end
  return value
end