database_cleaner 0.6.7 → 0.7.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/Gemfile.lock +2 -0
- data/History.txt +16 -1
- data/README.textile +7 -1
- data/Rakefile +1 -1
- data/VERSION.yml +2 -2
- data/examples/Gemfile +1 -0
- data/examples/Gemfile.lock +2 -0
- data/lib/database_cleaner/active_record/base.rb +3 -3
- data/lib/database_cleaner/active_record/deletion.rb +2 -1
- data/lib/database_cleaner/active_record/truncation.rb +16 -10
- data/lib/database_cleaner/base.rb +4 -2
- data/lib/database_cleaner/configuration.rb +10 -8
- data/lib/database_cleaner/data_mapper/truncation.rb +3 -3
- data/lib/database_cleaner/generic/base.rb +2 -5
- data/lib/database_cleaner/sequel/base.rb +22 -0
- data/lib/database_cleaner/sequel/transaction.rb +20 -0
- data/lib/database_cleaner/sequel/truncation.rb +31 -0
- data/spec/database_cleaner/active_record/truncation_spec.rb +5 -11
- data/spec/database_cleaner/base_spec.rb +17 -2
- data/spec/database_cleaner/sequel/base_spec.rb +31 -0
- data/spec/database_cleaner/sequel/transaction_spec.rb +21 -0
- data/spec/database_cleaner/sequel/truncation_spec.rb +13 -0
- metadata +15 -9
- data/lib/database_cleaner/active_record/#transaction.rb# +0 -34
data/Gemfile.lock
CHANGED
@@ -127,6 +127,7 @@ GEM
|
|
127
127
|
linecache (>= 0.3)
|
128
128
|
rubyforge (2.0.4)
|
129
129
|
json_pure (>= 1.1.7)
|
130
|
+
sequel (3.21.0)
|
130
131
|
sqlite3-ruby (1.3.1)
|
131
132
|
stringex (1.1.0)
|
132
133
|
sys-uname (0.8.4)
|
@@ -157,5 +158,6 @@ DEPENDENCIES
|
|
157
158
|
rspactor
|
158
159
|
rspec
|
159
160
|
ruby-debug
|
161
|
+
sequel (~> 3.21.0)
|
160
162
|
sqlite3-ruby
|
161
163
|
tzinfo (= 0.3.22)
|
data/History.txt
CHANGED
@@ -1,4 +1,19 @@
|
|
1
|
-
== 0.
|
1
|
+
== 0.7.x (in git)
|
2
|
+
|
3
|
+
== 0.7.0 2011-11-12
|
4
|
+
|
5
|
+
=== New Features
|
6
|
+
|
7
|
+
* Sequel Support (Corin Langosch)
|
8
|
+
* Updates DataMapper strategies to work with DataMapper 1.1 (Xavier Shay and Anthony Williams)
|
9
|
+
* for AR and PSQL, truncate all tables with one command, improving performance due to avoiding cascades (Leonid Shevtsov)
|
10
|
+
|
11
|
+
=== Bugfixes
|
12
|
+
|
13
|
+
* Avoids trying to load the ':default' ActiveRecord config. #72 (Ben Mabey)
|
14
|
+
|
15
|
+
|
16
|
+
== 0.6.7 2011-04-21
|
2
17
|
|
3
18
|
=== Bugfixes
|
4
19
|
* Explicity require ERB. (Vít Ondruch)
|
data/README.textile
CHANGED
@@ -73,7 +73,7 @@ strategy the remaining time. To accomplish this you can say:
|
|
73
73
|
Example usage with RSpec:
|
74
74
|
|
75
75
|
<pre>
|
76
|
-
|
76
|
+
RSpec.configure do |config|
|
77
77
|
|
78
78
|
config.before(:suite) do
|
79
79
|
DatabaseCleaner.strategy = :transaction
|
@@ -99,6 +99,12 @@ In rare cases DatabaseCleaner will encounter errors that it will log. By defaul
|
|
99
99
|
DatabaseCleaner.logger = Rails.logger
|
100
100
|
</pre>
|
101
101
|
|
102
|
+
If you are using Postgres and have foreign key constraints, the truncation strategy will cause a lot of extra noise to appear on STDERR (in
|
103
|
+
the form of "NOTICE truncate cascades" messages). To silence these warnings set the following log level in your postgresql.conf file:
|
104
|
+
|
105
|
+
<pre>
|
106
|
+
client_min_messages = warning
|
107
|
+
</pre>
|
102
108
|
|
103
109
|
h2. How to use with multiple ORM's
|
104
110
|
|
data/Rakefile
CHANGED
@@ -56,7 +56,7 @@ task :clean do
|
|
56
56
|
"examples/db/datamapper_one.db", "examples/db/datamapper_two.db"].each do |f|
|
57
57
|
FileUtils.rm_f(f)
|
58
58
|
end
|
59
|
-
%w[*.sqlite3 *.log].each do |pattern|
|
59
|
+
%w[*.sqlite3 *.log #* *.swp *.swo].each do |pattern|
|
60
60
|
`find . -name "#{pattern}" -delete`
|
61
61
|
end
|
62
62
|
end
|
data/VERSION.yml
CHANGED
data/examples/Gemfile
CHANGED
data/examples/Gemfile.lock
CHANGED
@@ -127,6 +127,7 @@ GEM
|
|
127
127
|
linecache (>= 0.3)
|
128
128
|
rubyforge (2.0.4)
|
129
129
|
json_pure (>= 1.1.7)
|
130
|
+
sequel (3.21.0)
|
130
131
|
sqlite3-ruby (1.3.1)
|
131
132
|
stringex (1.1.0)
|
132
133
|
sys-uname (0.8.4)
|
@@ -157,5 +158,6 @@ DEPENDENCIES
|
|
157
158
|
rspactor
|
158
159
|
rspec
|
159
160
|
ruby-debug
|
161
|
+
sequel (~> 3.21.0)
|
160
162
|
sqlite3-ruby
|
161
163
|
tzinfo (= 0.3.22)
|
@@ -8,7 +8,7 @@ module DatabaseCleaner
|
|
8
8
|
def self.available_strategies
|
9
9
|
%w[truncation transaction deletion]
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def self.config_file_location=(path)
|
13
13
|
@config_file_location = path
|
14
14
|
end
|
@@ -32,9 +32,9 @@ module DatabaseCleaner
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def load_config
|
35
|
-
if File.file?(ActiveRecord.config_file_location)
|
35
|
+
if self.db != :default && File.file?(ActiveRecord.config_file_location)
|
36
36
|
connection_details = YAML::load(ERB.new(IO.read(ActiveRecord.config_file_location)).result)
|
37
|
-
|
37
|
+
@connection_hash = connection_details[self.db.to_s]
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -53,7 +53,8 @@ module DatabaseCleaner::ActiveRecord
|
|
53
53
|
class Deletion < Truncation
|
54
54
|
|
55
55
|
def clean
|
56
|
-
|
56
|
+
connection = connection_klass.connection
|
57
|
+
tables_to_truncate(connection).each do |table_name|
|
57
58
|
connection.delete_table table_name
|
58
59
|
end
|
59
60
|
end
|
@@ -12,6 +12,16 @@ module ActiveRecord
|
|
12
12
|
def views
|
13
13
|
@views ||= select_values("select table_name from information_schema.views where table_schema = '#{current_database}'") rescue []
|
14
14
|
end
|
15
|
+
|
16
|
+
def truncate_table(table_name)
|
17
|
+
raise NotImplementedError
|
18
|
+
end
|
19
|
+
|
20
|
+
def truncate_tables(tables)
|
21
|
+
tables.each do |table_name|
|
22
|
+
self.truncate_table(table_name)
|
23
|
+
end
|
24
|
+
end
|
15
25
|
end
|
16
26
|
|
17
27
|
unless USE_ARJDBC_WORKAROUND
|
@@ -72,7 +82,11 @@ module ActiveRecord
|
|
72
82
|
end
|
73
83
|
|
74
84
|
def truncate_table(table_name)
|
75
|
-
|
85
|
+
truncate_tables([table_name])
|
86
|
+
end
|
87
|
+
|
88
|
+
def truncate_tables(table_names)
|
89
|
+
execute("TRUNCATE TABLE #{table_names.map{|name| quote_table_name(name)}.join(', ')} #{restart_identity} #{cascade};")
|
76
90
|
end
|
77
91
|
|
78
92
|
end
|
@@ -103,17 +117,9 @@ module DatabaseCleaner::ActiveRecord
|
|
103
117
|
include ::DatabaseCleaner::Generic::Truncation
|
104
118
|
|
105
119
|
def clean
|
106
|
-
each_table do |connection, table_name|
|
107
|
-
connection.truncate_table table_name
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def each_table
|
112
120
|
connection = connection_klass.connection
|
113
121
|
connection.disable_referential_integrity do
|
114
|
-
tables_to_truncate(connection)
|
115
|
-
yield connection, table_name
|
116
|
-
end
|
122
|
+
connection.truncate_tables(tables_to_truncate(connection))
|
117
123
|
end
|
118
124
|
end
|
119
125
|
|
@@ -118,15 +118,17 @@ module DatabaseCleaner
|
|
118
118
|
:mongoid
|
119
119
|
elsif defined? ::CouchPotato
|
120
120
|
:couch_potato
|
121
|
+
elsif defined? ::Sequel
|
122
|
+
:sequel
|
121
123
|
else
|
122
|
-
raise NoORMDetected, "No known ORM was detected! Is ActiveRecord, DataMapper, MongoMapper, Mongoid, or CouchPotato loaded?"
|
124
|
+
raise NoORMDetected, "No known ORM was detected! Is ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, or CouchPotato loaded?"
|
123
125
|
end
|
124
126
|
end
|
125
127
|
end
|
126
128
|
|
127
129
|
def set_default_orm_strategy
|
128
130
|
case orm
|
129
|
-
when :active_record, :data_mapper
|
131
|
+
when :active_record, :data_mapper, :sequel
|
130
132
|
self.strategy = :transaction
|
131
133
|
when :mongo_mapper, :mongoid, :couch_potato
|
132
134
|
self.strategy = :truncation
|
@@ -25,48 +25,48 @@ module DatabaseCleaner
|
|
25
25
|
def connections
|
26
26
|
@connections ||= [::DatabaseCleaner::Base.new]
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def logger=(log_source)
|
30
30
|
@logger = log_source
|
31
31
|
end
|
32
32
|
|
33
33
|
def logger
|
34
34
|
return @logger if @logger
|
35
|
-
|
35
|
+
|
36
36
|
@logger = Logger.new(STDOUT)
|
37
37
|
@logger.level = Logger::ERROR
|
38
38
|
@logger
|
39
39
|
end
|
40
40
|
|
41
41
|
def strategy=(stratagem)
|
42
|
-
|
42
|
+
connections.each { |connect| connect.strategy = stratagem }
|
43
43
|
remove_duplicates
|
44
44
|
end
|
45
45
|
|
46
46
|
def orm=(orm)
|
47
|
-
|
47
|
+
connections.each { |connect| connect.orm = orm }
|
48
48
|
remove_duplicates
|
49
49
|
end
|
50
50
|
|
51
51
|
def start
|
52
|
-
|
52
|
+
connections.each { |connection| connection.start }
|
53
53
|
end
|
54
54
|
|
55
55
|
def clean
|
56
|
-
|
56
|
+
connections.each { |connection| connection.clean }
|
57
57
|
end
|
58
58
|
|
59
59
|
alias clean! clean
|
60
60
|
|
61
61
|
def clean_with(*args)
|
62
|
-
|
62
|
+
connections.each { |connection| connection.clean_with(*args) }
|
63
63
|
end
|
64
64
|
|
65
65
|
alias clean_with! clean_with
|
66
66
|
|
67
67
|
def remove_duplicates
|
68
68
|
temp = []
|
69
|
-
|
69
|
+
connections.each do |connect|
|
70
70
|
temp.push connect unless temp.include? connect
|
71
71
|
end
|
72
72
|
@connections = temp
|
@@ -86,6 +86,8 @@ module DatabaseCleaner
|
|
86
86
|
DatabaseCleaner::MongoMapper
|
87
87
|
when :couch_potato
|
88
88
|
DatabaseCleaner::CouchPotato
|
89
|
+
when :sequel
|
90
|
+
DatabaseCleaner::Sequel
|
89
91
|
end
|
90
92
|
end
|
91
93
|
end
|
@@ -42,7 +42,7 @@ module DataMapper
|
|
42
42
|
# taken from http://github.com/godfat/dm-mapping/tree/master
|
43
43
|
def storage_names(repository = :default)
|
44
44
|
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 177
|
45
|
-
sql = <<-SQL
|
45
|
+
sql = <<-SQL
|
46
46
|
SELECT name
|
47
47
|
FROM sqlite_master
|
48
48
|
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
@@ -68,7 +68,7 @@ module DataMapper
|
|
68
68
|
# taken from http://github.com/godfat/dm-mapping/tree/master
|
69
69
|
def storage_names(repository = :default)
|
70
70
|
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 177
|
71
|
-
sql = <<-SQL
|
71
|
+
sql = <<-SQL
|
72
72
|
SELECT name
|
73
73
|
FROM sqlite_master
|
74
74
|
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
@@ -99,7 +99,7 @@ module DataMapper
|
|
99
99
|
|
100
100
|
# taken from http://github.com/godfat/dm-mapping/tree/master
|
101
101
|
def storage_names(repository = :default)
|
102
|
-
sql = <<-SQL
|
102
|
+
sql = <<-SQL
|
103
103
|
SELECT table_name FROM "information_schema"."tables"
|
104
104
|
WHERE table_schema = current_schema() and table_type = 'BASE TABLE'
|
105
105
|
SQL
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'database_cleaner/generic/base'
|
2
|
+
module DatabaseCleaner
|
3
|
+
module Sequel
|
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
|
+
return @db if @db && @db != :default
|
17
|
+
raise "As you have more than one active sequel database you have to specify the one to use manually!" if ::Sequel::DATABASES.count > 1
|
18
|
+
::Sequel::DATABASES.first || :default
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'database_cleaner/sequel/base'
|
2
|
+
module DatabaseCleaner
|
3
|
+
module Sequel
|
4
|
+
class Transaction
|
5
|
+
include ::DatabaseCleaner::Sequel::Base
|
6
|
+
|
7
|
+
def start
|
8
|
+
@transactions ||= []
|
9
|
+
db.send(:add_transaction)
|
10
|
+
@transactions << db.send(:begin_transaction, db)
|
11
|
+
end
|
12
|
+
|
13
|
+
def clean
|
14
|
+
transaction = @transactions.pop
|
15
|
+
db.send(:rollback_transaction, transaction)
|
16
|
+
db.send(:remove_transaction, transaction)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
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 clean
|
11
|
+
each_table do |db, table|
|
12
|
+
db[table].truncate
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def each_table
|
17
|
+
tables_to_truncate(db).each do |table|
|
18
|
+
yield db, table
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def tables_to_truncate(db)
|
25
|
+
(@only || db.tables) - @tables_to_exclude
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
@@ -31,19 +31,15 @@ module DatabaseCleaner
|
|
31
31
|
|
32
32
|
it "should truncate all tables except for schema_migrations" do
|
33
33
|
connection.stub!(:tables).and_return(%w[schema_migrations widgets dogs])
|
34
|
-
|
35
|
-
connection.should_receive(:
|
36
|
-
connection.should_receive(:truncate_table).with('dogs')
|
37
|
-
connection.should_not_receive(:truncate_table).with('schema_migrations')
|
38
|
-
|
34
|
+
|
35
|
+
connection.should_receive(:truncate_tables).with(['widgets', 'dogs'])
|
39
36
|
Truncation.new.clean
|
40
37
|
end
|
41
38
|
|
42
39
|
it "should only truncate the tables specified in the :only option when provided" do
|
43
40
|
connection.stub!(:tables).and_return(%w[schema_migrations widgets dogs])
|
44
41
|
|
45
|
-
connection.should_receive(:
|
46
|
-
connection.should_not_receive(:truncate_table).with('dogs')
|
42
|
+
connection.should_receive(:truncate_tables).with(['widgets'])
|
47
43
|
|
48
44
|
Truncation.new(:only => ['widgets']).clean
|
49
45
|
end
|
@@ -51,8 +47,7 @@ module DatabaseCleaner
|
|
51
47
|
it "should not truncate the tables specified in the :except option" do
|
52
48
|
connection.stub!(:tables).and_return(%w[schema_migrations widgets dogs])
|
53
49
|
|
54
|
-
connection.should_receive(:
|
55
|
-
connection.should_not_receive(:truncate_table).with('widgets')
|
50
|
+
connection.should_receive(:truncate_tables).with(['dogs'])
|
56
51
|
|
57
52
|
Truncation.new(:except => ['widgets']).clean
|
58
53
|
end
|
@@ -71,8 +66,7 @@ module DatabaseCleaner
|
|
71
66
|
connection.stub!(:tables).and_return(%w[widgets dogs])
|
72
67
|
connection.stub!(:views).and_return(["widgets"])
|
73
68
|
|
74
|
-
connection.should_receive(:
|
75
|
-
connection.should_not_receive(:truncate_table).with('widgets')
|
69
|
+
connection.should_receive(:truncate_tables).with(['dogs'])
|
76
70
|
|
77
71
|
Truncation.new.clean
|
78
72
|
end
|
@@ -17,6 +17,7 @@ module DatabaseCleaner
|
|
17
17
|
Temp_MM = ::MongoMapper if defined?(::MongoMapper) and not defined?(Temp_MM)
|
18
18
|
Temp_MO = ::Mongoid if defined?(::Mongoid) and not defined?(Temp_MO)
|
19
19
|
Temp_CP = ::CouchPotato if defined?(::CouchPotato) and not defined?(Temp_CP)
|
20
|
+
Temp_SQ = ::Sequel if defined?(::Sequel) and not defined?(Temp_SQ)
|
20
21
|
end
|
21
22
|
|
22
23
|
#Remove all ORM mocks and restore from cache
|
@@ -26,6 +27,7 @@ module DatabaseCleaner
|
|
26
27
|
Object.send(:remove_const, 'MongoMapper') if defined?(::MongoMapper)
|
27
28
|
Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
|
28
29
|
Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
|
30
|
+
Object.send(:remove_const, 'Sequel') if defined?(::Sequel)
|
29
31
|
|
30
32
|
|
31
33
|
# Restore ORMs
|
@@ -43,8 +45,9 @@ module DatabaseCleaner
|
|
43
45
|
Object.send(:remove_const, 'MongoMapper') if defined?(::MongoMapper)
|
44
46
|
Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
|
45
47
|
Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
|
48
|
+
Object.send(:remove_const, 'Sequel') if defined?(::Sequel)
|
46
49
|
end
|
47
|
-
|
50
|
+
|
48
51
|
let(:cleaner) { DatabaseCleaner::Base.new :autodetect }
|
49
52
|
|
50
53
|
it "should raise an error when no ORM is detected" do
|
@@ -57,6 +60,7 @@ module DatabaseCleaner
|
|
57
60
|
Object.const_set('MongoMapper', 'Mapping mock mongos')
|
58
61
|
Object.const_set('Mongoid', 'Mongoid mock')
|
59
62
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
63
|
+
Object.const_set('Sequel', 'Sequel mock')
|
60
64
|
|
61
65
|
cleaner.orm.should == :active_record
|
62
66
|
cleaner.should be_auto_detected
|
@@ -67,6 +71,7 @@ module DatabaseCleaner
|
|
67
71
|
Object.const_set('MongoMapper', 'Mapping mock mongos')
|
68
72
|
Object.const_set('Mongoid', 'Mongoid mock')
|
69
73
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
74
|
+
Object.const_set('Sequel', 'Sequel mock')
|
70
75
|
|
71
76
|
cleaner.orm.should == :data_mapper
|
72
77
|
cleaner.should be_auto_detected
|
@@ -76,6 +81,7 @@ module DatabaseCleaner
|
|
76
81
|
Object.const_set('MongoMapper', 'Mapping mock mongos')
|
77
82
|
Object.const_set('Mongoid', 'Mongoid mock')
|
78
83
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
84
|
+
Object.const_set('Sequel', 'Sequel mock')
|
79
85
|
|
80
86
|
cleaner.orm.should == :mongo_mapper
|
81
87
|
cleaner.should be_auto_detected
|
@@ -84,17 +90,26 @@ module DatabaseCleaner
|
|
84
90
|
it "should detect Mongoid fourth" do
|
85
91
|
Object.const_set('Mongoid', 'Mongoid mock')
|
86
92
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
93
|
+
Object.const_set('Sequel', 'Sequel mock')
|
87
94
|
|
88
95
|
cleaner.orm.should == :mongoid
|
89
96
|
cleaner.should be_auto_detected
|
90
97
|
end
|
91
98
|
|
92
|
-
it "should detect CouchPotato
|
99
|
+
it "should detect CouchPotato fifth" do
|
93
100
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
101
|
+
Object.const_set('Sequel', 'Sequel mock')
|
94
102
|
|
95
103
|
cleaner.orm.should == :couch_potato
|
96
104
|
cleaner.should be_auto_detected
|
97
105
|
end
|
106
|
+
|
107
|
+
it "should detect Sequel last" do
|
108
|
+
Object.const_set('Sequel', 'Sequel mock')
|
109
|
+
|
110
|
+
cleaner.orm.should == :sequel
|
111
|
+
cleaner.should be_auto_detected
|
112
|
+
end
|
98
113
|
end
|
99
114
|
|
100
115
|
describe "orm_module" do
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'database_cleaner/sequel/base'
|
3
|
+
require 'database_cleaner/shared_strategy_spec'
|
4
|
+
require 'sequel'
|
5
|
+
|
6
|
+
module DatabaseCleaner
|
7
|
+
describe Sequel do
|
8
|
+
it { should respond_to(:available_strategies) }
|
9
|
+
end
|
10
|
+
|
11
|
+
module Sequel
|
12
|
+
class ExampleStrategy
|
13
|
+
include ::DatabaseCleaner::Sequel::Base
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ExampleStrategy do
|
17
|
+
it_should_behave_like "a generic strategy"
|
18
|
+
it { should respond_to(:db) }
|
19
|
+
it { should respond_to(:db=) }
|
20
|
+
|
21
|
+
it "should store my desired db" do
|
22
|
+
subject.db = :my_db
|
23
|
+
subject.db.should == :my_db
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should default to :default" do
|
27
|
+
subject.db.should == :default
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'database_cleaner/sequel/transaction'
|
3
|
+
require 'database_cleaner/shared_strategy_spec'
|
4
|
+
require 'sequel'
|
5
|
+
|
6
|
+
module DatabaseCleaner
|
7
|
+
module Sequel
|
8
|
+
describe Transaction do
|
9
|
+
it_should_behave_like "a generic strategy"
|
10
|
+
it_should_behave_like "a generic transaction strategy"
|
11
|
+
|
12
|
+
describe "start" do
|
13
|
+
it "should start a transaction"
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "clean" do
|
17
|
+
it "should finish a transaction"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'database_cleaner/sequel/truncation'
|
3
|
+
require 'database_cleaner/shared_strategy_spec'
|
4
|
+
require 'sequel'
|
5
|
+
|
6
|
+
module DatabaseCleaner
|
7
|
+
module Sequel
|
8
|
+
describe Truncation do
|
9
|
+
it_should_behave_like "a generic strategy"
|
10
|
+
it_should_behave_like "a generic truncation strategy"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,13 +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: 3
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 6
|
9
8
|
- 7
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ben Mabey
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-11-12 00:00:00 Z
|
20
19
|
dependencies: []
|
21
20
|
|
22
21
|
description: Strategies for cleaning databases. Can be used to ensure a clean state for testing.
|
@@ -63,7 +62,6 @@ files:
|
|
63
62
|
- features/support/env.rb
|
64
63
|
- features/support/feature_runner.rb
|
65
64
|
- lib/database_cleaner.rb
|
66
|
-
- lib/database_cleaner/active_record/#transaction.rb#
|
67
65
|
- lib/database_cleaner/active_record/base.rb
|
68
66
|
- lib/database_cleaner/active_record/deletion.rb
|
69
67
|
- lib/database_cleaner/active_record/transaction.rb
|
@@ -84,6 +82,9 @@ files:
|
|
84
82
|
- lib/database_cleaner/mongoid/base.rb
|
85
83
|
- lib/database_cleaner/mongoid/truncation.rb
|
86
84
|
- lib/database_cleaner/null_strategy.rb
|
85
|
+
- lib/database_cleaner/sequel/base.rb
|
86
|
+
- lib/database_cleaner/sequel/transaction.rb
|
87
|
+
- lib/database_cleaner/sequel/truncation.rb
|
87
88
|
- spec/database_cleaner/active_record/base_spec.rb
|
88
89
|
- spec/database_cleaner/active_record/transaction_spec.rb
|
89
90
|
- spec/database_cleaner/active_record/truncation_spec.rb
|
@@ -98,13 +99,15 @@ files:
|
|
98
99
|
- spec/database_cleaner/mongo_mapper/base_spec.rb
|
99
100
|
- spec/database_cleaner/mongo_mapper/mongo_examples.rb
|
100
101
|
- spec/database_cleaner/mongo_mapper/truncation_spec.rb
|
102
|
+
- spec/database_cleaner/sequel/base_spec.rb
|
103
|
+
- spec/database_cleaner/sequel/transaction_spec.rb
|
104
|
+
- spec/database_cleaner/sequel/truncation_spec.rb
|
101
105
|
- spec/database_cleaner/shared_strategy_spec.rb
|
102
106
|
- spec/rcov.opts
|
103
107
|
- spec/spec.opts
|
104
108
|
- spec/spec_helper.rb
|
105
109
|
- LICENSE
|
106
110
|
- TODO
|
107
|
-
has_rdoc: true
|
108
111
|
homepage: http://github.com/bmabey/database_cleaner
|
109
112
|
licenses: []
|
110
113
|
|
@@ -134,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
137
|
requirements: []
|
135
138
|
|
136
139
|
rubyforge_project:
|
137
|
-
rubygems_version: 1.
|
140
|
+
rubygems_version: 1.8.5
|
138
141
|
signing_key:
|
139
142
|
specification_version: 3
|
140
143
|
summary: Strategies for cleaning databases. Can be used to ensure a clean state for testing.
|
@@ -153,6 +156,9 @@ test_files:
|
|
153
156
|
- spec/database_cleaner/mongo_mapper/base_spec.rb
|
154
157
|
- spec/database_cleaner/mongo_mapper/mongo_examples.rb
|
155
158
|
- spec/database_cleaner/mongo_mapper/truncation_spec.rb
|
159
|
+
- spec/database_cleaner/sequel/base_spec.rb
|
160
|
+
- spec/database_cleaner/sequel/transaction_spec.rb
|
161
|
+
- spec/database_cleaner/sequel/truncation_spec.rb
|
156
162
|
- spec/database_cleaner/shared_strategy_spec.rb
|
157
163
|
- spec/spec_helper.rb
|
158
164
|
- examples/features/step_definitions/activerecord_steps.rb
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'database_cleaner/active_record/base'
|
2
|
-
class Foo
|
3
|
-
def bar
|
4
|
-
"fdfd"
|
5
|
-
end
|
6
|
-
def zaz(x,y)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
module DatabaseCleaner::ActiveRecord
|
10
|
-
class Transaction
|
11
|
-
include ::DatabaseCleaner::ActiveRecord::Base
|
12
|
-
|
13
|
-
def start
|
14
|
-
connection_klass.Foo
|
15
|
-
if connection_klass.connection.respond_to?(:increment_open_transactions)
|
16
|
-
connection_klass.connection.increment_open_transactions
|
17
|
-
else
|
18
|
-
connection_klass.__send__(:increment_open_transactions)
|
19
|
-
end
|
20
|
-
connection_klass.connection.begin_db_transaction
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
def clean
|
25
|
-
connection_klass.connection.rollback_db_transaction
|
26
|
-
|
27
|
-
if connection_klass.connection.respond_to?(:decrement_open_transactions)
|
28
|
-
connection_klass.connection.decrement_open_transactions
|
29
|
-
else
|
30
|
-
connection_klass.__send__(:decrement_open_transactions)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|