module SchemaDev::Rspec::Db

Public Instance Methods

configuration(db: nil) click to toggle source
# File lib/schema_dev/rspec/db.rb, line 57
def configuration(db: nil)
  case db || infer_db
  when 'mysql'
    {
      'adapter'      => 'mysql',
      'database'     => database,
      'host'         => ENV['MYSQL_DB_HOST'],
      'username'     => ENV.fetch('MYSQL_DB_USER', 'schema_plus'),
      'password'     => ENV['MYSQL_DB_PASS'],
      'encoding'     => 'utf8',
      'min_messages' => 'warning'
    }
  when 'mysql2'
    {
      'adapter'      => 'mysql2',
      'database'     => database,
      'host'         => ENV['MYSQL_DB_HOST'],
      'username'     => ENV.fetch('MYSQL_DB_USER', 'schema_plus'),
      'password'     => ENV['MYSQL_DB_PASS'],
      'encoding'     => 'utf8',
      'min_messages' => 'warning'
    }
  when 'postgresql'
    {
      'adapter'      => 'postgresql',
      'database'     => database,
      'host'         => ENV['POSTGRESQL_DB_HOST'],
      'username'     => ENV['POSTGRESQL_DB_USER'],
      'password'     => ENV['POSTGRESQL_DB_PASS'],
      'min_messages' => 'warning'
    }
  when 'sqlite3'
    {
      'adapter'  => 'sqlite3',
      'database' => tmproot.join("#{database}.sqlite3").to_s
    }
  else
    raise "Unknown db adapter #{db.inspect}"
  end.compact
end
connect() click to toggle source
# File lib/schema_dev/rspec/db.rb, line 102
def connect
  ActiveRecord::Base.configurations = { 'schema_dev' => configuration }
  ActiveRecord::Base.establish_connection :schema_dev
  case infer_db
  when 'sqlite3'
    ActiveRecord::Base.connection.execute 'PRAGMA synchronous = OFF'
  end
end
database() click to toggle source
# File lib/schema_dev/rspec/db.rb, line 52
def database
  @database ||= 'schema_plus_test'
  # @database ||= (Dir["*.gemspec"].first || "schema_dev_test").sub(/\.gemspec$/, '') + "_test"
end
infer_db() click to toggle source
# File lib/schema_dev/rspec/db.rb, line 98
def infer_db
  @infer_db ||= GemfileSelector.infer_db
end
logroot() click to toggle source
# File lib/schema_dev/rspec/db.rb, line 48
def logroot
  @logroot ||= Pathname.new('log').tap(&:mkpath)
end
set_logger() click to toggle source
# File lib/schema_dev/rspec/db.rb, line 111
def set_logger
  ruby = "#{RUBY_ENGINE}#{RUBY_VERSION}"
  activerecord = "activerecord#{ActiveRecord.version}"
  ActiveRecord::Base.logger = Logger.new(logroot.join("#{ruby}-#{activerecord}-#{infer_db}.log").open('w'))
end
setup() click to toggle source
# File lib/schema_dev/rspec/db.rb, line 12
def setup
  set_logger
  connect
  RSpec.configure do |config|
    config.include Helpers
    config.filter_run_excluding postgresql: -> (v) {
      if Helpers.postgresql?
        case v
        when String
          version = ActiveRecord::Base.connection.select_value("SHOW server_version").match(/(\d+\.\d+)/)[1]
          postgresql_version = Gem::Version.new(version)
          test = Gem::Requirement.new(v)
          !test.satisfied_by?(postgresql_version)
        else
          v == :skip
        end
      else
        v == :only
      end
    }
    config.filter_run_excluding mysql: :only unless Helpers.mysql?
    config.filter_run_excluding mysql: :skip if Helpers.mysql?
    config.filter_run_excluding sqlite3: :only unless Helpers.sqlite3?
    config.filter_run_excluding sqlite3: :skip if Helpers.sqlite3?
    config.filter_run_excluding rails: -> (v) {
      rails_version = Gem::Version.new(ActiveRecord::VERSION::STRING)
      test = Gem::Requirement.new(v)
      !test.satisfied_by?(rails_version)
    }
  end
end
tmproot() click to toggle source
# File lib/schema_dev/rspec/db.rb, line 44
def tmproot
  @tmproot ||= Pathname.new('tmp').tap(&:mkpath)
end