lib/bullet/mongoid7x.rb in bullet-6.1.5 vs lib/bullet/mongoid7x.rb in bullet-7.0.0

- old
+ new

@@ -21,19 +21,36 @@ Bullet::Detector::NPlusOneQuery.add_impossible_object(result) if result result end def each(&block) - return to_enum unless block + return to_enum unless block_given? - records = [] - origin_each { |record| records << record } - if records.length > 1 - Bullet::Detector::NPlusOneQuery.add_possible_objects(records) - elsif records.size == 1 - Bullet::Detector::NPlusOneQuery.add_impossible_object(records.first) + first_document = nil + document_count = 0 + + origin_each do |document| + document_count += 1 + + if document_count == 1 + first_document = document + elsif document_count == 2 + Bullet::Detector::NPlusOneQuery.add_possible_objects([first_document, document]) + yield(first_document) + first_document = nil + yield(document) + else + Bullet::Detector::NPlusOneQuery.add_possible_objects(document) + yield(document) + end end - records.each(&block) + + if document_count == 1 + Bullet::Detector::NPlusOneQuery.add_impossible_object(first_document) + yield(first_document) + end + + self end def eager_load(docs) associations = criteria.inclusions.map(&:name) docs.each { |doc| Bullet::Detector::NPlusOneQuery.add_object_associations(doc, associations) }