module SimpleMemoizer::ClassMethods

Public Instance Methods

memoize(*method_names) click to toggle source
# File lib/simple_memoizer.rb, line 5
    def memoize(*method_names)
      method_names.flatten!
      memoized_module = Module.new do
        method_names.each do |name|
          memoized_ivar = SimpleMemoizer.memoized_ivar_for(name)
          module_eval <<-EVAL
            def #{name}
              unless #{memoized_ivar}
                #{memoized_ivar} = [super]
              end
              #{memoized_ivar}[0]
            end

            def #{name}=(value)
              #{memoized_ivar} = [value]
            end
          EVAL
        end
      end
      prepend memoized_module
    end