class ActionPolicy::LookupChain::NamespaceCache

Cache namespace resolving result for policies. @see benchmarks/namespaced_lookup_cache.rb

Attributes

store[R]

Public Class Methods

clear() click to toggle source
# File lib/action_policy/lookup_chain.rb, line 43
def clear
  hash = Hash.new { |h, k| h[k] = {} }
  @store = {strict: hash, flexible: hash.clone}
end
fetch(namespace, policy, strict:) { || ... } click to toggle source
# File lib/action_policy/lookup_chain.rb, line 33
def fetch(namespace, policy, strict:, &block)
  return yield unless LookupChain.namespace_cache_enabled?

  if strict
    put_if_absent(:strict, namespace, policy, &block)
  else
    put_if_absent(:flexible, namespace, policy, &block)
  end
end
put_if_absent(scope, namespace, policy) { || ... } click to toggle source
# File lib/action_policy/lookup_chain.rb, line 27
def put_if_absent(scope, namespace, policy)
  local_store = store[scope][namespace]
  return local_store[policy] if local_store[policy]
  local_store[policy] ||= yield
end