Module: TheForce::ObjectSupport::Memoization

Included in:
Object
Defined in:
lib/the_force/memoize.rb

Instance Method Summary collapse

Instance Method Details

#attr_memoize(attribute, &b) ⇒ Object

Raises:

  • (ArgumentError)


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

def attr_memoize(attribute, &b)
  raise ArgumentError, "attr_memoize requires a block" unless block_given?
  
  ivar = "@#{attribute}"
  self.class_eval do
    define_method attribute.to_sym do |*args|
      refresh = !!args[0]
      if not instance_variable_defined?(ivar) or refresh
        instance_variable_set(ivar, instance_eval(&b))
      else
        instance_variable_get(ivar)
      end
    end
  end
end