Module: Memoist2

Defined in:
lib/memoist2.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.memoized_ivar_for(symbol) ⇒ Object



3
4
5
# File 'lib/memoist2.rb', line 3

def self.memoized_ivar_for(symbol)
  "@_memoized_#{symbol.to_s.sub(/\?\Z/, '_query').sub(/!\Z/, '_bang')}".to_sym
end

Instance Method Details

#memoize(method_name) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/memoist2.rb', line 7

def memoize(method_name)
  memoized_ivar = Memoist2.memoized_ivar_for(method_name)
  memoized_module = Module.new do
    module_eval <<-EVAL
      def #{method_name}
        if !defined?(#{memoized_ivar}) || #{memoized_ivar}.empty?
          #{memoized_ivar} = [super]
        end
        #{memoized_ivar}[0]
      end
    EVAL
  end
  prepend memoized_module
end