Sha256: 998c5167ef0334f01886d2d9930bdde0193ef204cbc2e65cc65e670ee2f263f5

Contents?: true

Size: 1.69 KB

Versions: 23

Compression:

Stored size: 1.69 KB

Contents

require 'database_cleaner/mongo/base'
require 'database_cleaner/generic/truncation'
require 'database_cleaner/mongo/truncation_mixin'
module DatabaseCleaner
  module Mongo
    class Truncation
      include ::DatabaseCleaner::Generic::Truncation
      include TruncationMixin
      include Base
      private

      def database
        db
      end

      def collections_cache
        @@collections_cache ||= {}
      end

      def mongoid_collection_names
        @@mongoid_collection_names ||= Hash.new{|h,k| h[k]=[]}.tap do |names|
          ObjectSpace.each_object(Class) do |klass|
            (names[klass.db.name] << klass.collection_name) if valid_collection_name?(klass)
          end
        end
      end

      def not_caching(db_name, list)
        @@not_caching ||= {}

        unless @@not_caching.has_key?(db_name)
          @@not_caching[db_name] = true

          puts "Not caching collection names for db #{db_name}. Missing these from models: #{list}"
        end
      end

      def collections
        return collections_cache[database.name] if collections_cache.has_key?(database.name)
        db_collections = database.collections.select { |c| c.name !~ /^system\./ }

        missing_collections = mongoid_collection_names[database.name] - db_collections.map(&:name)

        if missing_collections.empty?
          collections_cache[database.name] = db_collections
        else
          not_caching(database.name, missing_collections)
        end

        db_collections
      end

      private

      def valid_collection_name?(klass)
        klass.ancestors.map(&:to_s).include?('Mongoid::Document') &&
        !klass.embedded &&
        !klass.collection_name.empty?
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 3 rubygems

Version Path
database_cleaner-1.8.4 adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.8.3 adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.8.2 adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.8.1 adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.8.0 adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb
database_cleaner-mongo-1.8.0 lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.8.0.beta adapters/database_cleaner-mongo/lib/database_cleaner/mongo/truncation.rb
database_cleaner-mongo-1.8.0.beta lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.7.0 lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.6.2 lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.6.1 lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.6.0 lib/database_cleaner/mongo/truncation.rb
autocompl-0.2.2 test/dummy/vendor/bundle/ruby/2.3.0/gems/database_cleaner-1.5.3/lib/database_cleaner/mongo/truncation.rb
autocompl-0.2.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/database_cleaner-1.5.3/lib/database_cleaner/mongo/truncation.rb
autocompl-0.2.0 test/dummy/vendor/bundle/ruby/2.3.0/gems/database_cleaner-1.5.3/lib/database_cleaner/mongo/truncation.rb
autocompl-0.1.2 test/dummy/vendor/bundle/ruby/2.3.0/gems/database_cleaner-1.5.3/lib/database_cleaner/mongo/truncation.rb
autocompl-0.1.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/database_cleaner-1.5.3/lib/database_cleaner/mongo/truncation.rb
autocompl-0.1.0 test/dummy/vendor/bundle/ruby/2.3.0/gems/database_cleaner-1.5.3/lib/database_cleaner/mongo/truncation.rb
autocompl-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/database_cleaner-1.5.3/lib/database_cleaner/mongo/truncation.rb
database_cleaner-1.5.3 lib/database_cleaner/mongo/truncation.rb