54 lines
1.5 KiB
Ruby
54 lines
1.5 KiB
Ruby
require 'pg'
|
|
require 'sequel'
|
|
require 'json'
|
|
|
|
module CartoDB
|
|
module Importer2
|
|
module Factories
|
|
class PGConnection
|
|
def initialize
|
|
raise(
|
|
"Please configure your database settings " +
|
|
"in spec/factories/database.json"
|
|
) unless File.exists?(configuration_file)
|
|
@pg_options = ::JSON.parse(File.read(configuration_file))
|
|
create_db
|
|
end #initialize
|
|
|
|
def create_db
|
|
conn = Sequel.postgres(pg_options.reject{|k,v| k == :database})
|
|
begin
|
|
conn.run("CREATE DATABASE \"#{ pg_options[:database] }\"
|
|
WITH TEMPLATE = template_postgis
|
|
OWNER = #{ pg_options[:user] }
|
|
ENCODING = 'UTF8'
|
|
CONNECTION LIMIT=-1")
|
|
rescue Sequel::DatabaseError => e
|
|
raise unless e.message =~ /database .* already exists/
|
|
end
|
|
begin
|
|
conn.run("CREATE EXTENSION postgis")
|
|
rescue Sequel::DatabaseError => e
|
|
raise unless e.message =~ /extension \"postgis\" already exists/
|
|
end
|
|
end
|
|
|
|
def connection
|
|
Sequel.postgres(pg_options)
|
|
end #connection
|
|
|
|
def pg_options
|
|
Hash[@pg_options.map { |k, v| [k.to_sym, v] }]
|
|
end #pg_options
|
|
|
|
private
|
|
|
|
def configuration_file
|
|
File.join(File.dirname("#{__FILE__}"), 'database.json')
|
|
end #configuration_file
|
|
end # PGConnection
|
|
end # Factories
|
|
end # Importer2
|
|
end # CartoDB
|
|
|