database_cleaner 0.6.0.rc.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -1
- data/README.textile +20 -33
- data/features/cleaning.feature +1 -0
- data/features/cleaning_multiple_dbs.feature +1 -0
- data/lib/database_cleaner/active_record/base.rb +1 -1
- data/lib/database_cleaner/active_record/deletion.rb +66 -0
- data/lib/database_cleaner/active_record/truncation.rb +16 -8
- metadata +5 -6
data/History.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
== 0.6.x (In Git)
|
2
2
|
|
3
|
-
== 0.6.0 2010-
|
3
|
+
== 0.6.0 2010-10-25 - The Multi-ORM/Connection Release
|
4
4
|
|
5
5
|
This release has the often asked for functionality of being able to clean
|
6
6
|
multiple databases within the same project. This involves being able to
|
@@ -19,11 +19,14 @@ of the hours and effort he put into making this feature request a reality.
|
|
19
19
|
* Ability to clean multiple DBs managed by different ORMs in same project. (Jon Rowe)
|
20
20
|
* Allows for the ActiveRecord config file (database.yml) to contain ERB and process it. (Fletcher Nichol)
|
21
21
|
* Mysql2Adapter support. (Kamal Fariz Mahyuddin and John Ferlito)
|
22
|
+
* Deletion strategy for ActiveRecord (Mikl Kurkov)
|
22
23
|
|
23
24
|
=== Bugfixes
|
24
25
|
* Updates the DataMapper truncation strategy to version 0.10.3. (Robert Rouse)
|
25
26
|
* Addresses Ruby 1.9 and 1.8 differences causing a bug in the AR PostgreSQLAdapter truncation strategy. (GH-14, James B. Byrne)
|
26
27
|
* Fixes syntax error that MySQL was throwing during DataMapper truncation. (Blake Gentry)
|
28
|
+
* Fixes truncation for PostgreSQL (Bodaniel Jeanes and Gabriel Sobrinho)
|
29
|
+
* Workaround for superclass mismatches for the ActiveRecord-jdbc-adapter (Toms Mikoss)
|
27
30
|
|
28
31
|
== 0.5.2
|
29
32
|
|
data/README.textile
CHANGED
@@ -7,6 +7,19 @@ that is testing with a database.
|
|
7
7
|
|
8
8
|
ActiveRecord, DataMapper, MongoMapper, Mongoid, and CouchPotato are supported.
|
9
9
|
|
10
|
+
Here is an overview of the strategies supported for each library:
|
11
|
+
|
12
|
+
|_. ORM |_. Truncation |_. Transaction |_. Deletion |
|
13
|
+
| ActiveRecord | Yes | Yes | Yes |
|
14
|
+
| DataMapper | Yes | Yes | No |
|
15
|
+
| CouchPotato | Yes | No | No |
|
16
|
+
| MongoMapper | Yes | No | No |
|
17
|
+
| Mongiod | Yes | No | No |
|
18
|
+
|
19
|
+
The ActiveRecord @:deletion@ strategy is only useful for when the @:truncation@ strategy causes
|
20
|
+
locks (as reported by some Oracle DB users). The @:truncation@ strategy is the preferred option
|
21
|
+
since it is much faster.
|
22
|
+
|
10
23
|
h2. How to use
|
11
24
|
|
12
25
|
<pre>
|
@@ -28,7 +41,6 @@ With the :truncation strategy you can also pass in options, for example:
|
|
28
41
|
|
29
42
|
(I should point out the truncation strategy will never truncate your schema_migrations table.)
|
30
43
|
|
31
|
-
|
32
44
|
Some strategies require that you call DatabaseCleaner.start before calling clean
|
33
45
|
(for example the :transaction one needs to know to open up a transaction). So
|
34
46
|
you would have:
|
@@ -93,38 +105,13 @@ Usage beyond that remains the same with DatabaseCleaner.start calling any setup
|
|
93
105
|
|
94
106
|
Configuration options
|
95
107
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
<td>Active Record</td>
|
104
|
-
<td>DatabaseCleaner[:active_record]</td>
|
105
|
-
<td>Connection specified as :symbol keys, loaded from config/database.yml</td>
|
106
|
-
</th>
|
107
|
-
<tr>
|
108
|
-
<td>Data Mapper</td>
|
109
|
-
<td>DatabaseCleaner[:data_mapper]</td>
|
110
|
-
<td>Connection specified as :symbol keys, loaded via Datamapper repositories</td>
|
111
|
-
</th>
|
112
|
-
<tr>
|
113
|
-
<td>Mongo Mapper</td>
|
114
|
-
<td>DatabaseCleaner[:mongo_mapper]</td>
|
115
|
-
<td>Multiple connections not yet supported</td>
|
116
|
-
</th>
|
117
|
-
<tr>
|
118
|
-
<td>Mongoid</td>
|
119
|
-
<td>DatabaseCleaner[:mongoid]</td>
|
120
|
-
<td>Multiple connections not yet supported</td>
|
121
|
-
</th>
|
122
|
-
<tr>
|
123
|
-
<td>Couch Potato</td>
|
124
|
-
<td>DatabaseCleaner[:couch_potato]</td>
|
125
|
-
<td>Multiple connections not yet supported</td>
|
126
|
-
</tr>
|
127
|
-
</table>
|
108
|
+
|
109
|
+
|_. ORM |_. How to access |_. Notes |
|
110
|
+
| Active Record | DatabaseCleaner[:active_record] | Connection specified as :symbol keys, loaded from config/database.yml |
|
111
|
+
| Data Mapper | DatabaseCleaner[:data_mapper] | Connection specified as :symbol keys, loaded via Datamapper repositories |
|
112
|
+
| Mongo Mapper | DatabaseCleaner[:mongo_mapper] | Multiple connections not yet supported |
|
113
|
+
| Mongoid | DatabaseCleaner[:mongoid] | Multiple connections not yet supported |
|
114
|
+
| Couch Potato | DatabaseCleaner[:couch_potato] | Multiple connections not yet supported |
|
128
115
|
|
129
116
|
h2. Why?
|
130
117
|
|
data/features/cleaning.feature
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'active_record/base'
|
2
|
+
require 'active_record/connection_adapters/abstract_adapter'
|
3
|
+
require "database_cleaner/generic/truncation"
|
4
|
+
require 'database_cleaner/active_record/base'
|
5
|
+
require 'database_cleaner/active_record/truncation'
|
6
|
+
# This file may seem to have duplication with that of truncation, but by keeping them separate
|
7
|
+
# we avoiding loading this code when it is not being used (which is the common case).
|
8
|
+
|
9
|
+
module ActiveRecord
|
10
|
+
module ConnectionAdapters
|
11
|
+
|
12
|
+
class MysqlAdapter < MYSQL_ADAPTER_PARENT
|
13
|
+
def delete_table(table_name)
|
14
|
+
execute("DELETE FROM #{quote_table_name(table_name)};")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Mysql2Adapter < AbstractAdapter
|
19
|
+
def delete_table(table_name)
|
20
|
+
execute("DELETE FROM #{quote_table_name(table_name)};")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class JdbcAdapter < AbstractAdapter
|
25
|
+
def delete_table(table_name)
|
26
|
+
execute("DELETE FROM #{quote_table_name(table_name)};")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class PostgreSQLAdapter < AbstractAdapter
|
31
|
+
def delete_table(table_name)
|
32
|
+
execute("DELETE FROM #{quote_table_name(table_name)};")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class SQLServerAdapter < AbstractAdapter
|
37
|
+
def delete_table(table_name)
|
38
|
+
execute("DELETE FROM #{quote_table_name(table_name)};")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class OracleEnhancedAdapter < AbstractAdapter
|
43
|
+
def delete_table(table_name)
|
44
|
+
execute("DELETE FROM #{quote_table_name(table_name)}")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
module DatabaseCleaner::ActiveRecord
|
53
|
+
class Deletion < Truncation
|
54
|
+
|
55
|
+
def clean
|
56
|
+
connection.disable_referential_integrity do
|
57
|
+
tables_to_truncate.each do |table_name|
|
58
|
+
connection.delete_table table_name
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
@@ -5,14 +5,21 @@ require 'database_cleaner/active_record/base'
|
|
5
5
|
|
6
6
|
module ActiveRecord
|
7
7
|
module ConnectionAdapters
|
8
|
+
# Activerecord-jdbc-adapter defines class dependencies a bit differently - if it is present, confirm to ArJdbc hierarchy to avoid 'superclass mismatch' errors.
|
9
|
+
USE_ARJDBC_WORKAROUND = defined?(ArJdbc)
|
8
10
|
|
9
11
|
class AbstractAdapter
|
10
12
|
end
|
11
13
|
|
12
|
-
|
14
|
+
unless USE_ARJDBC_WORKAROUND
|
15
|
+
class SQLiteAdapter < AbstractAdapter
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
|
-
|
19
|
+
MYSQL_ADAPTER_PARENT = USE_ARJDBC_WORKAROUND ? JdbcAdapter : AbstractAdapter
|
20
|
+
SQLITE_ADAPTER_PARENT = USE_ARJDBC_WORKAROUND ? JdbcAdapter : SQLiteAdapter
|
21
|
+
|
22
|
+
class MysqlAdapter < MYSQL_ADAPTER_PARENT
|
16
23
|
def truncate_table(table_name)
|
17
24
|
execute("TRUNCATE TABLE #{quote_table_name(table_name)};")
|
18
25
|
end
|
@@ -24,10 +31,11 @@ module ActiveRecord
|
|
24
31
|
end
|
25
32
|
end
|
26
33
|
|
27
|
-
class SQLite3Adapter <
|
28
|
-
def
|
34
|
+
class SQLite3Adapter < SQLITE_ADAPTER_PARENT
|
35
|
+
def delete_table(table_name)
|
29
36
|
execute("DELETE FROM #{quote_table_name(table_name)};")
|
30
37
|
end
|
38
|
+
alias truncate_table delete_table
|
31
39
|
end
|
32
40
|
|
33
41
|
class JdbcAdapter < AbstractAdapter
|
@@ -42,19 +50,19 @@ module ActiveRecord
|
|
42
50
|
|
43
51
|
class PostgreSQLAdapter < AbstractAdapter
|
44
52
|
|
45
|
-
def
|
46
|
-
@db_version ||=
|
53
|
+
def db_version
|
54
|
+
@db_version ||= select_values(
|
47
55
|
"SELECT CHARACTER_VALUE
|
48
56
|
FROM INFORMATION_SCHEMA.SQL_IMPLEMENTATION_INFO
|
49
57
|
WHERE IMPLEMENTATION_INFO_NAME = 'DBMS VERSION' ").join.to_s
|
50
58
|
end
|
51
59
|
|
52
|
-
def
|
60
|
+
def cascade
|
53
61
|
@cascade ||= db_version >= "08.02" ? "CASCADE" : ""
|
54
62
|
end
|
55
63
|
|
56
64
|
def truncate_table(table_name)
|
57
|
-
execute("TRUNCATE TABLE #{quote_table_name(table_name)} #{
|
65
|
+
execute("TRUNCATE TABLE #{quote_table_name(table_name)} #{cascade};")
|
58
66
|
end
|
59
67
|
|
60
68
|
end
|
metadata
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: database_cleaner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 7
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
9
|
- 0
|
10
|
-
|
11
|
-
- 3
|
12
|
-
version: 0.6.0.rc.3
|
10
|
+
version: 0.6.0
|
13
11
|
platform: ruby
|
14
12
|
authors:
|
15
13
|
- Ben Mabey
|
@@ -17,7 +15,7 @@ autorequire:
|
|
17
15
|
bindir: bin
|
18
16
|
cert_chain: []
|
19
17
|
|
20
|
-
date: 2010-
|
18
|
+
date: 2010-10-25 00:00:00 -06:00
|
21
19
|
default_executable:
|
22
20
|
dependencies: []
|
23
21
|
|
@@ -65,6 +63,7 @@ files:
|
|
65
63
|
- features/support/feature_runner.rb
|
66
64
|
- lib/database_cleaner.rb
|
67
65
|
- lib/database_cleaner/active_record/base.rb
|
66
|
+
- lib/database_cleaner/active_record/deletion.rb
|
68
67
|
- lib/database_cleaner/active_record/transaction.rb
|
69
68
|
- lib/database_cleaner/active_record/truncation.rb
|
70
69
|
- lib/database_cleaner/base.rb
|