faye 0.6.8 → 0.7.0

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.

Potentially problematic release.


This version of faye might be problematic. Click here for more details.

Files changed (43) hide show
  1. data/History.txt +10 -3
  2. data/README.rdoc +1 -2
  3. data/lib/faye-browser-min.js +1 -1
  4. data/lib/faye.rb +89 -32
  5. data/lib/faye/adapters/rack_adapter.rb +20 -26
  6. data/lib/faye/engines/base.rb +5 -0
  7. data/lib/faye/engines/memory.rb +9 -3
  8. data/lib/faye/engines/redis.rb +26 -11
  9. data/lib/faye/mixins/publisher.rb +4 -8
  10. data/lib/faye/protocol/channel.rb +8 -8
  11. data/lib/faye/protocol/client.rb +45 -4
  12. data/lib/faye/protocol/publication.rb +5 -0
  13. data/lib/faye/protocol/server.rb +10 -19
  14. data/lib/faye/thin_extensions.rb +1 -1
  15. data/lib/faye/transport/http.rb +17 -8
  16. data/lib/faye/transport/local.rb +6 -3
  17. data/lib/faye/transport/transport.rb +23 -9
  18. data/lib/faye/transport/web_socket.rb +102 -0
  19. data/lib/faye/util/web_socket.rb +34 -80
  20. data/lib/faye/util/web_socket/api.rb +103 -0
  21. data/lib/faye/util/web_socket/client.rb +82 -0
  22. data/lib/faye/util/web_socket/draft75_parser.rb +3 -5
  23. data/lib/faye/util/web_socket/draft76_parser.rb +5 -7
  24. data/lib/faye/util/web_socket/protocol8_parser.rb +111 -46
  25. data/spec/javascript/client_spec.js +99 -7
  26. data/spec/javascript/engine_spec.js +116 -3
  27. data/spec/javascript/node_adapter_spec.js +2 -4
  28. data/spec/javascript/server/handshake_spec.js +0 -12
  29. data/spec/javascript/server/integration_spec.js +74 -29
  30. data/spec/javascript/server_spec.js +0 -11
  31. data/spec/javascript/web_socket/client_spec.js +121 -0
  32. data/spec/javascript/web_socket/protocol8parser_spec.js +26 -3
  33. data/spec/node.js +2 -0
  34. data/spec/redis.conf +10 -280
  35. data/spec/ruby/client_spec.rb +101 -8
  36. data/spec/ruby/engine_spec.rb +106 -0
  37. data/spec/ruby/server/handshake_spec.rb +0 -12
  38. data/spec/ruby/server/integration_spec.rb +56 -18
  39. data/spec/ruby/server_spec.rb +1 -12
  40. data/spec/ruby/transport_spec.rb +14 -8
  41. data/spec/ruby/web_socket/client_spec.rb +126 -0
  42. data/spec/ruby/web_socket/protocol8_parser_spec.rb +28 -3
  43. metadata +96 -150
@@ -32,21 +32,10 @@ describe Faye::Server do
32
32
  server.process([{}, {"channel" => "invalid"}], false) { |r| response = r }
33
33
  response.should == []
34
34
  end
35
-
36
- it "rejects unknown meta channels" do
37
- response = nil
38
- server.process([{"channel" => "/meta/p"}], false) { |r| response = r }
39
- response.should == [
40
- { "channel" => "/meta/p",
41
- "successful" => false,
42
- "error" => "403:/meta/p:Forbidden channel"
43
- }
44
- ]
45
- end
46
35
 
47
36
  it "routes single messages to appropriate handlers" do
48
37
  server.should_receive(:handshake).with(handshake, false)
49
- server.process(handshake, false) {}
38
+ server.process(handshake, false)
50
39
  end
51
40
 
52
41
  it "routes a list of messages to appropriate handlers" do
@@ -9,13 +9,19 @@ describe Faye::Transport do
9
9
 
10
10
  describe :get do
11
11
  before do
12
- Faye::Transport::Local.stub(:usable?).and_return(false)
13
- Faye::Transport::Http.stub(:usable?).and_return(false)
12
+ Faye::Transport::Local.stub(:usable?).and_yield(false)
13
+ Faye::Transport::Http.stub(:usable?).and_yield(false)
14
14
  end
15
15
 
16
- let(:transport) { Faye::Transport.get(client, ["long-polling", "in-process"]) }
17
- let(:local_transport) { Faye::Transport.get(client, ["in-process"]) }
18
- let(:http_transport) { Faye::Transport.get(client, ["long-polling"]) }
16
+ def get_transport(connection_types)
17
+ transport = nil
18
+ Faye::Transport.get(client, connection_types) { |t| transport = t }
19
+ transport
20
+ end
21
+
22
+ let(:transport) { get_transport ["long-polling", "in-process"] }
23
+ let(:local_transport) { get_transport ["in-process"] }
24
+ let(:http_transport) { get_transport ["long-polling"] }
19
25
 
20
26
  describe "when no transport is usable" do
21
27
  it "raises an exception" do
@@ -25,7 +31,7 @@ describe Faye::Transport do
25
31
 
26
32
  describe "when a less preferred transport is usable" do
27
33
  before do
28
- Faye::Transport::Http.stub(:usable?).and_return(true)
34
+ Faye::Transport::Http.stub(:usable?).and_yield(true)
29
35
  end
30
36
 
31
37
  it "returns a transport of the usable type" do
@@ -43,8 +49,8 @@ describe Faye::Transport do
43
49
 
44
50
  describe "when all transports are usable" do
45
51
  before do
46
- Faye::Transport::Local.stub(:usable?).and_return(true)
47
- Faye::Transport::Http.stub(:usable?).and_return(true)
52
+ Faye::Transport::Local.stub(:usable?).and_yield(true)
53
+ Faye::Transport::Http.stub(:usable?).and_yield(true)
48
54
  end
49
55
 
50
56
  it "returns the most preferred type" do
@@ -0,0 +1,126 @@
1
+ # encoding=utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ require "thin"
6
+ Thin::Logging.silent = true
7
+
8
+ WebSocketSteps = EM::RSpec.async_steps do
9
+ def server(port, &callback)
10
+ @adapter = Faye::RackAdapter.new(:mount => "/bayeux", :timeout => 25)
11
+ @adapter.listen(port)
12
+ @port = port
13
+ EM.add_timer(0.1, &callback)
14
+ end
15
+
16
+ def stop(&callback)
17
+ @adapter.stop
18
+ EM.next_tick(&callback)
19
+ end
20
+
21
+ def open_socket(url, &callback)
22
+ done = false
23
+
24
+ resume = lambda do |open|
25
+ unless done
26
+ done = true
27
+ @open = true
28
+ callback.call
29
+ end
30
+ end
31
+
32
+ @ws = Faye::WebSocket::Client.new(url)
33
+
34
+ @ws.onopen = lambda { |e| resume.call(true) }
35
+ @ws.onclose = lambda { |e| resume.call(false) }
36
+ end
37
+
38
+ def close_socket(&callback)
39
+ @ws.onclose = lambda do |e|
40
+ @open = false
41
+ callback.call
42
+ end
43
+ @ws.close
44
+ end
45
+
46
+ def check_open(&callback)
47
+ @open.should == true
48
+ callback.call
49
+ end
50
+
51
+ def check_closed(&callback)
52
+ @open.should == false
53
+ callback.call
54
+ end
55
+
56
+ def listen_for_message(&callback)
57
+ @ws.onmessage = lambda { |e| @message = e.data }
58
+ callback.call
59
+ end
60
+
61
+ def send_sunscription(&callback)
62
+ @ws.send(JSON.dump "channel" => "/meta/subscribe", "subscription" => "/ws")
63
+ EM.add_timer(0.1, &callback)
64
+ end
65
+
66
+ def check_subscribe_response(&callback)
67
+ JSON.parse(@message).should == [{ "channel" => "/meta/subscribe",
68
+ "successful" => false,
69
+ "error" => "402:clientId:Missing required parameter",
70
+ "subscription" => "/ws"
71
+ }]
72
+ callback.call
73
+ end
74
+
75
+ def check_no_response(&callback)
76
+ @message.should == nil
77
+ callback.call
78
+ end
79
+ end
80
+
81
+ describe Faye::WebSocket::Client do
82
+ include WebSocketSteps
83
+
84
+ before do
85
+ Faye.ensure_reactor_running!
86
+ server 8000
87
+ sync
88
+ end
89
+
90
+ after { sync ; stop }
91
+
92
+ it "can open a connection" do
93
+ open_socket "ws://localhost:8000/bayeux"
94
+ check_open
95
+ end
96
+
97
+ it "can close the connection" do
98
+ open_socket "ws://localhost:8000/bayeux"
99
+ close_socket
100
+ check_closed
101
+ end
102
+
103
+ describe "in the OPEN state" do
104
+ before { open_socket "ws://localhost:8000/bayeux" }
105
+
106
+ it "can send and receive messages" do
107
+ listen_for_message
108
+ send_sunscription
109
+ check_subscribe_response
110
+ end
111
+ end
112
+
113
+ describe "in the CLOSED state" do
114
+ before do
115
+ open_socket "ws://localhost:8000/bayeux"
116
+ close_socket
117
+ end
118
+
119
+ it "cannot send and receive messages" do
120
+ listen_for_message
121
+ send_sunscription
122
+ check_no_response
123
+ end
124
+ end
125
+ end
126
+
@@ -26,6 +26,11 @@ describe Faye::WebSocket::Protocol8Parser do
26
26
  parse [0x81, 0x05, 0x48, 0x65, 0x6c, 0x6c, 0x6f]
27
27
  end
28
28
 
29
+ it "parses empty text frames" do
30
+ @web_socket.should_receive(:receive).with("")
31
+ parse [0x81, 0x00]
32
+ end
33
+
29
34
  it "parses fragmented text frames" do
30
35
  @web_socket.should_receive(:receive).with("Hello")
31
36
  parse [0x01, 0x03, 0x48, 0x65, 0x6c]
@@ -37,6 +42,11 @@ describe Faye::WebSocket::Protocol8Parser do
37
42
  parse [0x81, 0x85] + mask + mask_message(0x48, 0x65, 0x6c, 0x6c, 0x6f)
38
43
  end
39
44
 
45
+ it "parses masked empty text frames" do
46
+ @web_socket.should_receive(:receive).with("")
47
+ parse [0x81, 0x80] + mask + mask_message()
48
+ end
49
+
40
50
  it "parses masked fragmented text frames" do
41
51
  @web_socket.should_receive(:receive).with("Hello")
42
52
  parse [0x01, 0x81] + mask + mask_message(0x48)
@@ -44,10 +54,15 @@ describe Faye::WebSocket::Protocol8Parser do
44
54
  end
45
55
 
46
56
  it "closes the socket if the frame has an unrecognized opcode" do
47
- @web_socket.should_receive(:close).with(:protocol_error)
57
+ @web_socket.should_receive(:close).with(1002, nil, false)
48
58
  parse [0x83, 0x00]
49
59
  end
50
60
 
61
+ it "closes the socket if a close frame is received" do
62
+ @web_socket.should_receive(:close).with(1000, "Hello", false)
63
+ parse [0x88, 0x07, 0x03, 0xe8, 0x48, 0x65, 0x6c, 0x6c, 0x6f]
64
+ end
65
+
51
66
  it "parses unmasked multibyte text frames" do
52
67
  @web_socket.should_receive(:receive).with(encode "Apple = ")
53
68
  parse [0x81, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0xef, 0xa3, 0xbf]
@@ -81,7 +96,7 @@ describe Faye::WebSocket::Protocol8Parser do
81
96
  end
82
97
 
83
98
  it "replies to pings with a pong" do
84
- @web_socket.should_receive(:send).with("OHAI", :pong)
99
+ @web_socket.should_receive(:send).with([0x4f, 0x48, 0x41, 0x49], :pong)
85
100
  parse [0x89, 0x04, 0x4f, 0x48, 0x41, 0x49]
86
101
  end
87
102
  end
@@ -109,7 +124,7 @@ describe Faye::WebSocket::Protocol8Parser do
109
124
  end
110
125
 
111
126
  it "encodes close frames with an error code" do
112
- frame = @parser.frame "Hello", :close, :protocol_error
127
+ frame = @parser.frame "Hello", :close, 1002
113
128
  bytes(frame).should == [0x88, 0x07, 0x03, 0xea, 0x48, 0x65, 0x6c, 0x6c, 0x6f]
114
129
  end
115
130
 
@@ -117,4 +132,14 @@ describe Faye::WebSocket::Protocol8Parser do
117
132
  bytes(@parser.frame '', :pong).should == [0x8a, 0x00]
118
133
  end
119
134
  end
135
+
136
+ describe :utf8 do
137
+ it "detects valid UTF-8" do
138
+ Faye.valid_utf8?( [72, 101, 108, 108, 111, 45, 194, 181, 64, 195, 159, 195, 182, 195, 164, 195, 188, 195, 160, 195, 161, 45, 85, 84, 70, 45, 56, 33, 33] ).should be_true
139
+ end
140
+
141
+ it "detects invalid UTF-8" do
142
+ Faye.valid_utf8?( [206, 186, 225, 189, 185, 207, 131, 206, 188, 206, 181, 237, 160, 128, 101, 100, 105, 116, 101, 100] ).should be_false
143
+ end
144
+ end
120
145
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.8
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,27 +9,33 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-10 00:00:00.000000000 Z
12
+ date: 2011-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: eventmachine
16
- requirement: !ruby/object:Gem::Requirement
15
+ name: cookiejar
16
+ requirement: &10861660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.12.0
21
+ version: 0.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
24
+ version_requirements: *10861660
25
+ - !ruby/object:Gem::Dependency
26
+ name: eventmachine
27
+ requirement: &10856580 !ruby/object:Gem::Requirement
25
28
  none: false
26
29
  requirements:
27
- - - ! '>='
30
+ - - ~>
28
31
  - !ruby/object:Gem::Version
29
32
  version: 0.12.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *10856580
30
36
  - !ruby/object:Gem::Dependency
31
37
  name: em-http-request
32
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &10855420 !ruby/object:Gem::Requirement
33
39
  none: false
34
40
  requirements:
35
41
  - - ~>
@@ -37,15 +43,10 @@ dependencies:
37
43
  version: '0.3'
38
44
  type: :runtime
39
45
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '0.3'
46
+ version_requirements: *10855420
46
47
  - !ruby/object:Gem::Dependency
47
48
  name: em-hiredis
48
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &10854340 !ruby/object:Gem::Requirement
49
50
  none: false
50
51
  requirements:
51
52
  - - ! '>='
@@ -53,15 +54,10 @@ dependencies:
53
54
  version: 0.0.1
54
55
  type: :runtime
55
56
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: 0.0.1
57
+ version_requirements: *10854340
62
58
  - !ruby/object:Gem::Dependency
63
59
  name: json
64
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &10853720 !ruby/object:Gem::Requirement
65
61
  none: false
66
62
  requirements:
67
63
  - - ! '>='
@@ -69,15 +65,10 @@ dependencies:
69
65
  version: '1.0'
70
66
  type: :runtime
71
67
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '1.0'
68
+ version_requirements: *10853720
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: thin
80
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &10847560 !ruby/object:Gem::Requirement
81
72
  none: false
82
73
  requirements:
83
74
  - - ~>
@@ -85,15 +76,10 @@ dependencies:
85
76
  version: '1.2'
86
77
  type: :runtime
87
78
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: '1.2'
79
+ version_requirements: *10847560
94
80
  - !ruby/object:Gem::Dependency
95
81
  name: rack
96
- requirement: !ruby/object:Gem::Requirement
82
+ requirement: &10843740 !ruby/object:Gem::Requirement
97
83
  none: false
98
84
  requirements:
99
85
  - - ! '>='
@@ -101,15 +87,10 @@ dependencies:
101
87
  version: '1.0'
102
88
  type: :runtime
103
89
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '1.0'
90
+ version_requirements: *10843740
110
91
  - !ruby/object:Gem::Dependency
111
92
  name: jake
112
- requirement: !ruby/object:Gem::Requirement
93
+ requirement: &10840940 !ruby/object:Gem::Requirement
113
94
  none: false
114
95
  requirements:
115
96
  - - ! '>='
@@ -117,15 +98,10 @@ dependencies:
117
98
  version: '0'
118
99
  type: :development
119
100
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
101
+ version_requirements: *10840940
126
102
  - !ruby/object:Gem::Dependency
127
103
  name: rake
128
- requirement: !ruby/object:Gem::Requirement
104
+ requirement: &10836240 !ruby/object:Gem::Requirement
129
105
  none: false
130
106
  requirements:
131
107
  - - ! '>='
@@ -133,15 +109,10 @@ dependencies:
133
109
  version: '0'
134
110
  type: :development
135
111
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
112
+ version_requirements: *10836240
142
113
  - !ruby/object:Gem::Dependency
143
114
  name: rspec
144
- requirement: !ruby/object:Gem::Requirement
115
+ requirement: &10831220 !ruby/object:Gem::Requirement
145
116
  none: false
146
117
  requirements:
147
118
  - - ~>
@@ -149,15 +120,10 @@ dependencies:
149
120
  version: 2.5.0
150
121
  type: :development
151
122
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ~>
156
- - !ruby/object:Gem::Version
157
- version: 2.5.0
123
+ version_requirements: *10831220
158
124
  - !ruby/object:Gem::Dependency
159
125
  name: rack-proxy
160
- requirement: !ruby/object:Gem::Requirement
126
+ requirement: &10828160 !ruby/object:Gem::Requirement
161
127
  none: false
162
128
  requirements:
163
129
  - - ! '>='
@@ -165,15 +131,10 @@ dependencies:
165
131
  version: '0'
166
132
  type: :development
167
133
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
134
+ version_requirements: *10828160
174
135
  - !ruby/object:Gem::Dependency
175
136
  name: rack-test
176
- requirement: !ruby/object:Gem::Requirement
137
+ requirement: &10826460 !ruby/object:Gem::Requirement
177
138
  none: false
178
139
  requirements:
179
140
  - - ! '>='
@@ -181,15 +142,10 @@ dependencies:
181
142
  version: '0'
182
143
  type: :development
183
144
  prerelease: false
184
- version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '0'
145
+ version_requirements: *10826460
190
146
  - !ruby/object:Gem::Dependency
191
147
  name: RedCloth
192
- requirement: !ruby/object:Gem::Requirement
148
+ requirement: &10823260 !ruby/object:Gem::Requirement
193
149
  none: false
194
150
  requirements:
195
151
  - - ~>
@@ -197,15 +153,10 @@ dependencies:
197
153
  version: 3.0.0
198
154
  type: :development
199
155
  prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
- requirements:
203
- - - ~>
204
- - !ruby/object:Gem::Version
205
- version: 3.0.0
156
+ version_requirements: *10823260
206
157
  - !ruby/object:Gem::Dependency
207
158
  name: sinatra
208
- requirement: !ruby/object:Gem::Requirement
159
+ requirement: &10821560 !ruby/object:Gem::Requirement
209
160
  none: false
210
161
  requirements:
211
162
  - - ! '>='
@@ -213,15 +164,10 @@ dependencies:
213
164
  version: '0'
214
165
  type: :development
215
166
  prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ! '>='
220
- - !ruby/object:Gem::Version
221
- version: '0'
167
+ version_requirements: *10821560
222
168
  - !ruby/object:Gem::Dependency
223
169
  name: staticmatic
224
- requirement: !ruby/object:Gem::Requirement
170
+ requirement: &10000600 !ruby/object:Gem::Requirement
225
171
  none: false
226
172
  requirements:
227
173
  - - ! '>='
@@ -229,12 +175,7 @@ dependencies:
229
175
  version: '0'
230
176
  type: :development
231
177
  prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
- requirements:
235
- - - ! '>='
236
- - !ruby/object:Gem::Version
237
- version: '0'
178
+ version_requirements: *10000600
238
179
  description:
239
180
  email: jcoglan@gmail.com
240
181
  executables: []
@@ -246,72 +187,78 @@ files:
246
187
  - README.rdoc
247
188
  - lib/faye-browser-min.js
248
189
  - spec/browser.html
190
+ - spec/phantom.js
191
+ - spec/redis.conf
249
192
  - spec/install.sh
250
193
  - spec/thin_proxy.rb
251
- - spec/javascript/web_socket/protocol8parser_spec.js
252
- - spec/javascript/web_socket/draft75parser_spec.js
194
+ - spec/ruby/server/handshake_spec.rb
195
+ - spec/ruby/server/extensions_spec.rb
196
+ - spec/ruby/server/subscribe_spec.rb
197
+ - spec/ruby/server/disconnect_spec.rb
198
+ - spec/ruby/server/unsubscribe_spec.rb
199
+ - spec/ruby/server/connect_spec.rb
200
+ - spec/ruby/server/integration_spec.rb
201
+ - spec/ruby/rack_adapter_spec.rb
202
+ - spec/ruby/client_spec.rb
203
+ - spec/ruby/server_spec.rb
204
+ - spec/ruby/channel_spec.rb
205
+ - spec/ruby/transport_spec.rb
206
+ - spec/ruby/engine_spec.rb
207
+ - spec/ruby/faye_spec.rb
208
+ - spec/ruby/web_socket/draft75_parser_spec.rb
209
+ - spec/ruby/web_socket/client_spec.rb
210
+ - spec/ruby/web_socket/protocol8_parser_spec.rb
211
+ - spec/ruby/grammar_spec.rb
212
+ - spec/node.js
213
+ - spec/javascript/faye_spec.js
214
+ - spec/javascript/server/disconnect_spec.js
215
+ - spec/javascript/server/subscribe_spec.js
216
+ - spec/javascript/server/extensions_spec.js
217
+ - spec/javascript/server/unsubscribe_spec.js
218
+ - spec/javascript/server/integration_spec.js
219
+ - spec/javascript/server/connect_spec.js
220
+ - spec/javascript/server/handshake_spec.js
221
+ - spec/javascript/server_spec.js
253
222
  - spec/javascript/engine_spec.js
223
+ - spec/javascript/transport_spec.js
254
224
  - spec/javascript/channel_spec.js
225
+ - spec/javascript/node_adapter_spec.js
255
226
  - spec/javascript/client_spec.js
256
- - spec/javascript/server_spec.js
257
- - spec/javascript/faye_spec.js
258
- - spec/javascript/transport_spec.js
227
+ - spec/javascript/web_socket/protocol8parser_spec.js
228
+ - spec/javascript/web_socket/client_spec.js
229
+ - spec/javascript/web_socket/draft75parser_spec.js
259
230
  - spec/javascript/grammar_spec.js
260
- - spec/javascript/node_adapter_spec.js
261
- - spec/javascript/server/handshake_spec.js
262
- - spec/javascript/server/connect_spec.js
263
- - spec/javascript/server/extensions_spec.js
264
- - spec/javascript/server/integration_spec.js
265
- - spec/javascript/server/unsubscribe_spec.js
266
- - spec/javascript/server/disconnect_spec.js
267
- - spec/javascript/server/subscribe_spec.js
268
- - spec/node.js
269
231
  - spec/testswarm
270
- - spec/phantom.js
271
- - spec/redis.conf
272
- - spec/ruby/web_socket/protocol8_parser_spec.rb
273
- - spec/ruby/web_socket/draft75_parser_spec.rb
274
- - spec/ruby/transport_spec.rb
275
- - spec/ruby/channel_spec.rb
276
- - spec/ruby/faye_spec.rb
277
- - spec/ruby/client_spec.rb
278
- - spec/ruby/server_spec.rb
279
- - spec/ruby/engine_spec.rb
280
- - spec/ruby/grammar_spec.rb
281
- - spec/ruby/rack_adapter_spec.rb
282
- - spec/ruby/server/extensions_spec.rb
283
- - spec/ruby/server/integration_spec.rb
284
- - spec/ruby/server/unsubscribe_spec.rb
285
- - spec/ruby/server/subscribe_spec.rb
286
- - spec/ruby/server/handshake_spec.rb
287
- - spec/ruby/server/disconnect_spec.rb
288
- - spec/ruby/server/connect_spec.rb
289
232
  - spec/spec_helper.rb
290
- - lib/faye.rb
291
- - lib/faye/protocol/grammar.rb
292
- - lib/faye/protocol/channel.rb
293
- - lib/faye/protocol/extensible.rb
294
- - lib/faye/protocol/subscription.rb
295
- - lib/faye/protocol/server.rb
296
- - lib/faye/protocol/client.rb
297
- - lib/faye/engines/redis.rb
298
- - lib/faye/engines/memory.rb
299
- - lib/faye/engines/connection.rb
300
- - lib/faye/engines/base.rb
301
- - lib/faye/thin_extensions.rb
233
+ - lib/faye/error.rb
234
+ - lib/faye/util/namespace.rb
302
235
  - lib/faye/util/web_socket/draft75_parser.rb
303
- - lib/faye/util/web_socket/draft76_parser.rb
236
+ - lib/faye/util/web_socket/client.rb
304
237
  - lib/faye/util/web_socket/protocol8_parser.rb
305
- - lib/faye/util/namespace.rb
238
+ - lib/faye/util/web_socket/draft76_parser.rb
239
+ - lib/faye/util/web_socket/api.rb
306
240
  - lib/faye/util/web_socket.rb
307
- - lib/faye/adapters/rack_adapter.rb
308
- - lib/faye/mixins/timeouts.rb
309
241
  - lib/faye/mixins/logging.rb
310
242
  - lib/faye/mixins/publisher.rb
311
- - lib/faye/error.rb
243
+ - lib/faye/mixins/timeouts.rb
244
+ - lib/faye/thin_extensions.rb
312
245
  - lib/faye/transport/http.rb
313
246
  - lib/faye/transport/local.rb
314
247
  - lib/faye/transport/transport.rb
248
+ - lib/faye/transport/web_socket.rb
249
+ - lib/faye/protocol/client.rb
250
+ - lib/faye/protocol/publication.rb
251
+ - lib/faye/protocol/subscription.rb
252
+ - lib/faye/protocol/server.rb
253
+ - lib/faye/protocol/extensible.rb
254
+ - lib/faye/protocol/channel.rb
255
+ - lib/faye/protocol/grammar.rb
256
+ - lib/faye/adapters/rack_adapter.rb
257
+ - lib/faye/engines/connection.rb
258
+ - lib/faye/engines/memory.rb
259
+ - lib/faye/engines/redis.rb
260
+ - lib/faye/engines/base.rb
261
+ - lib/faye.rb
315
262
  homepage: http://faye.jcoglan.com
316
263
  licenses: []
317
264
  post_install_message:
@@ -334,9 +281,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
281
  version: '0'
335
282
  requirements: []
336
283
  rubyforge_project:
337
- rubygems_version: 1.8.23
284
+ rubygems_version: 1.8.10
338
285
  signing_key:
339
286
  specification_version: 3
340
287
  summary: Simple pub/sub messaging for the web
341
288
  test_files: []
342
- has_rdoc: