module Kan::Abilities::ClassMethods

Constants

DEFAULT_ROLE_BLOCK
DEFAULT_ROLE_NAME

Public Instance Methods

ability_list() click to toggle source
# File lib/kan/abilities.rb, line 41
def ability_list
  @ability_list || {}
end
register(*abilities, &block) click to toggle source
# File lib/kan/abilities.rb, line 16
def register(*abilities, &block)
  abilities.map!(&:to_sym)
  raise InvalidAbilityNameError if abilities.include?(:roles)

  @ability_list ||= {}
  abilities.each { |ability| @ability_list[ability] = block }
end
role(role_name, object = nil, &block) click to toggle source
# File lib/kan/abilities.rb, line 24
def role(role_name, object = nil, &block)
  @role_name = role_name
  @role_block = object ? make_callable(object) : block
end
role_block() click to toggle source
# File lib/kan/abilities.rb, line 33
def role_block
  @role_block || DEFAULT_ROLE_BLOCK
end
role_name() click to toggle source
# File lib/kan/abilities.rb, line 29
def role_name
  @role_name || DEFAULT_ROLE_NAME
end
valid_role?(*args) click to toggle source
# File lib/kan/abilities.rb, line 37
def valid_role?(*args)
  role_block.call(*args)
end

Private Instance Methods

make_callable(object) click to toggle source
# File lib/kan/abilities.rb, line 47
def make_callable(object)
  callable_object = object.is_a?(Class) ? object.new : object

  return callable_object if callable_object.respond_to? :call

  raise InvalidRoleObjectError.new "role object #{object} does not support #call method"
end