Skip to content

Commit ec4b764

Browse files
committed
Skip conventional sqlite:// URLs from safeguards
Update Safeguard::RemoteDatabaseUrl to skip URLs like "sqlite://path/to/file.sqlite”, which is now the conventional format for URLs to SQLite databases when using libraries like Sequel.
1 parent f458536 commit ec4b764

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

lib/database_cleaner/safeguard.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require "uri"
2+
13
module DatabaseCleaner
24
class Safeguard
35
class Error < Exception
@@ -42,7 +44,8 @@ class RemoteDatabaseUrl
4244
LOCAL = %w(localhost 127.0.0.1)
4345

4446
def run
45-
raise Error::RemoteDatabaseUrl if !skip? && given?
47+
return if skip?
48+
raise Error::RemoteDatabaseUrl if given?
4649
end
4750

4851
private
@@ -54,7 +57,7 @@ def given?
5457
def remote?(url)
5558
return false unless url
5659
parsed = URI.parse(url)
57-
return false if parsed.scheme == 'sqlite3:'
60+
return false if parsed.scheme == 'sqlite' || parsed.scheme == 'sqlite3'
5861

5962
host = parsed.host
6063
return false if host.nil? || host.empty?

spec/database_cleaner/safeguard_spec.rb

+17-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,23 @@ module DatabaseCleaner
4545
end
4646
end
4747

48-
describe 'to a sqlite db' do
48+
describe 'to a sqlite url' do
49+
let(:database_url) { 'sqlite://tmp/db.sqlite3' }
50+
51+
it 'does not raise' do
52+
expect { cleaner.start }.to_not raise_error
53+
end
54+
end
55+
56+
describe 'to a sqlite3 url' do
57+
let(:database_url) { 'sqlite3://tmp/db.sqlite3' }
58+
59+
it 'does not raise' do
60+
expect { cleaner.start }.to_not raise_error
61+
end
62+
end
63+
64+
describe 'to a sqlite3 url with no slashes after the scheme' do
4965
let(:database_url) { 'sqlite3:tmp/db.sqlite3' }
5066

5167
it 'does not raise' do

0 commit comments

Comments
 (0)