class Pundit::PolicyFinder

Attributes

object[R]

Public Class Methods

new(object) click to toggle source
# File lib/pundit/policy_finder.rb, line 5
def initialize(object)
  @object = object
end

Public Instance Methods

policy() click to toggle source
# File lib/pundit/policy_finder.rb, line 15
def policy
  klass = find
  klass = klass.constantize if klass.is_a?(String)
  klass
rescue NameError
  nil
end
policy!() click to toggle source
# File lib/pundit/policy_finder.rb, line 28
def policy!
  raise NotDefinedError, "unable to find policy of nil" if object.nil?
  policy or raise NotDefinedError, "unable to find policy `#{find}` for `#{object.inspect}`"
end
scope() click to toggle source
# File lib/pundit/policy_finder.rb, line 9
def scope
  policy::Scope if policy
rescue NameError
  nil
end
scope!() click to toggle source
# File lib/pundit/policy_finder.rb, line 23
def scope!
  raise NotDefinedError, "unable to find policy scope of nil" if object.nil?
  scope or raise NotDefinedError, "unable to find scope `#{find}::Scope` for `#{object.inspect}`"
end

Private Instance Methods

find() click to toggle source
# File lib/pundit/policy_finder.rb, line 35
def find
  if object.nil?
    nil
  elsif object.respond_to?(:policy_class)
    object.policy_class
  elsif object.class.respond_to?(:policy_class)
    object.class.policy_class
  else
    klass = if object.respond_to?(:model_name)
      object.model_name
    elsif object.class.respond_to?(:model_name)
      object.class.model_name
    elsif object.is_a?(Class)
      object
    elsif object.is_a?(Symbol)
      object.to_s.camelize
    elsif object.is_a?(Array)
      object.join('/').camelize
    else
      object.class
    end
    "#{klass}#{SUFFIX}"
  end
end