Skip to content

Commit 8248bf2

Browse files
committed
MONGOID-4998 refactor numbered_cache
1 parent e38457f commit 8248bf2

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

lib/mongoid/contextual/mongo.rb

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ def first(limit_or_opts = nil)
265265
if cached? && cache_loaded?
266266
return limit ? documents.first(limit) : documents.first
267267
end
268-
try_numbered_cache(:first, limit, :first) do
268+
try_numbered_cache(:first, limit) do
269269
if limit_or_opts.try(:key?, :id_sort)
270270
Mongoid::Warnings.warn_id_sort_deprecated
271271
end
@@ -374,13 +374,14 @@ def last(limit_or_opts = nil)
374374
if cached? && cache_loaded?
375375
return limit ? documents.last(limit) : documents.last
376376
end
377-
try_numbered_cache(:last, limit, :last) do
377+
res = try_numbered_cache(:last, limit) do
378378
with_inverse_sorting(limit_or_opts) do
379-
if raw_docs = view.limit(limit || 1).to_a.reverse
379+
if raw_docs = view.limit(limit || 1).to_a
380380
process_raw_docs(raw_docs, limit)
381381
end
382382
end
383383
end
384+
res.is_a?(Array) ? res.reverse : res
384385
end
385386

386387
# Get's the number of documents matching the query selector.
@@ -616,10 +617,9 @@ def try_cache(key, &block)
616617
# @param [ String, Symbol ] key The instance variable name
617618
# @param [ Integer | nil ] n The number of documents requested or nil
618619
# if none is requested.
619-
# @param [ Symbol ] meth Method to extract the correct number of elements.
620620
#
621621
# @return [ Object ] The result of the block.
622-
def try_numbered_cache(key, n, meth, &block)
622+
def try_numbered_cache(key, n, &block)
623623
unless cached?
624624
yield if block_given?
625625
else
@@ -628,11 +628,12 @@ def try_numbered_cache(key, n, meth, &block)
628628
if !ret || ret.length < len
629629
instance_variable_set("@#{key}", ret = Array.wrap(yield))
630630
elsif !n
631-
ret = ret.is_a?(Array) ? ret.first : ret
631+
ret.is_a?(Array) ? ret.first : ret
632632
elsif ret.length > len
633-
ret = ret.send(meth, n)
633+
ret.first(n)
634+
else
635+
ret
634636
end
635-
ret
636637
end
637638
end
638639

0 commit comments

Comments
 (0)