websocket-rails 0.4.8 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +7 -0
- data/lib/assets/javascripts/websocket_rails/http_connection.js.coffee +6 -0
- data/lib/assets/javascripts/websocket_rails/websocket_connection.js.coffee +2 -0
- data/lib/assets/javascripts/websocket_rails/websocket_rails.js.coffee +4 -1
- data/lib/websocket_rails/version.rb +1 -1
- data/spec/javascripts/generated/assets/http_connection.js +9 -0
- data/spec/javascripts/generated/assets/websocket_connection.js +2 -0
- data/spec/javascripts/generated/assets/websocket_rails.js +6 -1
- data/spec/javascripts/generated/specs/websocket_connection_spec.js +15 -3
- data/spec/javascripts/generated/specs/websocket_rails_spec.js +14 -0
- data/spec/javascripts/websocket_rails/websocket_connection_spec.coffee +18 -7
- data/spec/javascripts/websocket_rails/websocket_rails_spec.coffee +11 -0
- metadata +5 -5
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# WebsocketRails Change Log
|
2
2
|
|
3
|
+
## Version 0.4.9
|
4
|
+
|
5
|
+
July 9 2013
|
6
|
+
|
7
|
+
* Updated JavaScript client to properly keep track of the connection state.
|
8
|
+
* Added .connection_stale() function to the JavaScript client for easily checking connection state.
|
9
|
+
|
3
10
|
## Version 0.4.8
|
4
11
|
|
5
12
|
July 6 2013
|
@@ -26,6 +26,7 @@ class WebSocketRails.HttpConnection
|
|
26
26
|
@last_pos = 0
|
27
27
|
@message_queue = []
|
28
28
|
@_conn.onreadystatechange = @parse_stream
|
29
|
+
@_conn.addEventListener("load", @connectionClosed, false)
|
29
30
|
@_conn.open "GET", @_url, true
|
30
31
|
@_conn.send()
|
31
32
|
|
@@ -59,3 +60,8 @@ class WebSocketRails.HttpConnection
|
|
59
60
|
event.connection_id = @dispatcher.connection_id
|
60
61
|
@trigger event
|
61
62
|
@message_queue = []
|
63
|
+
|
64
|
+
connectionClosed: (event) =>
|
65
|
+
close_event = new WebSocketRails.Event(['connection_closed', event])
|
66
|
+
@dispatcher.state = 'disconnected'
|
67
|
+
@dispatcher.dispatch close_event
|
@@ -23,10 +23,12 @@ class WebSocketRails.WebSocketConnection
|
|
23
23
|
|
24
24
|
on_close: (event) =>
|
25
25
|
close_event = new WebSocketRails.Event(['connection_closed', event])
|
26
|
+
@dispatcher.state = 'disconnected'
|
26
27
|
@dispatcher.dispatch close_event
|
27
28
|
|
28
29
|
on_error: (event) =>
|
29
30
|
error_event = new WebSocketRails.Event(['connection_error', event])
|
31
|
+
@dispatcher.state = 'disconnected'
|
30
32
|
@dispatcher.dispatch error_event
|
31
33
|
|
32
34
|
flush_queue: =>
|
@@ -16,7 +16,7 @@ Listening for new events from the server
|
|
16
16
|
console.log(data.user_name);
|
17
17
|
});
|
18
18
|
###
|
19
|
-
class
|
19
|
+
class @WebSocketRails
|
20
20
|
constructor: (@url, @use_websockets = true) ->
|
21
21
|
@state = 'connecting'
|
22
22
|
@callbacks = {}
|
@@ -102,3 +102,6 @@ class window.WebSocketRails
|
|
102
102
|
pong: =>
|
103
103
|
pong = new WebSocketRails.Event( ['websocket_rails.pong',{},@connection_id] )
|
104
104
|
@_conn.trigger pong
|
105
|
+
|
106
|
+
connection_stale: =>
|
107
|
+
@state != 'connected'
|
@@ -41,6 +41,7 @@
|
|
41
41
|
function HttpConnection(url, dispatcher) {
|
42
42
|
this.url = url;
|
43
43
|
this.dispatcher = dispatcher;
|
44
|
+
this.connectionClosed = __bind(this.connectionClosed, this);
|
44
45
|
this.flush_queue = __bind(this.flush_queue, this);
|
45
46
|
this.trigger = __bind(this.trigger, this);
|
46
47
|
this.parse_stream = __bind(this.parse_stream, this);
|
@@ -50,6 +51,7 @@
|
|
50
51
|
this.last_pos = 0;
|
51
52
|
this.message_queue = [];
|
52
53
|
this._conn.onreadystatechange = this.parse_stream;
|
54
|
+
this._conn.addEventListener("load", this.connectionClosed, false);
|
53
55
|
this._conn.open("GET", this._url, true);
|
54
56
|
this._conn.send();
|
55
57
|
}
|
@@ -97,6 +99,13 @@
|
|
97
99
|
return this.message_queue = [];
|
98
100
|
};
|
99
101
|
|
102
|
+
HttpConnection.prototype.connectionClosed = function(event) {
|
103
|
+
var close_event;
|
104
|
+
close_event = new WebSocketRails.Event(['connection_closed', event]);
|
105
|
+
this.dispatcher.state = 'disconnected';
|
106
|
+
return this.dispatcher.dispatch(close_event);
|
107
|
+
};
|
108
|
+
|
100
109
|
return HttpConnection;
|
101
110
|
|
102
111
|
})();
|
@@ -42,12 +42,14 @@ WebSocket Interface for the WebSocketRails client.
|
|
42
42
|
WebSocketConnection.prototype.on_close = function(event) {
|
43
43
|
var close_event;
|
44
44
|
close_event = new WebSocketRails.Event(['connection_closed', event]);
|
45
|
+
this.dispatcher.state = 'disconnected';
|
45
46
|
return this.dispatcher.dispatch(close_event);
|
46
47
|
};
|
47
48
|
|
48
49
|
WebSocketConnection.prototype.on_error = function(event) {
|
49
50
|
var error_event;
|
50
51
|
error_event = new WebSocketRails.Event(['connection_error', event]);
|
52
|
+
this.dispatcher.state = 'disconnected';
|
51
53
|
return this.dispatcher.dispatch(error_event);
|
52
54
|
};
|
53
55
|
|
@@ -21,10 +21,11 @@ Listening for new events from the server
|
|
21
21
|
(function() {
|
22
22
|
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
23
23
|
|
24
|
-
|
24
|
+
this.WebSocketRails = (function() {
|
25
25
|
function WebSocketRails(url, use_websockets) {
|
26
26
|
this.url = url;
|
27
27
|
this.use_websockets = use_websockets != null ? use_websockets : true;
|
28
|
+
this.connection_stale = __bind(this.connection_stale, this);
|
28
29
|
this.pong = __bind(this.pong, this);
|
29
30
|
this.supports_websockets = __bind(this.supports_websockets, this);
|
30
31
|
this.dispatch_channel = __bind(this.dispatch_channel, this);
|
@@ -169,6 +170,10 @@ Listening for new events from the server
|
|
169
170
|
return this._conn.trigger(pong);
|
170
171
|
};
|
171
172
|
|
173
|
+
WebSocketRails.prototype.connection_stale = function() {
|
174
|
+
return this.state !== 'connected';
|
175
|
+
};
|
176
|
+
|
172
177
|
return WebSocketRails;
|
173
178
|
|
174
179
|
})();
|
@@ -81,21 +81,27 @@
|
|
81
81
|
});
|
82
82
|
});
|
83
83
|
describe('.on_close', function() {
|
84
|
-
|
84
|
+
it('should dispatch the connection_closed event and pass the original event', function() {
|
85
85
|
var close_event, dispatcher, event, lastCall;
|
86
86
|
event = new WebSocketRails.Event(['event', 'message']);
|
87
87
|
close_event = new WebSocketRails.Event(['connection_closed', event]);
|
88
88
|
sinon.spy(this.dispatcher, 'dispatch');
|
89
|
-
this.connection.on_close(
|
89
|
+
this.connection.on_close(close_event);
|
90
90
|
dispatcher = this.dispatcher.dispatch;
|
91
91
|
lastCall = dispatcher.lastCall.args[0];
|
92
92
|
expect(dispatcher.calledOnce).toBe(true);
|
93
93
|
expect(lastCall.data).toEqual(event.data);
|
94
94
|
return dispatcher.restore();
|
95
95
|
});
|
96
|
+
return it('sets the connection state on the dispatcher to disconnected', function() {
|
97
|
+
var close_event;
|
98
|
+
close_event = new WebSocketRails.Event(['connection_closed', {}]);
|
99
|
+
this.connection.on_close(close_event);
|
100
|
+
return expect(this.dispatcher.state).toEqual('disconnected');
|
101
|
+
});
|
96
102
|
});
|
97
103
|
describe('.on_error', function() {
|
98
|
-
|
104
|
+
it('should dispatch the connection_error event and pass the original event', function() {
|
99
105
|
var dispatcher, error_event, event, lastCall;
|
100
106
|
event = new WebSocketRails.Event(['event', 'message']);
|
101
107
|
error_event = new WebSocketRails.Event(['connection_error', event]);
|
@@ -107,6 +113,12 @@
|
|
107
113
|
expect(lastCall.data).toEqual(event.data);
|
108
114
|
return dispatcher.restore();
|
109
115
|
});
|
116
|
+
return it('sets the connection state on the dispatcher to disconnected', function() {
|
117
|
+
var close_event;
|
118
|
+
close_event = new WebSocketRails.Event(['connection_closed', {}]);
|
119
|
+
this.connection.on_error(close_event);
|
120
|
+
return expect(this.dispatcher.state).toEqual('disconnected');
|
121
|
+
});
|
110
122
|
});
|
111
123
|
return describe('.flush_queue', function() {
|
112
124
|
beforeEach(function() {
|
@@ -178,6 +178,20 @@
|
|
178
178
|
});
|
179
179
|
});
|
180
180
|
});
|
181
|
+
describe('.connection_stale', function() {
|
182
|
+
describe('when state is connected', function() {
|
183
|
+
return it('should return false', function() {
|
184
|
+
this.dispatcher.state = 'connected';
|
185
|
+
return expect(this.dispatcher.connection_stale()).toEqual(false);
|
186
|
+
});
|
187
|
+
});
|
188
|
+
return describe('when state is disconnected', function() {
|
189
|
+
return it('should return true', function() {
|
190
|
+
this.dispatcher.state = 'disconnected';
|
191
|
+
return expect(this.dispatcher.connection_stale()).toEqual(true);
|
192
|
+
});
|
193
|
+
});
|
194
|
+
});
|
181
195
|
return describe('working with channels', function() {
|
182
196
|
beforeEach(function() {
|
183
197
|
return WebSocketRails.Channel = function(name, dispatcher, is_private) {
|
@@ -9,10 +9,10 @@ describe 'WebsocketRails.WebSocketConnection:', ->
|
|
9
9
|
@url = url
|
10
10
|
@send = -> true
|
11
11
|
@dispatcher = dispatcher
|
12
|
-
@connection = new WebSocketRails.WebSocketConnection('localhost:3000/websocket',dispatcher)
|
12
|
+
@connection = new WebSocketRails.WebSocketConnection('localhost:3000/websocket', dispatcher)
|
13
13
|
|
14
14
|
describe 'constructor', ->
|
15
|
-
|
15
|
+
|
16
16
|
it 'should set the onmessage event on the WebSocket object to this.on_message', ->
|
17
17
|
expect(@connection._conn.onmessage).toEqual @connection.on_message
|
18
18
|
|
@@ -61,19 +61,24 @@ describe 'WebsocketRails.WebSocketConnection:', ->
|
|
61
61
|
|
62
62
|
describe '.on_close', ->
|
63
63
|
it 'should dispatch the connection_closed event and pass the original event', ->
|
64
|
-
|
65
64
|
event = new WebSocketRails.Event ['event','message']
|
66
65
|
close_event = new WebSocketRails.Event(['connection_closed', event ])
|
67
66
|
sinon.spy @dispatcher, 'dispatch'
|
68
|
-
@connection.on_close
|
67
|
+
@connection.on_close close_event
|
69
68
|
|
70
69
|
dispatcher = @dispatcher.dispatch
|
71
70
|
lastCall = dispatcher.lastCall.args[0]
|
72
71
|
expect(dispatcher.calledOnce).toBe(true)
|
73
72
|
expect(lastCall.data).toEqual event.data
|
74
|
-
|
73
|
+
|
75
74
|
dispatcher.restore()
|
76
75
|
|
76
|
+
it 'sets the connection state on the dispatcher to disconnected', ->
|
77
|
+
close_event = new WebSocketRails.Event(['connection_closed', {} ])
|
78
|
+
@connection.on_close close_event
|
79
|
+
|
80
|
+
expect(@dispatcher.state).toEqual('disconnected')
|
81
|
+
|
77
82
|
describe '.on_error', ->
|
78
83
|
it 'should dispatch the connection_error event and pass the original event', ->
|
79
84
|
|
@@ -86,16 +91,22 @@ describe 'WebsocketRails.WebSocketConnection:', ->
|
|
86
91
|
lastCall = dispatcher.lastCall.args[0]
|
87
92
|
expect(dispatcher.calledOnce).toBe(true)
|
88
93
|
expect(lastCall.data).toEqual event.data
|
89
|
-
|
94
|
+
|
90
95
|
dispatcher.restore()
|
91
96
|
|
97
|
+
it 'sets the connection state on the dispatcher to disconnected', ->
|
98
|
+
close_event = new WebSocketRails.Event(['connection_closed', {} ])
|
99
|
+
@connection.on_error close_event
|
100
|
+
|
101
|
+
expect(@dispatcher.state).toEqual('disconnected')
|
102
|
+
|
92
103
|
describe '.flush_queue', ->
|
93
104
|
beforeEach ->
|
94
105
|
@event = new WebSocketRails.Event ['event','message']
|
95
106
|
@connection.message_queue.push @event
|
96
107
|
@connection._conn =
|
97
108
|
send: -> true
|
98
|
-
|
109
|
+
|
99
110
|
it 'should send out all of the messages in the queue', ->
|
100
111
|
mock_connection = sinon.mock @connection._conn
|
101
112
|
mock_connection.expects('send').once().withArgs @event.serialize()
|
@@ -134,6 +134,17 @@ describe 'WebSocketRails:', ->
|
|
134
134
|
event = new WebSocketRails.Event ['websocket_rails.subscribe', {channel: 'awesome'}, 123]
|
135
135
|
expect(con_trigger.called).toEqual true
|
136
136
|
|
137
|
+
describe '.connection_stale', ->
|
138
|
+
describe 'when state is connected', ->
|
139
|
+
it 'should return false', ->
|
140
|
+
@dispatcher.state = 'connected'
|
141
|
+
expect(@dispatcher.connection_stale()).toEqual false
|
142
|
+
|
143
|
+
describe 'when state is disconnected', ->
|
144
|
+
it 'should return true', ->
|
145
|
+
@dispatcher.state = 'disconnected'
|
146
|
+
expect(@dispatcher.connection_stale()).toEqual true
|
147
|
+
|
137
148
|
describe 'working with channels', ->
|
138
149
|
beforeEach ->
|
139
150
|
WebSocketRails.Channel = (@name,@dispatcher,@is_private) ->
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: websocket-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-07-
|
14
|
+
date: 2013-07-11 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
@@ -301,7 +301,7 @@ files:
|
|
301
301
|
- CHANGELOG.md
|
302
302
|
homepage: http://danknox.github.com/websocket-rails/
|
303
303
|
licenses: []
|
304
|
-
post_install_message: Welcome to WebsocketRails v0.4.
|
304
|
+
post_install_message: Welcome to WebsocketRails v0.4.9!
|
305
305
|
rdoc_options: []
|
306
306
|
require_paths:
|
307
307
|
- lib
|
@@ -313,7 +313,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
313
313
|
version: '0'
|
314
314
|
segments:
|
315
315
|
- 0
|
316
|
-
hash:
|
316
|
+
hash: -2441396343706207267
|
317
317
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
318
318
|
none: false
|
319
319
|
requirements:
|
@@ -322,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
322
322
|
version: '0'
|
323
323
|
segments:
|
324
324
|
- 0
|
325
|
-
hash:
|
325
|
+
hash: -2441396343706207267
|
326
326
|
requirements: []
|
327
327
|
rubyforge_project: websocket-rails
|
328
328
|
rubygems_version: 1.8.25
|