class Csv2Psql::SchemaGenerator

Csv2Psql schema generator class

Public Class Methods

format_result(analysis, lines) click to toggle source
# File lib/csv2psql/schema/schema_generator.rb, line 33
def format_result(analysis, lines)
  res = { columns: {} }
  analysis.each do |k, v|
    res[:columns][k] = {
      type: v[:class].sql_type,
      null: v[:results][:count] != lines
    }
  end
  res
end
generate(analysis, _opts = {}) click to toggle source
# File lib/csv2psql/schema/schema_generator.rb, line 44
def generate(analysis, _opts = {})
  res = {}
  analysis[:columns].each do |name, analyzers|
    analyzer = select_best(analyzers, analysis[:lines])
    res[name] = analyzer
  end
  format_result(res, analysis[:lines])
end
select_analyzers_by_match(analyzers, match) click to toggle source
# File lib/csv2psql/schema/schema_generator.rb, line 7
def select_analyzers_by_match(analyzers, match)
  null_count = analyzers['Null'][:results][:count]
  analyzers.select do |_k, v|
    next if _k != 'String' && v[:results][:count] == 0
    v[:results][:count] + null_count == match
  end
end
select_analyzers_class(analyzers, class_name) click to toggle source
# File lib/csv2psql/schema/schema_generator.rb, line 15
def select_analyzers_class(analyzers, class_name)
  analyzers.select { |_k, v| v[:class].sql_class?(class_name) }
end
select_best(in_analyzers, lines) click to toggle source
# File lib/csv2psql/schema/schema_generator.rb, line 19
def select_best(in_analyzers, lines)
  analyzers = select_analyzers_by_match(in_analyzers, lines)

  # matched_analyzers = analyzers.select do |name, analyzer|
  #   analyzer[:results][:count] === lines
  # end

  sorted = analyzers.sort do |a, b|
    a[1][:class].weight <=> b[1][:class].weight
  end

  analyzers[sorted.last[0]]
end