Class: AptControl::Jabber

Inherits:
Object
  • Object
show all
Includes:
Actors::Proxied, Jabber
Defined in:
lib/apt_control/jabber.rb

Defined Under Namespace

Classes: ConnectionError, Error, SendError

Instance Method Summary collapse

Methods included from Actors::Proxied

#actor, included

Constructor Details

#initialize(options) ⇒ Jabber

Returns a new instance of Jabber.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/apt_control/jabber.rb', line 10

def initialize(options)
  @enabled  = options[:enabled]
  @jid      = options[:jid]
  @password = options[:password]
  @room_jid = options[:room_jid]
  @logger   = options[:logger]

  if @enabled
    @room_nick = @room_jid && @room_jid.split('/').last
    @room_listeners = []

    swallow_errors { connect! } unless options[:defer_connect]
  end
end

Instance Method Details

#add_room_listener(listener) ⇒ Object



66
67
68
# File 'lib/apt_control/jabber.rb', line 66

def add_room_listener(listener)
  @room_listeners << listener
end

#connected?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/apt_control/jabber.rb', line 60

def connected?
  @client && @client.is_connected? && @muc && @muc.active?
end

#enabled?Boolean

Returns:

  • (Boolean)


25
# File 'lib/apt_control/jabber.rb', line 25

def enabled?  ; @enabled   ; end

#not_connected?Boolean

Returns:

  • (Boolean)


64
# File 'lib/apt_control/jabber.rb', line 64

def not_connected? ; ! connected? ; end

#room_nickObject



26
# File 'lib/apt_control/jabber.rb', line 26

def room_nick ; @room_nick ; end

#send_message(msg) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/apt_control/jabber.rb', line 28

def send_message(msg)
  return unless enabled?

  if not_connected?
    connect!
  end

  begin
    attempt_reconnect do
      @logger.info("sending message to chat room: #{msg}")
      @muc.send(Message.new(nil, msg))
    end
  rescue JabberError => e
    raise SendError.new("failed to send message to chat room", e)
  end
end

#swallow_errors(jabber_errors_too = false, &block) ⇒ Object

execute the block, swallow any Jabber::Error errors it raises, reporting them to the logger



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/apt_control/jabber.rb', line 47

def swallow_errors(jabber_errors_too=false, &block)
  begin
    yield(self)
  rescue Error => e
    @logger.error("swallowed error: #{e}")
    @logger.error(e)
  rescue JabberError => e
    raise unless jabber_errors_too
    @logger.error("swallowed error: #{e}")
    @logger.error(e)
  end
end