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.
268 269 270 271 272 273 274 275 276 |
# File 'lib/mongoid/persistence_context.rb', line 268 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.
255 256 257 |
# File 'lib/mongoid/persistence_context.rb', line 255 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.
232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/mongoid/persistence_context.rb', line 232 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.
151 152 153 154 |
# File 'lib/mongoid/persistence_context.rb', line 151 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 |
# 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) end unless .empty? client = client.with() end client end end |
#client_name ⇒ Symbol
Get the client name for this persistence context.
137 138 139 140 141 |
# File 'lib/mongoid/persistence_context.rb', line 137 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.
178 179 180 181 |
# File 'lib/mongoid/persistence_context.rb', line 178 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.
167 168 169 |
# File 'lib/mongoid/persistence_context.rb', line 167 def reusable_client? @options.keys == [:client] end |