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