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