Module: ActionPolicy::Behaviours::Memoized
- Included in:
- Controller
- Defined in:
- lib/action_policy/behaviours/memoized.rb
Overview
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
Defined Under Namespace
Modules: InstanceMethods
Class Method Summary collapse
- .prepended(base) ⇒ Object (also: included)
Instance Method Summary collapse
Class Method Details
.prepended(base) ⇒ Object Also known as: included
23 24 25 |
# File 'lib/action_policy/behaviours/memoized.rb', line 23 def prepended(base) base.prepend InstanceMethods end |
Instance Method Details
#__policies_cache__ ⇒ Object
47 48 49 |
# File 'lib/action_policy/behaviours/memoized.rb', line 47 def __policies_cache__ @__policies_cache__ ||= {} end |
#__policy_memoize__(record, **options) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/action_policy/behaviours/memoized.rb', line 36 def __policy_memoize__(record, **) cache_key = policy_for_cache_key(record: record, **) return __policies_cache__[cache_key] if __policies_cache__.key?(cache_key) policy = yield __policies_cache__[cache_key] = policy end |