lib/nanoc/base/memoization.rb in nanoc-4.2.2 vs lib/nanoc/base/memoization.rb in nanoc-4.2.3
- old
+ new
@@ -6,10 +6,24 @@
# @api private
#
# @since 3.2.0
module Memoization
class Wrapper
+ attr_reader :ref
+
+ def initialize(ref)
+ @ref = ref
+ end
+
+ def inspect
+ @ref.inspect
+ rescue WeakRef::RefError
+ '<weak ref collected>'
+ end
+ end
+
+ class Value
attr_reader :value
def initialize(value)
@value = value
end
@@ -61,18 +75,18 @@
value = NONE
if method_cache.key?(args)
value =
begin
- method_cache[args].value
+ method_cache[args].ref.value
rescue WeakRef::RefError
NONE
end
end
if value.equal?(NONE)
send(original_method_name, *args).tap do |r|
- method_cache[args] = WeakRef.new(Wrapper.new(r))
+ method_cache[args] = Wrapper.new(WeakRef.new(Value.new(r)))
end
else
value
end
end