module ActionPolicy::LookupChain
LookupChain
contains resolvers to determine a policy for a record (with additional options).
You can modify the `LookupChain.chain` (for example, to add custom resolvers).
Constants
- CLASSIFY_SYMBOL_LOOKUP
(Optional) Infer using String#classify if available
- CLASS_POLICY_CLASS
By record's class `policy_class` method
- INFER_FROM_CLASS
Infer from class name
- INSTANCE_POLICY_CLASS
By self `policy_class` method
- SYMBOL_LOOKUP
Infer from passed symbol
Attributes
chain[RW]
namespace_cache_enabled[RW]
namespace_cache_enabled?[RW]
Public Class Methods
call(record, **opts)
click to toggle source
# File lib/action_policy/lookup_chain.rb, line 57 def call(record, **opts) chain.each do |probe| val = probe.call(record, **opts) return val unless val.nil? end nil end
Private Class Methods
lookup_within_namespace(policy_name, namespace, strict: false)
click to toggle source
# File lib/action_policy/lookup_chain.rb, line 67 def lookup_within_namespace(policy_name, namespace, strict: false) NamespaceCache.fetch(namespace&.name || "Kernel", policy_name, strict: strict) do mod = namespace loop do policy = [mod&.name, policy_name].compact.join("::").safe_constantize break policy if policy || mod.nil? || strict mod = mod.namespace end end end
policy_class_name_for(record)
click to toggle source
# File lib/action_policy/lookup_chain.rb, line 79 def policy_class_name_for(record) return record.policy_name.to_s if record.respond_to?(:policy_name) record_class = record.is_a?(Module) ? record : record.class if record_class.respond_to?(:policy_name) record_class.policy_name.to_s else "#{record_class}Policy" end end