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 ⇒ Object
-
#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.
-
#initialize(object, opts = {}) ⇒ PersistenceContext
constructor
Initialize the persistence context object.
-
#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.
44 45 46 47 |
# File 'lib/mongoid/persistence_context.rb', line 44 def initialize(object, opts = {}) @object = object (opts) end |
Instance Attribute Details
#options ⇒ Hash (readonly)
The options defining this persistence context.
19 20 21 |
# File 'lib/mongoid/persistence_context.rb', line 19 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.
227 228 229 230 231 232 233 234 235 |
# File 'lib/mongoid/persistence_context.rb', line 227 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.
214 215 216 |
# File 'lib/mongoid/persistence_context.rb', line 214 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.
191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/mongoid/persistence_context.rb', line 191 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.
122 123 124 125 |
# File 'lib/mongoid/persistence_context.rb', line 122 def ==(other) return false unless other.is_a?(PersistenceContext) == other. end |
#client ⇒ Mongo::Client
Get the client for this persistence context.
95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/mongoid/persistence_context.rb', line 95 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 ⇒ Object
108 109 110 111 112 |
# File 'lib/mongoid/persistence_context.rb', line 108 def client_name @client_name ||= [:client] || Threaded.client_override || && __evaluate__([:client]) end |
#collection(parent = nil) ⇒ Mongo::Collection
Get the collection for this persistence context.
59 60 61 62 63 |
# File 'lib/mongoid/persistence_context.rb', line 59 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.
72 73 74 75 |
# File 'lib/mongoid/persistence_context.rb', line 72 def collection_name @collection_name ||= (__evaluate__([:collection] || [:collection])) end |
#database_name ⇒ String
Get the database name for this persistence context.
84 85 86 |
# File 'lib/mongoid/persistence_context.rb', line 84 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.
138 139 140 |
# File 'lib/mongoid/persistence_context.rb', line 138 def reusable_client? @options.keys == [:client] end |