module KittyPolicy::DSL

Constants

DEFAULT_BLOCK

Public Class Methods

extended(base) click to toggle source
# File lib/kitty_policy/dsl.rb, line 5
def self.extended(base)
  base.extend(base)
end

Public Instance Methods

authorize!(*args) click to toggle source
# File lib/kitty_policy/dsl.rb, line 17
def authorize!(*args)
  raise AccessDenied.new(*args) unless can?(*args)
end
can?(user, action, subject = :empty) click to toggle source
# File lib/kitty_policy/dsl.rb, line 9
def can?(user, action, subject = :empty)
  if subject == :empty
    public_send Helper.method_name(action), user
  else
    public_send Helper.method_name(action, subject), user, subject
  end
end

Private Instance Methods

can(abilities, subject = nil, allow_guest: false, &block) click to toggle source
# File lib/kitty_policy/dsl.rb, line 25
def can(abilities, subject = nil, allow_guest: false, &block)
  block ||= DEFAULT_BLOCK

  Array(abilities).each do |action|
    define_method Helper.method_name(action, subject) do |*args|
      (args[0] || allow_guest) && !!block.call(*args)
    end
  end
end