websocket-rails 0.1.2 → 0.1.3
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.
- data/CHANGELOG.md +34 -0
- data/Gemfile +1 -0
- data/README.md +34 -34
- data/assets/javascripts/http_dispatcher.js +6 -5
- data/assets/javascripts/websocket_dispatcher.js +7 -6
- data/lib/websocket-rails.rb +22 -2
- data/lib/websocket_rails/base_controller.rb +24 -8
- data/lib/websocket_rails/connection_adapters.rb +43 -16
- data/lib/websocket_rails/connection_adapters/http.rb +14 -10
- data/lib/websocket_rails/connection_adapters/web_socket.rb +13 -12
- data/lib/websocket_rails/connection_manager.rb +19 -47
- data/lib/websocket_rails/dispatcher.rb +39 -33
- data/lib/websocket_rails/event.rb +71 -0
- data/lib/websocket_rails/event_map.rb +120 -0
- data/lib/websocket_rails/version.rb +1 -1
- data/spec/dummy/config/initializers/events.rb +2 -2
- data/spec/dummy/{public/stylesheets/.gitkeep → log/development.log} +0 -0
- data/spec/dummy/log/production.log +0 -0
- data/spec/dummy/log/server.log +0 -0
- data/spec/dummy/log/test.log +454 -0
- data/spec/integration/connection_manager_spec.rb +29 -13
- data/spec/spec_helper.rb +3 -3
- data/spec/support/helper_methods.rb +29 -0
- data/spec/support/mock_web_socket.rb +6 -2
- data/spec/unit/connection_adapters/http_spec.rb +1 -3
- data/spec/unit/connection_adapters/web_socket_spec.rb +1 -11
- data/spec/unit/connection_adapters_spec.rb +51 -19
- data/spec/unit/connection_manager_spec.rb +22 -46
- data/spec/unit/dispatcher_spec.rb +56 -25
- data/spec/unit/event_map_spec.rb +96 -0
- data/spec/unit/event_spec.rb +99 -0
- metadata +23 -25
- data/.gitignore +0 -11
- data/.rspec +0 -2
- data/.travis.yml +0 -3
- data/Gemfile.lock +0 -144
- data/Guardfile +0 -9
- data/lib/websocket_rails/events.rb +0 -53
- data/spec/unit/events_spec.rb +0 -70
- data/websocket-rails.gemspec +0 -26
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module WebsocketRails
|
4
|
+
describe EventMap do
|
5
|
+
|
6
|
+
class ProductController < WebsocketRails::BaseController
|
7
|
+
def update_product
|
8
|
+
true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def define_test_events
|
13
|
+
WebsocketRails.route_block = nil
|
14
|
+
WebsocketRails::EventMap.describe do
|
15
|
+
subscribe :client_connected, to: ChatController, with_method: :new_user
|
16
|
+
|
17
|
+
namespace :product do
|
18
|
+
subscribe :update, to: ProductController, with_method: :update_product
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:dispatcher) { double('dispatcher').as_null_object }
|
24
|
+
subject { EventMap.new(dispatcher) }
|
25
|
+
before { define_test_events }
|
26
|
+
|
27
|
+
context "EventMap.describe" do
|
28
|
+
it "should store the event route block in the global configuration" do
|
29
|
+
WebsocketRails.route_block.should be_present
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "Events in the global namespace" do
|
34
|
+
|
35
|
+
it "should store the event in the correct namespace" do
|
36
|
+
subject.namespace.actions[:client_connected].should be_present
|
37
|
+
subject.namespace.name.should == :global
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should store the instantiated controller in the classes hash" do
|
41
|
+
subject.namespace.controllers[ChatController].class.should == ChatController
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should set the dispatcher on the instantiated controller" do
|
45
|
+
subject.namespace.controllers[ChatController].instance_variable_get(:@_dispatcher).should == dispatcher
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should store the class constant and method name in the events hash" do
|
49
|
+
subject.namespace.actions[:client_connected].should == [[ChatController,:new_user]]
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
context "Events in a child namespace" do
|
55
|
+
|
56
|
+
before { @namespace = subject.namespace }
|
57
|
+
|
58
|
+
it "should store the event in the correct namespace" do
|
59
|
+
@namespace.namespaces[:product].actions[:update].should be_present
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
context "#routes_for" do
|
65
|
+
|
66
|
+
let(:event) { double('event') }
|
67
|
+
|
68
|
+
context "with events in the global namespace" do
|
69
|
+
it "should yield the controller and action name for each route defined for an event" do
|
70
|
+
event.stub(:name).and_return(:client_connected)
|
71
|
+
event.stub(:namespace).and_return([:global])
|
72
|
+
|
73
|
+
subject.routes_for(event) do |controller,method|
|
74
|
+
controller.class.should == ChatController
|
75
|
+
method.should == :new_user
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "with events in a child namespace" do
|
81
|
+
it "should yield the controller and action name for each route defined for an event" do
|
82
|
+
ProductController.any_instance.should_receive(:action_executed)
|
83
|
+
event = HelperMethods::MockEvent.new :update, [:global,:product]
|
84
|
+
|
85
|
+
subject.routes_for(event) do |controller,method|
|
86
|
+
controller.action_executed
|
87
|
+
controller.class.should == ProductController
|
88
|
+
method.should == :update_product
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module WebsocketRails
|
4
|
+
describe Event do
|
5
|
+
let(:encoded_message) { '["new_message",{"message":"this is a message"}]' }
|
6
|
+
let(:encoded_message_string) { '["new_message","this is a message"]' }
|
7
|
+
let(:namespace_encoded_message_string) { '["product.new_message","this is a message"]' }
|
8
|
+
let(:namespace_encoded_message) { '["product.new_message",{"message":"this is a message"}]' }
|
9
|
+
let(:connection) { double('connection') }
|
10
|
+
|
11
|
+
before { connection.stub!(:id).and_return(1) }
|
12
|
+
|
13
|
+
describe ".new_from_json" do
|
14
|
+
context "messages in the global namespace" do
|
15
|
+
it "should decode a new message and store it" do
|
16
|
+
event = Event.new_from_json( encoded_message, connection )
|
17
|
+
event.connection.should == connection
|
18
|
+
event.name.should == :new_message
|
19
|
+
event.namespace.should == [:global]
|
20
|
+
event.data[:message].should == 'this is a message'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "messages in a child namespace" do
|
25
|
+
it "should store the event with the correct namesapce" do
|
26
|
+
event = Event.new_from_json( namespace_encoded_message, connection )
|
27
|
+
event.namespace.should == [:global,:product]
|
28
|
+
event.name.should == :new_message
|
29
|
+
event.data[:message].should == 'this is a message'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe ".new_on_open" do
|
35
|
+
before { @event = Event.new_on_open connection, {message: 'connected'} }
|
36
|
+
|
37
|
+
it "should create an event named :client_connected" do
|
38
|
+
@event.name.should == :client_connected
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should send the connection id to the client" do
|
42
|
+
@event.data[:connection_id].should == 1
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should merge the optional data with the connection id" do
|
46
|
+
@event.data[:message].should == 'connected'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ".new_on_close" do
|
51
|
+
it "should create an event named :client_disconnected" do
|
52
|
+
event = Event.new_on_close( connection, "optional_data" )
|
53
|
+
event.name.should == :client_disconnected
|
54
|
+
event.data.should == "optional_data"
|
55
|
+
event.connection.should == connection
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe ".new_on_error" do
|
60
|
+
it "should create an event named :client_error" do
|
61
|
+
event = Event.new_on_error( connection, "optional_data" )
|
62
|
+
event.name.should == :client_error
|
63
|
+
event.data.should == "optional_data"
|
64
|
+
event.connection.should == connection
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "new namespaced events" do
|
69
|
+
it "should store the namespace in the namespace attribute" do
|
70
|
+
event = Event.new "event", {}, connection, :namespace => :product
|
71
|
+
event.namespace.should == [:global,:product]
|
72
|
+
event.name.should == :event
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should store nested namespaces in the namespace attribute" do
|
76
|
+
event = Event.new "event", {}, connection, :namespace => [:product,:x_ray_vision]
|
77
|
+
event.namespace.should == [:global,:product,:x_ray_vision]
|
78
|
+
event.name.should == :event
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#serialize" do
|
83
|
+
context "messages in the global namespace" do
|
84
|
+
it "should not add the global namespace to the event name" do
|
85
|
+
event = Event.new_from_json encoded_message_string, connection
|
86
|
+
event.serialize.should == encoded_message_string
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "messages in a child namespace" do
|
91
|
+
it "should add the namespace to the front of the event name" do
|
92
|
+
event = Event.new_from_json namespace_encoded_message_string, connection
|
93
|
+
event.serialize.should == namespace_encoded_message_string
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: websocket-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-06-
|
14
|
+
date: 2012-06-22 00:00:00.000000000Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rack
|
@@ -133,36 +133,26 @@ executables:
|
|
133
133
|
extensions: []
|
134
134
|
extra_rdoc_files: []
|
135
135
|
files:
|
136
|
-
- .gitignore
|
137
|
-
- .rspec
|
138
|
-
- .travis.yml
|
139
|
-
- Gemfile
|
140
|
-
- Gemfile.lock
|
141
|
-
- Guardfile
|
142
|
-
- MIT-LICENSE
|
143
|
-
- README.md
|
144
|
-
- Rakefile
|
145
|
-
- assets/javascripts/http_dispatcher.js
|
146
|
-
- assets/javascripts/websocket_dispatcher.js
|
147
|
-
- bin/thin-socketrails
|
148
|
-
- config/routes.rb
|
149
136
|
- lib/websocket-rails.rb
|
150
137
|
- lib/websocket_rails/base_controller.rb
|
151
|
-
- lib/websocket_rails/connection_adapters.rb
|
152
138
|
- lib/websocket_rails/connection_adapters/http.rb
|
153
139
|
- lib/websocket_rails/connection_adapters/web_socket.rb
|
140
|
+
- lib/websocket_rails/connection_adapters.rb
|
154
141
|
- lib/websocket_rails/connection_manager.rb
|
155
142
|
- lib/websocket_rails/data_store.rb
|
156
143
|
- lib/websocket_rails/dispatcher.rb
|
157
144
|
- lib/websocket_rails/engine.rb
|
158
|
-
- lib/websocket_rails/
|
145
|
+
- lib/websocket_rails/event.rb
|
146
|
+
- lib/websocket_rails/event_map.rb
|
159
147
|
- lib/websocket_rails/version.rb
|
160
|
-
-
|
148
|
+
- config/routes.rb
|
149
|
+
- bin/thin-socketrails
|
150
|
+
- assets/javascripts/http_dispatcher.js
|
151
|
+
- assets/javascripts/websocket_dispatcher.js
|
161
152
|
- spec/dummy/app/controllers/application_controller.rb
|
162
153
|
- spec/dummy/app/controllers/chat_controller.rb
|
163
154
|
- spec/dummy/app/helpers/application_helper.rb
|
164
155
|
- spec/dummy/app/views/layouts/application.html.erb
|
165
|
-
- spec/dummy/config.ru
|
166
156
|
- spec/dummy/config/application.rb
|
167
157
|
- spec/dummy/config/boot.rb
|
168
158
|
- spec/dummy/config/database.yml
|
@@ -178,10 +168,12 @@ files:
|
|
178
168
|
- spec/dummy/config/initializers/session_store.rb
|
179
169
|
- spec/dummy/config/locales/en.yml
|
180
170
|
- spec/dummy/config/routes.rb
|
171
|
+
- spec/dummy/config.ru
|
181
172
|
- spec/dummy/db/test.sqlite3
|
182
173
|
- spec/dummy/log/development.log
|
183
174
|
- spec/dummy/log/production.log
|
184
175
|
- spec/dummy/log/server.log
|
176
|
+
- spec/dummy/log/test.log
|
185
177
|
- spec/dummy/public/404.html
|
186
178
|
- spec/dummy/public/422.html
|
187
179
|
- spec/dummy/public/500.html
|
@@ -192,10 +184,11 @@ files:
|
|
192
184
|
- spec/dummy/public/javascripts/effects.js
|
193
185
|
- spec/dummy/public/javascripts/prototype.js
|
194
186
|
- spec/dummy/public/javascripts/rails.js
|
195
|
-
- spec/dummy/
|
187
|
+
- spec/dummy/Rakefile
|
196
188
|
- spec/dummy/script/rails
|
197
189
|
- spec/integration/connection_manager_spec.rb
|
198
190
|
- spec/spec_helper.rb
|
191
|
+
- spec/support/helper_methods.rb
|
199
192
|
- spec/support/mock_web_socket.rb
|
200
193
|
- spec/unit/connection_adapters/http_spec.rb
|
201
194
|
- spec/unit/connection_adapters/web_socket_spec.rb
|
@@ -203,8 +196,13 @@ files:
|
|
203
196
|
- spec/unit/connection_manager_spec.rb
|
204
197
|
- spec/unit/data_store_spec.rb
|
205
198
|
- spec/unit/dispatcher_spec.rb
|
206
|
-
- spec/unit/
|
207
|
-
-
|
199
|
+
- spec/unit/event_map_spec.rb
|
200
|
+
- spec/unit/event_spec.rb
|
201
|
+
- MIT-LICENSE
|
202
|
+
- Rakefile
|
203
|
+
- Gemfile
|
204
|
+
- README.md
|
205
|
+
- CHANGELOG.md
|
208
206
|
homepage: http://danknox.github.com/websocket-rails/
|
209
207
|
licenses: []
|
210
208
|
post_install_message:
|
@@ -219,7 +217,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
219
217
|
version: '0'
|
220
218
|
segments:
|
221
219
|
- 0
|
222
|
-
hash:
|
220
|
+
hash: 1310952573146011562
|
223
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
222
|
none: false
|
225
223
|
requirements:
|
@@ -228,9 +226,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
226
|
version: '0'
|
229
227
|
segments:
|
230
228
|
- 0
|
231
|
-
hash:
|
229
|
+
hash: 1310952573146011562
|
232
230
|
requirements: []
|
233
|
-
rubyforge_project:
|
231
|
+
rubyforge_project: websocket-rails
|
234
232
|
rubygems_version: 1.8.19
|
235
233
|
signing_key:
|
236
234
|
specification_version: 3
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
data/Gemfile.lock
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
websocket-rails (0.1.2)
|
5
|
-
faye-websocket
|
6
|
-
rack
|
7
|
-
thin
|
8
|
-
|
9
|
-
GEM
|
10
|
-
remote: http://rubygems.org/
|
11
|
-
specs:
|
12
|
-
actionmailer (3.2.5)
|
13
|
-
actionpack (= 3.2.5)
|
14
|
-
mail (~> 2.4.4)
|
15
|
-
actionpack (3.2.5)
|
16
|
-
activemodel (= 3.2.5)
|
17
|
-
activesupport (= 3.2.5)
|
18
|
-
builder (~> 3.0.0)
|
19
|
-
erubis (~> 2.7.0)
|
20
|
-
journey (~> 1.0.1)
|
21
|
-
rack (~> 1.4.0)
|
22
|
-
rack-cache (~> 1.2)
|
23
|
-
rack-test (~> 0.6.1)
|
24
|
-
sprockets (~> 2.1.3)
|
25
|
-
activemodel (3.2.5)
|
26
|
-
activesupport (= 3.2.5)
|
27
|
-
builder (~> 3.0.0)
|
28
|
-
activerecord (3.2.5)
|
29
|
-
activemodel (= 3.2.5)
|
30
|
-
activesupport (= 3.2.5)
|
31
|
-
arel (~> 3.0.2)
|
32
|
-
tzinfo (~> 0.3.29)
|
33
|
-
activeresource (3.2.5)
|
34
|
-
activemodel (= 3.2.5)
|
35
|
-
activesupport (= 3.2.5)
|
36
|
-
activesupport (3.2.5)
|
37
|
-
i18n (~> 0.6)
|
38
|
-
multi_json (~> 1.0)
|
39
|
-
arel (3.0.2)
|
40
|
-
builder (3.0.0)
|
41
|
-
daemons (1.1.8)
|
42
|
-
diff-lcs (1.1.3)
|
43
|
-
erubis (2.7.0)
|
44
|
-
eventmachine (1.0.0.beta.4)
|
45
|
-
faye-websocket (0.4.5)
|
46
|
-
eventmachine (>= 0.12.0)
|
47
|
-
ffi (1.0.11)
|
48
|
-
guard (1.1.1)
|
49
|
-
listen (>= 0.4.2)
|
50
|
-
thor (>= 0.14.6)
|
51
|
-
guard-rspec (1.0.0)
|
52
|
-
guard (>= 1.1)
|
53
|
-
hike (1.2.1)
|
54
|
-
i18n (0.6.0)
|
55
|
-
journey (1.0.3)
|
56
|
-
json (1.7.3)
|
57
|
-
listen (0.4.3)
|
58
|
-
rb-fchange (~> 0.0.5)
|
59
|
-
rb-fsevent (~> 0.9.1)
|
60
|
-
rb-inotify (~> 0.8.8)
|
61
|
-
mail (2.4.4)
|
62
|
-
i18n (>= 0.4.0)
|
63
|
-
mime-types (~> 1.16)
|
64
|
-
treetop (~> 1.4.8)
|
65
|
-
mime-types (1.18)
|
66
|
-
multi_json (1.3.6)
|
67
|
-
polyglot (0.3.3)
|
68
|
-
rack (1.4.1)
|
69
|
-
rack-cache (1.2)
|
70
|
-
rack (>= 0.4)
|
71
|
-
rack-ssl (1.3.2)
|
72
|
-
rack
|
73
|
-
rack-test (0.6.1)
|
74
|
-
rack (>= 1.0)
|
75
|
-
rails (3.2.5)
|
76
|
-
actionmailer (= 3.2.5)
|
77
|
-
actionpack (= 3.2.5)
|
78
|
-
activerecord (= 3.2.5)
|
79
|
-
activeresource (= 3.2.5)
|
80
|
-
activesupport (= 3.2.5)
|
81
|
-
bundler (~> 1.0)
|
82
|
-
railties (= 3.2.5)
|
83
|
-
railties (3.2.5)
|
84
|
-
actionpack (= 3.2.5)
|
85
|
-
activesupport (= 3.2.5)
|
86
|
-
rack-ssl (~> 1.3.2)
|
87
|
-
rake (>= 0.8.7)
|
88
|
-
rdoc (~> 3.4)
|
89
|
-
thor (>= 0.14.6, < 2.0)
|
90
|
-
rake (0.9.2.2)
|
91
|
-
rb-fchange (0.0.5)
|
92
|
-
ffi
|
93
|
-
rb-fsevent (0.9.1)
|
94
|
-
rb-inotify (0.8.8)
|
95
|
-
ffi (>= 0.5.0)
|
96
|
-
rdoc (3.12)
|
97
|
-
json (~> 1.4)
|
98
|
-
rspec (2.10.0)
|
99
|
-
rspec-core (~> 2.10.0)
|
100
|
-
rspec-expectations (~> 2.10.0)
|
101
|
-
rspec-mocks (~> 2.10.0)
|
102
|
-
rspec-core (2.10.1)
|
103
|
-
rspec-expectations (2.10.0)
|
104
|
-
diff-lcs (~> 1.1.3)
|
105
|
-
rspec-mocks (2.10.1)
|
106
|
-
rspec-rails (2.10.1)
|
107
|
-
actionpack (>= 3.0)
|
108
|
-
activesupport (>= 3.0)
|
109
|
-
railties (>= 3.0)
|
110
|
-
rspec (~> 2.10.0)
|
111
|
-
simplecov (0.6.4)
|
112
|
-
multi_json (~> 1.0)
|
113
|
-
simplecov-html (~> 0.5.3)
|
114
|
-
simplecov-html (0.5.3)
|
115
|
-
sprockets (2.1.3)
|
116
|
-
hike (~> 1.2)
|
117
|
-
rack (~> 1.0)
|
118
|
-
tilt (~> 1.1, != 1.3.0)
|
119
|
-
sqlite3 (1.3.6)
|
120
|
-
thin (1.3.1)
|
121
|
-
daemons (>= 1.0.9)
|
122
|
-
eventmachine (>= 0.12.6)
|
123
|
-
rack (>= 1.0.0)
|
124
|
-
thor (0.15.2)
|
125
|
-
tilt (1.3.3)
|
126
|
-
treetop (1.4.10)
|
127
|
-
polyglot
|
128
|
-
polyglot (>= 0.3.1)
|
129
|
-
tzinfo (0.3.33)
|
130
|
-
|
131
|
-
PLATFORMS
|
132
|
-
ruby
|
133
|
-
|
134
|
-
DEPENDENCIES
|
135
|
-
eventmachine (>= 1.0.0.beta.3)
|
136
|
-
faye-websocket
|
137
|
-
guard
|
138
|
-
guard-rspec
|
139
|
-
rails
|
140
|
-
rake
|
141
|
-
rspec-rails
|
142
|
-
simplecov
|
143
|
-
sqlite3
|
144
|
-
websocket-rails!
|