From c0a9610ce9bda1ddf60620df37bab93488932164 Mon Sep 17 00:00:00 2001 From: Micah Geisel Date: Wed, 11 Dec 2019 23:51:45 -0800 Subject: [PATCH] add .default_strategy method to all adapters, and move knowledge into it from core. --- .../lib/database_cleaner/active_record/base.rb | 5 ++++- .../database_cleaner/active_record/base_spec.rb | 4 ++++ .../lib/database_cleaner/couch_potato.rb | 6 ++++++ .../database_cleaner/couch_potato/base_spec.rb | 8 ++++++++ .../lib/database_cleaner/data_mapper/base.rb | 4 ++++ .../database_cleaner/data_mapper/base_spec.rb | 4 ++++ .../lib/database_cleaner/mongo.rb | 7 +++++++ .../spec/database_cleaner/mongo/base_spec.rb | 8 ++++++++ .../lib/database_cleaner/mongo_mapper/base.rb | 4 ++++ .../database_cleaner/mongo_mapper/base_spec.rb | 4 ++++ .../lib/database_cleaner/mongoid.rb | 7 +++++++ .../spec/database_cleaner/mongoid/base_spec.rb | 8 ++++++++ .../lib/database_cleaner/moped.rb | 6 ++++++ .../spec/database_cleaner/moped/base_spec.rb | 8 ++++++++ .../lib/database_cleaner/neo4j/base.rb | 4 ++++ .../spec/database_cleaner/neo4j/base_spec.rb | 4 ++++ .../lib/database_cleaner/ohm.rb | 6 ++++++ .../spec/database_cleaner/ohm/base_spec.rb | 8 ++++++++ .../lib/database_cleaner/redis/base.rb | 4 ++++ .../spec/database_cleaner/redis/base_spec.rb | 4 ++++ .../lib/database_cleaner/sequel/base.rb | 4 ++++ .../spec/database_cleaner/sequel/base_spec.rb | 4 ++++ lib/database_cleaner/base.rb | 15 ++++----------- 23 files changed, 124 insertions(+), 12 deletions(-) create mode 100644 adapters/database_cleaner-couch_potato/spec/database_cleaner/couch_potato/base_spec.rb create mode 100644 adapters/database_cleaner-mongo/spec/database_cleaner/mongo/base_spec.rb create mode 100644 adapters/database_cleaner-mongoid/spec/database_cleaner/mongoid/base_spec.rb create mode 100644 adapters/database_cleaner-moped/spec/database_cleaner/moped/base_spec.rb create mode 100644 adapters/database_cleaner-ohm/spec/database_cleaner/ohm/base_spec.rb diff --git a/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/base.rb b/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/base.rb index 057bc9b..d68c6ff 100644 --- a/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/base.rb +++ b/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/base.rb @@ -4,11 +4,14 @@ require 'erb' module DatabaseCleaner module ActiveRecord - def self.available_strategies %w[truncation transaction deletion] end + def self.default_strategy + :transaction + end + def self.config_file_location=(path) @config_file_location = path end diff --git a/adapters/database_cleaner-active_record/spec/database_cleaner/active_record/base_spec.rb b/adapters/database_cleaner-active_record/spec/database_cleaner/active_record/base_spec.rb index 48f2eb3..1024329 100644 --- a/adapters/database_cleaner-active_record/spec/database_cleaner/active_record/base_spec.rb +++ b/adapters/database_cleaner-active_record/spec/database_cleaner/active_record/base_spec.rb @@ -11,6 +11,10 @@ end RSpec.describe DatabaseCleaner::ActiveRecord do it { is_expected.to respond_to(:available_strategies) } + it "has a default_strategy of transaction" do + expect(described_class.default_strategy).to eq(:transaction) + end + describe "config_file_location" do after do # prevent global state leakage diff --git a/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb b/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb index 92c3c81..21e6fa3 100644 --- a/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb +++ b/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb @@ -3,3 +3,9 @@ require "database_cleaner" require "database_cleaner/couch_potato/base" require "database_cleaner/couch_potato/truncation" +module DatabaseCleaner::CouchPotato + def self.default_strategy + :truncation + end +end + diff --git a/adapters/database_cleaner-couch_potato/spec/database_cleaner/couch_potato/base_spec.rb b/adapters/database_cleaner-couch_potato/spec/database_cleaner/couch_potato/base_spec.rb new file mode 100644 index 0000000..734ebb8 --- /dev/null +++ b/adapters/database_cleaner-couch_potato/spec/database_cleaner/couch_potato/base_spec.rb @@ -0,0 +1,8 @@ +require 'database_cleaner/couch_potato' + +RSpec.describe DatabaseCleaner::CouchPotato do + it "has a default_strategy of truncation" do + expect(described_class.default_strategy).to eq(:truncation) + end +end + diff --git a/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/base.rb b/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/base.rb index 64a303c..29aa702 100644 --- a/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/base.rb +++ b/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/base.rb @@ -5,6 +5,10 @@ module DatabaseCleaner %w[truncation transaction] end + def self.default_strategy + :transaction + end + module Base include ::DatabaseCleaner::Generic::Base diff --git a/adapters/database_cleaner-data_mapper/spec/database_cleaner/data_mapper/base_spec.rb b/adapters/database_cleaner-data_mapper/spec/database_cleaner/data_mapper/base_spec.rb index 9996763..6ac4211 100644 --- a/adapters/database_cleaner-data_mapper/spec/database_cleaner/data_mapper/base_spec.rb +++ b/adapters/database_cleaner-data_mapper/spec/database_cleaner/data_mapper/base_spec.rb @@ -4,6 +4,10 @@ require 'database_cleaner/spec' module DatabaseCleaner RSpec.describe DataMapper do it { is_expected.to respond_to(:available_strategies) } + + it "has a default_strategy of transaction" do + expect(described_class.default_strategy).to eq(:transaction) + end end module DataMapper diff --git a/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb b/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb index 6fbfc7c..da7c874 100644 --- a/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb +++ b/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb @@ -1,3 +1,10 @@ require 'database_cleaner/mongo/version' require 'database_cleaner' require 'database_cleaner/mongo/truncation' + +module DatabaseCleaner::Mongo + def self.default_strategy + :truncation + end +end + diff --git a/adapters/database_cleaner-mongo/spec/database_cleaner/mongo/base_spec.rb b/adapters/database_cleaner-mongo/spec/database_cleaner/mongo/base_spec.rb new file mode 100644 index 0000000..73d9d63 --- /dev/null +++ b/adapters/database_cleaner-mongo/spec/database_cleaner/mongo/base_spec.rb @@ -0,0 +1,8 @@ +require 'database_cleaner/mongo' + +RSpec.describe DatabaseCleaner::Mongo do + it "has a default_strategy of truncation" do + expect(described_class.default_strategy).to eq(:truncation) + end +end + diff --git a/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb b/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb index fa8179b..7cac7df 100644 --- a/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb +++ b/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb @@ -5,6 +5,10 @@ module DatabaseCleaner %w[truncation] end + def self.default_strategy + :truncation + end + module Base include ::DatabaseCleaner::Generic::Base diff --git a/adapters/database_cleaner-mongo_mapper/spec/database_cleaner/mongo_mapper/base_spec.rb b/adapters/database_cleaner-mongo_mapper/spec/database_cleaner/mongo_mapper/base_spec.rb index e45f345..6f6d395 100644 --- a/adapters/database_cleaner-mongo_mapper/spec/database_cleaner/mongo_mapper/base_spec.rb +++ b/adapters/database_cleaner-mongo_mapper/spec/database_cleaner/mongo_mapper/base_spec.rb @@ -4,6 +4,10 @@ require 'database_cleaner/spec' module DatabaseCleaner RSpec.describe MongoMapper do it { is_expected.to respond_to(:available_strategies) } + + it "has a default_strategy of truncation" do + expect(described_class.default_strategy).to eq(:truncation) + end end module MongoMapper diff --git a/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb b/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb index e80f0b6..bd58a7d 100644 --- a/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb +++ b/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb @@ -1,3 +1,10 @@ require "database_cleaner/mongoid/version" require "database_cleaner" require "database_cleaner/mongoid/truncation" + +module DatabaseCleaner::Mongoid + def self.default_strategy + :truncation + end +end + diff --git a/adapters/database_cleaner-mongoid/spec/database_cleaner/mongoid/base_spec.rb b/adapters/database_cleaner-mongoid/spec/database_cleaner/mongoid/base_spec.rb new file mode 100644 index 0000000..eab25b1 --- /dev/null +++ b/adapters/database_cleaner-mongoid/spec/database_cleaner/mongoid/base_spec.rb @@ -0,0 +1,8 @@ +require 'database_cleaner/mongoid' + +RSpec.describe DatabaseCleaner::Mongoid do + it "has a default_strategy of truncation" do + expect(described_class.default_strategy).to eq(:truncation) + end +end + diff --git a/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb b/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb index 1e51b7b..6039ba7 100644 --- a/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb +++ b/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb @@ -2,3 +2,9 @@ require "database_cleaner/moped/version" require "database_cleaner" require "database_cleaner/moped/truncation" +module DatabaseCleaner::Moped + def self.default_strategy + :truncation + end +end + diff --git a/adapters/database_cleaner-moped/spec/database_cleaner/moped/base_spec.rb b/adapters/database_cleaner-moped/spec/database_cleaner/moped/base_spec.rb new file mode 100644 index 0000000..1594cdc --- /dev/null +++ b/adapters/database_cleaner-moped/spec/database_cleaner/moped/base_spec.rb @@ -0,0 +1,8 @@ +require 'database_cleaner/moped' + +RSpec.describe DatabaseCleaner::Moped do + it "has a default_strategy of truncation" do + expect(described_class.default_strategy).to eq(:truncation) + end +end + diff --git a/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/base.rb b/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/base.rb index 8a794e3..727ae10 100644 --- a/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/base.rb +++ b/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/base.rb @@ -5,6 +5,10 @@ module DatabaseCleaner %w[transaction truncation deletion] end + def self.default_strategy + :transaction + end + module Base include ::DatabaseCleaner::Generic::Base diff --git a/adapters/database_cleaner-neo4j/spec/database_cleaner/neo4j/base_spec.rb b/adapters/database_cleaner-neo4j/spec/database_cleaner/neo4j/base_spec.rb index e0a1605..467cd45 100644 --- a/adapters/database_cleaner-neo4j/spec/database_cleaner/neo4j/base_spec.rb +++ b/adapters/database_cleaner-neo4j/spec/database_cleaner/neo4j/base_spec.rb @@ -4,6 +4,10 @@ require 'database_cleaner/spec' module DatabaseCleaner RSpec.describe Neo4j do it { is_expected.to respond_to(:available_strategies) } + + it "has a default_strategy of transaction" do + expect(described_class.default_strategy).to eq(:transaction) + end end module Neo4j diff --git a/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb b/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb index e6fabce..77cd718 100644 --- a/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb +++ b/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb @@ -2,3 +2,9 @@ require "database_cleaner/ohm/version" require "database_cleaner" require "database_cleaner/ohm/truncation" +module DatabaseCleaner::Ohm + def self.default_strategy + :truncation + end +end + diff --git a/adapters/database_cleaner-ohm/spec/database_cleaner/ohm/base_spec.rb b/adapters/database_cleaner-ohm/spec/database_cleaner/ohm/base_spec.rb new file mode 100644 index 0000000..0662e81 --- /dev/null +++ b/adapters/database_cleaner-ohm/spec/database_cleaner/ohm/base_spec.rb @@ -0,0 +1,8 @@ +require 'database_cleaner/ohm' + +RSpec.describe DatabaseCleaner::Ohm do + it "has a default_strategy of truncation" do + expect(described_class.default_strategy).to eq(:truncation) + end +end + diff --git a/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb b/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb index 3013240..1d90479 100644 --- a/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb +++ b/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb @@ -6,6 +6,10 @@ module DatabaseCleaner %w{truncation} end + def self.default_strategy + :truncation + end + module Base include ::DatabaseCleaner::Generic::Base diff --git a/adapters/database_cleaner-redis/spec/database_cleaner/redis/base_spec.rb b/adapters/database_cleaner-redis/spec/database_cleaner/redis/base_spec.rb index 69314c4..c1ecb9c 100644 --- a/adapters/database_cleaner-redis/spec/database_cleaner/redis/base_spec.rb +++ b/adapters/database_cleaner-redis/spec/database_cleaner/redis/base_spec.rb @@ -5,6 +5,10 @@ require 'database_cleaner/spec' module DatabaseCleaner RSpec.describe Redis do it { is_expected.to respond_to(:available_strategies) } + + it "has a default_strategy of truncation" do + expect(described_class.default_strategy).to eq(:truncation) + end end module Redis diff --git a/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb b/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb index 1fe091a..37a8d4a 100644 --- a/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb +++ b/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb @@ -5,6 +5,10 @@ module DatabaseCleaner %w(truncation transaction deletion) end + def self.default_strategy + :transaction + end + module Base include ::DatabaseCleaner::Generic::Base diff --git a/adapters/database_cleaner-sequel/spec/database_cleaner/sequel/base_spec.rb b/adapters/database_cleaner-sequel/spec/database_cleaner/sequel/base_spec.rb index 0ce4869..10b46b3 100644 --- a/adapters/database_cleaner-sequel/spec/database_cleaner/sequel/base_spec.rb +++ b/adapters/database_cleaner-sequel/spec/database_cleaner/sequel/base_spec.rb @@ -5,6 +5,10 @@ require 'sequel' module DatabaseCleaner RSpec.describe Sequel do it { is_expected.to respond_to(:available_strategies) } + + it "has a default_strategy of transaction" do + expect(described_class.default_strategy).to eq(:transaction) + end end module Sequel diff --git a/lib/database_cleaner/base.rb b/lib/database_cleaner/base.rb index 7241d71..9275fad 100644 --- a/lib/database_cleaner/base.rb +++ b/lib/database_cleaner/base.rb @@ -15,7 +15,7 @@ module DatabaseCleaner @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 = default_orm_strategy + self.strategy = orm_module && orm_module.default_strategy Safeguard.new.run end @@ -103,6 +103,8 @@ module DatabaseCleaner def orm_module return unless [:active_record, :data_mapper, :mongo, :mongoid, :mongo_mapper, :moped, :couch_potato, :sequel, :ohm, :redis, :neo4j].include?(orm) + $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib") + require "database_cleaner/#{orm}" DatabaseCleaner.const_get(orm.to_s.camelize) end @@ -118,19 +120,10 @@ module DatabaseCleaner end def require_orm_strategy(orm, strategy) - $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib/database_cleaner/#{orm}") + $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 - - def default_orm_strategy - case orm - when :active_record, :data_mapper, :sequel, :neo4j - :transaction - when :mongo_mapper, :mongoid, :couch_potato, :moped, :ohm, :redis - :truncation - end - end end end