Class: Mongoid::Contextual::Memory

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

Instance Attribute Summary collapse

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.

Attributes included from Relations::Eager

#eager_loaded

Instance Method Summary collapse

Methods included from Positional

#positionally

Methods included from Queryable

#blank?

Methods included from Relations::Eager

#eager_load, #eager_load_one, #eager_loadable?, #preload, #with_eager_loading

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)

Since:

  • 3.0.0



147
148
149
150
151
152
153
154
155
156
# File 'lib/mongoid/contextual/memory.rb', line 147

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

#documentsObject (readonly)

Returns the value of attribute documents



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

def documents
  @documents
end

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



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

attr_reader :documents, :path, :root, :selector

#pathObject (readonly)

Returns the value of attribute path



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

def path
  @path
end

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



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

attr_reader :documents, :path, :root, :selector

#rootObject (readonly)

Returns the value of attribute root



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

def root
  @root
end

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



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

attr_reader :documents, :path, :root, :selector

#selectorObject (readonly)

Returns the value of attribute selector



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

def selector
  @selector
end

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



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

attr_reader :documents, :path, :root, :selector

Instance Method Details

#==(other) ⇒ true, false

Check if the context is equal to the other object.

Examples:

Check equality.

context == []

Since:

  • 3.0.0



30
31
32
33
# File 'lib/mongoid/contextual/memory.rb', line 30

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

#deletenil Also known as: delete_all

Delete all documents in the database that match the selector.

Examples:

Delete all the documents.

context.delete

Since:

  • 3.0.0



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/mongoid/contextual/memory.rb', line 43

def delete
  deleted = count
  removed = map do |doc|
    prepare_remove(doc)
    doc.as_document
  end
  unless removed.empty?
    collection.find(selector).update(
      positionally(selector, "$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

Since:

  • 3.0.0



66
67
68
69
70
71
72
73
# File 'lib/mongoid/contextual/memory.rb', line 66

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)

Since:

  • 3.0.0



86
87
88
# File 'lib/mongoid/contextual/memory.rb', line 86

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

Since:

  • 3.0.0



101
102
103
104
105
106
107
108
109
110
# File 'lib/mongoid/contextual/memory.rb', line 101

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.

Examples:

Do any documents exist for the context.

context.exists?

Since:

  • 3.0.0



120
121
122
# File 'lib/mongoid/contextual/memory.rb', line 120

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

Since:

  • 3.0.0



132
133
134
135
136
# File 'lib/mongoid/contextual/memory.rb', line 132

def first
  doc = documents.first
  eager_load_one(doc)
  doc
end

#lastDocument

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

Examples:

Get the last document.

context.last

Since:

  • 3.0.0



166
167
168
169
170
# File 'lib/mongoid/contextual/memory.rb', line 166

def last
  doc = documents.last
  eager_load_one(doc)
  doc
end

#lengthInteger Also known as: size

Get the length of matching documents in the context.

Examples:

Get the length of matching documents.

context.length

Since:

  • 3.0.0



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

def length
  documents.length
end

#limit(value) ⇒ Mongo

Limits the number of documents that are returned.

Examples:

Limit the documents.

context.limit(20)

Since:

  • 3.0.0



195
196
197
198
# File 'lib/mongoid/contextual/memory.rb', line 195

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

#pluck(*fields) ⇒ Object



200
201
202
203
204
205
206
207
208
209
# File 'lib/mongoid/contextual/memory.rb', line 200

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.

Examples:

Skip the documents.

context.skip(20)

Since:

  • 3.0.0



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

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)

Since:

  • 3.0.0



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

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

#update(attributes = nil) ⇒ nil, false

Update the first matching document atomically.

Examples:

Update the matching document.

context.update(name: "Smiths")

Since:

  • 3.0.0



251
252
253
# File 'lib/mongoid/contextual/memory.rb', line 251

def update(attributes = nil)
  update_documents(attributes, [ first ])
end

#update_all(attributes = nil) ⇒ nil, false

Update all the matching documents atomically.

Examples:

Update all the matching documents.

context.update_all(name: "Smiths")

Since:

  • 3.0.0



265
266
267
# File 'lib/mongoid/contextual/memory.rb', line 265

def update_all(attributes = nil)
  update_documents(attributes, entries)
end