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 ].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.
45 46 47 48 |
# File 'lib/mongoid/persistence_context.rb', line 45 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.
267 268 269 270 271 272 273 274 275 |
# File 'lib/mongoid/persistence_context.rb', line 267 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.
254 255 256 |
# File 'lib/mongoid/persistence_context.rb', line 254 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.
231 232 233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/mongoid/persistence_context.rb', line 231 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.
150 151 152 153 |
# File 'lib/mongoid/persistence_context.rb', line 150 def ==(other) return false unless other.is_a?(PersistenceContext) == other. end |
#client ⇒ Mongo::Client
Get the client for this persistence context.
116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/mongoid/persistence_context.rb', line 116 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.
136 137 138 139 140 |
# File 'lib/mongoid/persistence_context.rb', line 136 def client_name @client_name ||= [:client] || Threaded.client_override || __evaluate__([:client]) end |
#collection(parent = nil) ⇒ Mongo::Collection
Get the collection for this persistence context.
80 81 82 83 84 |
# File 'lib/mongoid/persistence_context.rb', line 80 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.
93 94 95 96 |
# File 'lib/mongoid/persistence_context.rb', line 93 def collection_name @collection_name ||= (__evaluate__([:collection] || [:collection])) end |
#database_name ⇒ String
Get the database name for this persistence context.
105 106 107 |
# File 'lib/mongoid/persistence_context.rb', line 105 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.
58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/mongoid/persistence_context.rb', line 58 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.
177 178 179 180 |
# File 'lib/mongoid/persistence_context.rb', line 177 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.
166 167 168 |
# File 'lib/mongoid/persistence_context.rb', line 166 def reusable_client? @options.keys == [:client] end |