Class: Mongoid::PersistenceContext

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
build/mongoid-7.0/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



52
53
54
55
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 52

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



21
22
23
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 21

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



226
227
228
229
230
231
232
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 226

def clear(object, cluster = nil, original_context = nil)
  if context = get(object)
    context.client.close unless (context.cluster.equal?(cluster) || cluster.nil?)
  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



211
212
213
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 211

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



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 185

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



135
136
137
138
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 135

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



109
110
111
112
113
114
115
116
117
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 109

def client
  client_options = send(:client_options)
  if client_options[:read].is_a?(Symbol)
    client_options = client_options.merge(read: {mode: client_options[:read]})
  end
  @client ||= (client = Clients.with_name(client_name)
                client = client.use(database_name) if database_name_option
                client.with(client_options))
end

#client_nameObject

Since:

  • 6.0.0



119
120
121
122
123
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 119

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



69
70
71
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 69

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



82
83
84
85
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 82

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



96
97
98
# File 'build/mongoid-7.0/lib/mongoid/persistence_context.rb', line 96

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