database_cleaner 1.6.2 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +5 -5
  2. data/lib/database_cleaner.rb +1 -8
  3. metadata +25 -499
  4. data/CONTRIBUTE.markdown +0 -28
  5. data/Gemfile.lock +0 -286
  6. data/History.rdoc +0 -430
  7. data/LICENSE +0 -20
  8. data/README.markdown +0 -518
  9. data/Rakefile +0 -40
  10. data/TODO +0 -3
  11. data/VERSION.yml +0 -4
  12. data/cucumber.yml +0 -1
  13. data/examples/Gemfile +0 -1
  14. data/examples/Gemfile.lock +0 -1
  15. data/examples/config/database.yml.example +0 -8
  16. data/examples/config/redis.yml +0 -8
  17. data/examples/db/sqlite_databases_go_here +0 -0
  18. data/examples/features/example.feature +0 -11
  19. data/examples/features/example_multiple_db.feature +0 -23
  20. data/examples/features/example_multiple_orm.feature +0 -22
  21. data/examples/features/step_definitions/activerecord_steps.rb +0 -31
  22. data/examples/features/step_definitions/couchpotato_steps.rb +0 -31
  23. data/examples/features/step_definitions/datamapper_steps.rb +0 -37
  24. data/examples/features/step_definitions/mongoid_steps.rb +0 -23
  25. data/examples/features/step_definitions/mongomapper_steps.rb +0 -31
  26. data/examples/features/step_definitions/neo4j_steps.rb +0 -23
  27. data/examples/features/step_definitions/ohm_steps.rb +0 -31
  28. data/examples/features/step_definitions/redis_steps.rb +0 -31
  29. data/examples/features/step_definitions/translation_steps.rb +0 -55
  30. data/examples/features/support/env.rb +0 -61
  31. data/examples/lib/activerecord_models.rb +0 -41
  32. data/examples/lib/couchpotato_models.rb +0 -61
  33. data/examples/lib/datamapper_models.rb +0 -50
  34. data/examples/lib/mongoid_models.rb +0 -44
  35. data/examples/lib/mongomapper_models.rb +0 -51
  36. data/examples/lib/neo4j_models.rb +0 -17
  37. data/examples/lib/ohm_models.rb +0 -43
  38. data/examples/lib/redis_models.rb +0 -65
  39. data/examples/lib/sequel_models.rb +0 -9
  40. data/features/cleaning.feature +0 -30
  41. data/features/cleaning_default_strategy.feature +0 -23
  42. data/features/cleaning_multiple_dbs.feature +0 -22
  43. data/features/cleaning_multiple_orms.feature +0 -67
  44. data/features/step_definitions/database_cleaner_steps.rb +0 -33
  45. data/features/support/env.rb +0 -4
  46. data/features/support/feature_runner.rb +0 -39
  47. data/lib/database_cleaner/active_record/base.rb +0 -92
  48. data/lib/database_cleaner/active_record/deletion.rb +0 -106
  49. data/lib/database_cleaner/active_record/transaction.rb +0 -59
  50. data/lib/database_cleaner/active_record/truncation.rb +0 -275
  51. data/lib/database_cleaner/base.rb +0 -164
  52. data/lib/database_cleaner/configuration.rb +0 -131
  53. data/lib/database_cleaner/couch_potato/base.rb +0 -7
  54. data/lib/database_cleaner/couch_potato/truncation.rb +0 -28
  55. data/lib/database_cleaner/cucumber.rb +0 -3
  56. data/lib/database_cleaner/data_mapper/base.rb +0 -21
  57. data/lib/database_cleaner/data_mapper/transaction.rb +0 -28
  58. data/lib/database_cleaner/data_mapper/truncation.rb +0 -172
  59. data/lib/database_cleaner/generic/base.rb +0 -29
  60. data/lib/database_cleaner/generic/transaction.rb +0 -11
  61. data/lib/database_cleaner/generic/truncation.rb +0 -40
  62. data/lib/database_cleaner/mongo/base.rb +0 -16
  63. data/lib/database_cleaner/mongo/truncation.rb +0 -62
  64. data/lib/database_cleaner/mongo/truncation_mixin.rb +0 -26
  65. data/lib/database_cleaner/mongo2/base.rb +0 -16
  66. data/lib/database_cleaner/mongo2/truncation_mixin.rb +0 -39
  67. data/lib/database_cleaner/mongo_mapper/base.rb +0 -20
  68. data/lib/database_cleaner/mongo_mapper/truncation.rb +0 -19
  69. data/lib/database_cleaner/mongoid/base.rb +0 -20
  70. data/lib/database_cleaner/mongoid/truncation.rb +0 -49
  71. data/lib/database_cleaner/moped/base.rb +0 -39
  72. data/lib/database_cleaner/moped/truncation.rb +0 -9
  73. data/lib/database_cleaner/moped/truncation_base.rb +0 -40
  74. data/lib/database_cleaner/neo4j/base.rb +0 -62
  75. data/lib/database_cleaner/neo4j/deletion.rb +0 -16
  76. data/lib/database_cleaner/neo4j/transaction.rb +0 -35
  77. data/lib/database_cleaner/neo4j/truncation.rb +0 -9
  78. data/lib/database_cleaner/null_strategy.rb +0 -20
  79. data/lib/database_cleaner/ohm/truncation.rb +0 -15
  80. data/lib/database_cleaner/redis/base.rb +0 -37
  81. data/lib/database_cleaner/redis/truncation.rb +0 -26
  82. data/lib/database_cleaner/sequel/base.rb +0 -22
  83. data/lib/database_cleaner/sequel/deletion.rb +0 -47
  84. data/lib/database_cleaner/sequel/transaction.rb +0 -40
  85. data/lib/database_cleaner/sequel/truncation.rb +0 -78
  86. data/spec/database_cleaner/active_record/base_spec.rb +0 -188
  87. data/spec/database_cleaner/active_record/transaction_spec.rb +0 -176
  88. data/spec/database_cleaner/active_record/truncation/mysql2_spec.rb +0 -38
  89. data/spec/database_cleaner/active_record/truncation/mysql_spec.rb +0 -38
  90. data/spec/database_cleaner/active_record/truncation/postgresql_spec.rb +0 -75
  91. data/spec/database_cleaner/active_record/truncation/shared_fast_truncation.rb +0 -40
  92. data/spec/database_cleaner/active_record/truncation/sqlite3_spec.rb +0 -40
  93. data/spec/database_cleaner/active_record/truncation_spec.rb +0 -180
  94. data/spec/database_cleaner/base_spec.rb +0 -617
  95. data/spec/database_cleaner/configuration_spec.rb +0 -345
  96. data/spec/database_cleaner/couch_potato/truncation_spec.rb +0 -41
  97. data/spec/database_cleaner/data_mapper/base_spec.rb +0 -30
  98. data/spec/database_cleaner/data_mapper/transaction_spec.rb +0 -23
  99. data/spec/database_cleaner/data_mapper/truncation/sqlite3_spec.rb +0 -41
  100. data/spec/database_cleaner/data_mapper/truncation_spec.rb +0 -11
  101. data/spec/database_cleaner/generic/base_spec.rb +0 -61
  102. data/spec/database_cleaner/generic/truncation_spec.rb +0 -118
  103. data/spec/database_cleaner/mongo/mongo_examples.rb +0 -26
  104. data/spec/database_cleaner/mongo/truncation_spec.rb +0 -72
  105. data/spec/database_cleaner/mongo_mapper/base_spec.rb +0 -33
  106. data/spec/database_cleaner/mongo_mapper/mongo_examples.rb +0 -8
  107. data/spec/database_cleaner/mongo_mapper/truncation_spec.rb +0 -74
  108. data/spec/database_cleaner/moped/moped_examples.rb +0 -32
  109. data/spec/database_cleaner/moped/truncation_spec.rb +0 -80
  110. data/spec/database_cleaner/neo4j/base_spec.rb +0 -43
  111. data/spec/database_cleaner/neo4j/transaction_spec.rb +0 -25
  112. data/spec/database_cleaner/null_strategy_spec.rb +0 -28
  113. data/spec/database_cleaner/ohm/truncation_spec.rb +0 -70
  114. data/spec/database_cleaner/redis/base_spec.rb +0 -43
  115. data/spec/database_cleaner/redis/truncation_spec.rb +0 -63
  116. data/spec/database_cleaner/sequel/base_spec.rb +0 -32
  117. data/spec/database_cleaner/sequel/deletion_spec.rb +0 -58
  118. data/spec/database_cleaner/sequel/transaction_spec.rb +0 -21
  119. data/spec/database_cleaner/sequel/truncation/sqlite3_spec.rb +0 -0
  120. data/spec/database_cleaner/sequel/truncation_spec.rb +0 -182
  121. data/spec/database_cleaner/shared_strategy.rb +0 -15
  122. data/spec/rcov.opts +0 -1
  123. data/spec/spec_helper.rb +0 -21
  124. data/spec/support/active_record/database_setup.rb +0 -6
  125. data/spec/support/active_record/migrations/20150101010000_create_users.rb +0 -14
  126. data/spec/support/active_record/migrations/20150101020000_create_agents.rb +0 -14
  127. data/spec/support/active_record/mysql2_setup.rb +0 -39
  128. data/spec/support/active_record/mysql_setup.rb +0 -38
  129. data/spec/support/active_record/postgresql_setup.rb +0 -48
  130. data/spec/support/active_record/schema_setup.rb +0 -17
  131. data/spec/support/active_record/sqlite3_setup.rb +0 -40
  132. data/spec/support/data_mapper/schema_setup.rb +0 -15
  133. data/spec/support/data_mapper/sqlite3_setup.rb +0 -39
@@ -1,275 +0,0 @@
1
- require 'active_record/base'
2
-
3
- require 'active_record/connection_adapters/abstract_adapter'
4
-
5
- #Load available connection adapters
6
- %w(
7
- abstract_mysql_adapter postgresql_adapter sqlite3_adapter mysql_adapter mysql2_adapter
8
- ).each do |known_adapter|
9
- begin
10
- require "active_record/connection_adapters/#{known_adapter}"
11
- rescue LoadError
12
- end
13
- end
14
-
15
- require "database_cleaner/generic/truncation"
16
- require 'database_cleaner/active_record/base'
17
-
18
- module DatabaseCleaner
19
- module ConnectionAdapters
20
-
21
- module AbstractAdapter
22
- # used to be called views but that can clash with gems like schema_plus
23
- # this gem is not meant to be exposing such an extra interface any way
24
- def database_cleaner_view_cache
25
- @views ||= select_values("select table_name from information_schema.views where table_schema = '#{current_database}'") rescue []
26
- end
27
-
28
- def database_cleaner_table_cache
29
- # the adapters don't do caching (#130) but we make the assumption that the list stays the same in tests
30
- @database_cleaner_tables ||= ::ActiveRecord::VERSION::MAJOR >= 5 ? data_sources : tables
31
- end
32
-
33
- def truncate_table(table_name)
34
- raise NotImplementedError
35
- end
36
-
37
- def truncate_tables(tables)
38
- tables.each do |table_name|
39
- self.truncate_table(table_name)
40
- end
41
- end
42
- end
43
-
44
- module AbstractMysqlAdapter
45
- def truncate_table(table_name)
46
- execute("TRUNCATE TABLE #{quote_table_name(table_name)};")
47
- end
48
-
49
- def truncate_tables(tables)
50
- tables.each { |t| truncate_table(t) }
51
- end
52
-
53
- def pre_count_truncate_tables(tables, options = {:reset_ids => true})
54
- filter = options[:reset_ids] ? method(:has_been_used?) : method(:has_rows?)
55
- truncate_tables(tables.select(&filter))
56
- end
57
-
58
- private
59
-
60
- def row_count(table)
61
- # Patch for MysqlAdapter with ActiveRecord 3.2.7 later
62
- # select_value("SELECT 1") #=> "1"
63
- select_value("SELECT EXISTS (SELECT 1 FROM #{quote_table_name(table)} LIMIT 1)").to_i
64
- end
65
-
66
- # Returns a boolean indicating if the given table has an auto-inc number higher than 0.
67
- # Note, this is different than an empty table since an table may populated, the index increased,
68
- # but then the table is cleaned. In other words, this function tells us if the given table
69
- # was ever inserted into.
70
- def has_been_used?(table)
71
- if has_rows?(table)
72
- true
73
- else
74
- # Patch for MysqlAdapter with ActiveRecord 3.2.7 later
75
- # select_value("SELECT 1") #=> "1"
76
- select_value(<<-SQL).to_i > 1 # returns nil if not present
77
- SELECT Auto_increment
78
- FROM information_schema.tables
79
- WHERE table_name='#{table}';
80
- SQL
81
- end
82
- end
83
-
84
- def has_rows?(table)
85
- row_count(table) > 0
86
- end
87
- end
88
-
89
- module IBM_DBAdapter
90
- def truncate_table(table_name)
91
- execute("TRUNCATE #{quote_table_name(table_name)} IMMEDIATE")
92
- end
93
- end
94
-
95
- module SQLiteAdapter
96
- def delete_table(table_name)
97
- execute("DELETE FROM #{quote_table_name(table_name)};")
98
- if uses_sequence
99
- execute("DELETE FROM sqlite_sequence where name = '#{table_name}';")
100
- end
101
- end
102
- alias truncate_table delete_table
103
-
104
- def truncate_tables(tables)
105
- tables.each { |t| truncate_table(t) }
106
- end
107
-
108
- private
109
-
110
- # Returns a boolean indicating if the SQLite database is using the sqlite_sequence table.
111
- def uses_sequence
112
- select_value("SELECT name FROM sqlite_master WHERE type='table' AND name='sqlite_sequence';")
113
- end
114
- end
115
-
116
- module TruncateOrDelete
117
- def truncate_table(table_name)
118
- begin
119
- execute("TRUNCATE TABLE #{quote_table_name(table_name)};")
120
- rescue ::ActiveRecord::StatementInvalid
121
- execute("DELETE FROM #{quote_table_name(table_name)};")
122
- end
123
- end
124
- end
125
-
126
- module OracleAdapter
127
- def truncate_table(table_name)
128
- execute("TRUNCATE TABLE #{quote_table_name(table_name)}")
129
- end
130
- end
131
-
132
- module PostgreSQLAdapter
133
- def db_version
134
- @db_version ||= postgresql_version
135
- end
136
-
137
- def cascade
138
- @cascade ||= db_version >= 80200 ? 'CASCADE' : ''
139
- end
140
-
141
- def restart_identity
142
- @restart_identity ||= db_version >= 80400 ? 'RESTART IDENTITY' : ''
143
- end
144
-
145
- def truncate_table(table_name)
146
- truncate_tables([table_name])
147
- end
148
-
149
- def truncate_tables(table_names)
150
- return if table_names.nil? || table_names.empty?
151
- execute("TRUNCATE TABLE #{table_names.map{|name| quote_table_name(name)}.join(', ')} #{restart_identity} #{cascade};")
152
- end
153
-
154
- def pre_count_truncate_tables(tables, options = {:reset_ids => true})
155
- filter = options[:reset_ids] ? method(:has_been_used?) : method(:has_rows?)
156
- truncate_tables(tables.select(&filter))
157
- end
158
-
159
- def database_cleaner_table_cache
160
- # AR returns a list of tables without schema but then returns a
161
- # migrations table with the schema. There are other problems, too,
162
- # with using the base list. If a table exists in multiple schemas
163
- # within the search path, truncation without the schema name could
164
- # result in confusing, if not unexpected results.
165
- @database_cleaner_tables ||= tables_with_schema
166
- end
167
-
168
- private
169
-
170
- # Returns a boolean indicating if the given table has an auto-inc number higher than 0.
171
- # Note, this is different than an empty table since an table may populated, the index increased,
172
- # but then the table is cleaned. In other words, this function tells us if the given table
173
- # was ever inserted into.
174
- def has_been_used?(table)
175
- return has_rows?(table) unless has_sequence?(table)
176
-
177
- cur_val = select_value("SELECT currval('#{table}_id_seq');").to_i rescue 0
178
- cur_val > 0
179
- end
180
-
181
- def has_sequence?(table)
182
- select_value("SELECT true FROM pg_class WHERE relname = '#{table}_id_seq';")
183
- end
184
-
185
- def has_rows?(table)
186
- select_value("SELECT true FROM #{table} LIMIT 1;")
187
- end
188
-
189
- def tables_with_schema
190
- rows = select_rows <<-_SQL
191
- SELECT schemaname || '.' || tablename
192
- FROM pg_tables
193
- WHERE
194
- tablename !~ '_prt_' AND
195
- #{::DatabaseCleaner::ActiveRecord::Base.exclusion_condition('tablename')} AND
196
- schemaname = ANY (current_schemas(false))
197
- _SQL
198
- rows.collect { |result| result.first }
199
- end
200
- end
201
- end
202
- end
203
-
204
- module ActiveRecord
205
- module ConnectionAdapters
206
- #Apply adapter decoraters where applicable (adapter should be loaded)
207
- AbstractAdapter.class_eval { include DatabaseCleaner::ConnectionAdapters::AbstractAdapter }
208
-
209
- if defined?(JdbcAdapter)
210
- if defined?(OracleJdbcConnection)
211
- JdbcAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::OracleAdapter }
212
- else
213
- JdbcAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::TruncateOrDelete }
214
- end
215
- end
216
- AbstractMysqlAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::AbstractMysqlAdapter } if defined?(AbstractMysqlAdapter)
217
- Mysql2Adapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::AbstractMysqlAdapter } if defined?(Mysql2Adapter)
218
- MysqlAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::AbstractMysqlAdapter } if defined?(MysqlAdapter)
219
- SQLiteAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::SQLiteAdapter } if defined?(SQLiteAdapter)
220
- SQLite3Adapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::SQLiteAdapter } if defined?(SQLite3Adapter)
221
- PostgreSQLAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::PostgreSQLAdapter } if defined?(PostgreSQLAdapter)
222
- IBM_DBAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::IBM_DBAdapter } if defined?(IBM_DBAdapter)
223
- SQLServerAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::TruncateOrDelete } if defined?(SQLServerAdapter)
224
- OracleEnhancedAdapter.class_eval { include ::DatabaseCleaner::ConnectionAdapters::OracleAdapter } if defined?(OracleEnhancedAdapter)
225
- end
226
- end
227
-
228
- module DatabaseCleaner::ActiveRecord
229
- class Truncation
230
- include ::DatabaseCleaner::ActiveRecord::Base
231
- include ::DatabaseCleaner::Generic::Truncation
232
-
233
- def clean
234
- connection = connection_class.connection
235
- connection.disable_referential_integrity do
236
- if pre_count? && connection.respond_to?(:pre_count_truncate_tables)
237
- connection.pre_count_truncate_tables(tables_to_truncate(connection), {:reset_ids => reset_ids?})
238
- else
239
- connection.truncate_tables(tables_to_truncate(connection))
240
- end
241
- end
242
- end
243
-
244
- private
245
-
246
- def tables_to_truncate(connection)
247
- tables_in_db = cache_tables? ? connection.database_cleaner_table_cache : connection.tables
248
- to_reject = (@tables_to_exclude + connection.database_cleaner_view_cache)
249
- (@only || tables_in_db).reject do |table|
250
- if ( m = table.match(/([^.]+)$/) )
251
- to_reject.include?(m[1])
252
- else
253
- false
254
- end
255
- end
256
- end
257
-
258
- # overwritten
259
- def migration_storage_names
260
- [::DatabaseCleaner::ActiveRecord::Base.migration_table_name]
261
- end
262
-
263
- def cache_tables?
264
- !!@cache_tables
265
- end
266
-
267
- def pre_count?
268
- @pre_count == true
269
- end
270
-
271
- def reset_ids?
272
- @reset_ids != false
273
- end
274
- end
275
- end
@@ -1,164 +0,0 @@
1
- require 'database_cleaner/null_strategy'
2
- module DatabaseCleaner
3
- class Base
4
- include Comparable
5
-
6
- def <=>(other)
7
- (self.orm <=> other.orm) == 0 ? self.db <=> other.db : self.orm <=> other.orm
8
- end
9
-
10
- def initialize(desired_orm = nil,opts = {})
11
- if [:autodetect, nil, "autodetect"].include?(desired_orm)
12
- autodetect
13
- else
14
- self.orm = desired_orm
15
- end
16
- self.db = opts[:connection] || opts[:model] if opts.has_key?(:connection) || opts.has_key?(:model)
17
- set_default_orm_strategy
18
- end
19
-
20
- def db=(desired_db)
21
- self.strategy_db = desired_db
22
- @db = desired_db
23
- end
24
-
25
- def strategy_db=(desired_db)
26
- if strategy.respond_to? :db=
27
- strategy.db = desired_db
28
- elsif desired_db!= :default
29
- raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
30
- end
31
- end
32
-
33
- def db
34
- @db ||= :default
35
- end
36
-
37
- def create_strategy(*args)
38
- strategy, *strategy_args = args
39
- orm_strategy(strategy).new(*strategy_args)
40
- end
41
-
42
- def clean_with(*args)
43
- strategy = create_strategy(*args)
44
- set_strategy_db strategy, self.db
45
-
46
- strategy.clean
47
- strategy
48
- end
49
-
50
- alias clean_with! clean_with
51
-
52
- def set_strategy_db(strategy, desired_db)
53
- if strategy.respond_to? :db=
54
- strategy.db = desired_db
55
- elsif desired_db != :default
56
- raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
57
- end
58
- end
59
-
60
- def strategy=(args)
61
- strategy, *strategy_args = args
62
- if strategy.is_a?(Symbol)
63
- @strategy = create_strategy(*args)
64
- elsif strategy_args.empty?
65
- @strategy = strategy
66
- else
67
- raise ArgumentError, "You must provide a strategy object, or a symbol for a known strategy along with initialization params."
68
- end
69
-
70
- set_strategy_db @strategy, self.db
71
-
72
- @strategy
73
- end
74
-
75
- def strategy
76
- @strategy ||= NullStrategy
77
- end
78
-
79
- def orm=(desired_orm)
80
- @orm = desired_orm.to_sym
81
- end
82
-
83
- def orm
84
- @orm || autodetect
85
- end
86
-
87
- def start
88
- strategy.start
89
- end
90
-
91
- def clean
92
- strategy.clean
93
- end
94
-
95
- alias clean! clean
96
-
97
- def cleaning(&block)
98
- strategy.cleaning(&block)
99
- end
100
-
101
- def auto_detected?
102
- !!@autodetected
103
- end
104
-
105
- def autodetect_orm
106
- if defined? ::ActiveRecord
107
- :active_record
108
- elsif defined? ::DataMapper
109
- :data_mapper
110
- elsif defined? ::MongoMapper
111
- :mongo_mapper
112
- elsif defined? ::Mongoid
113
- :mongoid
114
- elsif defined? ::CouchPotato
115
- :couch_potato
116
- elsif defined? ::Sequel
117
- :sequel
118
- elsif defined? ::Moped
119
- :moped
120
- elsif defined? ::Ohm
121
- :ohm
122
- elsif defined? ::Redis
123
- :redis
124
- elsif defined? ::Neo4j
125
- :neo4j
126
- end
127
- end
128
-
129
- private
130
-
131
- def orm_module
132
- ::DatabaseCleaner.orm_module(orm)
133
- end
134
-
135
- def orm_strategy(strategy)
136
- require "database_cleaner/#{orm.to_s}/#{strategy.to_s}"
137
- orm_module.const_get(strategy.to_s.capitalize)
138
- rescue LoadError
139
- if orm_module.respond_to? :available_strategies
140
- raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM! Available strategies: #{orm_module.available_strategies.join(', ')}"
141
- else
142
- raise UnknownStrategySpecified, "The '#{strategy}' strategy does not exist for the #{orm} ORM!"
143
- end
144
- end
145
-
146
- def autodetect
147
- @autodetected = true
148
-
149
- @orm ||= autodetect_orm ||
150
- raise(NoORMDetected, "No known ORM was detected! Is ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, Moped, or CouchPotato, Redis or Ohm loaded?")
151
- end
152
-
153
- def set_default_orm_strategy
154
- case orm
155
- when :active_record, :data_mapper, :sequel
156
- self.strategy = :transaction
157
- when :mongo_mapper, :mongoid, :couch_potato, :moped, :ohm, :redis
158
- self.strategy = :truncation
159
- when :neo4j
160
- self.strategy = :transaction
161
- end
162
- end
163
- end
164
- end
@@ -1,131 +0,0 @@
1
- require 'database_cleaner/base'
2
-
3
- module DatabaseCleaner
4
-
5
- class NoORMDetected < StandardError; end
6
- class UnknownStrategySpecified < ArgumentError; end
7
-
8
- class << self
9
- def init_cleaners
10
- @cleaners ||= {}
11
- # ghetto ordered hash.. maintains 1.8 compat and old API
12
- @connections ||= []
13
- end
14
-
15
- def [](orm,opts = {})
16
- raise NoORMDetected unless orm
17
- init_cleaners
18
- # TODO: deprecate
19
- # this method conflates creation with lookup. Both a command and a query. Yuck.
20
- if @cleaners.has_key? [orm, opts]
21
- @cleaners[[orm, opts]]
22
- else
23
- add_cleaner(orm, opts)
24
- end
25
- end
26
-
27
- def add_cleaner(orm,opts = {})
28
- init_cleaners
29
- cleaner = DatabaseCleaner::Base.new(orm,opts)
30
- @cleaners[[orm, opts]] = cleaner
31
- @connections << cleaner
32
- cleaner
33
- end
34
-
35
- def app_root=(desired_root)
36
- @app_root = desired_root
37
- end
38
-
39
- def app_root
40
- @app_root ||= Dir.pwd
41
- end
42
-
43
- def connections
44
- # double yuck.. can't wait to deprecate this whole class...
45
- unless defined?(@cleaners) && @cleaners
46
- autodetected = ::DatabaseCleaner::Base.new
47
- add_cleaner(autodetected.orm)
48
- end
49
- @connections
50
- end
51
-
52
- def logger=(log_source)
53
- @logger = log_source
54
- end
55
-
56
- def logger
57
- return @logger if @logger
58
-
59
- @logger = Logger.new(STDOUT)
60
- @logger.level = Logger::ERROR
61
- @logger
62
- end
63
-
64
- def strategy=(stratagem)
65
- connections.each { |connect| connect.strategy = stratagem }
66
- remove_duplicates
67
- end
68
-
69
- def orm=(orm)
70
- connections.each { |connect| connect.orm = orm }
71
- remove_duplicates
72
- end
73
-
74
- def start
75
- connections.each { |connection| connection.start }
76
- end
77
-
78
- def clean
79
- connections.each { |connection| connection.clean }
80
- end
81
-
82
- alias clean! clean
83
-
84
- def cleaning(&inner_block)
85
- connections.inject(inner_block) do |curr_block, connection|
86
- proc { connection.cleaning(&curr_block) }
87
- end.call
88
- end
89
-
90
- def clean_with(*args)
91
- connections.each { |connection| connection.clean_with(*args) }
92
- end
93
-
94
- alias clean_with! clean_with
95
-
96
- def remove_duplicates
97
- temp = []
98
- connections.each do |connect|
99
- temp.push connect unless temp.include? connect
100
- end
101
- @connections = temp
102
- end
103
-
104
- def orm_module(symbol)
105
- case symbol
106
- when :active_record
107
- DatabaseCleaner::ActiveRecord
108
- when :data_mapper
109
- DatabaseCleaner::DataMapper
110
- when :mongo
111
- DatabaseCleaner::Mongo
112
- when :mongoid
113
- DatabaseCleaner::Mongoid
114
- when :mongo_mapper
115
- DatabaseCleaner::MongoMapper
116
- when :moped
117
- DatabaseCleaner::Moped
118
- when :couch_potato
119
- DatabaseCleaner::CouchPotato
120
- when :sequel
121
- DatabaseCleaner::Sequel
122
- when :ohm
123
- DatabaseCleaner::Ohm
124
- when :redis
125
- DatabaseCleaner::Redis
126
- when :neo4j
127
- DatabaseCleaner::Neo4j
128
- end
129
- end
130
- end
131
- end
@@ -1,7 +0,0 @@
1
- module DatabaseCleaner
2
- module CouchPotato
3
- def self.available_strategies
4
- %w[truncation]
5
- end
6
- end
7
- end
@@ -1,28 +0,0 @@
1
- require 'database_cleaner/generic/truncation'
2
-
3
- module DatabaseCleaner
4
- module CouchPotato
5
- class Truncation
6
- include ::DatabaseCleaner::Generic::Truncation
7
-
8
- def initialize(options = {})
9
- if options.has_key?(:only) || options.has_key?(:except)
10
- raise ArgumentError, "The :only and :except options are not available for use with CouchPotato/CouchDB."
11
- elsif !options.empty?
12
- raise ArgumentError, "Unsupported option. You specified #{options.keys.join(',')}."
13
- end
14
- super
15
- end
16
-
17
- def clean
18
- database.recreate!
19
- end
20
-
21
- private
22
-
23
- def database
24
- ::CouchPotato.couchrest_database
25
- end
26
- end
27
- end
28
- end
@@ -1,3 +0,0 @@
1
- Around do |scenario, block|
2
- DatabaseCleaner.cleaning(&block)
3
- end
@@ -1,21 +0,0 @@
1
- require 'database_cleaner/generic/base'
2
- module DatabaseCleaner
3
- module DataMapper
4
- def self.available_strategies
5
- %w[truncation transaction]
6
- end
7
-
8
- module Base
9
- include ::DatabaseCleaner::Generic::Base
10
-
11
- def db=(desired_db)
12
- @db = desired_db
13
- end
14
-
15
- def db
16
- @db ||= :default
17
- end
18
-
19
- end
20
- end
21
- end
@@ -1,28 +0,0 @@
1
- require 'database_cleaner/data_mapper/base'
2
- require 'database_cleaner/generic/transaction'
3
-
4
- module DatabaseCleaner::DataMapper
5
- class Transaction
6
- include ::DatabaseCleaner::DataMapper::Base
7
- include ::DatabaseCleaner::Generic::Transaction
8
-
9
- def start(repository = self.db)
10
- ::DataMapper.repository(repository) do |r|
11
- transaction = DataMapper::Transaction.new(r)
12
- transaction.begin
13
- r.adapter.push_transaction(transaction)
14
- end
15
- end
16
-
17
- def clean(repository = self.db)
18
- ::DataMapper.repository(repository) do |r|
19
- adapter = r.adapter
20
- while adapter.current_transaction
21
- adapter.current_transaction.rollback
22
- adapter.pop_transaction
23
- end
24
- end
25
- end
26
-
27
- end
28
- end