Module: SometimesMemoize

Defined in:
lib/sometimes_memoize.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VERSION =
'1.0'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



30
31
32
# File 'lib/sometimes_memoize.rb', line 30

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#currently_memoizing?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/sometimes_memoize.rb', line 44

def currently_memoizing?
  !!@currently_memoizing
end

#memoizingObject



34
35
36
37
38
39
40
41
42
# File 'lib/sometimes_memoize.rb', line 34

def memoizing
  @currently_memoizing = true
  begin
    yield
  ensure
    @currently_memoizing = false
    self.class.sometimes_memoized_instance_variable_names.each{|mn| self.instance_variable_set("@#{mn}", nil)}
  end
end

#sometimes_memoizing(instance_variable_name) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/sometimes_memoize.rb', line 48

def sometimes_memoizing(instance_variable_name)
  self.class.sometimes_memoized_instance_variable_names << instance_variable_name
  if self.currently_memoizing?
    if (val = self.instance_variable_get("@#{instance_variable_name}")).nil?
      val = yield
      self.instance_variable_set("@#{instance_variable_name}", val)
    end
    val
  else
    yield
  end
end