Class: Mongoid::Contextual::Memory

Inherits:
Object
  • Object
show all
Includes:
Enumerable, Aggregable::Memory
Defined in:
lib/mongoid/contextual/memory.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Aggregable::Memory

#avg, #max, #min, #sum

Constructor Details

#initialize(criteria) ⇒ Memory

Create the new in memory context.

Examples:

Create the new context.

Memory.new(criteria)

Parameters:

Since:

  • 3.0.0



161
162
163
164
165
166
167
168
169
170
# File 'lib/mongoid/contextual/memory.rb', line 161

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
  apply_options
end

Instance Attribute Details

#collectionObject (readonly)

Returns the value of attribute collection.



17
18
19
# File 'lib/mongoid/contextual/memory.rb', line 17

def collection
  @collection
end

#collection The root collection.(Therootcollection.) ⇒ Object (readonly)



17
18
19
20
21
22
23
24
# File 'lib/mongoid/contextual/memory.rb', line 17

attr_reader \
:collection,
:criteria,
:documents,
:klass,
:path,
:root,
:selector

#criteriaObject (readonly)

Returns the value of attribute criteria.



17
18
19
# File 'lib/mongoid/contextual/memory.rb', line 17

def criteria
  @criteria
end

#criteria The criteria for the context.(Thecriteria) ⇒ Object (readonly)



17
18
19
20
21
22
23
24
# File 'lib/mongoid/contextual/memory.rb', line 17

attr_reader \
:collection,
:criteria,
:documents,
:klass,
:path,
:root,
:selector

#documentsObject (readonly)

Returns the value of attribute documents.



17
18
19
# File 'lib/mongoid/contextual/memory.rb', line 17

def documents
  @documents
end

#klassObject (readonly)

Returns the value of attribute klass.



17
18
19
# File 'lib/mongoid/contextual/memory.rb', line 17

def klass
  @klass
end

#klass The criteria class.(Thecriteria) ⇒ Object (readonly)



17
18
19
20
21
22
23
24
# File 'lib/mongoid/contextual/memory.rb', line 17

attr_reader \
:collection,
:criteria,
:documents,
:klass,
:path,
:root,
:selector

#matching The in memory documents that match the selector.(The) ⇒ Object (readonly)



17
18
19
20
21
22
23
24
# File 'lib/mongoid/contextual/memory.rb', line 17

attr_reader \
:collection,
:criteria,
:documents,
:klass,
:path,
:root,
:selector

#pathObject (readonly)

Returns the value of attribute path.



17
18
19
# File 'lib/mongoid/contextual/memory.rb', line 17

def path
  @path
end

#path The atomic path.(Theatomicpath.) ⇒ Object (readonly)



17
18
19
20
21
22
23
24
# File 'lib/mongoid/contextual/memory.rb', line 17

attr_reader \
:collection,
:criteria,
:documents,
:klass,
:path,
:root,
:selector

#rootObject (readonly)

Returns the value of attribute root.



17
18
19
# File 'lib/mongoid/contextual/memory.rb', line 17

def root
  @root
end

#root The root document.(Therootdocument.) ⇒ Object (readonly)



17
18
19
20
21
22
23
24
# File 'lib/mongoid/contextual/memory.rb', line 17

attr_reader \
:collection,
:criteria,
:documents,
:klass,
:path,
:root,
:selector

#selectorObject (readonly)

Returns the value of attribute selector.



17
18
19
# File 'lib/mongoid/contextual/memory.rb', line 17

def selector
  @selector
end

#selector The root document selector.(Therootdocumentselector.) ⇒ Object (readonly)



17
18
19
20
21
22
23
24
# File 'lib/mongoid/contextual/memory.rb', line 17

attr_reader \
:collection,
:criteria,
:documents,
:klass,
:path,
:root,
:selector

Instance Method Details

#==(other) ⇒ true, false

Check if the context is equal to the other object.

Examples:

Check equality.

context == []

Parameters:

  • other (Array)

    The other array.

Returns:

  • (true, false)

    If the objects are equal.

Since:

  • 3.0.0



36
37
38
39
# File 'lib/mongoid/contextual/memory.rb', line 36

def ==(other)
  return false unless other.respond_to?(:entries)
  entries == other.entries
end

#blank?true, false Also known as: empty?

Is the enumerable of matching documents empty?

Examples:

Is the context empty?

context.blank?

Returns:

  • (true, false)

    If the context is empty.

Since:

  • 3.0.0



49
50
51
# File 'lib/mongoid/contextual/memory.rb', line 49

def blank?
  count == 0
end

#deletenil Also known as: delete_all

Delete all documents in the database that match the selector.

Examples:

Delete all the documents.

context.delete

Returns:

  • (nil)

    Nil.

Since:

  • 3.0.0



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/mongoid/contextual/memory.rb', line 62

def delete
  deleted = count
  removed = map do |doc|
    prepare_remove(doc)
    doc.as_document
  end
  unless removed.empty?
    collection.find(selector).update("$pullAll" => { path => removed })
  end
  deleted
end

#destroynil Also known as: destroy_all

Destroy all documents in the database that match the selector.

Examples:

Destroy all the documents.

context.destroy

Returns:

  • (nil)

    Nil.

Since:

  • 3.0.0



83
84
85
86
87
88
89
90
# File 'lib/mongoid/contextual/memory.rb', line 83

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.

Examples:

Get the distinct values.

context.distinct(:name)

Parameters:

  • field (String, Symbol)

    The name of the field.

Returns:

  • (Array<Object>)

    The distinct values for the field.

Since:

  • 3.0.0



103
104
105
# File 'lib/mongoid/contextual/memory.rb', line 103

def distinct(field)
  documents.map{ |doc| doc.send(field) }.uniq
end

#eachEnumerator

Iterate over the context. If provided a block, yield to a Mongoid document for each, otherwise return an enum.

Examples:

Iterate over the context.

context.each do |doc|
  puts doc.name
end

Returns:

  • (Enumerator)

    The enumerator.

Since:

  • 3.0.0



118
119
120
121
122
123
124
125
126
# File 'lib/mongoid/contextual/memory.rb', line 118

def each
  if block_given?
    documents[skipping || 0, limiting || documents.length].each do |doc|
      yield doc
    end
  else
    to_enum
  end
end

#exists?true, false

Do any documents exist for the context.

Examples:

Do any documents exist for the context.

context.exists?

Returns:

  • (true, false)

    If the count is more than zero.

Since:

  • 3.0.0



136
137
138
# File 'lib/mongoid/contextual/memory.rb', line 136

def exists?
  count > 0
end

#firstDocument Also known as: one

Get the first document in the database for the criteria’s selector.

Examples:

Get the first document.

context.first

Returns:

Since:

  • 3.0.0



148
149
150
# File 'lib/mongoid/contextual/memory.rb', line 148

def first
  documents.first
end

#lastDocument

Get the last document in the database for the criteria’s selector.

Examples:

Get the last document.

context.last

Returns:

Since:

  • 3.0.0



180
181
182
# File 'lib/mongoid/contextual/memory.rb', line 180

def last
  documents.last
end

#lengthInteger Also known as: size

Get the length of matching documents in the context.

Examples:

Get the length of matching documents.

context.length

Returns:

  • (Integer)

    The matching length.

Since:

  • 3.0.0



192
193
194
# File 'lib/mongoid/contextual/memory.rb', line 192

def length
  documents.length
end

#limit(value) ⇒ Mongo

Limits the number of documents that are returned.

Examples:

Limit the documents.

context.limit(20)

Parameters:

  • value (Integer)

    The number of documents to return.

Returns:

  • (Mongo)

    The context.

Since:

  • 3.0.0



207
208
209
210
# File 'lib/mongoid/contextual/memory.rb', line 207

def limit(value)
  self.limiting = value
  self
end

#skip(value) ⇒ Mongo

Skips the provided number of documents.

Examples:

Skip the documents.

context.skip(20)

Parameters:

  • value (Integer)

    The number of documents to skip.

Returns:

  • (Mongo)

    The context.

Since:

  • 3.0.0



222
223
224
225
# File 'lib/mongoid/contextual/memory.rb', line 222

def skip(value)
  self.skipping = value
  self
end

#sort(values) ⇒ Mongo

Sorts the documents by the provided spec.

Examples:

Sort the documents.

context.sort(name: -1, title: 1)

Parameters:

  • values (Hash)

    The sorting values as field/direction(1/-1) pairs.

Returns:

  • (Mongo)

    The context.

Since:

  • 3.0.0



238
239
240
# File 'lib/mongoid/contextual/memory.rb', line 238

def sort(values)
  in_place_sort(values) and self
end

#update(attributes = nil) ⇒ nil, false Also known as: update_all

Update all the matching documents atomically.

Examples:

Update all the matching documents.

context.update(name: "Smiths")

Parameters:

  • attributes (Hash) (defaults to: nil)

    The new attributes for each document.

Returns:

  • (nil, false)

    False if no attributes were provided.

Since:

  • 3.0.0



252
253
254
255
256
257
258
259
260
261
# File 'lib/mongoid/contextual/memory.rb', line 252

def update(attributes = nil)
  return false unless attributes
  updates = {}
  each do |doc|
    @selector ||= root.atomic_selector
    doc.write_attributes(attributes)
    updates.merge!(doc.atomic_position => attributes)
  end
  collection.find(selector).update("$set" => updates)
end