class Csv2Psql::Generator

SQL Code generator

Constants

BASE_DIR
CREATE_TABLE_TEMPLATE
DEFAULT_OPTIONS
DROP_TABLE_TEMPLATE
HEADER_TEMPLATE
TABLE_FUNCTIONS
TEMPLATE_DIR
TRUNCATE_TABLE_TEMPLATE

Attributes

output[R]

Public Class Methods

new(output) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 46
def initialize(output)
  @output = output
end
sanitize_header(header_column) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 36
def sanitize_header(header_column)
  header_column.downcase.gsub(/[^0-9a-z]/i, '_')
end
sanitize_value(value) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 40
def sanitize_value(value)
  value ||= ''
  value.gsub("'", "''")
end

Public Instance Methods

create_erb_context(path, row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 50
def create_erb_context(path, row, opts = {})
  header = get_header(row, opts)
  columns = get_columns(row, opts, header)
  {
    path: path,
    header: header,
    columns: columns,
    table: opts[:table] || DEFAULT_OPTIONS[:table]
  }
end
create_header(path, row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 61
def create_header(path, row, opts = {})
  ctx = create_erb_context(path, row, opts)
  erb = ErbHelper.new
  erb.process(HEADER_TEMPLATE, ctx)
end
create_sql_script(path, row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 73
def create_sql_script(path, row, opts = {})
  output.write create_header(path, row, opts)

  TABLE_FUNCTIONS.each do |k, v|
    t = DEFAULT_OPTIONS[k]
    t = opts[k] unless opts[k].nil?
    output.write send(v, path, row, opts) if t
  end
end
create_table(path, row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 67
def create_table(path, row, opts = {})
  ctx = create_erb_context(path, row, opts)
  erb = ErbHelper.new
  erb.process(CREATE_TABLE_TEMPLATE, ctx)
end
drop_table(path, row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 83
def drop_table(path, row, opts = {})
  ctx = create_erb_context(path, row, opts)
  erb = ErbHelper.new
  erb.process(DROP_TABLE_TEMPLATE, ctx)
end
format_row(row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 89
def format_row(row, opts = {})
  table = opts[:table] || DEFAULT_OPTIONS[:table]

  header = get_header(row, opts)
  columns = get_columns(row, opts, header).join(', ')
  values = get_values(row, opts, header).join(', ')
  "INSERT INTO #{table}(#{columns}) VALUES(#{values});"
end
get_columns(row, opts = {}, header = get_header(row, opts)) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 102
def get_columns(row, opts = {}, header = get_header(row, opts))
  if opts[:header]
    header.map { |h| Generator.sanitize_header(h) }
  else
    row.map.with_index do |_item, i|
      "col_#{i}"
    end
  end
end
get_header(row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 98
def get_header(row, opts = {})
  CsvHelper.get_header(row, opts)
end
get_values(row, opts = {}, header = get_header(row, opts)) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 112
def get_values(row, opts = {}, header = get_header(row, opts))
  header.map do |h|
    value = row[h]
    sanitized_value = Generator.sanitize_value(value)
    "'#{sanitized_value}'"
  end
end
truncate_table(path, row, opts = {}) click to toggle source
# File lib/csv2psql/generator/generator.rb, line 120
def truncate_table(path, row, opts = {})
  ctx = create_erb_context(path, row, opts)
  erb = ErbHelper.new
  erb.process(TRUNCATE_TABLE_TEMPLATE, ctx)
end