Class: Mongoid::Contextual::Mongo

Inherits:
Object
  • Object
show all
Defined in:
lib/rocket_job/extensions/mongoid/contextual/mongo.rb,
lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb

Instance Method Summary collapse

Constructor Details

#initialize(criteria) ⇒ Mongo

Returns a new instance of Mongo.



5
6
7
8
9
10
11
12
13
14
# File 'lib/rocket_job/extensions/mongoid/contextual/mongo.rb', line 5

def initialize(criteria)
  @criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
  # Only line changed is here, get collection name from criteria, not @klass
  #@collection = @klass.collection
  @collection = criteria.collection

  criteria.send(:merge_type_selection)
  @view = collection.find(criteria.selector, session: _session)
  apply_options
end

Instance Method Details

#documents_for_iterationObject



49
50
51
52
53
54
# File 'lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb', line 49

def documents_for_iteration
  return documents if cached? && !documents.empty?
  return view unless eager_loadable?
  docs = view.map{ |doc| Factory.from_db(klass, doc, criteria.options[:fields], criteria) }
  eager_load(docs)
end

#find_firstObject



30
31
32
33
34
35
36
# File 'lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb', line 30

def find_first
  return documents.first if cached? && cache_loaded?
  if raw_doc = view.first
    doc = Factory.from_db(klass, raw_doc, criteria.options[:fields], criteria)
    eager_load([doc]).first
  end
end

#firstObject

Patches below add ‘criteria` as the last argument to `Factory.from_db`



20
21
22
23
24
25
26
27
28
# File 'lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb', line 20

def first
  return documents.first if cached? && cache_loaded?
  try_cache(:first) do
    if raw_doc = view.limit(-1).first
      doc = Factory.from_db(klass, raw_doc, criteria.options[:fields], criteria)
      eager_load([doc]).first
    end
  end
end

#lastObject



38
39
40
41
42
43
44
45
46
47
# File 'lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb', line 38

def last
  try_cache(:last) do
    with_inverse_sorting do
      if raw_doc = view.limit(-1).first
        doc = Factory.from_db(klass, raw_doc, criteria.options[:fields], criteria)
        eager_load([doc]).first
      end
    end
  end
end

#yield_document(document) {|doc| ... } ⇒ Object

Yields:

  • (doc)


56
57
58
59
60
61
# File 'lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb', line 56

def yield_document(document, &block)
  doc = document.respond_to?(:_id) ?
          document : Factory.from_db(klass, document, criteria.options[:fields], criteria)
  yield(doc)
  documents.push(doc) if cacheable?
end