require 'fileutils' module Padrino module Generators module SqlHelpers def self.create_db(adapter, user, password, host, database, charset, collation) case adapter when 'postgres' environment = {} environment['PGPASSWORD'] = password unless password.blank? arguments = [] arguments << "--encoding=#{charset}" if charset arguments << "--host=#{host}" if host arguments << "--username=#{user}" if user arguments << database Process.wait Process.spawn(environment, 'createdb', *arguments) when 'mysql', 'mysql2' environment = {} environment['MYSQL_PWD'] = password unless password.blank? arguments = [] arguments << "--user=#{user}" if user arguments << "--host=#{host}" unless %w[127.0.0.1 localhost].include?(host) arguments << '-e' arguments << "CREATE DATABASE #{database} DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}" Process.wait Process.spawn(environment, 'mysql', *arguments) when 'sqlite', 'sqlite3' fail "Database #{database} already exists" if File.file?(database) FileUtils.mkdir_p(File.dirname(database)) File.open(database, 'a') {} else raise "Adapter #{adapter} not supported for creating databases yet." end end def self.drop_db(adapter, user, password, host, database) case adapter when 'postgres' environment = {} environment['PGPASSWORD'] = password unless password.blank? arguments = [] arguments << "--host=#{host}" if host arguments << "--username=#{user}" if user arguments << database Process.wait Process.spawn(environment, 'dropdb', *arguments) when 'mysql', 'mysql2' environment = {} environment['MYSQL_PWD'] = password unless password.blank? arguments = [] arguments << "--user=#{user}" if user arguments << "--host=#{host}" unless %w[127.0.0.1 localhost].include?(host) arguments << '-e' arguments << "DROP DATABASE IF EXISTS #{database}" Process.wait Process.spawn(environment, 'mysql', *arguments) when 'sqlite', 'sqlite3' File.delete(database) if File.file?(database) else raise "Adapter #{adapter} not supported for dropping databases yet." end end end end end