faye-websocket 0.2.0 → 0.3.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-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: