16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/freedom_patches/inflector_backport.rb', line 16
def self.memoize(*args)
args.each do |method_name|
cache = LruRedux::ThreadSafeCache.new(LRU_CACHE_SIZE)
LRU_CACHES << cache
uncached = "#{method_name}_without_cache"
alias_method uncached, method_name
m =
define_method(method_name) do |*arguments|
found = true
data = cache.fetch(arguments) { found = false }
cache[arguments] = data = public_send(uncached, *arguments) unless found
data.dup
end
ruby2_keywords(m) if Module.respond_to?(:ruby2_keywords, true)
end
end
|