Sha256: 067470c273883cf57055e0d3f8edb92419a45799fa15c631954ddc5633238078
Contents?: true
Size: 1.56 KB
Versions: 1
Compression:
Stored size: 1.56 KB
Contents
module Botfly class CommonBlockAcceptor extend Forwardable attr_reader :block_state, :responders def initialize(*ignored) @block_state = {} @responders = {} end def respond_to(type,params); raise "AbstractMethodError: Implement in subclass" end def [](key) @block_state[key] end def []=(key, set_to) @block_state[key] = set_to end def remove_responder(id_to_remove) Botfly.logger.info("#{self.to_debug_s}: Removing responder #{id_to_remove}") @responders.each { |pair| key,chain = pair; chain.reject! {|r| r.id == id_to_remove } } end def on return OnRecognizer.new(self) end class OnRecognizer def initialize(obj); @obj = obj; end def method_missing(name,&block) @type = name Botfly.logger.info("#{@obj.to_debug_s}: Bot#on") (@obj.responders[name] ||= []) << responder = klass.new(@obj, &block) Botfly.logger.info("#{@obj.to_debug_s}: #{@obj.class_prefix}#{name.to_s.capitalize}Responder added to responder chain") return responder end private def klass begin klass = Botfly.const_get(@obj.class_prefix + @type.to_s.split('_').map(&:capitalize).join + "Responder") rescue if @obj.class_prefix.empty? klass = Responder else klass = Botfly.const_get(@obj.class_prefix+"Responder") end end end end def class_prefix; ''; end def to_debug_s; ''; end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
botfly-0.3.6 | lib/botfly/common_block_acceptor.rb |