class Object

Public Instance Methods

Policy(*args) click to toggle source

accepts: user:, model:, class: accepts: @model, class:, user:

# File lib/clean-policy/global.rb, line 3
def Policy *args
  opts = args.first.dup

  unless opts.is_a?(Hash)
    opts = { model: opts }
    opts.merge! args[1] if args[1]
  end

  model = opts[:model]

  klass =
  if model
    klass = model.is_a?(Symbol) ? model : model.class
    opts[:class] || ('%s_policy' % klass).classify.constantize
  else
    ApplicationPolicy
  end

  klass.new(user: opts[:user], model: model).can
end
authorize(*args, &block) click to toggle source
# File lib/clean-policy/adapters/controller.rb, line 10
def authorize *args, &block
  opts = {}

  @_is_policy_authorized = true

  raise ArgumentErorr, 'authorize argument[s] not provided' unless args[0]

  # authorize true
  return if args[0].is_a? TrueClass

  if !args[1]
    # authorize :admin?
    opts[:action] = args.first
  elsif args[2]
    # authorize @model, write?, CustomClass
    # authorize @model, write?, class: CustomClass
    opts[:model]  = args.first
    opts[:action] = args[1]
    opts[:class]  = args[2].is_a?(Hash) ? args[2][:class] : args[2]
  else
    # authorize @model, write?
    opts[:model]  = args.first
    opts[:action] = args[1]
  end

  # covert all authorize actions to bang actions (fail unless true)
  action = opts.delete(:action).to_s.sub('?', '!')

  # do it
  Policy(opts).send(action, &block)
end
is_authorized!() click to toggle source
# File lib/clean-policy/adapters/controller.rb, line 46
def is_authorized!
  raise ::Policy::Error.new('Request is not authorized!') unless is_authorized?
  true
end
is_authorized?() click to toggle source
# File lib/clean-policy/adapters/controller.rb, line 42
def is_authorized?
  @_is_policy_authorized == true
end