Skip to content

Commit

Permalink
Merge pull request #902 from nanoc/soft-ref
Browse files Browse the repository at this point in the history
Use soft ref rather than weak ref
  • Loading branch information
denisdefreyne committed Jul 10, 2016
2 parents 445e8bd + 0197523 commit eed539b
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 10 deletions.
1 change: 1 addition & 0 deletions lib/nanoc.rb
Expand Up @@ -22,6 +22,7 @@ def self.on_windows?

# Load external dependencies
require 'hamster'
require 'ref'

# Load general requirements
require 'digest'
Expand Down
19 changes: 9 additions & 10 deletions lib/nanoc/base/memoization.rb
Expand Up @@ -15,9 +15,12 @@ def initialize(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

Expand Down Expand Up @@ -75,17 +78,13 @@ def memoize(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
Expand Down
1 change: 1 addition & 0 deletions nanoc.gemspec
Expand Up @@ -26,6 +26,7 @@ Gem::Specification.new do |s|

s.add_runtime_dependency('cri', '~> 2.3')
s.add_runtime_dependency('hamster', '~> 3.0')
s.add_runtime_dependency('ref', '~> 2.0')

s.add_development_dependency('bundler', '>= 1.7.10', '< 2.0')
end

0 comments on commit eed539b

Please sign in to comment.