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
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