Class: Mongoid::Contextual::Memory
- Inherits:
-
Object
- Object
- Mongoid::Contextual::Memory
- Includes:
- Enumerable, Association::EagerLoadable, Aggregable::Memory, Queryable, Positional
- Defined in:
- build/mongoid-7.3/lib/mongoid/contextual/memory.rb
Instance Attribute Summary collapse
-
#documents ⇒ Object
readonly
Returns the value of attribute documents.
- #matching The in memory documents that match the selector.(The) ⇒ Object readonly
-
#path ⇒ Object
readonly
Returns the value of attribute path.
- #path The atomic path.(Theatomicpath.) ⇒ Object readonly
-
#root ⇒ Object
readonly
Returns the value of attribute root.
- #root The root document.(Therootdocument.) ⇒ Object readonly
-
#selector ⇒ Object
readonly
Returns the value of attribute selector.
- #selector The root document selector.(Therootdocumentselector.) ⇒ Object readonly
Attributes included from Queryable
#collection, #collection The collection to query against., #criteria, #criteria The criteria for the context., #klass, #klass The klass for the criteria.
Instance Method Summary collapse
-
#==(other) ⇒ true, false
Check if the context is equal to the other object.
-
#delete ⇒ nil
(also: #delete_all)
Delete all documents in the database that match the selector.
-
#destroy ⇒ nil
(also: #destroy_all)
Destroy all documents in the database that match the selector.
-
#distinct(field) ⇒ Array<Object>
Get the distinct values in the db for the provided field.
-
#each ⇒ Enumerator
Iterate over the context.
-
#exists? ⇒ true, false
Do any documents exist for the context.
-
#first(*args) ⇒ Document
(also: #one, #find_first)
Get the first document in the database for the criteria’s selector.
-
#inc(incs) ⇒ Enumerator
Increment a value on all documents.
-
#initialize(criteria) ⇒ Memory
constructor
Create the new in memory context.
-
#last ⇒ Document
Get the last document in the database for the criteria’s selector.
-
#length ⇒ Integer
(also: #size)
Get the length of matching documents in the context.
-
#limit(value) ⇒ Mongo
Limits the number of documents that are returned.
- #pluck(*fields) ⇒ Object
-
#skip(value) ⇒ Mongo
Skips the provided number of documents.
-
#sort(values) ⇒ Mongo
Sorts the documents by the provided spec.
-
#update(attributes = nil) ⇒ nil, false
Update the first matching document atomically.
-
#update_all(attributes = nil) ⇒ nil, false
Update all the matching documents atomically.
Methods included from Positional
Methods included from Queryable
Methods included from Association::EagerLoadable
#eager_load, #eager_loadable?, #preload
Methods included from Aggregable::Memory
Constructor Details
#initialize(criteria) ⇒ Memory
Create the new in memory context.
149 150 151 152 153 154 155 156 157 158 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 149 def initialize(criteria) @criteria, @klass = criteria, criteria.klass @documents = criteria.documents.select do |doc| @root ||= doc._root @collection ||= root.collection doc._matches?(criteria.selector) end apply_sorting end |
Instance Attribute Details
#documents ⇒ Object (readonly)
Returns the value of attribute documents.
20 21 22 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 def documents @documents end |
#matching The in memory documents that match the selector.(The) ⇒ Object (readonly)
20 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 attr_reader :documents, :path, :root, :selector |
#path ⇒ Object (readonly)
Returns the value of attribute path.
20 21 22 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 def path @path end |
#path The atomic path.(Theatomicpath.) ⇒ Object (readonly)
20 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 attr_reader :documents, :path, :root, :selector |
#root ⇒ Object (readonly)
Returns the value of attribute root.
20 21 22 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 def root @root end |
#root The root document.(Therootdocument.) ⇒ Object (readonly)
20 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 attr_reader :documents, :path, :root, :selector |
#selector ⇒ Object (readonly)
Returns the value of attribute selector.
20 21 22 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 def selector @selector end |
#selector The root document selector.(Therootdocumentselector.) ⇒ Object (readonly)
20 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 20 attr_reader :documents, :path, :root, :selector |
Instance Method Details
#==(other) ⇒ true, false
Check if the context is equal to the other object.
32 33 34 35 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 32 def ==(other) return false unless other.respond_to?(:entries) entries == other.entries end |
#delete ⇒ nil Also known as: delete_all
Delete all documents in the database that match the selector.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 45 def delete deleted = count removed = map do |doc| prepare_remove(doc) doc.send(:as_attributes) end unless removed.empty? collection.find(selector).update_one( positionally(selector, "$pullAll" => { path => removed }), session: _session ) end deleted end |
#destroy ⇒ nil Also known as: destroy_all
Destroy all documents in the database that match the selector.
69 70 71 72 73 74 75 76 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 69 def destroy deleted = count each do |doc| documents.delete_one(doc) doc.destroy end deleted end |
#distinct(field) ⇒ Array<Object>
Get the distinct values in the db for the provided field.
89 90 91 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 89 def distinct(field) documents.map{ |doc| doc.send(field) }.uniq end |
#each ⇒ Enumerator
Iterate over the context. If provided a block, yield to a Mongoid document for each, otherwise return an enum.
104 105 106 107 108 109 110 111 112 113 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 104 def each if block_given? documents_for_iteration.each do |doc| yield(doc) end self else to_enum end end |
#exists? ⇒ true, false
Do any documents exist for the context.
123 124 125 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 123 def exists? count > 0 end |
#first(*args) ⇒ Document Also known as: one, find_first
Get the first document in the database for the criteria’s selector.
135 136 137 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 135 def first(*args) eager_load([documents.first]).first end |
#inc(incs) ⇒ Enumerator
Increment a value on all documents.
170 171 172 173 174 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 170 def inc(incs) each do |document| document.inc(incs) end end |
#last ⇒ Document
Get the last document in the database for the criteria’s selector.
184 185 186 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 184 def last eager_load([documents.last]).first end |
#length ⇒ Integer Also known as: size
Get the length of matching documents in the context.
196 197 198 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 196 def length documents.length end |
#limit(value) ⇒ Mongo
Limits the number of documents that are returned.
211 212 213 214 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 211 def limit(value) self.limiting = value self end |
#pluck(*fields) ⇒ Object
216 217 218 219 220 221 222 223 224 225 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 216 def pluck(*fields) fields = Array.wrap(fields) documents.map do |doc| if fields.size == 1 doc[fields.first] else fields.map { |n| doc[n] }.compact end end.compact end |
#skip(value) ⇒ Mongo
Skips the provided number of documents.
237 238 239 240 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 237 def skip(value) self.skipping = value self end |
#sort(values) ⇒ Mongo
Sorts the documents by the provided spec.
253 254 255 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 253 def sort(values) in_place_sort(values) and self end |
#update(attributes = nil) ⇒ nil, false
Update the first matching document atomically.
267 268 269 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 267 def update(attributes = nil) update_documents(attributes, [ first ]) end |
#update_all(attributes = nil) ⇒ nil, false
Update all the matching documents atomically.
281 282 283 |
# File 'build/mongoid-7.3/lib/mongoid/contextual/memory.rb', line 281 def update_all(attributes = nil) update_documents(attributes, entries) end |