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
- #currently_memoizing? ⇒ Boolean
- #memoizing ⇒ Object
- #sometimes_memoizing(instance_variable_name) ⇒ Object
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
44 45 46 |
# File 'lib/sometimes_memoize.rb', line 44 def currently_memoizing? !!@currently_memoizing end |
#memoizing ⇒ Object
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 |