database_cleaner 1.99.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/database_cleaner.rb +1 -47
- metadata +12 -482
- data/CONTRIBUTE.markdown +0 -27
- data/Gemfile.lock +0 -324
- data/History.rdoc +0 -514
- data/LICENSE +0 -20
- data/README.markdown +0 -389
- data/Rakefile +0 -44
- data/TODO +0 -3
- data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/base.rb +0 -101
- data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/deletion.rb +0 -108
- data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/transaction.rb +0 -59
- data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/truncation.rb +0 -288
- data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/version.rb +0 -5
- data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record.rb +0 -6
- data/adapters/database_cleaner-active_record/lib/database_cleaner-active_record.rb +0 -1
- data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/base.rb +0 -7
- data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/truncation.rb +0 -28
- data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/version.rb +0 -5
- data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb +0 -13
- data/adapters/database_cleaner-couch_potato/lib/database_cleaner-couch_potato.rb +0 -1
- data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/base.rb +0 -25
- data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/transaction.rb +0 -28
- data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/truncation.rb +0 -173
- data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/version.rb +0 -5
- data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper.rb +0 -6
- data/adapters/database_cleaner-data_mapper/lib/database_cleaner-data_mapper.rb +0 -1
- data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/base.rb +0 -16
- data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/deletion.rb +0 -8
- data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb +0 -74
- data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation_mixin.rb +0 -26
- data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/version.rb +0 -5
- data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb +0 -11
- data/adapters/database_cleaner-mongo/lib/database_cleaner-mongo.rb +0 -1
- data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb +0 -24
- data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/truncation.rb +0 -35
- data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/version.rb +0 -5
- data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper.rb +0 -5
- data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner-mongo_mapper.rb +0 -1
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/base.rb +0 -20
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/deletion.rb +0 -10
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongo1_truncation_mixin.rb +0 -26
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongo2_truncation_mixin.rb +0 -38
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongoid_truncation_mixin.rb +0 -65
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/truncation.rb +0 -49
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/version.rb +0 -5
- data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb +0 -11
- data/adapters/database_cleaner-mongoid/lib/database_cleaner-mongoid.rb +0 -1
- data/adapters/database_cleaner-moped/lib/database_cleaner/moped/base.rb +0 -39
- data/adapters/database_cleaner-moped/lib/database_cleaner/moped/truncation.rb +0 -9
- data/adapters/database_cleaner-moped/lib/database_cleaner/moped/truncation_base.rb +0 -44
- data/adapters/database_cleaner-moped/lib/database_cleaner/moped/version.rb +0 -5
- data/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb +0 -12
- data/adapters/database_cleaner-moped/lib/database_cleaner-moped.rb +0 -1
- data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/base.rb +0 -66
- data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/deletion.rb +0 -16
- data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/transaction.rb +0 -35
- data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/truncation.rb +0 -9
- data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/version.rb +0 -5
- data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j.rb +0 -7
- data/adapters/database_cleaner-neo4j/lib/database_cleaner-neo4j.rb +0 -1
- data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm/truncation.rb +0 -24
- data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm/version.rb +0 -5
- data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb +0 -12
- data/adapters/database_cleaner-ohm/lib/database_cleaner-ohm.rb +0 -1
- data/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb +0 -45
- data/adapters/database_cleaner-redis/lib/database_cleaner/redis/deletion.rb +0 -9
- data/adapters/database_cleaner-redis/lib/database_cleaner/redis/truncation.rb +0 -26
- data/adapters/database_cleaner-redis/lib/database_cleaner/redis/version.rb +0 -5
- data/adapters/database_cleaner-redis/lib/database_cleaner/redis.rb +0 -5
- data/adapters/database_cleaner-redis/lib/database_cleaner-redis.rb +0 -1
- data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb +0 -26
- data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/deletion.rb +0 -47
- data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/transaction.rb +0 -40
- data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/truncation.rb +0 -79
- data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/version.rb +0 -5
- data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel.rb +0 -6
- data/adapters/database_cleaner-sequel/lib/database_cleaner-sequel.rb +0 -1
- data/cucumber.yml +0 -1
- data/lib/database_cleaner/base.rb +0 -169
- data/lib/database_cleaner/configuration.rb +0 -136
- data/lib/database_cleaner/cucumber.rb +0 -3
- data/lib/database_cleaner/deprecation.rb +0 -26
- data/lib/database_cleaner/generic/base.rb +0 -29
- data/lib/database_cleaner/generic/transaction.rb +0 -11
- data/lib/database_cleaner/generic/truncation.rb +0 -40
- data/lib/database_cleaner/null_strategy.rb +0 -20
- data/lib/database_cleaner/orm_autodetector.rb +0 -41
- data/lib/database_cleaner/safeguard.rb +0 -107
- data/lib/database_cleaner/spec/database_helper.rb +0 -82
- data/lib/database_cleaner/spec/shared_examples.rb +0 -15
- data/lib/database_cleaner/spec.rb +0 -2
- data/lib/database_cleaner/version.rb +0 -3
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'database_cleaner/neo4j/base'
|
2
|
-
require 'database_cleaner/generic/transaction'
|
3
|
-
require 'neo4j-core'
|
4
|
-
|
5
|
-
module DatabaseCleaner
|
6
|
-
module Neo4j
|
7
|
-
class Transaction
|
8
|
-
include ::DatabaseCleaner::Generic::Transaction
|
9
|
-
include ::DatabaseCleaner::Neo4j::Base
|
10
|
-
|
11
|
-
attr_accessor :tx
|
12
|
-
|
13
|
-
def start
|
14
|
-
super
|
15
|
-
rollback
|
16
|
-
self.tx = ::Neo4j::Transaction.new
|
17
|
-
end
|
18
|
-
|
19
|
-
def clean
|
20
|
-
rollback
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def rollback
|
26
|
-
if tx
|
27
|
-
tx.failure
|
28
|
-
tx.close
|
29
|
-
end
|
30
|
-
ensure
|
31
|
-
self.tx = nil
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,7 +0,0 @@
|
|
1
|
-
require "database_cleaner/neo4j/version"
|
2
|
-
require "database_cleaner"
|
3
|
-
require "database_cleaner/neo4j/transaction"
|
4
|
-
require "database_cleaner/neo4j/truncation"
|
5
|
-
require "database_cleaner/neo4j/deletion"
|
6
|
-
|
7
|
-
DatabaseCleaner.deprecate "Due to lack of maintenance, the Neo4j adapter for DatabaseCleaner is deprecated, and will be removed in v2.0 with no replacement. Contact us if you are interested in resurrecting this adapter!"
|
@@ -1 +0,0 @@
|
|
1
|
-
require "database_cleaner/neo4j"
|
@@ -1,24 +0,0 @@
|
|
1
|
-
begin # when database_cleaner-ohm is loaded as a gem
|
2
|
-
require 'database_cleaner/redis/truncation'
|
3
|
-
rescue LoadError # when database_cleaner is loaded as a gem
|
4
|
-
$LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../../../../adapters/database_cleaner-redis/lib")
|
5
|
-
require 'database_cleaner/redis/truncation'
|
6
|
-
end
|
7
|
-
|
8
|
-
module DatabaseCleaner
|
9
|
-
module Ohm
|
10
|
-
def self.available_strategies
|
11
|
-
%w(truncation)
|
12
|
-
end
|
13
|
-
|
14
|
-
class Truncation < ::DatabaseCleaner::Redis::Truncation
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def default_redis
|
19
|
-
::Ohm.redis
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require "database_cleaner/ohm/version"
|
2
|
-
require "database_cleaner"
|
3
|
-
require "database_cleaner/ohm/truncation"
|
4
|
-
|
5
|
-
DatabaseCleaner.deprecate "The Ohm adapter for DatabaseCleaner is deprecated, and will be removed in v2.0. Please use the Redis adapter instead."
|
6
|
-
|
7
|
-
module DatabaseCleaner::Ohm
|
8
|
-
def self.default_strategy
|
9
|
-
:truncation
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
require "database_cleaner/ohm"
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'database_cleaner/generic/base'
|
2
|
-
require 'database_cleaner/deprecation'
|
3
|
-
|
4
|
-
module DatabaseCleaner
|
5
|
-
module Redis
|
6
|
-
def self.available_strategies
|
7
|
-
%w{truncation deletion}
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.default_strategy
|
11
|
-
:truncation
|
12
|
-
end
|
13
|
-
|
14
|
-
module Base
|
15
|
-
include ::DatabaseCleaner::Generic::Base
|
16
|
-
|
17
|
-
def db=(desired_db)
|
18
|
-
@db = desired_db
|
19
|
-
end
|
20
|
-
|
21
|
-
def db
|
22
|
-
@db ||= :default
|
23
|
-
end
|
24
|
-
|
25
|
-
def url
|
26
|
-
DatabaseCleaner.deprecate "The redis deletion strategy's #url method is deprecated. It will be removed in database_cleaner-redis 2.0 in favor of #db."
|
27
|
-
db
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def connection
|
33
|
-
@connection ||= begin
|
34
|
-
if url == :default
|
35
|
-
::Redis.new
|
36
|
-
elsif db.is_a?(::Redis) # pass directly the connection
|
37
|
-
db
|
38
|
-
else
|
39
|
-
::Redis.new(:url => db)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'database_cleaner/redis/base'
|
2
|
-
require 'database_cleaner/generic/truncation'
|
3
|
-
|
4
|
-
module DatabaseCleaner
|
5
|
-
module Redis
|
6
|
-
class Truncation
|
7
|
-
include ::DatabaseCleaner::Redis::Base
|
8
|
-
include ::DatabaseCleaner::Generic::Truncation
|
9
|
-
|
10
|
-
def clean
|
11
|
-
if @only
|
12
|
-
@only.each do |term|
|
13
|
-
connection.keys(term).each { |k| connection.del k }
|
14
|
-
end
|
15
|
-
elsif @tables_to_exclude
|
16
|
-
keys_except = []
|
17
|
-
@tables_to_exclude.each { |term| keys_except += connection.keys(term) }
|
18
|
-
connection.keys.each { |k| connection.del(k) unless keys_except.include?(k) }
|
19
|
-
else
|
20
|
-
connection.flushdb
|
21
|
-
end
|
22
|
-
connection.quit unless db == :default
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require "database_cleaner/redis"
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'database_cleaner/generic/base'
|
2
|
-
module DatabaseCleaner
|
3
|
-
module Sequel
|
4
|
-
def self.available_strategies
|
5
|
-
%w(truncation transaction deletion)
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.default_strategy
|
9
|
-
:transaction
|
10
|
-
end
|
11
|
-
|
12
|
-
module Base
|
13
|
-
include ::DatabaseCleaner::Generic::Base
|
14
|
-
|
15
|
-
def db=(desired_db)
|
16
|
-
@db = desired_db
|
17
|
-
end
|
18
|
-
|
19
|
-
def db
|
20
|
-
return @db if @db && @db != :default
|
21
|
-
raise "As you have more than one active sequel database you have to specify the one to use manually!" if ::Sequel::DATABASES.count > 1
|
22
|
-
::Sequel::DATABASES.first || :default
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'database_cleaner/sequel/base'
|
2
|
-
require 'database_cleaner/generic/truncation'
|
3
|
-
require 'database_cleaner/sequel/truncation'
|
4
|
-
|
5
|
-
module DatabaseCleaner::Sequel
|
6
|
-
class Deletion < Truncation
|
7
|
-
def disable_referential_integrity(tables)
|
8
|
-
case db.database_type
|
9
|
-
when :postgres
|
10
|
-
db.run('SET CONSTRAINTS ALL DEFERRED')
|
11
|
-
tables_to_truncate(db).each do |table|
|
12
|
-
db.run("ALTER TABLE \"#{table}\" DISABLE TRIGGER ALL")
|
13
|
-
end
|
14
|
-
when :mysql
|
15
|
-
old = db.fetch('SELECT @@FOREIGN_KEY_CHECKS').first[:@@FOREIGN_KEY_CHECKS]
|
16
|
-
db.run('SET FOREIGN_KEY_CHECKS = 0')
|
17
|
-
end
|
18
|
-
yield
|
19
|
-
ensure
|
20
|
-
case db.database_type
|
21
|
-
when :postgres
|
22
|
-
tables.each do |table|
|
23
|
-
db.run("ALTER TABLE \"#{table}\" ENABLE TRIGGER ALL")
|
24
|
-
end
|
25
|
-
when :mysql
|
26
|
-
db.run("SET FOREIGN_KEY_CHECKS = #{old}")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def delete_tables(db, tables)
|
31
|
-
tables.each do |table|
|
32
|
-
db[table.to_sym].delete
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def clean
|
37
|
-
return unless dirty?
|
38
|
-
|
39
|
-
tables = tables_to_truncate(db)
|
40
|
-
db.transaction do
|
41
|
-
disable_referential_integrity(tables) do
|
42
|
-
delete_tables(db, tables)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'database_cleaner/sequel/base'
|
2
|
-
module DatabaseCleaner
|
3
|
-
module Sequel
|
4
|
-
class Transaction
|
5
|
-
include ::DatabaseCleaner::Sequel::Base
|
6
|
-
|
7
|
-
def self.check_fiber_brokenness
|
8
|
-
if !@checked_fiber_brokenness && Fiber.new { Thread.current }.resume != Thread.current
|
9
|
-
raise RuntimeError, "This ruby engine's Fibers are not compatible with Sequel's connection pool. " +
|
10
|
-
"To work around this, please use DatabaseCleaner.cleaning with a block instead of " +
|
11
|
-
"DatabaseCleaner.start and DatabaseCleaner.clean"
|
12
|
-
end
|
13
|
-
@checked_fiber_brokenness = true
|
14
|
-
end
|
15
|
-
|
16
|
-
def start
|
17
|
-
self.class.check_fiber_brokenness
|
18
|
-
|
19
|
-
@fibers ||= []
|
20
|
-
db = self.db
|
21
|
-
f = Fiber.new do
|
22
|
-
db.transaction(:rollback => :always, :savepoint => true) do
|
23
|
-
Fiber.yield
|
24
|
-
end
|
25
|
-
end
|
26
|
-
f.resume
|
27
|
-
@fibers << f
|
28
|
-
end
|
29
|
-
|
30
|
-
def clean
|
31
|
-
f = @fibers.pop
|
32
|
-
f.resume
|
33
|
-
end
|
34
|
-
|
35
|
-
def cleaning
|
36
|
-
self.db.transaction(:rollback => :always, :savepoint => true) { yield }
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'database_cleaner/generic/truncation'
|
2
|
-
require 'database_cleaner/sequel/base'
|
3
|
-
|
4
|
-
module DatabaseCleaner
|
5
|
-
module Sequel
|
6
|
-
class Truncation
|
7
|
-
include ::DatabaseCleaner::Sequel::Base
|
8
|
-
include ::DatabaseCleaner::Generic::Truncation
|
9
|
-
|
10
|
-
def start
|
11
|
-
@last_txid = txid
|
12
|
-
end
|
13
|
-
|
14
|
-
def clean
|
15
|
-
return unless dirty?
|
16
|
-
|
17
|
-
tables = tables_to_truncate(db)
|
18
|
-
|
19
|
-
# Count rows before truncating
|
20
|
-
if pre_count?
|
21
|
-
tables = pre_count_tables(tables)
|
22
|
-
end
|
23
|
-
|
24
|
-
case db.database_type
|
25
|
-
when :postgres
|
26
|
-
# PostgreSQL requires all tables with FKs to be truncates in the same command, or have the CASCADE keyword
|
27
|
-
# appended. Bulk truncation without CASCADE is:
|
28
|
-
# * Safer. Tables outside of tables_to_truncate won't be affected.
|
29
|
-
# * Faster. Less roundtrips to the db.
|
30
|
-
unless tables.empty?
|
31
|
-
tables_sql = tables.map { |t| %("#{t}") }.join(',')
|
32
|
-
db.run "TRUNCATE TABLE #{tables_sql} RESTART IDENTITY;"
|
33
|
-
end
|
34
|
-
else
|
35
|
-
truncate_tables(db, tables)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def pre_count_tables tables
|
42
|
-
tables.reject { |table| db[table.to_sym].count == 0 }
|
43
|
-
end
|
44
|
-
|
45
|
-
def truncate_tables(db, tables)
|
46
|
-
tables.each do |table|
|
47
|
-
db[table.to_sym].truncate
|
48
|
-
if db.database_type == :sqlite && db.table_exists?(:sqlite_sequence)
|
49
|
-
db[:sqlite_sequence].where(name: table).delete
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def dirty?
|
55
|
-
@last_txid != txid || @last_txid.nil?
|
56
|
-
end
|
57
|
-
|
58
|
-
def txid
|
59
|
-
case db.database_type
|
60
|
-
when :postgres
|
61
|
-
db.fetch('SELECT txid_snapshot_xmax(txid_current_snapshot()) AS txid').first[:txid]
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def tables_to_truncate(db)
|
66
|
-
(@only || db.tables.map(&:to_s)) - @tables_to_exclude
|
67
|
-
end
|
68
|
-
|
69
|
-
# overwritten
|
70
|
-
def migration_storage_names
|
71
|
-
%w(schema_info schema_migrations)
|
72
|
-
end
|
73
|
-
|
74
|
-
def pre_count?
|
75
|
-
@pre_count == true
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require "database_cleaner/sequel"
|
data/cucumber.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
default: features
|
@@ -1,169 +0,0 @@
|
|
1
|
-
require 'database_cleaner/deprecation'
|
2
|
-
require 'database_cleaner/null_strategy'
|
3
|
-
require 'database_cleaner/safeguard'
|
4
|
-
require 'database_cleaner/orm_autodetector'
|
5
|
-
require 'forwardable'
|
6
|
-
|
7
|
-
module DatabaseCleaner
|
8
|
-
class Base
|
9
|
-
include Comparable
|
10
|
-
|
11
|
-
def <=>(other)
|
12
|
-
[orm, db] <=> [other.orm, other.db]
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(desired_orm = nil, opts = {})
|
16
|
-
@orm_autodetector = ORMAutodetector.new
|
17
|
-
self.orm = desired_orm
|
18
|
-
if opts.has_key?(:model)
|
19
|
-
DatabaseCleaner.deprecate "Using the `:model` key in `DatabaseCleaner[:orm, model: ...]` is deprecated, and will be removed in database_cleaner 2.0. Please use the new `:db` key, instead, which has identical behavior: `DatabaseCleaner[:orm, db: ...]`."
|
20
|
-
end
|
21
|
-
if opts.has_key?(:connection)
|
22
|
-
DatabaseCleaner.deprecate "Using the `:connection` key in `DatabaseCleaner[:orm, connection: ...]` is deprecated, and will be removed in database_cleaner 2.0. Please use the new `:db` key, instead, which has identical behavior: `DatabaseCleaner[:orm, db: ...]`."
|
23
|
-
end
|
24
|
-
self.db = opts[:db] || opts[:connection] || opts[:model] if opts.has_key?(:db) || opts.has_key?(:connection) || opts.has_key?(:model)
|
25
|
-
self.strategy = orm_module && orm_module.default_strategy
|
26
|
-
Safeguard.new.run
|
27
|
-
end
|
28
|
-
|
29
|
-
def db=(desired_db)
|
30
|
-
@db = self.strategy_db = desired_db
|
31
|
-
end
|
32
|
-
|
33
|
-
def db
|
34
|
-
@db ||= :default
|
35
|
-
end
|
36
|
-
|
37
|
-
def strategy=(args)
|
38
|
-
strategy, *strategy_args = args
|
39
|
-
|
40
|
-
if DatabaseCleaner.called_externally?(__FILE__, caller) \
|
41
|
-
&& [:redis, :mongo, :mongoid].include?(orm) \
|
42
|
-
&& strategy == :truncation
|
43
|
-
DatabaseCleaner.deprecate "The #{orm} adapter's :truncation strategy will be renamed to :deletion in database_cleaner-#{orm} 2.0. Please specify the :deletion adapter to resolve this deprecation notice."
|
44
|
-
end
|
45
|
-
|
46
|
-
@strategy = if strategy.is_a?(Symbol)
|
47
|
-
create_strategy(*args)
|
48
|
-
elsif strategy_args.empty?
|
49
|
-
strategy
|
50
|
-
else
|
51
|
-
raise ArgumentError, "You must provide a strategy object, or a symbol for a known strategy along with initialization params."
|
52
|
-
end
|
53
|
-
|
54
|
-
set_strategy_db @strategy, db
|
55
|
-
end
|
56
|
-
|
57
|
-
def strategy
|
58
|
-
@strategy ||= NullStrategy.new
|
59
|
-
end
|
60
|
-
|
61
|
-
attr_reader :orm
|
62
|
-
|
63
|
-
def orm=(desired_orm)
|
64
|
-
if DatabaseCleaner.called_externally?(__FILE__, caller)
|
65
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[:orm].orm=` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
|
66
|
-
end
|
67
|
-
@orm = (desired_orm || :autodetect).to_sym
|
68
|
-
@orm = @orm_autodetector.orm if @orm == :autodetect
|
69
|
-
end
|
70
|
-
|
71
|
-
extend Forwardable
|
72
|
-
delegate [:start, :clean, :cleaning] => :strategy
|
73
|
-
|
74
|
-
def clean_with(*args)
|
75
|
-
strategy = create_strategy(*args)
|
76
|
-
set_strategy_db strategy, db
|
77
|
-
strategy.clean
|
78
|
-
strategy
|
79
|
-
end
|
80
|
-
|
81
|
-
# TODO remove the following methods in 2.0
|
82
|
-
|
83
|
-
def auto_detected?
|
84
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].auto_detected?` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
|
85
|
-
@orm_autodetector.autodetected?
|
86
|
-
end
|
87
|
-
|
88
|
-
def autodetect_orm
|
89
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].autodetect_orm` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
|
90
|
-
@orm_autodetector.orm
|
91
|
-
end
|
92
|
-
|
93
|
-
def clean!
|
94
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean instead."
|
95
|
-
clean
|
96
|
-
end
|
97
|
-
|
98
|
-
def clean_with!
|
99
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean_with instead."
|
100
|
-
clean_with
|
101
|
-
end
|
102
|
-
|
103
|
-
# TODO privatize the following methods in 2.0
|
104
|
-
|
105
|
-
def strategy_db=(desired_db)
|
106
|
-
if DatabaseCleaner.called_externally?(__FILE__, caller)
|
107
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
|
108
|
-
end
|
109
|
-
set_strategy_db(strategy, desired_db)
|
110
|
-
end
|
111
|
-
|
112
|
-
def set_strategy_db(strategy, desired_db)
|
113
|
-
if DatabaseCleaner.called_externally?(__FILE__, caller)
|
114
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].set_strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
|
115
|
-
end
|
116
|
-
if strategy.respond_to? :db=
|
117
|
-
strategy.db = desired_db
|
118
|
-
elsif desired_db != :default
|
119
|
-
raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def create_strategy(*args)
|
124
|
-
if DatabaseCleaner.called_externally?(__FILE__, caller)
|
125
|
-
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].create_strategy` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].strategy=` instead."
|
126
|
-
end
|
127
|
-
strategy, *strategy_args = args
|
128
|
-
orm_strategy(strategy).new(*strategy_args)
|
129
|
-
end
|
130
|
-
|
131
|
-
private
|
132
|
-
|
133
|
-
def orm_module
|
134
|
-
return unless [:active_record, :data_mapper, :mongo, :mongoid, :mongo_mapper, :moped, :couch_potato, :sequel, :ohm, :redis, :neo4j].include?(orm)
|
135
|
-
load_adapter(orm) if !adapter_loaded?(orm)
|
136
|
-
orm_module_name = ORMAutodetector::ORMS[orm]
|
137
|
-
DatabaseCleaner.const_get(orm_module_name, false)
|
138
|
-
end
|
139
|
-
|
140
|
-
def adapter_loaded? orm
|
141
|
-
$LOADED_FEATURES.grep(%r{/lib/database_cleaner/#{orm}\.rb$}).any?
|
142
|
-
end
|
143
|
-
|
144
|
-
def load_adapter orm
|
145
|
-
$LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
|
146
|
-
require "database_cleaner/#{orm}"
|
147
|
-
end
|
148
|
-
|
149
|
-
def orm_strategy(strategy)
|
150
|
-
strategy_module_name = strategy.to_s.capitalize
|
151
|
-
orm_module.const_get(strategy_module_name, false)
|
152
|
-
rescue NameError
|
153
|
-
if orm != :active_record
|
154
|
-
DatabaseCleaner.deprecate <<-TEXT
|
155
|
-
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.
|
156
|
-
TEXT
|
157
|
-
end
|
158
|
-
require_orm_strategy(orm, strategy)
|
159
|
-
retry
|
160
|
-
end
|
161
|
-
|
162
|
-
def require_orm_strategy(orm, strategy)
|
163
|
-
$LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
|
164
|
-
require "database_cleaner/#{orm}/#{strategy}"
|
165
|
-
rescue LoadError
|
166
|
-
raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM! Available strategies: #{orm_module.available_strategies.join(', ')}"
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|