faye-websocket 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

@@ -0,0 +1,21 @@
1
+ module Faye
2
+ class WebSocket
3
+
4
+ module Adapter
5
+ def websocket?
6
+ e = defined?(@env) ? @env : env
7
+ WebSocket.websocket?(e)
8
+ end
9
+
10
+ def eventsource?
11
+ e = defined?(@env) ? @env : env
12
+ EventSource.eventsource?(e)
13
+ end
14
+
15
+ def async_connection?
16
+ websocket? or eventsource?
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -1,14 +1,20 @@
1
1
  module Faye
2
2
  class WebSocket
3
3
 
4
- CONNECTING = 0
5
- OPEN = 1
6
- CLOSING = 2
7
- CLOSED = 3
8
-
9
4
  module API
10
- attr_reader :url, :ready_state, :buffered_amount
11
- attr_accessor :onopen, :onmessage, :onerror, :onclose
5
+ module ReadyStates
6
+ CONNECTING = 0
7
+ OPEN = 1
8
+ CLOSING = 2
9
+ CLOSED = 3
10
+ end
11
+
12
+ require File.expand_path('../api/event_target', __FILE__)
13
+ require File.expand_path('../api/event', __FILE__)
14
+ include EventTarget
15
+ include ReadyStates
16
+
17
+ attr_reader :url, :ready_state, :buffered_amount
12
18
 
13
19
  def receive(data)
14
20
  return false unless ready_state == OPEN
@@ -49,61 +55,6 @@ module Faye
49
55
  close.call
50
56
  end
51
57
  end
52
-
53
- def add_event_listener(event_type, listener, use_capture = false)
54
- @listeners ||= {}
55
- list = @listeners[event_type] ||= []
56
- list << listener
57
- end
58
-
59
- def remove_event_listener(event_type, listener, use_capture = false)
60
- return unless @listeners and @listeners[event_type]
61
- return @listeners.delete(event_type) unless listener
62
-
63
- @listeners[event_type].delete_if(&listener.method(:==))
64
- end
65
-
66
- def dispatch_event(event)
67
- event.target = event.current_target = self
68
- event.event_phase = Event::AT_TARGET
69
-
70
- callback = __send__("on#{ event.type }")
71
- callback.call(event) if callback
72
-
73
- return unless @listeners and @listeners[event.type]
74
- @listeners[event.type].each do |listener|
75
- listener.call(event)
76
- end
77
- end
78
- end
79
-
80
- class Event
81
- attr_reader :type, :bubbles, :cancelable
82
- attr_accessor :target, :current_target, :event_phase, :data
83
-
84
- CAPTURING_PHASE = 1
85
- AT_TARGET = 2
86
- BUBBLING_PHASE = 3
87
-
88
- def initialize(event_type, options = {})
89
- @type = event_type
90
- metaclass = (class << self ; self ; end)
91
- options.each do |key, value|
92
- metaclass.__send__(:define_method, key) { value }
93
- end
94
- end
95
-
96
- def init_event(event_type, can_bubble, cancelable)
97
- @type = event_type
98
- @bubbles = can_bubble
99
- @cancelable = cancelable
100
- end
101
-
102
- def stop_propagation
103
- end
104
-
105
- def prevent_default
106
- end
107
58
  end
108
59
 
109
60
  end
@@ -0,0 +1,33 @@
1
+ module Faye::WebSocket::API
2
+ class Event
3
+
4
+ attr_reader :type, :bubbles, :cancelable
5
+ attr_accessor :target, :current_target, :event_phase, :data
6
+
7
+ CAPTURING_PHASE = 1
8
+ AT_TARGET = 2
9
+ BUBBLING_PHASE = 3
10
+
11
+ def initialize(event_type, options = {})
12
+ @type = event_type
13
+ metaclass = (class << self ; self ; end)
14
+ options.each do |key, value|
15
+ metaclass.__send__(:define_method, key) { value }
16
+ end
17
+ end
18
+
19
+ def init_event(event_type, can_bubble, cancelable)
20
+ @type = event_type
21
+ @bubbles = can_bubble
22
+ @cancelable = cancelable
23
+ end
24
+
25
+ def stop_propagation
26
+ end
27
+
28
+ def prevent_default
29
+ end
30
+
31
+ end
32
+ end
33
+
@@ -0,0 +1,34 @@
1
+ module Faye::WebSocket::API
2
+ module EventTarget
3
+
4
+ attr_accessor :onopen, :onmessage, :onerror, :onclose
5
+
6
+ def add_event_listener(event_type, listener, use_capture = false)
7
+ @listeners ||= {}
8
+ list = @listeners[event_type] ||= []
9
+ list << listener
10
+ end
11
+
12
+ def remove_event_listener(event_type, listener, use_capture = false)
13
+ return unless @listeners and @listeners[event_type]
14
+ return @listeners.delete(event_type) unless listener
15
+
16
+ @listeners[event_type].delete_if(&listener.method(:==))
17
+ end
18
+
19
+ def dispatch_event(event)
20
+ event.target = event.current_target = self
21
+ event.event_phase = Event::AT_TARGET
22
+
23
+ callback = __send__("on#{ event.type }")
24
+ callback.call(event) if callback
25
+
26
+ return unless @listeners and @listeners[event.type]
27
+ @listeners[event.type].each do |listener|
28
+ listener.call(event)
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+
@@ -3,9 +3,9 @@
3
3
  require "spec_helper"
4
4
 
5
5
  WebSocketSteps = EM::RSpec.async_steps do
6
- def server(port, secure, &callback)
6
+ def server(port, backend, secure, &callback)
7
7
  @server = EchoServer.new
8
- @server.listen(port, secure)
8
+ @server.listen(port, backend, secure)
9
9
  @port = port
10
10
  EM.add_timer(0.1, &callback)
11
11
  end
@@ -135,21 +135,31 @@ describe Faye::WebSocket::Client do
135
135
  end
136
136
  end
137
137
 
138
- describe "with a plain-text server" do
138
+ describe "with a plain-text Thin server" do
139
139
  let(:socket_url) { plain_text_url }
140
140
  let(:blocked_url) { secure_url }
141
141
 
142
- before { server 8000, false }
142
+ before { server 8000, :thin, false }
143
143
  after { sync ; stop }
144
144
 
145
145
  it_should_behave_like "socket client"
146
146
  end
147
147
 
148
- describe "with a secure server" do
148
+ describe "with a plain-text Rainbows server" do
149
+ let(:socket_url) { plain_text_url }
150
+ let(:blocked_url) { secure_url }
151
+
152
+ before { server 8000, :rainbows, false }
153
+ after { sync ; stop }
154
+
155
+ it_should_behave_like "socket client"
156
+ end
157
+
158
+ describe "with a secure Thin server" do
149
159
  let(:socket_url) { secure_url }
150
160
  let(:blocked_url) { plain_text_url }
151
161
 
152
- before { server 8000, true }
162
+ before { server 8000, :thin, true }
153
163
  after { sync ; stop }
154
164
 
155
165
  it_should_behave_like "socket client"
@@ -0,0 +1,3 @@
1
+ Rainbows! do
2
+ use :EventMachine
3
+ end
@@ -1,9 +1,12 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
+ require 'thin'
4
+ require 'rainbows'
3
5
  require File.expand_path('../../lib/faye/websocket', __FILE__)
4
6
  require File.expand_path('../../vendor/em-rspec/lib/em-rspec', __FILE__)
5
7
 
6
8
  Thin::Logging.silent = true
9
+ Unicorn::Configurator::DEFAULTS[:logger] = Logger.new(StringIO.new)
7
10
 
8
11
  module EncodingHelper
9
12
  def encode(message)
@@ -30,16 +33,27 @@ class EchoServer
30
33
  [-1, {}, []]
31
34
  end
32
35
 
33
- def listen(port, ssl = false)
34
- Rack::Handler.get('thin').run(self, :Port => port) do |s|
35
- if ssl
36
- s.ssl = true
37
- s.ssl_options = {
38
- :private_key_file => File.expand_path('../server.key', __FILE__),
39
- :cert_chain_file => File.expand_path('../server.crt', __FILE__)
40
- }
36
+ def listen(port, backend, ssl = false)
37
+ case backend
38
+ when :rainbows
39
+ rackup = Unicorn::Configurator::RACKUP
40
+ rackup[:port] = port
41
+ rackup[:set_listener] = true
42
+ options = rackup[:options]
43
+ options[:config_file] = File.expand_path('../rainbows.conf', __FILE__)
44
+ @server = Rainbows::HttpServer.new(self, options)
45
+ @server.start
46
+ when :thin
47
+ Rack::Handler.get('thin').run(self, :Port => port) do |s|
48
+ if ssl
49
+ s.ssl = true
50
+ s.ssl_options = {
51
+ :private_key_file => File.expand_path('../server.key', __FILE__),
52
+ :cert_chain_file => File.expand_path('../server.crt', __FILE__)
53
+ }
54
+ end
55
+ @server = s
41
56
  end
42
- @server = s
43
57
  end
44
58
  end
45
59
 
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.2.0
4
+ version: 0.3.0
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: 2011-12-21 00:00:00.000000000 Z
12
+ date: 2012-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: &18014780 !ruby/object:Gem::Requirement
16
+ requirement: &18778460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,32 +21,43 @@ dependencies:
21
21
  version: 0.12.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *18014780
24
+ version_requirements: *18778460
25
25
  - !ruby/object:Gem::Dependency
26
- name: thin
27
- requirement: &18013820 !ruby/object:Gem::Requirement
26
+ name: rack
27
+ requirement: &18778060 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - ~>
30
+ - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: '1.2'
33
- type: :runtime
32
+ version: '0'
33
+ type: :development
34
34
  prerelease: false
35
- version_requirements: *18013820
35
+ version_requirements: *18778060
36
+ - !ruby/object:Gem::Dependency
37
+ name: rainbows
38
+ requirement: &18777520 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 1.0.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *18777520
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: rspec
38
- requirement: &18012580 !ruby/object:Gem::Requirement
49
+ requirement: &18777020 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ~>
42
53
  - !ruby/object:Gem::Version
43
- version: 2.5.0
54
+ version: 2.8.0
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *18012580
57
+ version_requirements: *18777020
47
58
  - !ruby/object:Gem::Dependency
48
- name: rack
49
- requirement: &18011960 !ruby/object:Gem::Requirement
59
+ name: rake-compiler
60
+ requirement: &18776640 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,18 +65,18 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *18011960
68
+ version_requirements: *18776640
58
69
  - !ruby/object:Gem::Dependency
59
- name: rake-compiler
60
- requirement: &18010240 !ruby/object:Gem::Requirement
70
+ name: thin
71
+ requirement: &18776100 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
64
75
  - !ruby/object:Gem::Version
65
- version: '0'
76
+ version: 1.2.0
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *18010240
79
+ version_requirements: *18776100
69
80
  description:
70
81
  email: jcoglan@gmail.com
71
82
  executables: []
@@ -85,12 +96,22 @@ files:
85
96
  - lib/faye/websocket/api.rb
86
97
  - lib/faye/websocket/hybi_parser/handshake.rb
87
98
  - lib/faye/websocket/hybi_parser/stream_reader.rb
99
+ - lib/faye/websocket/api/event_target.rb
100
+ - lib/faye/websocket/api/event.rb
101
+ - lib/faye/websocket/adapter.rb
88
102
  - lib/faye/websocket.rb
89
- - lib/faye/thin_extensions.rb
103
+ - lib/faye/eventsource.rb
104
+ - lib/faye/adapters/thin.rb
105
+ - lib/faye/adapters/rainbows.rb
106
+ - lib/faye/adapters/goliath.rb
107
+ - lib/faye/adapters/rainbows_client.rb
108
+ - examples/app.rb
90
109
  - examples/client.rb
91
110
  - examples/haproxy.conf
111
+ - examples/sse.html
112
+ - examples/config.ru
92
113
  - examples/server.rb
93
- - examples/index.html
114
+ - examples/ws.html
94
115
  - examples/autobahn_client.rb
95
116
  - spec/faye/websocket/draft75_parser_spec.rb
96
117
  - spec/faye/websocket/client_spec.rb
@@ -98,8 +119,9 @@ files:
98
119
  - spec/faye/websocket/hybi_parser_spec.rb
99
120
  - spec/server.key
100
121
  - spec/server.crt
122
+ - spec/rainbows.conf
101
123
  - spec/spec_helper.rb
102
- homepage: http://github.com/jcoglan/faye-websocket-ruby
124
+ homepage: http://github.com/faye/faye-websocket-ruby
103
125
  licenses: []
104
126
  post_install_message:
105
127
  rdoc_options: