module Seven::Abilities

Attributes

current_user[R]
target[R]

Public Class Methods

included(cls) click to toggle source
# File lib/seven/abilities.rb, line 13
def included(cls)
  cls.extend(ClassMethods)
end
new(current_user, target) click to toggle source
# File lib/seven/abilities.rb, line 21
def initialize(current_user, target)
  @current_user = current_user
  @target = target
  @abilities = nil
end
wrap_proc(rule_proc) click to toggle source
# File lib/seven/abilities.rb, line 4
def wrap_proc(rule_proc)
  return unless rule_proc

  Class.new do
    include Seven::Abilities
    abilities(&rule_proc)
  end
end

Public Instance Methods

abilities() click to toggle source
# File lib/seven/abilities.rb, line 27
def abilities
  return @abilities if @abilities
  @abilities = []

  self.class.rule_procs.each do |checker, rule_proc|
    next if checker && (current_user.nil? || !instance_eval(&checker))
    instance_eval(&rule_proc)
  end

  @abilities
end
can(*some_abilities) click to toggle source
# File lib/seven/abilities.rb, line 39
def can(*some_abilities)
  @abilities.push(*some_abilities.map(&:to_sym))
end
cannot(*some_abilities) click to toggle source
# File lib/seven/abilities.rb, line 43
def cannot(*some_abilities)
  symtax_abilities = some_abilities.map(&:to_sym)
  @abilities.delete_if {|ability| symtax_abilities.include?(ability) }
end