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

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