module ActionPolicy::Behaviours::Memoized

Per-instance memoization for policies.

Used by `policy_for` to re-use policy object for records.

Example:

include ActionPolicy::Behaviour
include ActionPolicy::Memoized

record = User.first
policy = policy_for(record)
policy2 = policy_for(record)

policy.equal?(policy) #=> true

policy.equal?(policy_for(record, with: CustomPolicy)) #=> false

Public Class Methods

included(base)
Alias for: prepended
prepended(base) click to toggle source
# File lib/action_policy/behaviours/memoized.rb, line 23
def prepended(base)
  base.prepend InstanceMethods
end
Also aliased as: included

Public Instance Methods

__policies_cache__() click to toggle source
# File lib/action_policy/behaviours/memoized.rb, line 47
def __policies_cache__
  @__policies_cache__ ||= {}
end
__policy_memoize__(record, **options) { || ... } click to toggle source
# File lib/action_policy/behaviours/memoized.rb, line 36
def __policy_memoize__(record, **options)
  cache_key = policy_for_cache_key(record: record, **options)

  return __policies_cache__[cache_key] if
    __policies_cache__.key?(cache_key)

  policy = yield

  __policies_cache__[cache_key] = policy
end