websocket-rails 0.0.1 → 0.1.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.
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