class DatabaseCleaner::Base

Public Class Methods

new(desired_orm = nil,opts = {}) click to toggle source
# File lib/database_cleaner/base.rb, line 4
def initialize(desired_orm = nil,opts = {})
  if [:autodetect, nil, "autodetect"].include?(desired_orm)
    autodetect
  else
    self.orm = desired_orm
  end
  self.db = opts[:connection] || opts[:model] if opts.has_key?(:connection) || opts.has_key?(:model)
  set_default_orm_strategy
end

Public Instance Methods

==(other) click to toggle source

TODO make strategies directly comparable

# File lib/database_cleaner/base.rb, line 100
def ==(other)
  self.orm == other.orm && self.db == other.db
end
auto_detected?() click to toggle source
# File lib/database_cleaner/base.rb, line 95
def auto_detected?
  !!@autodetected
end
autodetect_orm() click to toggle source
# File lib/database_cleaner/base.rb, line 104
def autodetect_orm
  if defined? ::ActiveRecord
    :active_record
  elsif defined? ::DataMapper
    :data_mapper
  elsif defined? ::MongoMapper
    :mongo_mapper
  elsif defined? ::Mongoid
    :mongoid
  elsif defined? ::CouchPotato
    :couch_potato
  elsif defined? ::Sequel
    :sequel
  elsif defined? ::Moped
    :moped
  elsif defined? ::Ohm
    :ohm
  elsif defined? ::Redis
    :redis
  elsif defined? ::Neo4j
    :neo4j
  end
end
clean() click to toggle source
# File lib/database_cleaner/base.rb, line 85
def clean
  strategy.clean
end
Also aliased as: clean!
clean!()
Alias for: clean
clean_with(*args) click to toggle source
# File lib/database_cleaner/base.rb, line 36
def clean_with(*args)
  strategy = create_strategy(*args)
  set_strategy_db strategy, self.db

  strategy.clean
  strategy
end
Also aliased as: clean_with!
clean_with!(*args)
Alias for: clean_with
cleaning(&block) click to toggle source
# File lib/database_cleaner/base.rb, line 91
def cleaning(&block)
  strategy.cleaning(&block)
end
create_strategy(*args) click to toggle source
# File lib/database_cleaner/base.rb, line 31
def create_strategy(*args)
  strategy, *strategy_args = args
  orm_strategy(strategy).new(*strategy_args)
end
db() click to toggle source
# File lib/database_cleaner/base.rb, line 27
def db
  @db ||= :default
end
db=(desired_db) click to toggle source
# File lib/database_cleaner/base.rb, line 14
def db=(desired_db)
   self.strategy_db = desired_db
   @db = desired_db
end
orm() click to toggle source
# File lib/database_cleaner/base.rb, line 77
def orm
  @orm || autodetect
end
orm=(desired_orm) click to toggle source
# File lib/database_cleaner/base.rb, line 73
def orm=(desired_orm)
  @orm = desired_orm.to_sym
end
set_strategy_db(strategy, desired_db) click to toggle source
# File lib/database_cleaner/base.rb, line 46
def set_strategy_db(strategy, desired_db)
  if strategy.respond_to? :db=
    strategy.db = desired_db
  elsif desired_db != :default
    raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
  end
end
start() click to toggle source
# File lib/database_cleaner/base.rb, line 81
def start
  strategy.start
end
strategy() click to toggle source
# File lib/database_cleaner/base.rb, line 69
def strategy
  @strategy ||= NullStrategy
end
strategy=(args) click to toggle source
# File lib/database_cleaner/base.rb, line 54
def strategy=(args)
  strategy, *strategy_args = args
   if strategy.is_a?(Symbol)
      @strategy = create_strategy(*args)
   elsif strategy_args.empty?
     @strategy = strategy
   else
     raise ArgumentError, "You must provide a strategy object, or a symbol for a known strategy along with initialization params."
   end

   set_strategy_db @strategy, self.db

   @strategy
end
strategy_db=(desired_db) click to toggle source
# File lib/database_cleaner/base.rb, line 19
def strategy_db=(desired_db)
  if strategy.respond_to? :db=
    strategy.db = desired_db
  elsif desired_db!= :default
    raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
  end
end

Private Instance Methods

autodetect() click to toggle source
# File lib/database_cleaner/base.rb, line 145
def autodetect
  @autodetected = true

  @orm ||= autodetect_orm ||
           raise(NoORMDetected, "No known ORM was detected!  Is ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, Moped, or CouchPotato, Redis or Ohm loaded?")
end
orm_module() click to toggle source
# File lib/database_cleaner/base.rb, line 130
def orm_module
  ::DatabaseCleaner.orm_module(orm)
end
orm_strategy(strategy) click to toggle source
# File lib/database_cleaner/base.rb, line 134
def orm_strategy(strategy)
  require "database_cleaner/#{orm.to_s}/#{strategy.to_s}"
  orm_module.const_get(strategy.to_s.capitalize)
rescue LoadError
  if orm_module.respond_to? :available_strategies
    raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM!  Available strategies: #{orm_module.available_strategies.join(', ')}"
  else
    raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM!"
  end
end
set_default_orm_strategy() click to toggle source
# File lib/database_cleaner/base.rb, line 152
def set_default_orm_strategy
  case orm
  when :active_record, :data_mapper, :sequel
    self.strategy = :transaction
  when :mongo_mapper, :mongoid, :couch_potato, :moped, :ohm, :redis
    self.strategy = :truncation
  when :neo4j
    self.strategy = :transaction
  end
end