class Abilities::Definitions

Attributes

user[R]

Public Class Methods

new(user, &block) click to toggle source
# File lib/abilities/definitions.rb, line 6
def initialize(user, &block)
  @user = user
  Proxy.new self, &block
end

Public Instance Methods

add(actions, resources, policy) click to toggle source
# File lib/abilities/definitions.rb, line 34
def add(actions, resources, policy)
  unless actions.is_a?(Array)
    actions = [actions]
  end
  unless resources.is_a?(Array)
    resources = [resources]
  end
  resources.each do |resource|
    actions.each do |action|
      id = normalize_id(resource)
      registry[id] ||= {}
      registry[id][action] = policy
    end
  end
end
can?(action, resource) click to toggle source
# File lib/abilities/definitions.rb, line 11
def can?(action, resource)
  id = normalize_id(resource)
  if id != :any && can?(action, :any)
    true
  elsif actions = registry[id]
    if policy = (actions[action] || actions[:manage])
      if policy.is_a?(Proc)
        user.instance_exec resource, &policy
      else
        policy
      end
    else
      false
    end
  else
    false
  end
end
cannot?(*args) click to toggle source
# File lib/abilities/definitions.rb, line 30
def cannot?(*args)
  !can?(*args)
end

Private Instance Methods

normalize_id(resource) click to toggle source
# File lib/abilities/definitions.rb, line 56
def normalize_id(resource)
  case resource
  when :any
    resource
  when Class
    resource.name.underscore.to_sym
  else
    resource.class.name.underscore.to_sym
  end
end
registry() click to toggle source
# File lib/abilities/definitions.rb, line 52
def registry
  @registry ||= {}
end