Sha256: f0dfe8ed8a4d37e0eee25d274acdd6644a6f858142c6b9163f7a467a5e4fa544
Contents?: true
Size: 862 Bytes
Versions: 9
Compression:
Stored size: 862 Bytes
Contents
module Walruz module Memoization def self.included(base) base.extend(ClassMethods) end module ClassMethods # Avoiding name clashes with Rails def walruz_memoize(*methods) methods.each do |method| self.walruz_memoize_method(method) end end def walruz_memoize_method(method) memoized = {} original_method = self.instance_method(method) self.send(:define_method, method) do |*params| bound_original_method = original_method.bind(self).to_proc if params.last.kind_of?(Symbol) && params.last == :reload params.pop memoized[[self, params]] = bound_original_method.call(*params) else memoized[[self, params]] ||= bound_original_method.call(*params) end end end end end end
Version data entries
9 entries across 9 versions & 1 rubygems