lib/kan/abilities.rb in kan-0.1.0 vs lib/kan/abilities.rb in kan-0.2.0
- old
+ new
@@ -1,28 +1,54 @@
+require 'logger'
+
module Kan
module Abilities
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
+ DEFAULT_ROLE_NAME = :base
+ DEFAULT_ROLE_BLOCK = proc { true }
+
def register(*abilities, &block)
@ability_list ||= {}
abilities.each { |ability| @ability_list[ability.to_sym] = block }
end
+ def role(role_name, &block)
+ @role_name = role_name
+ @role_block = block
+ end
+
+ def role_name
+ @role_name || DEFAULT_ROLE_NAME
+ end
+
+ def role_block
+ @role_block || DEFAULT_ROLE_BLOCK
+ end
+
+ def valid_role?(*args)
+ role_block.call(*args)
+ end
+
def ability_list
@ability_list || {}
end
end
DEFAULT_ABILITY_BLOCK = proc { true }
+ attr_reader :logger
+
def initialize(options = {})
@options = options
+ @logger = @options.fetch(:logger, Logger.new(STDOUT))
end
def ability(name)
- self.class.ability_list[name.to_sym] || @options[:default_ability_block] || DEFAULT_ABILITY_BLOCK
+ rule = self.class.ability_list[name.to_sym] || @options[:default_ability_block] || DEFAULT_ABILITY_BLOCK
+ lambda { |*args| instance_exec(args, &rule) }
end
end
end