class Twitter2Jabber::JabberClient
Constants
- DEFAULT_FORMAT
- DEFAULT_TEMPLATES
- JABBER_NS
- XHTML_NS
Attributes
config[R]
spec[R]
Public Class Methods
new(gw, config)
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 41 def initialize(gw, config) 42 @gw, @config, @spec = gw, config, config[:username] 43 44 @format = config.fetch(:format, DEFAULT_FORMAT).to_s 45 46 if File.readable?(template = File.expand_path(File.join( 47 config[:templates] || DEFAULT_TEMPLATES, "tweet.#{@format}"))) 48 49 @erb = ERB.new(File.read(template)) 50 else 51 raise ArgumentError, "format not supported: #{@format}" 52 end 53 end
Public Instance Methods
client()
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 57 def client 58 @client ||= Jabber::Client.new(spec).tap { |client| 59 client.connect 60 client.auth(config[:password]) 61 } 62 end
connect()
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 64 def connect 65 deliver(Jabber::Presence.new(nil, 'Available'), nil) 66 log 'connected' 67 rescue Jabber::JabberError, Errno::ETIMEDOUT => err 68 raise "Can't connect to Jabber with JID '#{spec}': #{err}" 69 end
deliver(msg, recipient = config[:recipient])
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 85 def deliver(msg, recipient = config[:recipient]) 86 msg = format(msg) unless msg.is_a?(Jabber::XMPPStanza) 87 msg.to = Jabber::JID.new(recipient).strip if recipient 88 89 @gw.debug ? log("#{recipient}: #{msg}") : send_msg(msg) 90 rescue => err 91 warn "#{err} (#{err.class})" 92 retry if err.is_a?(Jabber::ServerDisconnected) 93 end
disconnect()
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 71 def disconnect 72 close if @client 73 log 'disconnected' 74 end
format(tweet)
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 76 def format(tweet) 77 user = tweet.user 78 text = @erb.result(binding) 79 80 msg = Jabber::Message.new.set_type(:chat) 81 msg.add_element(format_element(text)) 82 msg 83 end
Private Instance Methods
close()
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 126 def close 127 begin 128 @client.close 129 rescue Errno::EPIPE, IOError 130 end 131 132 @client = nil 133 end
format_element(text)
click to toggle source
cf. <devblog.famundo.com/articles/2006/10/18/ruby-and-xmpp-jabber-part-3-adding-html-to-the-messages>
# File lib/twitter2jabber/jabber_client.rb 98 def format_element(text) 99 twitter = @gw.twitter 100 101 text, body = twitter.process_message(text), REXML::Element.new('body') 102 103 if @format == 'html' 104 REXML::Text.new(twitter.process_html(text), false, body, true, nil, /.^/) 105 106 html = REXML::Element.new('html').add_namespace(JABBER_NS) 107 html.add(body.add_namespace(XHTML_NS)) 108 html 109 else 110 REXML::Text.new(twitter.process_text(text), true, body, true, nil, /.^/) 111 body 112 end 113 end
log(msg)
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 135 def log(msg) 136 @gw.log("JABBER #{msg}") 137 end
send_msg(msg, attempts = 0)
click to toggle source
# File lib/twitter2jabber/jabber_client.rb 115 def send_msg(msg, attempts = 0) 116 attempts += 1 117 client.send(msg) 118 rescue Errno::EPIPE, IOError 119 raise if attempts > 3 120 121 close 122 sleep 1 123 retry 124 end