websocket-rails 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/.gitignore +4 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +3 -0
  4. data/Gemfile +6 -1
  5. data/Gemfile.lock +28 -12
  6. data/MIT-LICENSE +1 -1
  7. data/README.md +122 -14
  8. data/Rakefile +18 -10
  9. data/bin/thin-socketrails +30 -0
  10. data/lib/websocket-rails.rb +11 -2
  11. data/lib/websocket_rails/base_controller.rb +91 -10
  12. data/lib/websocket_rails/connection_manager.rb +57 -27
  13. data/lib/websocket_rails/data_store.rb +34 -4
  14. data/lib/websocket_rails/dispatcher.rb +25 -46
  15. data/lib/websocket_rails/events.rb +53 -0
  16. data/lib/websocket_rails/version.rb +1 -1
  17. data/{test → spec}/dummy/Rakefile +0 -0
  18. data/{test → spec}/dummy/app/controllers/application_controller.rb +0 -0
  19. data/spec/dummy/app/controllers/chat_controller.rb +57 -0
  20. data/{test → spec}/dummy/app/helpers/application_helper.rb +0 -0
  21. data/{test → spec}/dummy/app/views/layouts/application.html.erb +0 -0
  22. data/{test → spec}/dummy/config.ru +0 -0
  23. data/{test → spec}/dummy/config/application.rb +1 -1
  24. data/{test → spec}/dummy/config/boot.rb +0 -0
  25. data/{test → spec}/dummy/config/database.yml +0 -0
  26. data/{test → spec}/dummy/config/environment.rb +0 -0
  27. data/{test → spec}/dummy/config/environments/development.rb +0 -0
  28. data/{test → spec}/dummy/config/environments/production.rb +0 -0
  29. data/{test → spec}/dummy/config/environments/test.rb +0 -0
  30. data/{test → spec}/dummy/config/initializers/backtrace_silencers.rb +0 -0
  31. data/spec/dummy/config/initializers/events.rb +7 -0
  32. data/{test → spec}/dummy/config/initializers/inflections.rb +0 -0
  33. data/{test → spec}/dummy/config/initializers/mime_types.rb +0 -0
  34. data/{test → spec}/dummy/config/initializers/secret_token.rb +0 -0
  35. data/{test → spec}/dummy/config/initializers/session_store.rb +0 -0
  36. data/{test → spec}/dummy/config/locales/en.yml +0 -0
  37. data/{test → spec}/dummy/config/routes.rb +0 -0
  38. data/{test/dummy/public/favicon.ico → spec/dummy/db/test.sqlite3} +0 -0
  39. data/{test/dummy/public/stylesheets/.gitkeep → spec/dummy/log/development.log} +0 -0
  40. data/spec/dummy/log/production.log +0 -0
  41. data/spec/dummy/log/server.log +0 -0
  42. data/spec/dummy/log/test.log +0 -0
  43. data/{test → spec}/dummy/public/404.html +0 -0
  44. data/{test → spec}/dummy/public/422.html +0 -0
  45. data/{test → spec}/dummy/public/500.html +0 -0
  46. data/spec/dummy/public/favicon.ico +0 -0
  47. data/{test → spec}/dummy/public/javascripts/application.js +0 -0
  48. data/{test → spec}/dummy/public/javascripts/controls.js +0 -0
  49. data/{test → spec}/dummy/public/javascripts/dragdrop.js +0 -0
  50. data/{test → spec}/dummy/public/javascripts/effects.js +0 -0
  51. data/{test → spec}/dummy/public/javascripts/prototype.js +0 -0
  52. data/{test → spec}/dummy/public/javascripts/rails.js +0 -0
  53. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  54. data/{test → spec}/dummy/script/rails +0 -0
  55. data/spec/spec_helper.rb +60 -0
  56. data/spec/support/mock_web_socket.rb +27 -0
  57. data/spec/unit/connection_manager_spec.rb +111 -0
  58. data/spec/unit/data_store_spec.rb +15 -0
  59. data/spec/unit/dispatcher_spec.rb +57 -0
  60. data/spec/unit/events_spec.rb +70 -0
  61. data/websocket-rails.gemspec +2 -2
  62. metadata +65 -53
  63. data/lib/websocket_rails/extensions/common.rb +0 -11
  64. data/lib/websocket_rails/extensions/websocket_rack.rb +0 -55
  65. data/test/integration/navigation_test.rb +0 -7
  66. data/test/support/integration_case.rb +0 -5
  67. data/test/test_helper.rb +0 -22
  68. data/test/websocket_rails_test.rb +0 -7
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,60 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+
6
+ require File.expand_path("../../spec/dummy/config/environment", __FILE__)
7
+ require 'rspec/rails'
8
+ require 'rspec/autorun'
9
+ require 'thin'
10
+ #require 'vendor/em-rspec/lib/em-rspec'
11
+
12
+ $:.push File.expand_path("../../lib", __FILE__)
13
+ require 'websocket-rails'
14
+
15
+ # Requires supporting ruby files with custom matchers and macros, etc,
16
+ # in spec/support/ and its subdirectories.
17
+ Dir["../../spec/support/**/*.rb"].each {|f| require f}
18
+
19
+ RSpec.configure do |config|
20
+ # == Mock Framework
21
+ #
22
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
23
+ #
24
+ # config.mock_with :mocha
25
+ # config.mock_with :flexmock
26
+ # config.mock_with :rr
27
+ config.mock_with :rspec
28
+
29
+ #config.include FactoryGirl::Syntax::Methods
30
+
31
+ # If true, the base class of anonymous controllers will be inferred
32
+ # automatically. This will be the default behavior in future versions of
33
+ # rspec-rails.
34
+ config.infer_base_class_for_anonymous_controllers = false
35
+
36
+ config.before(:all) do
37
+ silence_output
38
+ end
39
+
40
+ config.after(:all) do
41
+ enable_output
42
+ end
43
+ end
44
+
45
+ def silence_output
46
+ @orig_stderr = $stderr
47
+ @orig_stdout = $stdout
48
+
49
+ # redirect stderr and stdout to /dev/null
50
+ $stderr = File.new('/dev/null', 'w')
51
+ $stdout = File.new('/dev/null', 'w')
52
+ end
53
+
54
+ # Replace stdout and stderr so anything else is output correctly.
55
+ def enable_output
56
+ $stderr = @orig_stderr
57
+ $stdout = @orig_stdout
58
+ @orig_stderr = nil
59
+ @orig_stdout = nil
60
+ end
@@ -0,0 +1,27 @@
1
+ module WebsocketRails
2
+
3
+ class MockWebSocket
4
+ attr_writer :onmessage, :onerror, :onclose
5
+
6
+ def onmessage(event=nil)
7
+ @onmessage.call(event)
8
+ end
9
+
10
+ def onerror(event=nil)
11
+ @onerror.call(event)
12
+ end
13
+
14
+ def onclose(event=nil)
15
+ @onclose.call(event)
16
+ end
17
+
18
+ def rack_response
19
+ [ -1, {}, [] ]
20
+ end
21
+
22
+ def send(*args)
23
+ true
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,111 @@
1
+ require 'spec_helper'
2
+ require 'support/mock_web_socket'
3
+
4
+ module WebsocketRails
5
+ describe ConnectionManager do
6
+
7
+ def open_connection
8
+ subject.call(@env)
9
+ end
10
+
11
+ let(:connections) { subject.connections }
12
+
13
+ before(:each) do
14
+ Faye::WebSocket.stub(:websocket?).and_return(true)
15
+ @mock_socket = MockWebSocket.new
16
+ Faye::WebSocket.stub(:new).and_return(@mock_socket)
17
+ @dispatcher = double('dispatcher').as_null_object
18
+ Dispatcher.stub(:new).and_return(@dispatcher)
19
+ @env = {}
20
+ end
21
+
22
+ context "new connections" do
23
+ it "should add one to the total connection count" do
24
+ expect { open_connection }.to change { connections.count }.by(1)
25
+ end
26
+
27
+ it "should execute the :client_connected event" do
28
+ @dispatcher.should_receive(:dispatch) do |event,data,connection|
29
+ event.should == 'client_connected'
30
+ connection.should == @mock_socket
31
+ end
32
+ open_connection
33
+ end
34
+
35
+ it "should store the new connection in the @connections array" do
36
+ open_connection
37
+ connections.include?(@mock_socket).should be_true
38
+ end
39
+
40
+ it "should return an Async Rack response" do
41
+ open_connection.should == [ -1, {}, [] ]
42
+ end
43
+ end
44
+
45
+ context "new event on an open connection" do
46
+ before(:all) { MockEvent = Struct.new(:data) }
47
+ before(:each) { open_connection }
48
+
49
+ it "should dispatch the appropriate event through the Dispatcher" do
50
+ mock_event = MockEvent.new(:new_message)
51
+ @dispatcher.should_receive(:receive) do |event,connection|
52
+ event.should == :new_message
53
+ connection.should == @mock_socket
54
+ end
55
+ @mock_socket.onmessage(mock_event)
56
+ end
57
+ end
58
+
59
+ context "open connections" do
60
+ before(:each) do
61
+ Faye::WebSocket.stub(:new).and_return(MockWebSocket.new,MockWebSocket.new,@mock_socket,MockWebSocket.new)
62
+ 4.times { open_connection }
63
+ end
64
+
65
+ context "when closing" do
66
+ it "should remove the connection object from the @connections array" do
67
+ @mock_socket.onclose
68
+ connections.include?(@mock_socket).should be_false
69
+ end
70
+
71
+ it "should decrement the connection count by one" do
72
+ expect { @mock_socket.onclose }.to change { connections.count }.by(-1)
73
+ end
74
+
75
+ it "should dispatch the :client_disconnected event" do
76
+ @dispatcher.should_receive(:dispatch) do |event,data,connection|
77
+ event.should == 'client_disconnected'
78
+ connection.should == @mock_socket
79
+ end
80
+ @mock_socket.onclose
81
+ end
82
+ end
83
+
84
+ context "when experiencing errors" do
85
+ it "should dispatch the :client_error event" do
86
+ @mock_socket.stub(:onclose)
87
+ @dispatcher.should_receive(:dispatch) do |event,data,connection|
88
+ event.should == 'client_error'
89
+ connection.should == @mock_socket
90
+ end
91
+ @mock_socket.onerror
92
+ end
93
+
94
+ it "should execute the #onclose procedure on connection" do
95
+ @mock_socket.should_receive(:onclose)
96
+ @mock_socket.onerror
97
+ end
98
+ end
99
+ end
100
+
101
+ context "invalid connections" do
102
+ before(:each) do
103
+ Faye::WebSocket.stub(:websocket?).and_return(false)
104
+ end
105
+
106
+ it "should return a 400 bad request error code" do
107
+ open_connection.first.should == 400
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module WebsocketRails
4
+ describe DataStore do
5
+ before(:each) do
6
+ @base = double('base_controller')
7
+ @base.stub(:client_id).and_return(1)
8
+ end
9
+
10
+ it "loads up" do
11
+ data_store = DataStore.new(@base)
12
+ data_store.present?.should be_true
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+
4
+ module WebsocketRails
5
+
6
+ class EventTarget
7
+ attr_reader :_connection, :_message, :test_method
8
+
9
+ def execute_observers(event_name)
10
+ true
11
+ end
12
+ end
13
+
14
+ describe Dispatcher do
15
+
16
+ let(:connection) { MockWebSocket.new }
17
+ let(:connection_manager) { double('connection_manager').as_null_object }
18
+ subject { Dispatcher.new(connection_manager) }
19
+
20
+ let(:test_message) { ['new_message',{message: 'this is a message'}] }
21
+ let(:encoded_message) { test_message.to_json }
22
+
23
+ context "receiving a new message" do
24
+ it "should be decoded from JSON and dispatched" do
25
+ subject.stub(:dispatch) do |event,data,con|
26
+ event.should == 'new_message'
27
+ data['message'].should == 'this is a message'
28
+ con.should == connection
29
+ end
30
+ subject.receive(encoded_message,connection)
31
+ end
32
+ end
33
+
34
+ context "dispatching a message for an event" do
35
+ before(:each) do
36
+ @target = EventTarget.new
37
+ Events.any_instance.stub(:routes_for).with(any_args).and_yield( @target, :test_method )
38
+ end
39
+
40
+ it "should execute the correct method on the target class" do
41
+ @target.should_receive(:test_method)
42
+ subject.dispatch('test_method',{},connection)
43
+ end
44
+
45
+ it "should set the _message instance variable on the target object" do
46
+ subject.dispatch('test_method',:some_message,connection)
47
+ @target._message.should == :some_message
48
+ end
49
+
50
+ it "should set the _connection instance variable on the target object" do
51
+ subject.dispatch('test_method',:some_message,connection)
52
+ @target._connection.should == connection
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ module WebsocketRails
4
+ describe Events do
5
+
6
+ def define_test_events
7
+ WebsocketRails.route_block = nil
8
+ WebsocketRails::Events.describe_events do
9
+ subscribe :client_connected, to: Object, with_method: :object_id
10
+ end
11
+ end
12
+
13
+ let(:dispatcher) { double('dispatcher').as_null_object }
14
+ subject { Events.new(dispatcher) }
15
+
16
+ context "Events.describe_events" do
17
+ it "should store the event route block in the global configuration" do
18
+ define_test_events
19
+ WebsocketRails.route_block.should be_present
20
+ end
21
+ end
22
+
23
+ context "#evaluate" do
24
+ it "should evaluate the route DSL" do
25
+ evaluated = double()
26
+ evaluated.should_receive(:done)
27
+ block = Proc.new { evaluated.done }
28
+ subject.evaluate( block )
29
+ end
30
+
31
+ it "should initialize empty hashes for classes and events" do
32
+ subject.evaluate Proc.new {}
33
+ subject.classes.should == {}
34
+ subject.events.should == {}
35
+ end
36
+ end
37
+
38
+ context "#subscribe" do
39
+ before(:each) { define_test_events }
40
+
41
+ it "should store the event in the events hash" do
42
+ subject.events.has_key?(:client_connected).should be_true
43
+ end
44
+
45
+ it "should store the instantiated controller in the classes hash" do
46
+ subject.classes[Object].class.should == Object
47
+ end
48
+
49
+ it "should set the dispatcher on the instantiated controller" do
50
+ subject.classes[Object].instance_variable_get(:@_dispatcher).should == dispatcher
51
+ end
52
+
53
+ it "should store the class constant and method name in the events hash" do
54
+ subject.events[:client_connected].should == [[Object,:object_id]]
55
+ end
56
+ end
57
+
58
+ context "#routes_for" do
59
+ before(:each) { define_test_events }
60
+
61
+ it "should yield the class constant and method symbol for each route defined for an event" do
62
+ subject.routes_for(:client_connected) do |controller,method|
63
+ controller.class.should == Object
64
+ method.should == :object_id
65
+ end
66
+ end
67
+ end
68
+
69
+ end
70
+ end
@@ -17,10 +17,10 @@ Gem::Specification.new do |s|
17
17
  s.require_path = 'lib'
18
18
 
19
19
  s.add_dependency "rack"
20
- s.add_dependency "em-websocket", '~> 0.3.6'
21
- s.add_dependency "websocket-rack"
20
+ s.add_dependency "faye-websocket"
22
21
  s.add_dependency "thin"
23
22
  s.add_development_dependency "rake"
24
23
  s.add_development_dependency "rails"
25
24
  s.add_development_dependency "sqlite3"
25
+ s.add_development_dependency "rspec-rails"
26
26
  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.0.1
4
+ version: 0.1.0
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-03-26 00:00:00.000000000Z
14
+ date: 2012-06-01 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rack
@@ -30,23 +30,23 @@ dependencies:
30
30
  - !ruby/object:Gem::Version
31
31
  version: '0'
32
32
  - !ruby/object:Gem::Dependency
33
- name: em-websocket
33
+ name: faye-websocket
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  none: false
36
36
  requirements:
37
- - - ~>
37
+ - - ! '>='
38
38
  - !ruby/object:Gem::Version
39
- version: 0.3.6
39
+ version: '0'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements:
45
- - - ~>
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.3.6
47
+ version: '0'
48
48
  - !ruby/object:Gem::Dependency
49
- name: websocket-rack
49
+ name: thin
50
50
  requirement: !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
@@ -62,14 +62,14 @@ dependencies:
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  - !ruby/object:Gem::Dependency
65
- name: thin
65
+ name: rake
66
66
  requirement: !ruby/object:Gem::Requirement
67
67
  none: false
68
68
  requirements:
69
69
  - - ! '>='
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
- type: :runtime
72
+ type: :development
73
73
  prerelease: false
74
74
  version_requirements: !ruby/object:Gem::Requirement
75
75
  none: false
@@ -78,7 +78,7 @@ dependencies:
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
80
  - !ruby/object:Gem::Dependency
81
- name: rake
81
+ name: rails
82
82
  requirement: !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
@@ -94,7 +94,7 @@ dependencies:
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  - !ruby/object:Gem::Dependency
97
- name: rails
97
+ name: sqlite3
98
98
  requirement: !ruby/object:Gem::Requirement
99
99
  none: false
100
100
  requirements:
@@ -110,7 +110,7 @@ dependencies:
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
- name: sqlite3
113
+ name: rspec-rails
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  none: false
116
116
  requirements:
@@ -128,16 +128,20 @@ dependencies:
128
128
  description: Seamless Ruby on Rails websocket integration.
129
129
  email:
130
130
  - dknox@threedotloft.com
131
- executables: []
131
+ executables:
132
+ - thin-socketrails
132
133
  extensions: []
133
134
  extra_rdoc_files: []
134
135
  files:
135
136
  - .gitignore
137
+ - .rspec
138
+ - .travis.yml
136
139
  - Gemfile
137
140
  - Gemfile.lock
138
141
  - MIT-LICENSE
139
142
  - README.md
140
143
  - Rakefile
144
+ - bin/thin-socketrails
141
145
  - config/routes.rb
142
146
  - lib/websocket-rails.rb
143
147
  - lib/websocket_rails/base_controller.rb
@@ -145,44 +149,52 @@ files:
145
149
  - lib/websocket_rails/data_store.rb
146
150
  - lib/websocket_rails/dispatcher.rb
147
151
  - lib/websocket_rails/engine.rb
148
- - lib/websocket_rails/extensions/common.rb
149
- - lib/websocket_rails/extensions/websocket_rack.rb
152
+ - lib/websocket_rails/events.rb
150
153
  - lib/websocket_rails/version.rb
151
- - test/dummy/Rakefile
152
- - test/dummy/app/controllers/application_controller.rb
153
- - test/dummy/app/helpers/application_helper.rb
154
- - test/dummy/app/views/layouts/application.html.erb
155
- - test/dummy/config.ru
156
- - test/dummy/config/application.rb
157
- - test/dummy/config/boot.rb
158
- - test/dummy/config/database.yml
159
- - test/dummy/config/environment.rb
160
- - test/dummy/config/environments/development.rb
161
- - test/dummy/config/environments/production.rb
162
- - test/dummy/config/environments/test.rb
163
- - test/dummy/config/initializers/backtrace_silencers.rb
164
- - test/dummy/config/initializers/inflections.rb
165
- - test/dummy/config/initializers/mime_types.rb
166
- - test/dummy/config/initializers/secret_token.rb
167
- - test/dummy/config/initializers/session_store.rb
168
- - test/dummy/config/locales/en.yml
169
- - test/dummy/config/routes.rb
170
- - test/dummy/public/404.html
171
- - test/dummy/public/422.html
172
- - test/dummy/public/500.html
173
- - test/dummy/public/favicon.ico
174
- - test/dummy/public/javascripts/application.js
175
- - test/dummy/public/javascripts/controls.js
176
- - test/dummy/public/javascripts/dragdrop.js
177
- - test/dummy/public/javascripts/effects.js
178
- - test/dummy/public/javascripts/prototype.js
179
- - test/dummy/public/javascripts/rails.js
180
- - test/dummy/public/stylesheets/.gitkeep
181
- - test/dummy/script/rails
182
- - test/integration/navigation_test.rb
183
- - test/support/integration_case.rb
184
- - test/test_helper.rb
185
- - test/websocket_rails_test.rb
154
+ - spec/dummy/Rakefile
155
+ - spec/dummy/app/controllers/application_controller.rb
156
+ - spec/dummy/app/controllers/chat_controller.rb
157
+ - spec/dummy/app/helpers/application_helper.rb
158
+ - spec/dummy/app/views/layouts/application.html.erb
159
+ - spec/dummy/config.ru
160
+ - spec/dummy/config/application.rb
161
+ - spec/dummy/config/boot.rb
162
+ - spec/dummy/config/database.yml
163
+ - spec/dummy/config/environment.rb
164
+ - spec/dummy/config/environments/development.rb
165
+ - spec/dummy/config/environments/production.rb
166
+ - spec/dummy/config/environments/test.rb
167
+ - spec/dummy/config/initializers/backtrace_silencers.rb
168
+ - spec/dummy/config/initializers/events.rb
169
+ - spec/dummy/config/initializers/inflections.rb
170
+ - spec/dummy/config/initializers/mime_types.rb
171
+ - spec/dummy/config/initializers/secret_token.rb
172
+ - spec/dummy/config/initializers/session_store.rb
173
+ - spec/dummy/config/locales/en.yml
174
+ - spec/dummy/config/routes.rb
175
+ - spec/dummy/db/test.sqlite3
176
+ - spec/dummy/log/development.log
177
+ - spec/dummy/log/production.log
178
+ - spec/dummy/log/server.log
179
+ - spec/dummy/log/test.log
180
+ - spec/dummy/public/404.html
181
+ - spec/dummy/public/422.html
182
+ - spec/dummy/public/500.html
183
+ - spec/dummy/public/favicon.ico
184
+ - spec/dummy/public/javascripts/application.js
185
+ - spec/dummy/public/javascripts/controls.js
186
+ - spec/dummy/public/javascripts/dragdrop.js
187
+ - spec/dummy/public/javascripts/effects.js
188
+ - spec/dummy/public/javascripts/prototype.js
189
+ - spec/dummy/public/javascripts/rails.js
190
+ - spec/dummy/public/stylesheets/.gitkeep
191
+ - spec/dummy/script/rails
192
+ - spec/spec_helper.rb
193
+ - spec/support/mock_web_socket.rb
194
+ - spec/unit/connection_manager_spec.rb
195
+ - spec/unit/data_store_spec.rb
196
+ - spec/unit/dispatcher_spec.rb
197
+ - spec/unit/events_spec.rb
186
198
  - websocket-rails.gemspec
187
199
  homepage: https://github.com/DanKnox/websocket-rails
188
200
  licenses: []
@@ -198,7 +210,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
210
  version: '0'
199
211
  segments:
200
212
  - 0
201
- hash: -2923788248734806992
213
+ hash: -1264610493169323064
202
214
  required_rubygems_version: !ruby/object:Gem::Requirement
203
215
  none: false
204
216
  requirements:
@@ -207,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
207
219
  version: '0'
208
220
  segments:
209
221
  - 0
210
- hash: -2923788248734806992
222
+ hash: -1264610493169323064
211
223
  requirements: []
212
224
  rubyforge_project:
213
225
  rubygems_version: 1.8.19