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