Class: Mongoid::PersistenceContext

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

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.

[ :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.

( 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.



44
45
46
47
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 44

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.



19
20
21
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 19

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.



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

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



213
214
215
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 213

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:



189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 189

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.



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

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.



93
94
95
96
97
98
99
100
101
102
103
104
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 93

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



106
107
108
109
110
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 106

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.



59
60
61
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 59

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.



70
71
72
73
# File 'build/mongoid-master/lib/mongoid/persistence_context.rb', line 70

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.



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

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

#reusable_client?true | false

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.

Whether the client of the context can be reused later, and therefore should not be closed.

If the persistence context is requested with :client option only, it means that the context should use a client configured in mongoid.yml. Such clients should not be closed when the context is cleared since they will be reused later.

Returns:

  • (true | false)

    True if client can be reused, otherwise false.



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

def reusable_client?
  @options.keys == [:client]
end