class Wedge::Plugins::AbilityList
Constants
- Error
Public Instance Methods
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
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