Sha256: 2c24dc41835f82a9ee11a4d030e2c2d128c378df037e329e06f383784fb8a531

Contents?: true

Size: 1.94 KB

Versions: 9

Compression:

Stored size: 1.94 KB

Contents

require 'yaml'

module DatabaseCleaner
  module Spec
    class DatabaseHelper < Struct.new(:db)
      def self.with_all_dbs &block
        %w[mysql mysql2 sqlite3 postgres].map(&:to_sym).each do |db|
          yield new(db)
        end
      end

      def setup
        create_db
        establish_connection
        load_schema
      end

      attr_reader :connection

      def teardown
        drop_db
      end

      private

      def establish_connection(config = default_config)
        raise NotImplementedError
      end

      def create_db
        if db == :sqlite3
          # NO-OP
        elsif db == :postgres
          establish_connection default_config.merge('database' => 'postgres')
          connection.execute "CREATE DATABASE #{default_config['database']}" rescue nil
        else
          establish_connection default_config.merge("database" => nil)
          connection.execute "CREATE DATABASE IF NOT EXISTS #{default_config['database']}"
        end
      end

      def load_schema
        connection.execute <<-SQL
          CREATE TABLE IF NOT EXISTS users (
            id SERIAL PRIMARY KEY,
            name INTEGER
          );
        SQL

        connection.execute <<-SQL
          CREATE TABLE IF NOT EXISTS agents (
            name INTEGER
          );
        SQL
      end

      def drop_db
        if db == :sqlite3
          begin
            File.unlink(db_config['sqlite3']['database'])
          rescue Errno::ENOENT
          end
        elsif db == :postgres
          # FIXME
          connection.execute "DROP TABLE IF EXISTS users"
          connection.execute "DROP TABLE IF EXISTS agents"
        else
          connection.execute "DROP DATABASE IF EXISTS #{default_config['database']}"
        end
      end

      def db_config
        config_path = 'spec/support/config.yml'
        @db_config ||= YAML.load(IO.read(config_path))
      end

      def default_config
        db_config[db.to_s]
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
database_cleaner-1.99.0 lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.99.0.beta lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.8.5 lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.8.4 lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.8.3 lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.8.2 lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.8.1 lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.8.0 lib/database_cleaner/spec/database_helper.rb
database_cleaner-1.8.0.beta lib/database_cleaner/spec/database_helper.rb