faye-websocket 0.4.0 → 0.4.1
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-websocket might be problematic. Click here for more details.
- data/CHANGELOG.txt +6 -0
- data/lib/faye/eventsource.rb +1 -1
- data/lib/faye/websocket.rb +19 -7
- data/lib/faye/websocket/api.rb +3 -0
- data/lib/faye/websocket/utf8_match.rb +8 -0
- data/spec/faye/websocket/client_spec.rb +13 -7
- metadata +15 -14
data/CHANGELOG.txt
CHANGED
data/lib/faye/eventsource.rb
CHANGED
data/lib/faye/websocket.rb
CHANGED
@@ -23,6 +23,10 @@ module Faye
|
|
23
23
|
root = File.expand_path('../websocket', __FILE__)
|
24
24
|
require root + '/../../faye_websocket_mask'
|
25
25
|
|
26
|
+
unless String.instance_methods.include?(:force_encoding)
|
27
|
+
require root + '/utf8_match'
|
28
|
+
end
|
29
|
+
|
26
30
|
autoload :Adapter, root + '/adapter'
|
27
31
|
autoload :API, root + '/api'
|
28
32
|
autoload :Client, root + '/client'
|
@@ -30,9 +34,6 @@ module Faye
|
|
30
34
|
autoload :Draft76Parser, root + '/draft76_parser'
|
31
35
|
autoload :HybiParser, root + '/hybi_parser'
|
32
36
|
|
33
|
-
# http://www.w3.org/International/questions/qa-forms-utf-8.en.php
|
34
|
-
UTF8_MATCH = /^([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/
|
35
|
-
|
36
37
|
ADAPTERS = {
|
37
38
|
'thin' => :Thin,
|
38
39
|
'rainbows' => :Rainbows,
|
@@ -45,17 +46,28 @@ module Faye
|
|
45
46
|
require File.expand_path("../adapters/#{backend}", __FILE__)
|
46
47
|
end
|
47
48
|
|
49
|
+
def self.utf8_string(string)
|
50
|
+
string = string.pack('C*') if Array === string
|
51
|
+
string.respond_to?(:force_encoding) ?
|
52
|
+
string.force_encoding('UTF-8') :
|
53
|
+
string
|
54
|
+
end
|
55
|
+
|
48
56
|
def self.encode(string, validate_encoding = false)
|
49
57
|
if Array === string
|
58
|
+
string = utf8_string(string)
|
50
59
|
return nil if validate_encoding and !valid_utf8?(string)
|
51
|
-
string = string.pack('C*')
|
52
60
|
end
|
53
|
-
|
54
|
-
string.force_encoding('UTF-8')
|
61
|
+
utf8_string(string)
|
55
62
|
end
|
56
63
|
|
57
64
|
def self.valid_utf8?(byte_array)
|
58
|
-
|
65
|
+
string = utf8_string(byte_array)
|
66
|
+
if defined?(UTF8_MATCH)
|
67
|
+
UTF8_MATCH =~ string ? true : false
|
68
|
+
else
|
69
|
+
string.valid_encoding?
|
70
|
+
end
|
59
71
|
end
|
60
72
|
|
61
73
|
def self.websocket?(env)
|
data/lib/faye/websocket/api.rb
CHANGED
@@ -57,6 +57,8 @@ module Faye
|
|
57
57
|
|
58
58
|
return false if @ready_state == CLOSED
|
59
59
|
|
60
|
+
data = data.to_s unless Array === data
|
61
|
+
|
60
62
|
data = WebSocket.encode(data) if String === data
|
61
63
|
frame = @parser.frame(data, type, error_type)
|
62
64
|
@stream.write(frame) if frame
|
@@ -91,3 +93,4 @@ module Faye
|
|
91
93
|
|
92
94
|
end
|
93
95
|
end
|
96
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module Faye
|
2
|
+
class WebSocket
|
3
|
+
|
4
|
+
# http://www.w3.org/International/questions/qa-forms-utf-8.en.php
|
5
|
+
UTF8_MATCH = /^([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/
|
6
|
+
|
7
|
+
end
|
8
|
+
end
|
@@ -60,13 +60,13 @@ WebSocketSteps = EM::RSpec.async_steps do
|
|
60
60
|
callback.call
|
61
61
|
end
|
62
62
|
|
63
|
-
def send_message(&callback)
|
64
|
-
@ws.send(
|
63
|
+
def send_message(message, &callback)
|
64
|
+
@ws.send(message)
|
65
65
|
EM.add_timer(0.1, &callback)
|
66
66
|
end
|
67
67
|
|
68
|
-
def check_response(&callback)
|
69
|
-
@message.should ==
|
68
|
+
def check_response(message, &callback)
|
69
|
+
@message.should == message
|
70
70
|
callback.call
|
71
71
|
end
|
72
72
|
|
@@ -116,8 +116,14 @@ describe Faye::WebSocket::Client do
|
|
116
116
|
|
117
117
|
it "can send and receive messages" do
|
118
118
|
listen_for_message
|
119
|
-
send_message
|
120
|
-
check_response
|
119
|
+
send_message "I expect this to be echoed"
|
120
|
+
check_response "I expect this to be echoed"
|
121
|
+
end
|
122
|
+
|
123
|
+
it "sends numbers as strings" do
|
124
|
+
listen_for_message
|
125
|
+
send_message 13
|
126
|
+
check_response "13"
|
121
127
|
end
|
122
128
|
end
|
123
129
|
|
@@ -129,7 +135,7 @@ describe Faye::WebSocket::Client do
|
|
129
135
|
|
130
136
|
it "cannot send and receive messages" do
|
131
137
|
listen_for_message
|
132
|
-
send_message
|
138
|
+
send_message "I expect this to be echoed"
|
133
139
|
check_no_response
|
134
140
|
end
|
135
141
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faye-websocket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
16
|
-
requirement: &
|
16
|
+
requirement: &20554820 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.12.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *20554820
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rack
|
27
|
-
requirement: &
|
27
|
+
requirement: &18050960 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *18050960
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rainbows
|
38
|
-
requirement: &
|
38
|
+
requirement: &18049600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *18049600
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &18047720 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.8.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *18047720
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rake-compiler
|
60
|
-
requirement: &
|
60
|
+
requirement: &18046420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *18046420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: thin
|
71
|
-
requirement: &
|
71
|
+
requirement: &18045300 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: 1.2.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *18045300
|
80
80
|
description:
|
81
81
|
email: jcoglan@gmail.com
|
82
82
|
executables: []
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/faye/websocket/client.rb
|
94
94
|
- lib/faye/websocket/hybi_parser.rb
|
95
95
|
- lib/faye/websocket/draft76_parser.rb
|
96
|
+
- lib/faye/websocket/utf8_match.rb
|
96
97
|
- lib/faye/websocket/api.rb
|
97
98
|
- lib/faye/websocket/hybi_parser/handshake.rb
|
98
99
|
- lib/faye/websocket/hybi_parser/stream_reader.rb
|