Sha256: 248ef91ca415ee0cffc05b91a8616386de52aad6ee5ae3e9d8f8d66a8187efee

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

require File.expand_path('../../lib/sqlpostgres', File.dirname(__FILE__))
require File.expand_path('test_database', File.dirname(__FILE__))

module TestSupport
  class PostgresTemplate

    def initialize(server_name, connection_args)
      @server_name = server_name
      @connection_args = connection_args
      @connection = template_connection
    end

    def create_database(db_name, database_encoding)
      return if db_exists?(db_name)
      puts "Creating database #{qualified_db_name(db_name)}"
      create_db(db_name, database_encoding)
    end

    def drop_database(db_name)
      return unless db_exists?(db_name)
      unless db_name =~ /^#{TestDatabase::NAME_PREFIX}/
        raise "Refusing to drop database #{qualified_db_name(db_name)}"
      end
      puts "Dropping database #{qualified_db_name(db_name)}"
      @connection.exec("drop database #{db_name}")
    end

    private

    def qualified_db_name(db_name)
      [@server_name, db_name].join('/')
    end

    def db_exists?(db_name)
      sql = SqlPostgres::Select.new(@connection)
      sql.select_literal(1)
      sql.from('pg_database')
      sql.where(['datname = %s', db_name])
      !sql.exec.empty?
    end

    def create_db(db_name, database_encoding)
      statement = [
        'create database', db_name,
        "with encoding '#{database_encoding}'",
        'template template0',
      ].join(' ')
      @connection.exec(statement)
    end

    def template_connection
      SqlPostgres::Connection.new(template_connection_args)
    end

    def template_connection_args
      @connection_args.merge(:db_name => 'template1')
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sqlpostgres-1.3.0 spec/lib/postgres_template.rb