Module: Mongoid::Config

Extended by:
Forwardable, Config, Defaults, Encryption, Options
Includes:
DeprecatedOptions
Included in:
Config
Defined in:
lib/mongoid/config.rb,
lib/mongoid/config/options.rb,
lib/mongoid/config/defaults.rb,
lib/mongoid/config/encryption.rb,
lib/mongoid/config/environment.rb,
lib/mongoid/config/validators/client.rb,
lib/mongoid/config/validators/option.rb,
lib/mongoid/config/validators/async_query_executor.rb

Overview

This module defines all the configuration options for Mongoid, including the database connections.

Defined Under Namespace

Modules: Defaults, DeprecatedOptions, Encryption, Environment, Options, Validators

Constant Summary collapse

LOCK =
Mutex.new
VALID_ISOLATION_LEVELS =
%i[ rails thread fiber ].freeze

Constants included from DeprecatedOptions

DeprecatedOptions::OPTIONS

Instance Method Summary collapse

Methods included from Options

defaults, log_level, option, reset, settings

Methods included from Defaults

load_defaults

Methods included from Encryption

encryption_schema_map

Methods included from DeprecatedOptions

prepended

Instance Method Details

#clientsHash

Get the client configuration or an empty hash.

Examples:

Get the clients configuration.

config.clients

Returns:

  • (Hash)

    The clients configuration.



482
483
484
# File 'lib/mongoid/config.rb', line 482

def clients
  @clients ||= {}
end

#configself

Returns the Config singleton, for use in the configure DSL.

Returns:

  • (self)

    The Config singleton.



300
301
302
# File 'lib/mongoid/config.rb', line 300

def config
  self
end

#configured?true | false

Has Mongoid been configured? This is checking that at least a valid client config exists.

Examples:

Is Mongoid configured?

config.configured?

Returns:

  • (true | false)

    If Mongoid is configured.



311
312
313
# File 'lib/mongoid/config.rb', line 311

def configured?
  clients.key?(:default)
end

#connect_to(name, options = { read: { mode: :primary } }) ⇒ Object

Note:

Use only in development or test environments for convenience.

Connect to the provided database name on the default client.

Examples:

Set the database to connect to.

config.connect_to("mongoid_test")

Parameters:

  • name (String)

    The database name.



323
324
325
326
327
328
329
330
331
# File 'lib/mongoid/config.rb', line 323

def connect_to(name, options = { read: { mode: :primary } })
  self.clients = {
    default: {
      database: name,
      hosts: [ 'localhost:27017' ],
      options: options
    }
  }
end

#deregister_model(klass) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Deregister a model in the application with Mongoid.

Parameters:

  • klass (Class)

    The model to deregister.



390
391
392
393
394
# File 'lib/mongoid/config.rb', line 390

def deregister_model(klass)
  LOCK.synchronize do
    models.delete(klass)
  end
end

#destructive_fieldsArray<String>

Return field names that could cause destructive things to happen if defined in a Mongoid::Document.

Examples:

Get the destructive fields.

config.destructive_fields

Returns:

  • (Array<String>)

    An array of bad field names.



340
341
342
# File 'lib/mongoid/config.rb', line 340

def destructive_fields
  Composable.prohibited_methods
end

#load!(path, environment = nil) ⇒ Object

Load the settings from a compliant mongoid.yml file. This can be used for easy setup with frameworks other than Rails.

Examples:

Configure Mongoid.

Mongoid.load!("/path/to/mongoid.yml")

Parameters:

  • path (String)

    The path to the file.

  • environment (String | Symbol) (defaults to: nil)

    The environment to load.



352
353
354
355
356
357
358
359
360
# File 'lib/mongoid/config.rb', line 352

def load!(path, environment = nil)
  settings = Environment.load_yaml(path, environment)
  if settings.present?
    Clients.disconnect
    Clients.clear
    load_configuration(settings)
  end
  settings
end

#load_configuration(settings) ⇒ Object

From a hash of settings, load all the configuration.

Examples:

Load the configuration.

config.load_configuration(settings)

Parameters:

  • settings (Hash)

    The configuration settings.



402
403
404
405
406
407
408
# File 'lib/mongoid/config.rb', line 402

def load_configuration(settings)
  configuration = settings.with_indifferent_access
  self.options = configuration[:options]
  self.clients = configuration[:clients]
  Mongo.options = configuration[:driver_options] || {}
  set_log_levels
end

#modelsArray<Class>

Get all the models in the application - this is everything that includes Mongoid::Document.

Examples:

Get all the models.

config.models

Returns:

  • (Array<Class>)

    All the models in the application.



369
370
371
# File 'lib/mongoid/config.rb', line 369

def models
  @models ||= []
end

#options=(options) ⇒ Object

Set the configuration options. Will validate each one individually.

Examples:

Set the options.

config.options = { raise_not_found_error: true }

Parameters:

  • options (Hash)

    The configuration options.



466
467
468
469
470
471
472
473
474
# File 'lib/mongoid/config.rb', line 466

def options=(options)
  return unless options

  Validators::AsyncQueryExecutor.validate(options)
  options.each_pair do |option, value|
    Validators::Option.validate(option)
    send("#{option}=", value)
  end
end

#override_client(name) ⇒ String | Symbol

Override the client to use globally.

Examples:

Override the client globally.

config.override_client(:optional)

Parameters:

  • name (String | Symbol)

    The name of the client.

Returns:

  • (String | Symbol)

    The global override.



430
431
432
# File 'lib/mongoid/config.rb', line 430

def override_client(name)
  Threaded.client_override = name ? name.to_s : nil
end

#override_database(name) ⇒ String | Symbol

Override the database to use globally.

Examples:

Override the database globally.

config.override_database(:optional)

Parameters:

  • name (String | Symbol)

    The name of the database.

Returns:

  • (String | Symbol)

    The global override.



418
419
420
# File 'lib/mongoid/config.rb', line 418

def override_database(name)
  Threaded.database_override = name
end

#purge!true

Note:

This is the fastest way to drop all data.

Purge all data in all collections, including indexes.

Examples:

Purge all data.

Mongoid::Config.purge!

Returns:

  • (true)

    true.



442
443
444
# File 'lib/mongoid/config.rb', line 442

def purge!
  global_client.database.collections.each(&:drop) and true
end

#real_isolation_levelObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the (potentially-dereferenced) isolation level that Mongoid will use to store its internal state. If isolation_level is set to :rails, this will return the isolation level that Rails is current configured to use (ActiveSupport::IsolatedExecutionState.isolation_level).

If using an older version of Rails that does not support ActiveSupport::IsolatedExecutionState, this will return :thread instead.



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/mongoid/config.rb', line 172

def real_isolation_level
  return isolation_level unless isolation_level == :rails

  if defined?(ActiveSupport::IsolatedExecutionState)
    ActiveSupport::IsolatedExecutionState.isolation_level.tap do |level|
      # We can't guarantee that Rails will always support the same
      # isolation levels as Mongoid, so we check here to make sure
      # it's something we can work with.
      validate_isolation_level!(level)
    end
  else
    # The default, if Rails does not support IsolatedExecutionState,
    :thread
  end
end

#register_model(klass) ⇒ Object

Register a model in the application with Mongoid.

Examples:

Register a model.

config.register_model(Band)

Parameters:

  • klass (Class)

    The model to register.



379
380
381
382
383
# File 'lib/mongoid/config.rb', line 379

def register_model(klass)
  LOCK.synchronize do
    models.push(klass) unless models.include?(klass)
  end
end

#running_with_passenger?true | false

Deprecated.

Is the application running under passenger?

Examples:

Is the application using passenger?

config.running_with_passenger?

Returns:

  • (true | false)

    If the app is deployed on Passenger.



504
505
506
# File 'lib/mongoid/config.rb', line 504

def running_with_passenger?
  @running_with_passenger ||= defined?(PhusionPassenger)
end

#time_zoneString

Get the time zone to use.

Examples:

Get the time zone.

Config.time_zone

Returns:

  • (String)

    The time zone.



492
493
494
# File 'lib/mongoid/config.rb', line 492

def time_zone
  use_utc? ? 'UTC' : ::Time.zone
end

#truncate!true

Note:

This will be slower than purge!

Truncate all data in all collections, but not the indexes.

Examples:

Truncate all collection data.

Mongoid::Config.truncate!

Returns:

  • (true)

    true.



454
455
456
457
458
# File 'lib/mongoid/config.rb', line 454

def truncate!
  global_client.database.collections.each do |collection|
    collection.find.delete_many
  end and true
end

#validate_isolation_level!(level) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Checks to see if the provided isolation level is something that Mongoid supports. Raises Errors::UnsupportedIsolationLevel if it is not.

This will also raise an error if the isolation level is set to :fiber and the Ruby version is less than 3.2, since fiber-local storage is not supported in earlier Ruby versions.



196
197
198
199
200
201
202
# File 'lib/mongoid/config.rb', line 196

def validate_isolation_level!(level)
  raise Errors::UnsupportedIsolationLevel.new(level) unless VALID_ISOLATION_LEVELS.include?(level)

  return unless level == :fiber && RUBY_VERSION < '3.2'

  raise Errors::UnsupportedIsolationLevel.new(level)
end