Class: Jabbot::Handler
- Inherits:
-
Object
- Object
- Jabbot::Handler
- Defined in:
- lib/jabbot/handlers.rb
Overview
A Handler object is an object which can handle a direct message, tweet or at reply.
Instance Method Summary collapse
-
#dispatch(message) ⇒ Object
Process message to build params hash and pass message along with params of to
handle
. -
#handle(message, params) ⇒ Object
Handle a message.
-
#initialize(pattern = nil, options = {}, &blk) ⇒ Handler
constructor
A new instance of Handler.
-
#pattern=(pattern) ⇒ Object
Parse pattern string and set options.
-
#recognize?(message) ⇒ Boolean
Determines if this handler is suited to handle an incoming message.
Constructor Details
#initialize(pattern = nil, options = {}, &blk) ⇒ Handler
Returns a new instance of Handler.
35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/jabbot/handlers.rb', line 35 def initialize(pattern = nil, = {}, &blk) if pattern.is_a?(Hash) = pattern pattern = nil end @options = @options[:from].collect! { |s| s.to_s } if @options[:from] && @options[:from].is_a?(Array) @options[:from] = [@options[:from].to_s] if @options[:from] && [String, Symbol].include?(@options[:from].class) @handler = nil @handler = block_given? ? blk : nil self.pattern = pattern end |
Instance Method Details
#dispatch(message) ⇒ Object
Process message to build params hash and pass message along with params of to handle
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/jabbot/handlers.rb', line 91 def dispatch() return unless recognize?() @params = {} if @options[:pattern] && @options[:tokens] matches = .text.match(@options[:pattern]) @options[:tokens].each_with_index { |token, i| @params[token] = matches[i+1] } @params[:text] = (matches[@options[:tokens].length+1] || "").strip elsif @options[:pattern] && !@options[:tokens] @params = .text.match(@options[:pattern]).to_a[1..-1] || [] else @params[:text] = .text end return handle(, @params) end |
#handle(message, params) ⇒ Object
Handle a message. Calls the internal Proc with the message and the params hash as parameters.
112 113 114 |
# File 'lib/jabbot/handlers.rb', line 112 def handle(, params) @handler.call(, params) if @handler end |
#pattern=(pattern) ⇒ Object
Parse pattern string and set options
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/jabbot/handlers.rb', line 52 def pattern=(pattern) return if pattern.nil? || pattern == "" if pattern == :all return end if pattern.is_a?(Regexp) @options[:pattern] = pattern return end words = pattern.split.collect { |s| s.strip } # Get all words in pattern @options[:tokens] = words.inject([]) do |sum, token| # Find all tokens, ie :symbol :like :names next sum unless token =~ /^:.*/ # Don't process regular words sym = token.sub(":", "").to_sym # Turn token string into symbol, ie ":token" => :token regex = @options[sym] || '[^\s]+' # Fetch regex if configured, else use any character but space matching pattern.sub!(/(^|\s)#{token}(\s|$)/, '\1(' + regex.to_s + ')\2') # Make sure regex captures named switch sum << sym end @options[:pattern] = /#{pattern}(\s.+)?/ end |
#recognize?(message) ⇒ Boolean
Determines if this handler is suited to handle an incoming message
79 80 81 82 83 84 85 |
# File 'lib/jabbot/handlers.rb', line 79 def recognize?() return false if @options[:pattern] && .text !~ @options[:pattern] # Pattern check users = @options[:from] ? @options[:from] : nil return false if users && !users.include?(.user) # Check allowed senders true end |