sprsquish-blather 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -57,6 +57,18 @@ Setup handlers by calling their names as methods.
57
57
  # and #body == 'exit'
58
58
  message :chat?, :body => 'exit'
59
59
 
60
+ === Non-Stanza Handlers
61
+
62
+ So far there are two non-stanza related handlers.
63
+
64
+ when_ready (or handle(:ready) {})
65
+ Called after the connection has been connected. It's good for initializing your system.
66
+
67
+ disconnected (or handle(:disconnected) {})
68
+ Called after the connection has been terminated. Good for teardown or automatic reconnection.
69
+ The following will reconnect every time the connection is lost:
70
+ disconnected { client.connect }
71
+
60
72
  === Handler Guards
61
73
 
62
74
  Guards act like AND statements. Each condition must be met if the handler is to be used.
@@ -80,6 +80,7 @@ module Blather #:nodoc:
80
80
  klass = @setup[0].node ? Blather::Stream::Client : Blather::Stream::Component
81
81
  klass.start self, *@setup
82
82
  end
83
+ alias_method :connect, :run
83
84
 
84
85
  ##
85
86
  # Register a filter to be run before or after the handler chain is run.
@@ -141,7 +142,7 @@ module Blather #:nodoc:
141
142
  end
142
143
 
143
144
  def unbind # :nodoc:
144
- EM.stop if EM.reactor_running?
145
+ call_handler_for(:disconnected, nil) || (EM.reactor_running? && EM.stop)
145
146
  end
146
147
 
147
148
  def receive_data(stanza) # :nodoc:
@@ -176,7 +177,7 @@ module Blather #:nodoc:
176
177
  end
177
178
 
178
179
  def current_handlers
179
- [:ready] + Stanza.handler_list + BlatherError.handler_list
180
+ [:ready, :disconnected] + Stanza.handler_list + BlatherError.handler_list
180
181
  end
181
182
 
182
183
  def setup_initial_handlers # :nodoc:
@@ -11,7 +11,7 @@ module Blather
11
11
  module_function :client
12
12
 
13
13
  def pubsub
14
- @pubsub ||= PubSub.new jid.domain
14
+ @pubsub ||= PubSub.new client, jid.domain
15
15
  end
16
16
 
17
17
  ##
@@ -62,6 +62,12 @@ module Blather
62
62
  handle :ready, &block
63
63
  end
64
64
 
65
+ ##
66
+ # Wrapper for "handle :disconnected"
67
+ def disconnected(&block)
68
+ handle :disconnected, &block
69
+ end
70
+
65
71
  ##
66
72
  # Set current status
67
73
  def set_status(state = nil, msg = nil)
@@ -4,7 +4,8 @@ module DSL
4
4
  class PubSub
5
5
  attr_accessor :host
6
6
 
7
- def initialize(host)
7
+ def initialize(client, host)
8
+ @client = client
8
9
  @host = host
9
10
  end
10
11
 
@@ -120,7 +121,7 @@ module DSL
120
121
  private
121
122
  def request(node, method = nil, callback = nil, &block)
122
123
  block = lambda { |node| callback.call(method ? node.__send__(method) : node) } unless block_given?
123
- DSL.client.write_with_handler(node, &block)
124
+ @client.write_with_handler(node, &block)
124
125
  end
125
126
 
126
127
  def send_to(host = nil)
@@ -76,6 +76,32 @@ describe Blather::Client do
76
76
  @client.unbind
77
77
  end
78
78
 
79
+ it 'calls the :disconnected handler with #unbind is called' do
80
+ EM.expects(:reactor_running?).returns false
81
+ disconnected = mock()
82
+ disconnected.expects(:call)
83
+ @client.register_handler(:disconnected) { disconnected.call }
84
+ @client.unbind
85
+ end
86
+
87
+ it 'does not call EM.stop on #unbind if a handler returns positive' do
88
+ EM.expects(:reactor_running?).never
89
+ EM.expects(:stop).never
90
+ disconnected = mock()
91
+ disconnected.expects(:call).returns true
92
+ @client.register_handler(:disconnected) { disconnected.call }
93
+ @client.unbind
94
+ end
95
+
96
+ it 'calls EM.stop on #unbind if a handler returns negative' do
97
+ EM.expects(:reactor_running?).returns true
98
+ EM.expects(:stop)
99
+ disconnected = mock()
100
+ disconnected.expects(:call).returns false
101
+ @client.register_handler(:disconnected) { disconnected.call }
102
+ @client.unbind
103
+ end
104
+
79
105
  it 'can register a temporary handler based on stanza ID' do
80
106
  stanza = Blather::Stanza::Iq.new
81
107
  response = mock()
@@ -63,6 +63,11 @@ describe Blather::DSL do
63
63
  @dsl.when_ready
64
64
  end
65
65
 
66
+ it 'provides a helper for disconnected' do
67
+ @client.expects(:register_handler).with :disconnected
68
+ @dsl.disconnected
69
+ end
70
+
66
71
  it 'sets the initial status' do
67
72
  state = :away
68
73
  msg = 'do not disturb'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprsquish-blather
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Smick
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-18 00:00:00 -07:00
12
+ date: 2009-08-12 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -108,6 +108,7 @@ files:
108
108
  - README.rdoc
109
109
  has_rdoc: false
110
110
  homepage: http://github.com/sprsquish/blather
111
+ licenses:
111
112
  post_install_message:
112
113
  rdoc_options:
113
114
  - --charset=UTF-8
@@ -128,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
129
  requirements: []
129
130
 
130
131
  rubyforge_project: squishtech
131
- rubygems_version: 1.2.0
132
+ rubygems_version: 1.3.5
132
133
  signing_key:
133
134
  specification_version: 3
134
135
  summary: Simpler XMPP built for speed