Class: Mongoid::PersistenceContext

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
build/mongoid-7.3/lib/mongoid/persistence_context.rb

Overview

Object encapsulating logic for setting/getting a collection and database name and a client with particular options to use when persisting models.

Since:

  • 6.0.0

Constant Summary collapse

EXTRA_OPTIONS =

Extra options in addition to driver client options that determine the persistence context.

Returns:

  • (Array<Symbol>)

    The list of extra options besides client options that determine the persistence context.

Since:

  • 6.0.0

[ :client,
  :collection
].freeze
VALID_OPTIONS =

The full list of valid persistence context options.

Returns:

  • (Array<Symbol>)

    The full list of options defining the persistence context.

Since:

  • 6.0.0

( Mongo::Client::VALID_OPTIONS + EXTRA_OPTIONS ).freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(object, opts = {}) ⇒ PersistenceContext

Initialize the persistence context object.

Examples:

Create a new persistence context.

PersistenceContext.new(model, collection: 'other')

Parameters:

  • object (Object)

    The class or model instance for which a persistence context should be created.

  • opts (Hash) (defaults to: {})

    The persistence context options.

Since:

  • 6.0.0



55
56
57
58
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 55

def initialize(object, opts = {})
  @object = object
  set_options!(opts)
end

Instance Attribute Details

#optionsHash (readonly)

The options defining this persistence context.

Returns:

  • (Hash)

    The persistence context options.

Since:

  • 6.0.0



24
25
26
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 24

def options
  @options
end

Class Method Details

.clear(object, cluster = nil, original_context = nil) ⇒ Object

Clear the persistence context for a particular class or model instance.

Examples:

Clear the persistence context for a class or model instance.

PersistenceContext.clear(model)

Parameters:

  • object (Class, Object)

    The class or model instance.

  • cluster (Mongo::Cluster) (defaults to: nil)

    The original cluster before this context was used.

  • original_context (Mongoid::PersistenceContext) (defaults to: nil)

    The original persistence context that was set before this context was used.

Since:

  • 6.0.0



238
239
240
241
242
243
244
245
246
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 238

def clear(object, cluster = nil, original_context = nil)
  if context = get(object)
    unless cluster.nil? || context.cluster.equal?(cluster)
      context.client.close
    end
  end
ensure
  Thread.current["[mongoid][#{object.object_id}]:context"] = original_context
end

.get(object) ⇒ Mongoid::PersistenceContext

Get the persistence context for a particular class or model instance.

Examples:

Get the persistence context for a class or model instance.

PersistenceContext.get(model)

Parameters:

  • object (Object)

    The class or model instance.

Returns:

Since:

  • 6.0.0



223
224
225
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 223

def get(object)
  Thread.current["[mongoid][#{object.object_id}]:context"]
end

.set(object, options_or_context) ⇒ Mongoid::PersistenceContext

Set the persistence context for a particular class or model instance.

If there already is a persistence context set, options in the existing context are combined with options given to the set call.

Examples:

Set the persistence context for a class or model instance.

PersistenceContext.set(model)

Parameters:

  • object (Object)

    The class or model instance.

  • options_or_context (Hash, Mongoid::PersistenceContext)

    The persistence options or a persistence context object.

Returns:

Since:

  • 6.0.0



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 197

def set(object, options_or_context)
  key = "[mongoid][#{object.object_id}]:context"
  existing_context = Thread.current[key]
  existing_options = if existing_context
    existing_context.options
  else
    {}
  end
  if options_or_context.is_a?(PersistenceContext)
    options_or_context = options_or_context.options
  end
  new_options = existing_options.merge(options_or_context)
  context = PersistenceContext.new(object, new_options)
  Thread.current[key] = context
end

Instance Method Details

#==(other) ⇒ true, false

Determine if this persistence context is equal to another.

Examples:

Compare two persistence contexts.

context == other_context

Parameters:

  • other (Object)

    The object to be compared with this one.

Returns:

  • (true, false)

    Whether the two persistence contexts are equal.

Since:

  • 6.0.0



141
142
143
144
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 141

def ==(other)
  return false unless other.is_a?(PersistenceContext)
  options == other.options
end

#clientMongo::Client

Get the client for this persistence context.

Examples:

Get the client for this persistence context.

context.client

Returns:

  • (Mongo::Client)

    The client for this persistence context.

Since:

  • 6.0.0



112
113
114
115
116
117
118
119
120
121
122
123
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 112

def client
  @client ||= begin
    client = Clients.with_name(client_name)
    if database_name_option
      client = client.use(database_name)
    end
    unless client_options.empty?
      client = client.with(client_options)
    end
    client
  end
end

#client_nameObject

Since:

  • 6.0.0



125
126
127
128
129
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 125

def client_name
  @client_name ||= options[:client] ||
                     Threaded.client_override ||
                     storage_options && __evaluate__(storage_options[:client])
end

#collection(parent = nil) ⇒ Mongo::Collection

Get the collection for this persistence context.

Examples:

Get the collection for this persistence context.

context.collection

Parameters:

  • parent (Object) (defaults to: nil)

    The parent object whose collection name is used instead of this persistence context’s collection name.

Returns:

  • (Mongo::Collection)

    The collection for this persistence context.

Since:

  • 6.0.0



72
73
74
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 72

def collection(parent = nil)
  parent ? parent.collection.with(client_options) : client[collection_name.to_sym]
end

#collection_nameString

Get the collection name for this persistence context.

Examples:

Get the collection name for this persistence context.

context.collection_name

Returns:

  • (String)

    The collection name for this persistence context.

Since:

  • 6.0.0



85
86
87
88
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 85

def collection_name
  @collection_name ||= (__evaluate__(options[:collection] ||
                         storage_options[:collection]))
end

#database_nameString

Get the database name for this persistence context.

Examples:

Get the database name for this persistence context.

context.database_name

Returns:

  • (String)

    The database name for this persistence context.

Since:

  • 6.0.0



99
100
101
# File 'build/mongoid-7.3/lib/mongoid/persistence_context.rb', line 99

def database_name
  __evaluate__(database_name_option) || client.database.name
end