database_cleaner 1.8.5 → 2.0.2

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 +19 -480
  4. data/CONTRIBUTE.markdown +0 -27
  5. data/Gemfile.lock +0 -325
  6. data/History.rdoc +0 -497
  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 -280
  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 -11
  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 -4
  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/truncation.rb +0 -64
  31. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation_mixin.rb +0 -26
  32. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo/version.rb +0 -5
  33. data/adapters/database_cleaner-mongo/lib/database_cleaner/mongo.rb +0 -10
  34. data/adapters/database_cleaner-mongo/lib/database_cleaner-mongo.rb +0 -1
  35. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/base.rb +0 -24
  36. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/truncation.rb +0 -35
  37. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper/version.rb +0 -5
  38. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner/mongo_mapper.rb +0 -4
  39. data/adapters/database_cleaner-mongo_mapper/lib/database_cleaner-mongo_mapper.rb +0 -1
  40. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/base.rb +0 -20
  41. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongo1_truncation_mixin.rb +0 -26
  42. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongo2_truncation_mixin.rb +0 -38
  43. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/mongoid_truncation_mixin.rb +0 -65
  44. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/truncation.rb +0 -49
  45. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid/version.rb +0 -5
  46. data/adapters/database_cleaner-mongoid/lib/database_cleaner/mongoid.rb +0 -10
  47. data/adapters/database_cleaner-mongoid/lib/database_cleaner-mongoid.rb +0 -1
  48. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/base.rb +0 -39
  49. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/truncation.rb +0 -9
  50. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/truncation_base.rb +0 -44
  51. data/adapters/database_cleaner-moped/lib/database_cleaner/moped/version.rb +0 -5
  52. data/adapters/database_cleaner-moped/lib/database_cleaner/moped.rb +0 -10
  53. data/adapters/database_cleaner-moped/lib/database_cleaner-moped.rb +0 -1
  54. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/base.rb +0 -66
  55. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/deletion.rb +0 -16
  56. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/transaction.rb +0 -35
  57. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/truncation.rb +0 -9
  58. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j/version.rb +0 -5
  59. data/adapters/database_cleaner-neo4j/lib/database_cleaner/neo4j.rb +0 -6
  60. data/adapters/database_cleaner-neo4j/lib/database_cleaner-neo4j.rb +0 -1
  61. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm/truncation.rb +0 -24
  62. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm/version.rb +0 -5
  63. data/adapters/database_cleaner-ohm/lib/database_cleaner/ohm.rb +0 -12
  64. data/adapters/database_cleaner-ohm/lib/database_cleaner-ohm.rb +0 -1
  65. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/base.rb +0 -41
  66. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/truncation.rb +0 -26
  67. data/adapters/database_cleaner-redis/lib/database_cleaner/redis/version.rb +0 -5
  68. data/adapters/database_cleaner-redis/lib/database_cleaner/redis.rb +0 -4
  69. data/adapters/database_cleaner-redis/lib/database_cleaner-redis.rb +0 -1
  70. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/base.rb +0 -26
  71. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/deletion.rb +0 -47
  72. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/transaction.rb +0 -40
  73. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/truncation.rb +0 -79
  74. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel/version.rb +0 -5
  75. data/adapters/database_cleaner-sequel/lib/database_cleaner/sequel.rb +0 -6
  76. data/adapters/database_cleaner-sequel/lib/database_cleaner-sequel.rb +0 -1
  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 -41
  87. data/lib/database_cleaner/safeguard.rb +0 -107
  88. data/lib/database_cleaner/spec/database_helper.rb +0 -82
  89. data/lib/database_cleaner/spec/shared_examples.rb +0 -15
  90. data/lib/database_cleaner/spec.rb +0 -2
  91. data/lib/database_cleaner/version.rb +0 -3
@@ -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,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,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,4 +0,0 @@
1
- require "database_cleaner/redis/version"
2
- require "database_cleaner"
3
- require "database_cleaner/redis/truncation"
4
-
@@ -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.8.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,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
@@ -1,135 +0,0 @@
1
- require 'database_cleaner/base'
2
- require 'database_cleaner/deprecation'
3
- require 'forwardable'
4
-
5
- module DatabaseCleaner
6
-
7
- class NoORMDetected < StandardError; end
8
- class UnknownStrategySpecified < ArgumentError; end
9
-
10
- class Cleaners < Hash
11
- # FIXME this method conflates creation with lookup... both a command and a query. yuck.
12
- def [](orm, opts = {})
13
- raise NoORMDetected unless orm
14
- fetch([orm, opts]) { add_cleaner(orm, opts) }
15
- end
16
-
17
- def strategy=(strategy)
18
- add_cleaner(:autodetect) if none?
19
- values.each { |cleaner| cleaner.strategy = strategy }
20
- remove_duplicates
21
- end
22
-
23
- def orm=(orm)
24
- add_cleaner(:autodetect) if none?
25
- values.each { |cleaner| cleaner.orm = orm }
26
- remove_duplicates
27
- end
28
-
29
- # TODO privatize the following methods in 2.0
30
-
31
- def add_cleaner(orm, opts = {})
32
- self[[orm, opts]] = ::DatabaseCleaner::Base.new(orm, opts)
33
- end
34
-
35
- def remove_duplicates
36
- replace(reduce(Cleaners.new) do |cleaners, (key, value)|
37
- cleaners[key] = value unless cleaners.values.include?(value)
38
- cleaners
39
- end)
40
- end
41
- end
42
-
43
- class Configuration
44
- def initialize
45
- @cleaners ||= Cleaners.new
46
- end
47
-
48
- extend Forwardable
49
- delegate [
50
- :[],
51
- :strategy=,
52
- :orm=,
53
- ] => :cleaners
54
-
55
- attr_accessor :cleaners
56
-
57
- def app_root
58
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.app_root` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner::ActiveRecord.config_file_location`, instead."
59
- @app_root ||= Dir.pwd
60
- end
61
-
62
- def app_root= value
63
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.app_root=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner::ActiveRecord.config_file_location=`, instead."
64
- @app_root = value
65
- end
66
-
67
- def logger
68
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.logger` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
69
- @logger ||= Logger.new(STDOUT).tap { |l| l.level = Logger::ERROR }
70
- end
71
-
72
- def logger= value
73
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.logger=` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
74
- @logger = value
75
- end
76
-
77
- def start
78
- connections.each { |connection| connection.start }
79
- end
80
-
81
- def clean
82
- connections.each { |connection| connection.clean }
83
- end
84
-
85
- def cleaning(&inner_block)
86
- connections.inject(inner_block) do |curr_block, connection|
87
- proc { connection.cleaning(&curr_block) }
88
- end.call
89
- end
90
-
91
- def clean_with(*args)
92
- connections.each { |connection| connection.clean_with(*args) }
93
- end
94
-
95
- # TODO remove the following methods in 2.0
96
-
97
- def clean!
98
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.clean`, instead."
99
- clean
100
- end
101
-
102
- def clean_with!(*args)
103
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.clean_with`, instead."
104
- clean_with(*args)
105
- end
106
-
107
- def init_cleaners
108
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.init_cleaners` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
109
- end
110
-
111
- def connections
112
- if DatabaseCleaner.called_externally?(__FILE__, caller)
113
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.connections` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.cleaners`, instead."
114
- end
115
- add_cleaner(:autodetect) if @cleaners.none?
116
- @cleaners.values
117
- end
118
-
119
- # TODO privatize the following methods in 2.0
120
-
121
- def add_cleaner(orm, opts = {})
122
- if DatabaseCleaner.called_externally?(__FILE__, caller)
123
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.add_cleaner` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.[]`, instead."
124
- end
125
- @cleaners.add_cleaner(orm, opts = {})
126
- end
127
-
128
- def remove_duplicates
129
- if DatabaseCleaner.called_externally?(__FILE__, caller)
130
- DatabaseCleaner.deprecate "Calling `DatabaseCleaner.remove_duplicates` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
131
- end
132
- @cleaners.remove_duplicates
133
- end
134
- end
135
- end
@@ -1,3 +0,0 @@
1
- Around do |scenario, block|
2
- DatabaseCleaner.cleaning(&block)
3
- end
@@ -1,26 +0,0 @@
1
- module DatabaseCleaner
2
- def deprecate message
3
- method = caller.first[/\d+:in `(.*)'$/, 1].to_sym
4
- @@deprecator ||= Deprecator.new
5
- @@deprecator.deprecate method, message
6
- end
7
- module_function :deprecate
8
-
9
- def called_externally?(file, caller)
10
- file != caller.first[/^(.+\.rb):\d+/, 1]
11
- end
12
- module_function :called_externally?
13
-
14
- class Deprecator
15
- def initialize
16
- @methods_already_warned = {}
17
- end
18
-
19
- def deprecate method, message
20
- return if @methods_already_warned.key?(method)
21
- $stderr.puts message
22
- @methods_already_warned[method] = true
23
- end
24
- end
25
- end
26
-