class GeocodeRecords::UpdateTableFromCsv

Constants

COPY_SQL
CREATE_TABLE_SQL
DESIRED_COLUMNS
UPDATE_TABLE_SQL

Attributes

database_url[R]
num[R]
path[R]
table_name[R]

Public Class Methods

new( database_url:, table_name:, path:, num: ) click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 77
def initialize(
  database_url:,
  table_name:,
  path:,
  num:
)
  @database_url = database_url
  @table_name = table_name
  @path = path
  @num = num
end

Public Instance Methods

create_tmp_table() click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 101
def create_tmp_table
  memo = "geocode_records_#{table_name}_#{rand(999999)}".gsub(/[^a-z0-9_]/i, '')
  GeocodeRecords.psql(
    database_url,
    CREATE_TABLE_SQL.gsub('$TMP_TABLE_NAME', memo)
  )
  memo
end
delete_tmp_table(tmp_table_name) click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 136
def delete_tmp_table(tmp_table_name)
  GeocodeRecords.psql(
    database_url,
    "DROP TABLE IF EXISTS #{tmp_table_name}"
  )
end
load_csv_into_tmp_table(path:, table_name:) click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 121
def load_csv_into_tmp_table(path:, table_name:)
  GeocodeRecords.psql(
    database_url,
    COPY_SQL.gsub('$TMP_TABLE_NAME', table_name).gsub('$PATH', path)
  )
end
perform() click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 89
def perform
  return unless File.size(path) > 32
  tmp_table_name = create_tmp_table
  begin
    tmp_csv_path = strip_csv
    load_csv_into_tmp_table path: tmp_csv_path, table_name: tmp_table_name
    update_original_table tmp_table_name
  ensure
    delete_tmp_table tmp_table_name
  end
end
strip_csv() click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 110
def strip_csv
  memo = GeocodeRecords.new_tmp_path('stripped')
  system(
    'xsv',
    'select', DESIRED_COLUMNS.join(','),
    path,
    out: memo
  ) or raise("xsv failed")
  memo
end
update_original_table(tmp_table_name) click to toggle source
# File lib/geocode_records/update_table_from_csv.rb, line 128
def update_original_table(tmp_table_name)
  num_suffix = (num == 1 ? '' : num.to_s)
  GeocodeRecords.psql(
    database_url,
    UPDATE_TABLE_SQL.gsub('$TMP_TABLE_NAME', tmp_table_name).gsub('$TABLE_NAME', table_name).gsub('$NUM_SUFFIX', num_suffix)
  )
end