diff --git a/lib/database_cleaner/sequel/transaction.rb b/lib/database_cleaner/sequel/transaction.rb index c918a7d..c5aae45 100644 --- a/lib/database_cleaner/sequel/transaction.rb +++ b/lib/database_cleaner/sequel/transaction.rb @@ -3,7 +3,18 @@ module DatabaseCleaner module Sequel class Transaction < Base + def self.check_fiber_brokenness + if !@checked_fiber_brokenness && Fiber.new { Thread.current }.resume != Thread.current + raise RuntimeError, "This ruby engine's Fibers are not compatible with Sequel's connection pool. " + + "To work around this, please use DatabaseCleaner.cleaning with a block instead of " + + "DatabaseCleaner.start and DatabaseCleaner.clean" + end + @checked_fiber_brokenness = true + end + def start + self.class.check_fiber_brokenness + @fibers ||= [] db = self.db f = Fiber.new do @@ -19,6 +30,10 @@ def clean f = @fibers.pop f.resume end + + def cleaning + self.db.transaction(:rollback => :always, :savepoint => true, :auto_savepoint => true) { yield } + end end end end diff --git a/lib/database_cleaner/sequel/version.rb b/lib/database_cleaner/sequel/version.rb index 0871998..ac46dc1 100644 --- a/lib/database_cleaner/sequel/version.rb +++ b/lib/database_cleaner/sequel/version.rb @@ -1,5 +1,5 @@ module DatabaseCleaner module Sequel - VERSION = "2.0.0" + VERSION = "2.0.1" end end