class DatabaseCleaner::Base

Attributes

orm[R]

Public Class Methods

new(desired_orm = nil, opts = {}) click to toggle source
# File lib/database_cleaner/base.rb, line 15
def initialize(desired_orm = nil, opts = {})
  @orm_autodetector = ORMAutodetector.new
  self.orm = desired_orm
  self.db = opts[:connection] || opts[:model] if opts.has_key?(:connection) || opts.has_key?(:model)
  self.strategy = orm_module && orm_module.default_strategy
  Safeguard.new.run
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/database_cleaner/base.rb, line 11
def <=>(other)
  [orm, db] <=> [other.orm, other.db]
end
auto_detected?() click to toggle source

TODO remove the following methods in 2.0

# File lib/database_cleaner/base.rb, line 67
def auto_detected?
  DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].auto_detected?` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
  @orm_autodetector.autodetected?
end
autodetect_orm() click to toggle source
# File lib/database_cleaner/base.rb, line 72
def autodetect_orm
  DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].autodetect_orm` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
  @orm_autodetector.orm
end
clean!() click to toggle source
# File lib/database_cleaner/base.rb, line 77
def clean!
  DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean instead."
  clean
end
clean_with(*args) click to toggle source
# File lib/database_cleaner/base.rb, line 58
def clean_with(*args)
  strategy = create_strategy(*args)
  set_strategy_db strategy, db
  strategy.clean
  strategy
end
clean_with!() click to toggle source
# File lib/database_cleaner/base.rb, line 82
def clean_with!
  DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean_with instead."
  clean_with
end
create_strategy(*args) click to toggle source
# File lib/database_cleaner/base.rb, line 107
def create_strategy(*args)
  if called_externally?(caller)
    DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].create_strategy` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].strategy=` instead."
  end
  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 23
def db=(desired_db)
  @db = self.strategy_db = desired_db
end
orm=(desired_orm) click to toggle source
# File lib/database_cleaner/base.rb, line 50
def orm=(desired_orm)
  @orm = (desired_orm || :autodetect).to_sym
  @orm = @orm_autodetector.orm if @orm == :autodetect
end
set_strategy_db(strategy, desired_db) click to toggle source
# File lib/database_cleaner/base.rb, line 96
def set_strategy_db(strategy, desired_db)
  if called_externally?(caller)
    DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].set_strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
  end
  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
strategy() click to toggle source
# File lib/database_cleaner/base.rb, line 44
def strategy
  @strategy ||= NullStrategy.new
end
strategy=(args) click to toggle source
# File lib/database_cleaner/base.rb, line 31
def strategy=(args)
  strategy, *strategy_args = args
  @strategy = if strategy.is_a?(Symbol)
    create_strategy(*args)
  elsif strategy_args.empty?
    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, db
end
strategy_db=(desired_db) click to toggle source

TODO privatize the following methods in 2.0

# File lib/database_cleaner/base.rb, line 89
def strategy_db=(desired_db)
  if called_externally?(caller)
    DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
  end
  set_strategy_db(strategy, desired_db)
end

Private Instance Methods

adapter_loaded?(orm) click to toggle source
# File lib/database_cleaner/base.rb, line 124
def adapter_loaded? orm
  $LOADED_FEATURES.grep(%r{/lib/database_cleaner/#{orm}\.rb$}).any?
end
called_externally?(caller) click to toggle source
# File lib/database_cleaner/base.rb, line 153
def called_externally?(caller)
  __FILE__ != caller.first.split(":").first
end
load_adapter(orm) click to toggle source
# File lib/database_cleaner/base.rb, line 128
def load_adapter orm
  $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
  require "database_cleaner/#{orm}"
end
orm_module() click to toggle source
# File lib/database_cleaner/base.rb, line 117
def orm_module
  return unless [:active_record, :data_mapper, :mongo, :mongoid, :mongo_mapper, :moped, :couch_potato, :sequel, :ohm, :redis, :neo4j].include?(orm)
  load_adapter(orm) if !adapter_loaded?(orm)
  orm_module_name = ORMAutodetector::ORMS[orm]
  DatabaseCleaner.const_get(orm_module_name, false)
end
orm_strategy(strategy) click to toggle source
# File lib/database_cleaner/base.rb, line 133
    def orm_strategy(strategy)
      strategy_module_name = strategy.to_s.capitalize
      orm_module.const_get(strategy_module_name, false)
    rescue NameError
      if orm != :active_record
        DatabaseCleaner.deprecate <<-TEXT
          The #{orm_module} adapter has been extracted to its own gem: database_cleaner-#{orm}, and will be removed from database_cleaner in 2.0. To silence this message, please replace `gem "database_cleaner"` with `gem "database_cleaner-#{orm}"` in your Gemfile.
        TEXT
      end
      require_orm_strategy(orm, strategy)
      retry
    end
require_orm_strategy(orm, strategy) click to toggle source
# File lib/database_cleaner/base.rb, line 146
def require_orm_strategy(orm, strategy)
  $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
  require "database_cleaner/#{orm}/#{strategy}"
rescue LoadError
  raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM!  Available strategies: #{orm_module.available_strategies.join(', ')}"
end