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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/lib/database_cleaner.rb +1 -47
  3. metadata +12 -482
  4. data/CONTRIBUTE.markdown +0 -27
  5. data/Gemfile.lock +0 -324
  6. data/History.rdoc +0 -514
  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/base.rb +0 -101
  12. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/deletion.rb +0 -108
  13. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/transaction.rb +0 -59
  14. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/truncation.rb +0 -288
  15. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record/version.rb +0 -5
  16. data/adapters/database_cleaner-active_record/lib/database_cleaner/active_record.rb +0 -6
  17. data/adapters/database_cleaner-active_record/lib/database_cleaner-active_record.rb +0 -1
  18. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/base.rb +0 -7
  19. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/truncation.rb +0 -28
  20. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato/version.rb +0 -5
  21. data/adapters/database_cleaner-couch_potato/lib/database_cleaner/couch_potato.rb +0 -13
  22. data/adapters/database_cleaner-couch_potato/lib/database_cleaner-couch_potato.rb +0 -1
  23. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/base.rb +0 -25
  24. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/transaction.rb +0 -28
  25. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/truncation.rb +0 -173
  26. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper/version.rb +0 -5
  27. data/adapters/database_cleaner-data_mapper/lib/database_cleaner/data_mapper.rb +0 -6
  28. data/adapters/database_cleaner-data_mapper/lib/database_cleaner-data_mapper.rb +0 -1
  29. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/base.rb +0 -16
  30. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/deletion.rb +0 -8
  31. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb +0 -74
  32. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation_mixin.rb +0 -26
  33. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/version.rb +0 -5
  34. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb +0 -11
  35. data/adapters/database_cleaner-mongo/lib/database_cleaner-mongo.rb +0 -1
  36. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb +0 -24
  37. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/truncation.rb +0 -35
  38. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/version.rb +0 -5
  39. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper.rb +0 -5
  40. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner-mongo_mapper.rb +0 -1
  41. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/base.rb +0 -20
  42. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/deletion.rb +0 -10
  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-mongoid/lib/database_cleaner/mongoid.rb +0 -11
  49. data/adapters/database_cleaner-mongoid/lib/database_cleaner-mongoid.rb +0 -1
  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-moped/lib/database_cleaner/moped.rb +0 -12
  55. data/adapters/database_cleaner-moped/lib/database_cleaner-moped.rb +0 -1
  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-neo4j/lib/database_cleaner/neo4j.rb +0 -7
  62. data/adapters/database_cleaner-neo4j/lib/database_cleaner-neo4j.rb +0 -1
  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-ohm/lib/database_cleaner/ohm.rb +0 -12
  66. data/adapters/database_cleaner-ohm/lib/database_cleaner-ohm.rb +0 -1
  67. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb +0 -45
  68. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/deletion.rb +0 -9
  69. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/truncation.rb +0 -26
  70. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/version.rb +0 -5
  71. data/adapters/database_cleaner-redis/lib/database_cleaner/redis.rb +0 -5
  72. data/adapters/database_cleaner-redis/lib/database_cleaner-redis.rb +0 -1
  73. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb +0 -26
  74. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/deletion.rb +0 -47
  75. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/transaction.rb +0 -40
  76. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/truncation.rb +0 -79
  77. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/version.rb +0 -5
  78. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel.rb +0 -6
  79. data/adapters/database_cleaner-sequel/lib/database_cleaner-sequel.rb +0 -1
  80. data/cucumber.yml +0 -1
  81. data/lib/database_cleaner/base.rb +0 -169
  82. data/lib/database_cleaner/configuration.rb +0 -136
  83. data/lib/database_cleaner/cucumber.rb +0 -3
  84. data/lib/database_cleaner/deprecation.rb +0 -26
  85. data/lib/database_cleaner/generic/base.rb +0 -29
  86. data/lib/database_cleaner/generic/transaction.rb +0 -11
  87. data/lib/database_cleaner/generic/truncation.rb +0 -40
  88. data/lib/database_cleaner/null_strategy.rb +0 -20
  89. data/lib/database_cleaner/orm_autodetector.rb +0 -41
  90. data/lib/database_cleaner/safeguard.rb +0 -107
  91. data/lib/database_cleaner/spec/database_helper.rb +0 -82
  92. data/lib/database_cleaner/spec/shared_examples.rb +0 -15
  93. data/lib/database_cleaner/spec.rb +0 -2
  94. 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,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.99.0"
4
- end
5
- 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,5 +0,0 @@
1
- module DatabaseCleaner
2
- module Ohm
3
- VERSION = "1.99.0"
4
- end
5
- 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,9 +0,0 @@
1
- require 'database_cleaner/redis/truncation'
2
-
3
- module DatabaseCleaner
4
- module Redis
5
- class Deletion < Truncation
6
- end
7
- end
8
- end
9
-
@@ -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,5 +0,0 @@
1
- module DatabaseCleaner
2
- module Redis
3
- VERSION = "1.99.0"
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- require "database_cleaner/redis/version"
2
- require "database_cleaner"
3
- require "database_cleaner/redis/truncation"
4
- require "database_cleaner/redis/deletion"
5
-
@@ -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,5 +0,0 @@
1
- module DatabaseCleaner
2
- module Sequel
3
- VERSION = "1.99.0"
4
- end
5
- end
@@ -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 +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