class Wedge::Plugins::AbilityList

Constants

Error

Public Instance Methods

authorize!(verb, object=nil) click to toggle source

Ensures that the owner can perform `verb` on `object/class` – raises an error otherwise.

# File lib/wedge/plugins/ability_list.rb, line 52
def authorize!(verb, object=nil)
  can?(verb, object) or raise Error.new("Access denied (#{verb})")
end
can(verb, klass=nil, columns=[], &block) click to toggle source

Declares that the owner can perform `verb` on `class`.

# File lib/wedge/plugins/ability_list.rb, line 19
def can(verb, klass=nil, columns=[], &block)
  columns = [columns] unless columns.is_a? Array
  rules << [true, verb, get_class(klass), columns, block]
end
can?(verb, object=nil, columns=[]) click to toggle source

Checks if the owner can perform `verb` on the given `object` (or class).

# File lib/wedge/plugins/ability_list.rb, line 33
def can?(verb, object=nil, columns=[])
  columns = [columns] unless columns.is_a? Array
  rules = rules_for(verb, get_class(object))
  rules.inject(false) do |bool, (sign, _, _, cols, proc)|
    sign ?
      ((bool || !proc ||  proc.call(object)) && ((columns & cols) == columns)) :  # can
      (bool &&  proc && !proc.call(object) && (columns.empty? || (columns & cols) != columns))    # cannot
  end
end
cannot(verb, klass=nil, columns=[], &block) click to toggle source

Inverse of `can`.

# File lib/wedge/plugins/ability_list.rb, line 25
def cannot(verb, klass=nil, columns=[], &block)
  columns = [columns] unless columns.is_a? Array
  rules << [false, verb, get_class(klass), columns, block]
end
cannot?(verb, object=nil, columns=[]) click to toggle source

Inverse of `can?`.

# File lib/wedge/plugins/ability_list.rb, line 44
def cannot?(verb, object=nil, columns=[])
  !can?(verb, object, columns)
end
rules() click to toggle source

Returns a list of rules. These are populated by `can` and `cannot`. (Rules are tuples)

# File lib/wedge/plugins/ability_list.rb, line 12
def rules
  @rules ||= []
end
rules_for(verb, klass) click to toggle source

Returns a subset of `rules` that match the given `verb` and `class`.

# File lib/wedge/plugins/ability_list.rb, line 64
def rules_for(verb, klass)
  rules.select do |(sign, _verb, _klass, cols, block)|
    (_verb  == :manage || _verb  == verb) &&
    (_klass == :all    || _klass == klass)
  end
end
unauthorize!(verb, object=nil) click to toggle source

Inverse of `authorize!`.

# File lib/wedge/plugins/ability_list.rb, line 57
def unauthorize!(verb, object=nil)
  cannot?(verb, object) or raise Error.new("Access denied (#{verb})")
end

Private Instance Methods

get_class(object) click to toggle source
# File lib/wedge/plugins/ability_list.rb, line 81
def get_class(object)
  if object.class.respond_to?(:original_class) && object.class.original_class
    object.class.original_class
  else
    [NilClass, Symbol, Class].include?(object.class) ? object : object.class
  end
end
get_class_name(klass) click to toggle source
# File lib/wedge/plugins/ability_list.rb, line 73
def get_class_name(klass)
  if !klass.is_a?(Symbol) && klass.respond_to?(:original_class_name)
    klass.original_class_name
  else
    [NilClass, Symbol].include?(klass.class) ? klass : klass.name
  end
end