module Memoist2::ClassMethods

Public Instance Methods

memoize(*method_names) click to toggle source
# File lib/memoist2.rb, line 11
    def memoize(*method_names)
      method_names.each do |method_name|
        memoized_ivar = Memoist2.memoized_ivar_for(method_name)
        memoized_module = Module.new do
          module_eval <<-EVAL
            def #{method_name}
              unless #{memoized_ivar}
                #{memoized_ivar} = [super]
              end
              #{memoized_ivar}[0]
            end

            def self.to_s
              "Memoist2::MemoizedMethod(#{method_name})"
            end
            def self.inspect; to_s; end
          EVAL
        end
        prepend memoized_module
      end
    end
memoize_class_method(*method_names) click to toggle source
# File lib/memoist2.rb, line 33
def memoize_class_method(*method_names)
  singleton_class.class_eval do
    include Memoist2 unless ancestors.include?(Memoist2)
    memoize *method_names
  end
end