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.

@@ -1,3 +1,9 @@
1
+ === 0.4.1 / 2012-02-26
2
+
3
+ * Treat anything other than an Array as a string when calling send()
4
+ * Fix error loading UTF-8 validation code on Ruby 1.9 with -Ku flag
5
+
6
+
1
7
  === 0.4.0 / 2012-02-13
2
8
 
3
9
  * Add ping() method to server-side WebSocket and EventSource
@@ -61,7 +61,7 @@ module Faye
61
61
  def send(message, options = {})
62
62
  return false unless @ready_state == OPEN
63
63
 
64
- message = WebSocket.encode(message).
64
+ message = WebSocket.encode(message.to_s).
65
65
  gsub(/(\r\n|\r|\n)/, '\1data: ')
66
66
 
67
67
  frame = ""
@@ -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
- return string unless string.respond_to?(:force_encoding)
54
- string.force_encoding('UTF-8')
61
+ utf8_string(string)
55
62
  end
56
63
 
57
64
  def self.valid_utf8?(byte_array)
58
- UTF8_MATCH =~ byte_array.pack('C*') ? true : false
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)
@@ -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("I expect this to be echoed")
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 == "I expect this to be echoed"
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.0
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-13 00:00:00.000000000 Z
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: &21030040 !ruby/object:Gem::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: *21030040
24
+ version_requirements: *20554820
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack
27
- requirement: &21055040 !ruby/object:Gem::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: *21055040
35
+ version_requirements: *18050960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rainbows
38
- requirement: &21054500 !ruby/object:Gem::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: *21054500
46
+ version_requirements: *18049600
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &21054000 !ruby/object:Gem::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: *21054000
57
+ version_requirements: *18047720
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake-compiler
60
- requirement: &21053620 !ruby/object:Gem::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: *21053620
68
+ version_requirements: *18046420
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: thin
71
- requirement: &21053080 !ruby/object:Gem::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: *21053080
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