Module: Miasma::Utils::Memoization

Included in:
Contrib::OpenStackApiCore, Models::Orchestration::Stack, Types::Api, Types::Collection, Types::Model
Defined in:
lib/miasma/utils/memoization.rb

Overview

Memoization helpers

Instance Method Summary collapse

Instance Method Details

#_memoObject



25
26
27
# File 'lib/miasma/utils/memoization.rb', line 25

def _memo
  Thread.current[:miasma_memoization] ||= Smash.new
end

#clear_memoizations!TrueClass

Remove all memoized values

Returns:

  • (TrueClass)


44
45
46
47
48
49
50
51
# File 'lib/miasma/utils/memoization.rb', line 44

def clear_memoizations!
  _memo.keys.find_all do |key|
    key.to_s.start_with?("#{self.object_id}_")
  end.each do |key|
    _memo.delete(key)
  end
  true
end

#memoize(key, direct = false) { ... } ⇒ Object

Memoize data

Parameters:

  • key (String, Symbol)

    identifier for data

  • direct (Truthy, Falsey) (defaults to: false)

    direct skips key prepend of object id

Yields:

  • block to create data

Yield Returns:

  • data to memoize

Returns:

  • (Object)

    data



15
16
17
18
19
20
21
22
23
# File 'lib/miasma/utils/memoization.rb', line 15

def memoize(key, direct=false)
  unless(direct)
    key = "#{self.object_id}_#{key}"
  end
  unless(_memo.has_key?(key))
    _memo[key] = yield
  end
  _memo[key]
end

#unmemoize(key, direct = false) ⇒ NilClass

Remove memoized value

Parameters:

  • key (String, Symbol)

    identifier for data

  • direct (Truthy, Falsey) (defaults to: false)

    direct skips key prepend of object id

Returns:

  • (NilClass)


34
35
36
37
38
39
# File 'lib/miasma/utils/memoization.rb', line 34

def unmemoize(key, direct=false)
  unless(direct)
    key = "#{self.object_id}_#{key}"
  end
  _memo.delete(key)
end