Inline mongoid adapter dependencies. Closes #616

This commit is contained in:
Micah Geisel 2020-02-01 08:57:01 -08:00 committed by Micah Geisel
parent ca0e6bfc48
commit cdad6db79f
4 changed files with 100 additions and 10 deletions

View File

@ -0,0 +1,26 @@
module DatabaseCleaner
module Mongoid
module Mongo1TruncationMixin
def clean
if @only
collections.each { |c| c.send(truncate_method_name) if @only.include?(c.name) }
else
collections.each { |c| c.send(truncate_method_name) unless @tables_to_exclude.include?(c.name) }
end
true
end
private
def collections
database.collections.select { |c| c.name !~ /^system\./ }
end
def truncate_method_name
# This constant only exists in the 2.x series.
defined?(::Mongo::VERSION) ? :delete_many : :remove
end
end
end
end

View File

@ -1,7 +1,6 @@
module DatabaseCleaner
module Mongo2
module TruncationMixin
module Mongoid
module Mongo2TruncationMixin
def clean
if @only
collections.each { |c| database[c].find.delete_many if @only.include?(c) }
@ -33,7 +32,7 @@ module DatabaseCleaner
# name
# end
end
end
end
end

View File

@ -0,0 +1,65 @@
require 'database_cleaner/generic/base'
require 'database_cleaner/generic/truncation'
module DatabaseCleaner
module Mongoid
module MongoidTruncationMixin
include ::DatabaseCleaner::Generic::Base
include ::DatabaseCleaner::Generic::Truncation
def db=(desired_db)
@db = desired_db
end
def db
@db ||= :default
end
def host_port=(desired_host)
@host = desired_host
end
def host
@host ||= '127.0.0.1:27017'
end
def db_version
@db_version ||= session.command('buildinfo' => 1)['version']
end
def clean
if @only
collections.each { |c| session[c].find.remove_all if @only.include?(c) }
else
collections.each { |c| session[c].find.remove_all unless @tables_to_exclude.include?(c) }
end
wait_for_removals_to_finish
true
end
private
def collections
if db != :default
session.use(db)
end
if db_version.split('.').first.to_i >= 3
session.command(listCollections: 1, filter: { 'name' => { '$not' => /.?system\.|\$/ } })['cursor']['firstBatch'].map do |collection|
collection['name']
end
else
session['system.namespaces'].find(name: { '$not' => /\.system\.|\$/ }).to_a.map do |collection|
_, name = collection['name'].split('.', 2)
name
end
end
end
def wait_for_removals_to_finish
session.command(getlasterror: 1)
end
end
end
end

View File

@ -1,8 +1,8 @@
require 'database_cleaner/mongoid/base'
require 'database_cleaner/generic/truncation'
require 'database_cleaner/mongo/truncation_mixin'
require 'database_cleaner/mongo2/truncation_mixin'
require 'database_cleaner/moped/truncation_base'
require 'database_cleaner/mongoid/mongo1_truncation_mixin'
require 'database_cleaner/mongoid/mongo2_truncation_mixin'
require 'database_cleaner/mongoid/mongoid_truncation_mixin'
require 'mongoid/version'
module DatabaseCleaner
@ -13,7 +13,7 @@ module DatabaseCleaner
if ::Mongoid::VERSION < '3'
include ::DatabaseCleaner::Mongo::TruncationMixin
include ::DatabaseCleaner::Mongoid::Mongo1TruncationMixin
private
@ -23,7 +23,7 @@ module DatabaseCleaner
elsif ::Mongoid::VERSION < '5'
include ::DatabaseCleaner::Moped::TruncationBase
include ::DatabaseCleaner::Mongoid::MongoidTruncationMixin
private
@ -41,7 +41,7 @@ module DatabaseCleaner
else
include ::DatabaseCleaner::Mongo2::TruncationMixin
include ::DatabaseCleaner::Mongoid::Mongo2TruncationMixin
end
end