database_cleaner 1.7.0 → 1.8.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTE.markdown +1 -2
  3. data/Gemfile.lock +130 -91
  4. data/History.rdoc +1 -1
  5. data/README.markdown +71 -226
  6. data/Rakefile +12 -8
  7. data/adapters/database_cleaner-active_record/lib/database_cleaner-active_record.rb +1 -0
  8. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record.rb +6 -0
  9. data/{lib → adapters/database_cleaner-active_record/lib}/database_cleaner/active_record/base.rb +13 -4
  10. data/{lib → adapters/database_cleaner-active_record/lib}/database_cleaner/active_record/deletion.rb +19 -19
  11. data/{lib → adapters/database_cleaner-active_record/lib}/database_cleaner/active_record/transaction.rb +0 -0
  12. data/{lib → adapters/database_cleaner-active_record/lib}/database_cleaner/active_record/truncation.rb +22 -19
  13. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/version.rb +5 -0
  14. data/adapters/database_cleaner-couch_potato/lib/database_cleaner-couch_potato.rb +1 -0
  15. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb +11 -0
  16. data/{lib → adapters/database_cleaner-couch_potato/lib}/database_cleaner/couch_potato/base.rb +0 -0
  17. data/{lib → adapters/database_cleaner-couch_potato/lib}/database_cleaner/couch_potato/truncation.rb +0 -0
  18. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/version.rb +5 -0
  19. data/adapters/database_cleaner-data_mapper/lib/database_cleaner-data_mapper.rb +1 -0
  20. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper.rb +4 -0
  21. data/{lib → adapters/database_cleaner-data_mapper/lib}/database_cleaner/data_mapper/base.rb +4 -0
  22. data/{lib → adapters/database_cleaner-data_mapper/lib}/database_cleaner/data_mapper/transaction.rb +0 -0
  23. data/{lib → adapters/database_cleaner-data_mapper/lib}/database_cleaner/data_mapper/truncation.rb +4 -3
  24. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/version.rb +5 -0
  25. data/adapters/database_cleaner-mongo/lib/database_cleaner-mongo.rb +1 -0
  26. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb +10 -0
  27. data/{lib → adapters/database_cleaner-mongo/lib}/database_cleaner/mongo/base.rb +0 -0
  28. data/{lib → adapters/database_cleaner-mongo/lib}/database_cleaner/mongo/truncation.rb +0 -0
  29. data/{lib → adapters/database_cleaner-mongo/lib}/database_cleaner/mongo/truncation_mixin.rb +0 -0
  30. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/version.rb +5 -0
  31. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner-mongo_mapper.rb +1 -0
  32. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper.rb +4 -0
  33. data/{lib → adapters/database_cleaner-mongo_mapper/lib}/database_cleaner/mongo_mapper/base.rb +4 -0
  34. data/{lib → adapters/database_cleaner-mongo_mapper/lib}/database_cleaner/mongo_mapper/truncation.rb +0 -0
  35. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/version.rb +5 -0
  36. data/adapters/database_cleaner-mongoid/lib/database_cleaner-mongoid.rb +1 -0
  37. data/{lib → adapters/database_cleaner-mongoid/lib}/database_cleaner/mongo2/truncation_mixin.rb +0 -0
  38. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb +10 -0
  39. data/{lib → adapters/database_cleaner-mongoid/lib}/database_cleaner/mongoid/base.rb +0 -0
  40. data/{lib → adapters/database_cleaner-mongoid/lib}/database_cleaner/mongoid/truncation.rb +0 -0
  41. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/version.rb +5 -0
  42. data/adapters/database_cleaner-moped/lib/database_cleaner-moped.rb +1 -0
  43. data/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb +10 -0
  44. data/{lib → adapters/database_cleaner-moped/lib}/database_cleaner/moped/base.rb +1 -1
  45. data/{lib → adapters/database_cleaner-moped/lib}/database_cleaner/moped/truncation.rb +0 -0
  46. data/{lib → adapters/database_cleaner-moped/lib}/database_cleaner/moped/truncation_base.rb +4 -0
  47. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/version.rb +5 -0
  48. data/adapters/database_cleaner-neo4j/lib/database_cleaner-neo4j.rb +1 -0
  49. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j.rb +6 -0
  50. data/{lib → adapters/database_cleaner-neo4j/lib}/database_cleaner/neo4j/base.rb +4 -0
  51. data/{lib → adapters/database_cleaner-neo4j/lib}/database_cleaner/neo4j/deletion.rb +0 -0
  52. data/{lib → adapters/database_cleaner-neo4j/lib}/database_cleaner/neo4j/transaction.rb +0 -0
  53. data/{lib → adapters/database_cleaner-neo4j/lib}/database_cleaner/neo4j/truncation.rb +0 -0
  54. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/version.rb +5 -0
  55. data/adapters/database_cleaner-ohm/lib/database_cleaner-ohm.rb +1 -0
  56. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb +10 -0
  57. data/{lib → adapters/database_cleaner-ohm/lib}/database_cleaner/ohm/truncation.rb +4 -0
  58. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm/version.rb +5 -0
  59. data/adapters/database_cleaner-redis/lib/database_cleaner-redis.rb +1 -0
  60. data/adapters/database_cleaner-redis/lib/database_cleaner/redis.rb +4 -0
  61. data/{lib → adapters/database_cleaner-redis/lib}/database_cleaner/redis/base.rb +4 -0
  62. data/{lib → adapters/database_cleaner-redis/lib}/database_cleaner/redis/truncation.rb +0 -0
  63. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/version.rb +5 -0
  64. data/adapters/database_cleaner-sequel/lib/database_cleaner-sequel.rb +1 -0
  65. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel.rb +6 -0
  66. data/{lib → adapters/database_cleaner-sequel/lib}/database_cleaner/sequel/base.rb +4 -0
  67. data/{lib → adapters/database_cleaner-sequel/lib}/database_cleaner/sequel/deletion.rb +0 -0
  68. data/{lib → adapters/database_cleaner-sequel/lib}/database_cleaner/sequel/transaction.rb +0 -0
  69. data/{lib → adapters/database_cleaner-sequel/lib}/database_cleaner/sequel/truncation.rb +16 -15
  70. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/version.rb +5 -0
  71. data/lib/database_cleaner.rb +36 -1
  72. data/lib/database_cleaner/base.rb +85 -103
  73. data/lib/database_cleaner/configuration.rb +93 -83
  74. data/lib/database_cleaner/deprecation.rb +21 -0
  75. data/lib/database_cleaner/null_strategy.rb +6 -6
  76. data/lib/database_cleaner/orm_autodetector.rb +31 -0
  77. data/lib/database_cleaner/safeguard.rb +38 -3
  78. data/lib/database_cleaner/spec.rb +2 -0
  79. data/lib/database_cleaner/spec/database_helper.rb +82 -0
  80. data/lib/database_cleaner/spec/shared_examples.rb +15 -0
  81. data/lib/database_cleaner/version.rb +3 -0
  82. metadata +111 -46
  83. data/VERSION.yml +0 -4
  84. data/lib/database_cleaner/mongo2/base.rb +0 -16
@@ -0,0 +1,5 @@
1
+ module DatabaseCleaner
2
+ module Moped
3
+ VERSION = "1.8.0.beta"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require "database_cleaner/neo4j"
@@ -0,0 +1,6 @@
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
+
@@ -5,6 +5,10 @@ module DatabaseCleaner
5
5
  %w[transaction truncation deletion]
6
6
  end
7
7
 
8
+ def self.default_strategy
9
+ :transaction
10
+ end
11
+
8
12
  module Base
9
13
  include ::DatabaseCleaner::Generic::Base
10
14
 
@@ -0,0 +1,5 @@
1
+ module DatabaseCleaner
2
+ module Neo4j
3
+ VERSION = "1.8.0.beta"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require "database_cleaner/ohm"
@@ -0,0 +1,10 @@
1
+ require "database_cleaner/ohm/version"
2
+ require "database_cleaner"
3
+ require "database_cleaner/ohm/truncation"
4
+
5
+ module DatabaseCleaner::Ohm
6
+ def self.default_strategy
7
+ :truncation
8
+ end
9
+ end
10
+
@@ -2,6 +2,10 @@ require 'database_cleaner/redis/truncation'
2
2
 
3
3
  module DatabaseCleaner
4
4
  module Ohm
5
+ def self.available_strategies
6
+ %w(truncation)
7
+ end
8
+
5
9
  class Truncation < ::DatabaseCleaner::Redis::Truncation
6
10
 
7
11
  private
@@ -0,0 +1,5 @@
1
+ module DatabaseCleaner
2
+ module Ohm
3
+ VERSION = "1.8.0.beta"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require "database_cleaner/redis"
@@ -0,0 +1,4 @@
1
+ require "database_cleaner/redis/version"
2
+ require "database_cleaner"
3
+ require "database_cleaner/redis/truncation"
4
+
@@ -6,6 +6,10 @@ module DatabaseCleaner
6
6
  %w{truncation}
7
7
  end
8
8
 
9
+ def self.default_strategy
10
+ :truncation
11
+ end
12
+
9
13
  module Base
10
14
  include ::DatabaseCleaner::Generic::Base
11
15
 
@@ -0,0 +1,5 @@
1
+ module DatabaseCleaner
2
+ module Redis
3
+ VERSION = "1.8.0.beta"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require "database_cleaner/sequel"
@@ -0,0 +1,6 @@
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
+
@@ -5,6 +5,10 @@ module DatabaseCleaner
5
5
  %w(truncation transaction deletion)
6
6
  end
7
7
 
8
+ def self.default_strategy
9
+ :transaction
10
+ end
11
+
8
12
  module Base
9
13
  include ::DatabaseCleaner::Generic::Base
10
14
 
@@ -14,39 +14,40 @@ module DatabaseCleaner
14
14
  def clean
15
15
  return unless dirty?
16
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
+
17
24
  case db.database_type
18
25
  when :postgres
19
26
  # PostgreSQL requires all tables with FKs to be truncates in the same command, or have the CASCADE keyword
20
27
  # appended. Bulk truncation without CASCADE is:
21
28
  # * Safer. Tables outside of tables_to_truncate won't be affected.
22
29
  # * Faster. Less roundtrips to the db.
23
- unless (tables = tables_to_truncate(db)).empty?
24
- all_tables = tables.map { |t| %("#{t}") }.join(',')
25
- db.run "TRUNCATE TABLE #{all_tables};"
30
+ unless tables.empty?
31
+ tables_sql = tables.map { |t| %("#{t}") }.join(',')
32
+ db.run "TRUNCATE TABLE #{tables_sql} RESTART IDENTITY;"
26
33
  end
27
34
  else
28
- tables = tables_to_truncate(db)
29
-
30
- if pre_count?
31
- # Count rows before truncating
32
- pre_count_truncate_tables(db, tables)
33
- else
34
- # Truncate each table normally
35
- truncate_tables(db, tables)
36
- end
35
+ truncate_tables(db, tables)
37
36
  end
38
37
  end
39
38
 
40
39
  private
41
40
 
42
- def pre_count_truncate_tables(db, tables)
43
- tables = tables.reject { |table| db[table.to_sym].count == 0 }
44
- truncate_tables(db, tables)
41
+ def pre_count_tables tables
42
+ tables.reject { |table| db[table.to_sym].count == 0 }
45
43
  end
46
44
 
47
45
  def truncate_tables(db, tables)
48
46
  tables.each do |table|
49
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
50
51
  end
51
52
  end
52
53
 
@@ -0,0 +1,5 @@
1
+ module DatabaseCleaner
2
+ module Sequel
3
+ VERSION = "1.8.0.beta"
4
+ end
5
+ end
@@ -1,12 +1,47 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
2
+ require 'database_cleaner/version'
2
3
  require 'database_cleaner/configuration'
4
+ require 'database_cleaner/deprecation'
5
+ require 'forwardable'
3
6
 
4
7
  module DatabaseCleaner
5
8
  class << self
6
- attr_accessor :allow_remote_database_url, :allow_production
9
+ extend Forwardable
10
+ delegate [
11
+ :[],
12
+ :app_root=,
13
+ :app_root,
14
+ :logger=,
15
+ :logger,
16
+ :cleaners,
17
+ :cleaners=,
18
+ :strategy=,
19
+ :orm=,
20
+ :start,
21
+ :clean,
22
+ :clean_with,
23
+ :cleaning,
24
+
25
+ # TODO remove in 2.0
26
+ :clean!,
27
+ :clean_with!,
28
+ :init_cleaners,
29
+ :add_cleaner,
30
+ :connections,
31
+ :remove_duplicates,
32
+ ] => :configuration
33
+
34
+ attr_accessor :allow_remote_database_url, :allow_production, :url_whitelist
7
35
 
8
36
  def can_detect_orm?
37
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner.can_detect_orm?` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
9
38
  DatabaseCleaner::Base.autodetect_orm
10
39
  end
40
+
41
+ private
42
+
43
+ def configuration
44
+ @configuration ||= Configuration.new
45
+ end
11
46
  end
12
47
  end
@@ -1,166 +1,148 @@
1
+ require 'database_cleaner/deprecation'
1
2
  require 'database_cleaner/null_strategy'
2
3
  require 'database_cleaner/safeguard'
4
+ require 'database_cleaner/orm_autodetector'
5
+ require 'active_support/core_ext/string/inflections'
6
+ require 'forwardable'
7
+
3
8
  module DatabaseCleaner
4
9
  class Base
5
10
  include Comparable
6
11
 
7
12
  def <=>(other)
8
- (self.orm <=> other.orm) == 0 ? self.db <=> other.db : self.orm <=> other.orm
13
+ [orm, db] <=> [other.orm, other.db]
9
14
  end
10
15
 
11
- def initialize(desired_orm = nil,opts = {})
12
- if [:autodetect, nil, "autodetect"].include?(desired_orm)
13
- autodetect
14
- else
15
- self.orm = desired_orm
16
- end
16
+ def initialize(desired_orm = nil, opts = {})
17
+ @orm_autodetector = ORMAutodetector.new
18
+ self.orm = desired_orm
17
19
  self.db = opts[:connection] || opts[:model] if opts.has_key?(:connection) || opts.has_key?(:model)
18
- set_default_orm_strategy
20
+ self.strategy = orm_module && orm_module.default_strategy
19
21
  Safeguard.new.run
20
22
  end
21
23
 
22
24
  def db=(desired_db)
23
- self.strategy_db = desired_db
24
- @db = desired_db
25
- end
26
-
27
- def strategy_db=(desired_db)
28
- if strategy.respond_to? :db=
29
- strategy.db = desired_db
30
- elsif desired_db!= :default
31
- raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
32
- end
25
+ @db = self.strategy_db = desired_db
33
26
  end
34
27
 
35
28
  def db
36
29
  @db ||= :default
37
30
  end
38
31
 
39
- def create_strategy(*args)
32
+ def strategy=(args)
40
33
  strategy, *strategy_args = args
41
- orm_strategy(strategy).new(*strategy_args)
42
- end
34
+ @strategy = if strategy.is_a?(Symbol)
35
+ create_strategy(*args)
36
+ elsif strategy_args.empty?
37
+ strategy
38
+ else
39
+ raise ArgumentError, "You must provide a strategy object, or a symbol for a known strategy along with initialization params."
40
+ end
43
41
 
44
- def clean_with(*args)
45
- strategy = create_strategy(*args)
46
- set_strategy_db strategy, self.db
42
+ set_strategy_db @strategy, db
43
+ end
47
44
 
48
- strategy.clean
49
- strategy
45
+ def strategy
46
+ @strategy ||= NullStrategy.new
50
47
  end
51
48
 
52
- alias clean_with! clean_with
49
+ attr_reader :orm
53
50
 
54
- def set_strategy_db(strategy, desired_db)
55
- if strategy.respond_to? :db=
56
- strategy.db = desired_db
57
- elsif desired_db != :default
58
- raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
59
- end
51
+ def orm=(desired_orm)
52
+ @orm = (desired_orm || :autodetect).to_sym
53
+ @orm = @orm_autodetector.orm if @orm == :autodetect
60
54
  end
61
55
 
62
- def strategy=(args)
63
- strategy, *strategy_args = args
64
- if strategy.is_a?(Symbol)
65
- @strategy = create_strategy(*args)
66
- elsif strategy_args.empty?
67
- @strategy = strategy
68
- else
69
- raise ArgumentError, "You must provide a strategy object, or a symbol for a known strategy along with initialization params."
70
- end
56
+ extend Forwardable
57
+ delegate [:start, :clean, :cleaning] => :strategy
71
58
 
72
- set_strategy_db @strategy, self.db
73
-
74
- @strategy
59
+ def clean_with(*args)
60
+ strategy = create_strategy(*args)
61
+ set_strategy_db strategy, db
62
+ strategy.clean
63
+ strategy
75
64
  end
76
65
 
77
- def strategy
78
- @strategy ||= NullStrategy
79
- end
66
+ # TODO remove the following methods in 2.0
80
67
 
81
- def orm=(desired_orm)
82
- @orm = desired_orm.to_sym
68
+ def auto_detected?
69
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].auto_detected?` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
70
+ @orm_autodetector.autodetected?
83
71
  end
84
72
 
85
- def orm
86
- @orm || autodetect
73
+ def autodetect_orm
74
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].autodetect_orm` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
75
+ @orm_autodetector.orm
87
76
  end
88
77
 
89
- def start
90
- strategy.start
78
+ def clean!
79
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean instead."
80
+ clean
91
81
  end
92
82
 
93
- def clean
94
- strategy.clean
83
+ def clean_with!
84
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean_with instead."
85
+ clean_with
95
86
  end
96
87
 
97
- alias clean! clean
88
+ # TODO privatize the following methods in 2.0
98
89
 
99
- def cleaning(&block)
100
- strategy.cleaning(&block)
90
+ def strategy_db=(desired_db)
91
+ if called_externally?(caller)
92
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
93
+ end
94
+ set_strategy_db(strategy, desired_db)
101
95
  end
102
96
 
103
- def auto_detected?
104
- !!@autodetected
97
+ def set_strategy_db(strategy, desired_db)
98
+ if called_externally?(caller)
99
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].set_strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
100
+ end
101
+ if strategy.respond_to? :db=
102
+ strategy.db = desired_db
103
+ elsif desired_db != :default
104
+ raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
105
+ end
105
106
  end
106
107
 
107
- def autodetect_orm
108
- if defined? ::ActiveRecord
109
- :active_record
110
- elsif defined? ::DataMapper
111
- :data_mapper
112
- elsif defined? ::MongoMapper
113
- :mongo_mapper
114
- elsif defined? ::Mongoid
115
- :mongoid
116
- elsif defined? ::CouchPotato
117
- :couch_potato
118
- elsif defined? ::Sequel
119
- :sequel
120
- elsif defined? ::Moped
121
- :moped
122
- elsif defined? ::Ohm
123
- :ohm
124
- elsif defined? ::Redis
125
- :redis
126
- elsif defined? ::Neo4j
127
- :neo4j
108
+ def create_strategy(*args)
109
+ if called_externally?(caller)
110
+ DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].create_strategy` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].strategy=` instead."
128
111
  end
112
+ strategy, *strategy_args = args
113
+ orm_strategy(strategy).new(*strategy_args)
129
114
  end
130
115
 
131
116
  private
132
117
 
133
118
  def orm_module
134
- ::DatabaseCleaner.orm_module(orm)
119
+ return unless [:active_record, :data_mapper, :mongo, :mongoid, :mongo_mapper, :moped, :couch_potato, :sequel, :ohm, :redis, :neo4j].include?(orm)
120
+ $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
121
+ require "database_cleaner/#{orm}"
122
+ DatabaseCleaner.const_get(orm.to_s.camelize)
135
123
  end
136
124
 
137
125
  def orm_strategy(strategy)
138
- require "database_cleaner/#{orm.to_s}/#{strategy.to_s}"
139
126
  orm_module.const_get(strategy.to_s.capitalize)
140
- rescue LoadError
141
- if orm_module.respond_to? :available_strategies
142
- raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM! Available strategies: #{orm_module.available_strategies.join(', ')}"
143
- else
144
- raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM!"
127
+ rescue NameError
128
+ if orm != :active_record
129
+ DatabaseCleaner.deprecate <<-TEXT
130
+ 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.
131
+ TEXT
145
132
  end
133
+ require_orm_strategy(orm, strategy)
134
+ retry
146
135
  end
147
136
 
148
- def autodetect
149
- @autodetected = true
150
-
151
- @orm ||= autodetect_orm ||
152
- raise(NoORMDetected, "No known ORM was detected! Is ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, Moped, or CouchPotato, Redis or Ohm loaded?")
137
+ def require_orm_strategy(orm, strategy)
138
+ $LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../../adapters/database_cleaner-#{orm}/lib")
139
+ require "database_cleaner/#{orm}/#{strategy}"
140
+ rescue LoadError
141
+ raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM! Available strategies: #{orm_module.available_strategies.join(', ')}"
153
142
  end
154
143
 
155
- def set_default_orm_strategy
156
- case orm
157
- when :active_record, :data_mapper, :sequel
158
- self.strategy = :transaction
159
- when :mongo_mapper, :mongoid, :couch_potato, :moped, :ohm, :redis
160
- self.strategy = :truncation
161
- when :neo4j
162
- self.strategy = :transaction
163
- end
144
+ def called_externally?(caller)
145
+ __FILE__ != caller.first.split(":").first
164
146
  end
165
147
  end
166
148
  end