module FastMemoize::ClassMethods

Public Instance Methods

memoize(method) click to toggle source
# File lib/fast_memoize.rb, line 12
    def memoize(method)
      raise ParameterizedMethodError.new("Can't memoize a parameterized method") if instance_method(method).arity > 0

      alias_method :"memoized_#{method}", method
      class_eval <<-METHOD, __FILE__, __LINE__ + 1
        def #{method}
          return @#{method} if defined?(@#{method})

          @#{method} = memoized_#{method}
        end
      METHOD
    rescue NameError
      raise UndefinedMethodError.new("Can't memoize undefined method: #{method}")
    end