Class: Mongoid::PersistenceContext
- Inherits:
-
Object
- Object
- Mongoid::PersistenceContext
- Extended by:
- Forwardable
- Defined in:
- 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.
[ :client, :collection, :collection_options ].freeze
- VALID_OPTIONS =
The full list of valid persistence context options.
( Mongo::Client::VALID_OPTIONS + EXTRA_OPTIONS ).freeze
Instance Attribute Summary collapse
-
#options ⇒ Hash
readonly
The options defining this persistence context.
Class Method Summary collapse
-
.clear(object, cluster = nil, original_context = nil) ⇒ Object
Clear the persistence context for a particular class or model instance.
-
.get(object) ⇒ Mongoid::PersistenceContext
Get the persistence context for a particular class or model instance.
-
.set(object, options_or_context) ⇒ Mongoid::PersistenceContext
Set the persistence context for a particular class or model instance.
Instance Method Summary collapse
-
#==(other) ⇒ true | false
Determine if this persistence context is equal to another.
-
#client ⇒ Mongo::Client
Get the client for this persistence context.
-
#client_name ⇒ Symbol
Get the client name for this persistence context.
-
#collection(parent = nil) ⇒ Mongo::Collection
Get the collection for this persistence context.
-
#collection_name ⇒ String
Get the collection name for this persistence context.
-
#database_name ⇒ String
Get the database name for this persistence context.
-
#for_child(document) ⇒ PersistenceContext
private
Returns a new persistence context that is consistent with the given child document, inheriting most appropriate settings.
-
#initialize(object, opts = {}) ⇒ PersistenceContext
constructor
Initialize the persistence context object.
-
#requested_storage_options ⇒ Hash | nil
private
The subset of provided options that may be used as storage options.
-
#reusable_client? ⇒ true | false
private
Whether the client of the context can be reused later, and therefore should not be closed.
Constructor Details
#initialize(object, opts = {}) ⇒ PersistenceContext
Initialize the persistence context object.
46 47 48 49 |
# File 'lib/mongoid/persistence_context.rb', line 46 def initialize(object, opts = {}) @object = object (opts) end |
Instance Attribute Details
#options ⇒ Hash (readonly)
The options defining this persistence context.
20 21 22 |
# File 'lib/mongoid/persistence_context.rb', line 20 def @options end |
Class Method Details
.clear(object, cluster = nil, original_context = nil) ⇒ Object
Clear the persistence context for a particular class or model instance.
271 272 273 274 275 276 277 278 279 |
# File 'lib/mongoid/persistence_context.rb', line 271 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 store_context(object, original_context) end |
.get(object) ⇒ Mongoid::PersistenceContext
Get the persistence context for a particular class or model instance.
258 259 260 |
# File 'lib/mongoid/persistence_context.rb', line 258 def get(object) get_context(object) 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.
235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/mongoid/persistence_context.rb', line 235 def set(object, ) existing_context = get_context(object) = if existing_context existing_context. else {} end if .is_a?(PersistenceContext) = . end = .merge() context = PersistenceContext.new(object, ) store_context(object, context) end |
Instance Method Details
#==(other) ⇒ true | false
Determine if this persistence context is equal to another.
154 155 156 157 |
# File 'lib/mongoid/persistence_context.rb', line 154 def ==(other) return false unless other.is_a?(PersistenceContext) == other. end |
#client ⇒ Mongo::Client
Get the client for this persistence context.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/mongoid/persistence_context.rb', line 117 def client @client ||= begin client = Clients.with_name(client_name) = if database_name_option client = client.use(database_name) = .except(:database, 'database') end client = client.with() unless .empty? client end end |
#client_name ⇒ Symbol
Get the client name for this persistence context.
140 141 142 143 144 |
# File 'lib/mongoid/persistence_context.rb', line 140 def client_name @client_name ||= [:client] || Threaded.client_override || __evaluate__([:client]) end |
#collection(parent = nil) ⇒ Mongo::Collection
Get the collection for this persistence context.
81 82 83 84 85 |
# File 'lib/mongoid/persistence_context.rb', line 81 def collection(parent = nil) parent ? parent.collection.with(.except(:database, "database")) : client[collection_name.to_sym] end |
#collection_name ⇒ String
Get the collection name for this persistence context.
94 95 96 97 |
# File 'lib/mongoid/persistence_context.rb', line 94 def collection_name @collection_name ||= (__evaluate__([:collection] || [:collection])) end |
#database_name ⇒ String
Get the database name for this persistence context.
106 107 108 |
# File 'lib/mongoid/persistence_context.rb', line 106 def database_name __evaluate__(database_name_option) || client.database.name end |
#for_child(document) ⇒ PersistenceContext
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 a new persistence context that is consistent with the given child document, inheriting most appropriate settings.
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/mongoid/persistence_context.rb', line 59 def for_child(document) if document.is_a?(Class) return self if document == (@object.is_a?(Class) ? @object : @object.class) elsif document.is_a?(Mongoid::Document) return self if document.class == (@object.is_a?(Class) ? @object : @object.class) else raise ArgumentError, 'must specify a class or a document instance' end PersistenceContext.new(document, .merge(document.)) end |
#requested_storage_options ⇒ Hash | nil
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.
The subset of provided options that may be used as storage options.
181 182 183 184 |
# File 'lib/mongoid/persistence_context.rb', line 181 def slice = @options.slice(*Mongoid::Clients::Validators::Storage::VALID_OPTIONS) slice.any? ? slice : nil 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.
170 171 172 |
# File 'lib/mongoid/persistence_context.rb', line 170 def reusable_client? @options.keys == [:client] end |