# 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
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
# File lib/database_cleaner/base.rb, line 82 def auto_detected? return true unless @autodetected.nil? end
# File lib/database_cleaner/base.rb, line 76 def clean strategy.clean end
# File lib/database_cleaner/base.rb, line 37 def clean_with(*args) strategy = create_strategy(*args) strategy.clean strategy end
# File lib/database_cleaner/base.rb, line 32 def create_strategy(*args) strategy, *strategy_args = args orm_strategy(strategy).new(*strategy_args) end
# File lib/database_cleaner/base.rb, line 28 def db @db || :default end
# File lib/database_cleaner/base.rb, line 15 def db=(desired_db) self.strategy_db = desired_db @db = desired_db end
# File lib/database_cleaner/base.rb, line 68 def orm @orm || autodetect end
# File lib/database_cleaner/base.rb, line 64 def orm=(desired_orm) @orm = desired_orm.to_sym end
# File lib/database_cleaner/base.rb, line 72 def start strategy.start end
# File lib/database_cleaner/base.rb, line 60 def strategy @strategy || NullStrategy end
# 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
# 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
# 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
# File lib/database_cleaner/base.rb, line 93 def orm_module ::DatabaseCleaner.orm_module(orm) end
# 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
# 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