Module: Seven::Abilities

Defined in:
lib/seven/abilities.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#current_userObject (readonly)

Returns the value of attribute current_user.



19
20
21
# File 'lib/seven/abilities.rb', line 19

def current_user
  @current_user
end

#targetObject (readonly)

Returns the value of attribute target.



19
20
21
# File 'lib/seven/abilities.rb', line 19

def target
  @target
end

Class Method Details

.included(cls) ⇒ Object



13
14
15
# File 'lib/seven/abilities.rb', line 13

def included(cls)
  cls.extend(ClassMethods)
end

.wrap_proc(rule_proc) ⇒ Object



4
5
6
7
8
9
10
11
# 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

Instance Method Details

#abilitiesObject



27
28
29
30
31
32
33
34
35
36
37
# 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) ⇒ Object



39
40
41
# File 'lib/seven/abilities.rb', line 39

def can(*some_abilities)
  @abilities.push(*some_abilities.map(&:to_sym))
end

#cannot(*some_abilities) ⇒ Object



43
44
45
46
# 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

#initialize(current_user, target) ⇒ Object



21
22
23
24
25
# File 'lib/seven/abilities.rb', line 21

def initialize(current_user, target)
  @current_user = current_user
  @target = target
  @abilities = nil
end