lib/nanoc/base/memoization.rb in nanoc-4.2.3 vs lib/nanoc/base/memoization.rb in nanoc-4.2.4
- old
+ new
@@ -13,13 +13,16 @@
def initialize(ref)
@ref = ref
end
def inspect
- @ref.inspect
- rescue WeakRef::RefError
- '<weak ref collected>'
+ obj = @ref.object
+ if obj
+ obj.inspect
+ else
+ '<garbage collected>'
+ end
end
end
class Value
attr_reader :value
@@ -73,20 +76,16 @@
@__memoization_cache[method_name] ||= {}
method_cache = @__memoization_cache[method_name]
value = NONE
if method_cache.key?(args)
- value =
- begin
- method_cache[args].ref.value
- rescue WeakRef::RefError
- NONE
- end
+ object = method_cache[args].ref.object
+ value = object ? object.value : NONE
end
if value.equal?(NONE)
send(original_method_name, *args).tap do |r|
- method_cache[args] = Wrapper.new(WeakRef.new(Value.new(r)))
+ method_cache[args] = Wrapper.new(Ref::SoftReference.new(Value.new(r)))
end
else
value
end
end