class DatabaseCleaner::Base

Public Class Methods

new(desired_orm = nil,opts = {}) click to toggle source
# File lib/database_cleaner/base.rb, line 5
def initialize(desired_orm = nil,opts = {})
  if [:autodetect, nil, "autodetect"].include?(desired_orm)
    autodetect
  else
    self.orm = desired_orm
  end
  self.db = opts[:connection] if opts.has_key? :connection
  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 87
def ==(other)
  self.orm == other.orm && self.db == other.db && self.strategy.class == other.strategy.class
end
auto_detected?() click to toggle source
# File lib/database_cleaner/base.rb, line 82
def auto_detected?
  return true unless @autodetected.nil?
end
clean() click to toggle source
# File lib/database_cleaner/base.rb, line 76
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 37
def clean_with(*args)
  strategy = create_strategy(*args)
  strategy.clean
  strategy
end
Also aliased as: clean_with!
clean_with!(*args)
Alias for: clean_with
create_strategy(*args) click to toggle source
# File lib/database_cleaner/base.rb, line 32
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 28
def db
  @db || :default
end
db=(desired_db) click to toggle source
# File lib/database_cleaner/base.rb, line 15
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 68
def orm
  @orm || autodetect
end
orm=(desired_orm) click to toggle source
# File lib/database_cleaner/base.rb, line 64
def orm=(desired_orm)
  @orm = desired_orm.to_sym
end
start() click to toggle source
# File lib/database_cleaner/base.rb, line 72
def start
  strategy.start
end
strategy() click to toggle source
# File lib/database_cleaner/base.rb, line 60
def strategy
  @strategy || NullStrategy
end
strategy=(args) click to toggle source
# File lib/database_cleaner/base.rb, line 45
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

   self.strategy_db = self.db

   @strategy
end
strategy_db=(desired_db) click to toggle source
# File lib/database_cleaner/base.rb, line 20
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 108
def autodetect
  @orm ||= begin
    @autodetected = true
    if defined? ::ActiveRecord
      :active_record
    elsif defined? ::DataMapper
      :data_mapper
    elsif defined? ::MongoMapper
      :mongo_mapper
    elsif defined? ::Mongoid
      :mongoid
    elsif defined? ::CouchPotato
      :couch_potato
    else
      raise NoORMDetected, "No known ORM was detected!  Is ActiveRecord, DataMapper, MongoMapper, Mongoid, or CouchPotato loaded?"
    end
  end
end
orm_module() click to toggle source
# File lib/database_cleaner/base.rb, line 93
def orm_module
  ::DatabaseCleaner.orm_module(orm)
end
orm_strategy(strategy) click to toggle source
# File lib/database_cleaner/base.rb, line 97
def orm_strategy(strategy)
  require "database_cleaner/#{orm.to_s}/#{strategy.to_s}"
  orm_module.const_get(strategy.to_s.capitalize)
rescue LoadError => e
  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 127
def set_default_orm_strategy
  case orm
  when :active_record, :data_mapper
    self.strategy = :transaction
  when :mongo_mapper, :mongoid, :couch_potato
    self.strategy = :truncation
  end
end