database_cleaner 1.8.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/lib/database_cleaner.rb +1 -47
  3. metadata +12 -479
  4. data/CONTRIBUTE.markdown +0 -27
  5. data/Gemfile.lock +0 -325
  6. data/History.rdoc +0 -492
  7. data/LICENSE +0 -20
  8. data/README.markdown +0 -389
  9. data/Rakefile +0 -44
  10. data/TODO +0 -3
  11. data/adapters/database_cleaner-active_record/lib/database_cleaner-active_record.rb +0 -1
  12. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record.rb +0 -6
  13. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/base.rb +0 -101
  14. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/deletion.rb +0 -108
  15. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/transaction.rb +0 -59
  16. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/truncation.rb +0 -280
  17. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/version.rb +0 -5
  18. data/adapters/database_cleaner-couch_potato/lib/database_cleaner-couch_potato.rb +0 -1
  19. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb +0 -11
  20. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/base.rb +0 -7
  21. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/truncation.rb +0 -28
  22. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/version.rb +0 -5
  23. data/adapters/database_cleaner-data_mapper/lib/database_cleaner-data_mapper.rb +0 -1
  24. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper.rb +0 -4
  25. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/base.rb +0 -25
  26. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/transaction.rb +0 -28
  27. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/truncation.rb +0 -173
  28. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/version.rb +0 -5
  29. data/adapters/database_cleaner-mongo/lib/database_cleaner-mongo.rb +0 -1
  30. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb +0 -10
  31. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/base.rb +0 -16
  32. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb +0 -62
  33. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation_mixin.rb +0 -26
  34. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/version.rb +0 -5
  35. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner-mongo_mapper.rb +0 -1
  36. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper.rb +0 -4
  37. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb +0 -24
  38. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/truncation.rb +0 -35
  39. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/version.rb +0 -5
  40. data/adapters/database_cleaner-mongoid/lib/database_cleaner-mongoid.rb +0 -1
  41. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb +0 -10
  42. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/base.rb +0 -20
  43. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongo1_truncation_mixin.rb +0 -26
  44. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongo2_truncation_mixin.rb +0 -38
  45. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongoid_truncation_mixin.rb +0 -65
  46. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/truncation.rb +0 -49
  47. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/version.rb +0 -5
  48. data/adapters/database_cleaner-moped/lib/database_cleaner-moped.rb +0 -1
  49. data/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb +0 -10
  50. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/base.rb +0 -39
  51. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/truncation.rb +0 -9
  52. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/truncation_base.rb +0 -44
  53. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/version.rb +0 -5
  54. data/adapters/database_cleaner-neo4j/lib/database_cleaner-neo4j.rb +0 -1
  55. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j.rb +0 -6
  56. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/base.rb +0 -66
  57. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/deletion.rb +0 -16
  58. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/transaction.rb +0 -35
  59. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/truncation.rb +0 -9
  60. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/version.rb +0 -5
  61. data/adapters/database_cleaner-ohm/lib/database_cleaner-ohm.rb +0 -1
  62. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb +0 -12
  63. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm/truncation.rb +0 -24
  64. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm/version.rb +0 -5
  65. data/adapters/database_cleaner-redis/lib/database_cleaner-redis.rb +0 -1
  66. data/adapters/database_cleaner-redis/lib/database_cleaner/redis.rb +0 -4
  67. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb +0 -41
  68. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/truncation.rb +0 -26
  69. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/version.rb +0 -5
  70. data/adapters/database_cleaner-sequel/lib/database_cleaner-sequel.rb +0 -1
  71. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel.rb +0 -6
  72. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb +0 -26
  73. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/deletion.rb +0 -47
  74. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/transaction.rb +0 -40
  75. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/truncation.rb +0 -79
  76. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/version.rb +0 -5
  77. data/cucumber.yml +0 -1
  78. data/lib/database_cleaner/base.rb +0 -153
  79. data/lib/database_cleaner/configuration.rb +0 -135
  80. data/lib/database_cleaner/cucumber.rb +0 -3
  81. data/lib/database_cleaner/deprecation.rb +0 -26
  82. data/lib/database_cleaner/generic/base.rb +0 -29
  83. data/lib/database_cleaner/generic/transaction.rb +0 -11
  84. data/lib/database_cleaner/generic/truncation.rb +0 -40
  85. data/lib/database_cleaner/null_strategy.rb +0 -20
  86. data/lib/database_cleaner/orm_autodetector.rb +0 -40
  87. data/lib/database_cleaner/safeguard.rb +0 -107
  88. data/lib/database_cleaner/spec.rb +0 -2
  89. data/lib/database_cleaner/spec/database_helper.rb +0 -82
  90. data/lib/database_cleaner/spec/shared_examples.rb +0 -15
  91. data/lib/database_cleaner/version.rb +0 -3
@@ -1,16 +0,0 @@
1
- require 'database_cleaner/neo4j/base'
2
- require 'neo4j-core'
3
-
4
- module DatabaseCleaner
5
- module Neo4j
6
- class Deletion
7
- include ::DatabaseCleaner::Neo4j::Base
8
-
9
- def clean
10
- ::Neo4j::Transaction.run do
11
- session._query('MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r')
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -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,9 +0,0 @@
1
- require 'database_cleaner/neo4j/base'
2
- require 'database_cleaner/neo4j/deletion'
3
-
4
- module DatabaseCleaner
5
- module Neo4j
6
- class Truncation < DatabaseCleaner::Neo4j::Deletion
7
- end
8
- end
9
- end
@@ -1,5 +0,0 @@
1
- module DatabaseCleaner
2
- module Neo4j
3
- VERSION = "1.8.0"
4
- end
5
- end
@@ -1 +0,0 @@
1
- require "database_cleaner/ohm"
@@ -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,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,5 +0,0 @@
1
- module DatabaseCleaner
2
- module Ohm
3
- VERSION = "1.8.1"
4
- end
5
- end
@@ -1 +0,0 @@
1
- require "database_cleaner/redis"
@@ -1,4 +0,0 @@
1
- require "database_cleaner/redis/version"
2
- require "database_cleaner"
3
- require "database_cleaner/redis/truncation"
4
-
@@ -1,41 +0,0 @@
1
- require 'database_cleaner/generic/base'
2
-
3
- module DatabaseCleaner
4
- module Redis
5
- def self.available_strategies
6
- %w{truncation}
7
- end
8
-
9
- def self.default_strategy
10
- :truncation
11
- end
12
-
13
- module Base
14
- include ::DatabaseCleaner::Generic::Base
15
-
16
- def db=(desired_db)
17
- @db = desired_db
18
- end
19
-
20
- def db
21
- @db ||= :default
22
- end
23
-
24
- alias url db
25
-
26
- private
27
-
28
- def connection
29
- @connection ||= begin
30
- if url == :default
31
- ::Redis.new
32
- elsif db.is_a?(::Redis) # pass directly the connection
33
- db
34
- else
35
- ::Redis.new(:url => url)
36
- end
37
- end
38
- end
39
- end
40
- end
41
- 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 url == :default
23
- end
24
- end
25
- end
26
- end
@@ -1,5 +0,0 @@
1
- module DatabaseCleaner
2
- module Redis
3
- VERSION = "1.8.0"
4
- end
5
- end
@@ -1 +0,0 @@
1
- require "database_cleaner/sequel"
@@ -1,6 +0,0 @@
1
- require "database_cleaner/sequel/version"
2
- require "database_cleaner"
3
- require "database_cleaner/sequel/truncation"
4
- require "database_cleaner/sequel/transaction"
5
- require "database_cleaner/sequel/deletion"
6
-
@@ -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,5 +0,0 @@
1
- module DatabaseCleaner
2
- module Sequel
3
- VERSION = "1.8.0"
4
- end
5
- end
@@ -1 +0,0 @@
1
- default: features
@@ -1,153 +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
- self.db = opts[:connection] || opts[:model] if opts.has_key?(:connection) || opts.has_key?(:model)
19
- self.strategy = orm_module && orm_module.default_strategy
20
- Safeguard.new.run
21
- end
22
-
23
- def db=(desired_db)
24
- @db = self.strategy_db = desired_db
25
- end
26
-
27
- def db
28
- @db ||= :default
29
- end
30
-
31
- def strategy=(args)
32
- strategy, *strategy_args = args
33
- @strategy = if strategy.is_a?(Symbol)
34
- create_strategy(*args)
35
- elsif strategy_args.empty?
36
- strategy
37
- else
38
- raise ArgumentError, "You must provide a strategy object, or a symbol for a known strategy along with initialization params."
39
- end
40
-
41
- set_strategy_db @strategy, db
42
- end
43
-
44
- def strategy
45
- @strategy ||= NullStrategy.new
46
- end
47
-
48
- attr_reader :orm
49
-
50
- def orm=(desired_orm)
51
- @orm = (desired_orm || :autodetect).to_sym
52
- @orm = @orm_autodetector.orm if @orm == :autodetect
53
- end
54
-
55
- extend Forwardable
56
- delegate [:start, :clean, :cleaning] => :strategy
57
-
58
- def clean_with(*args)
59
- strategy = create_strategy(*args)
60
- set_strategy_db strategy, db
61
- strategy.clean
62
- strategy
63
- end
64
-
65
- # TODO remove the following methods in 2.0
66
-
67
- def auto_detected?
68
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].auto_detected?` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
69
- @orm_autodetector.autodetected?
70
- end
71
-
72
- def autodetect_orm
73
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].autodetect_orm` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
74
- @orm_autodetector.orm
75
- end
76
-
77
- def clean!
78
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean instead."
79
- clean
80
- end
81
-
82
- def clean_with!
83
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean_with instead."
84
- clean_with
85
- end
86
-
87
- # TODO privatize the following methods in 2.0
88
-
89
- def strategy_db=(desired_db)
90
- if DatabaseCleaner.called_externally?(__FILE__, caller)
91
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
92
- end
93
- set_strategy_db(strategy, desired_db)
94
- end
95
-
96
- def set_strategy_db(strategy, desired_db)
97
- if DatabaseCleaner.called_externally?(__FILE__, caller)
98
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].set_strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
99
- end
100
- if strategy.respond_to? :db=
101
- strategy.db = desired_db
102
- elsif desired_db != :default
103
- raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
104
- end
105
- end
106
-
107
- def create_strategy(*args)
108
- if DatabaseCleaner.called_externally?(__FILE__, caller)
109
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].create_strategy` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].strategy=` instead."
110
- end
111
- strategy, *strategy_args = args
112
- orm_strategy(strategy).new(*strategy_args)
113
- end
114
-
115
- private
116
-
117
- def orm_module
118
- return unless [:active_record, :data_mapper, :mongo, :mongoid, :mongo_mapper, :moped, :couch_potato, :sequel, :ohm, :redis, :neo4j].include?(orm)
119
- load_adapter(orm) if !adapter_loaded?(orm)
120
- orm_module_name = ORMAutodetector::ORMS[orm]
121
- DatabaseCleaner.const_get(orm_module_name, false)
122
- end
123
-
124
- def adapter_loaded? orm
125
- $LOADED_FEATURES.grep(%r{/lib/database_cleaner/#{orm}\.rb$}).any?
126
- end
127
-
128
- def load_adapter orm
129
- $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
130
- require "database_cleaner/#{orm}"
131
- end
132
-
133
- def orm_strategy(strategy)
134
- strategy_module_name = strategy.to_s.capitalize
135
- orm_module.const_get(strategy_module_name, false)
136
- rescue NameError
137
- if orm != :active_record
138
- DatabaseCleaner.deprecate <<-TEXT
139
- 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.
140
- TEXT
141
- end
142
- require_orm_strategy(orm, strategy)
143
- retry
144
- end
145
-
146
- def require_orm_strategy(orm, strategy)
147
- $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
148
- require "database_cleaner/#{orm}/#{strategy}"
149
- rescue LoadError
150
- raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM! Available strategies: #{orm_module.available_strategies.join(', ')}"
151
- end
152
- end
153
- end