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