hkroger-websocket-rails 0.7.1

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 (120) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +328 -0
  3. data/Gemfile +27 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +237 -0
  6. data/Rakefile +72 -0
  7. data/bin/thin-socketrails +45 -0
  8. data/lib/assets/javascripts/websocket_rails/abstract_connection.js.coffee +45 -0
  9. data/lib/assets/javascripts/websocket_rails/channel.js.coffee +70 -0
  10. data/lib/assets/javascripts/websocket_rails/event.js.coffee +42 -0
  11. data/lib/assets/javascripts/websocket_rails/http_connection.js.coffee +66 -0
  12. data/lib/assets/javascripts/websocket_rails/main.js +6 -0
  13. data/lib/assets/javascripts/websocket_rails/websocket_connection.js.coffee +29 -0
  14. data/lib/assets/javascripts/websocket_rails/websocket_rails.js.coffee +158 -0
  15. data/lib/config.ru +3 -0
  16. data/lib/generators/websocket_rails/install/install_generator.rb +33 -0
  17. data/lib/generators/websocket_rails/install/templates/events.rb +14 -0
  18. data/lib/generators/websocket_rails/install/templates/websocket_rails.rb +63 -0
  19. data/lib/hkroger-websocket-rails.rb +1 -0
  20. data/lib/rails/app/controllers/websocket_rails/delegation_controller.rb +13 -0
  21. data/lib/rails/config/routes.rb +7 -0
  22. data/lib/rails/tasks/websocket_rails.tasks +42 -0
  23. data/lib/spec_helpers/matchers/route_matchers.rb +65 -0
  24. data/lib/spec_helpers/matchers/trigger_matchers.rb +113 -0
  25. data/lib/spec_helpers/spec_helper_event.rb +34 -0
  26. data/lib/websocket-rails.rb +108 -0
  27. data/lib/websocket_rails/base_controller.rb +197 -0
  28. data/lib/websocket_rails/channel.rb +97 -0
  29. data/lib/websocket_rails/channel_manager.rb +55 -0
  30. data/lib/websocket_rails/configuration.rb +169 -0
  31. data/lib/websocket_rails/connection_adapters.rb +195 -0
  32. data/lib/websocket_rails/connection_adapters/http.rb +120 -0
  33. data/lib/websocket_rails/connection_adapters/web_socket.rb +36 -0
  34. data/lib/websocket_rails/connection_manager.rb +119 -0
  35. data/lib/websocket_rails/controller_factory.rb +80 -0
  36. data/lib/websocket_rails/data_store.rb +145 -0
  37. data/lib/websocket_rails/dispatcher.rb +129 -0
  38. data/lib/websocket_rails/engine.rb +26 -0
  39. data/lib/websocket_rails/event.rb +189 -0
  40. data/lib/websocket_rails/event_map.rb +184 -0
  41. data/lib/websocket_rails/event_queue.rb +33 -0
  42. data/lib/websocket_rails/internal_events.rb +37 -0
  43. data/lib/websocket_rails/logging.rb +133 -0
  44. data/lib/websocket_rails/spec_helpers.rb +3 -0
  45. data/lib/websocket_rails/synchronization.rb +182 -0
  46. data/lib/websocket_rails/user_manager.rb +276 -0
  47. data/lib/websocket_rails/version.rb +3 -0
  48. data/spec/dummy/Rakefile +7 -0
  49. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  50. data/spec/dummy/app/controllers/chat_controller.rb +53 -0
  51. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  52. data/spec/dummy/app/models/user.rb +2 -0
  53. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  54. data/spec/dummy/config.ru +4 -0
  55. data/spec/dummy/config/application.rb +45 -0
  56. data/spec/dummy/config/boot.rb +10 -0
  57. data/spec/dummy/config/database.yml +22 -0
  58. data/spec/dummy/config/environment.rb +5 -0
  59. data/spec/dummy/config/environments/development.rb +26 -0
  60. data/spec/dummy/config/environments/production.rb +49 -0
  61. data/spec/dummy/config/environments/test.rb +34 -0
  62. data/spec/dummy/config/events.rb +7 -0
  63. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  64. data/spec/dummy/config/initializers/inflections.rb +10 -0
  65. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  66. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  67. data/spec/dummy/config/initializers/session_store.rb +8 -0
  68. data/spec/dummy/config/locales/en.yml +5 -0
  69. data/spec/dummy/config/routes.rb +58 -0
  70. data/spec/dummy/db/development.sqlite3 +0 -0
  71. data/spec/dummy/db/migrate/20130902222552_create_users.rb +10 -0
  72. data/spec/dummy/db/schema.rb +23 -0
  73. data/spec/dummy/db/test.sqlite3 +0 -0
  74. data/spec/dummy/log/development.log +17 -0
  75. data/spec/dummy/log/production.log +0 -0
  76. data/spec/dummy/log/server.log +0 -0
  77. data/spec/dummy/public/404.html +26 -0
  78. data/spec/dummy/public/422.html +26 -0
  79. data/spec/dummy/public/500.html +26 -0
  80. data/spec/dummy/public/favicon.ico +0 -0
  81. data/spec/dummy/public/javascripts/application.js +2 -0
  82. data/spec/dummy/public/javascripts/controls.js +965 -0
  83. data/spec/dummy/public/javascripts/dragdrop.js +974 -0
  84. data/spec/dummy/public/javascripts/effects.js +1123 -0
  85. data/spec/dummy/public/javascripts/prototype.js +6001 -0
  86. data/spec/dummy/public/javascripts/rails.js +202 -0
  87. data/spec/dummy/script/rails +6 -0
  88. data/spec/integration/connection_manager_spec.rb +135 -0
  89. data/spec/javascripts/support/jasmine.yml +52 -0
  90. data/spec/javascripts/support/jasmine_helper.rb +38 -0
  91. data/spec/javascripts/support/vendor/sinon-1.7.1.js +4343 -0
  92. data/spec/javascripts/websocket_rails/channel_spec.coffee +112 -0
  93. data/spec/javascripts/websocket_rails/event_spec.coffee +69 -0
  94. data/spec/javascripts/websocket_rails/helpers.coffee +6 -0
  95. data/spec/javascripts/websocket_rails/websocket_connection_spec.coffee +158 -0
  96. data/spec/javascripts/websocket_rails/websocket_rails_spec.coffee +274 -0
  97. data/spec/spec_helper.rb +41 -0
  98. data/spec/spec_helpers/matchers/route_matchers_spec.rb +109 -0
  99. data/spec/spec_helpers/matchers/trigger_matchers_spec.rb +247 -0
  100. data/spec/spec_helpers/spec_helper_event_spec.rb +66 -0
  101. data/spec/support/helper_methods.rb +42 -0
  102. data/spec/support/mock_web_socket.rb +41 -0
  103. data/spec/unit/base_controller_spec.rb +74 -0
  104. data/spec/unit/channel_manager_spec.rb +58 -0
  105. data/spec/unit/channel_spec.rb +169 -0
  106. data/spec/unit/connection_adapters/http_spec.rb +88 -0
  107. data/spec/unit/connection_adapters/web_socket_spec.rb +30 -0
  108. data/spec/unit/connection_adapters_spec.rb +259 -0
  109. data/spec/unit/connection_manager_spec.rb +148 -0
  110. data/spec/unit/controller_factory_spec.rb +76 -0
  111. data/spec/unit/data_store_spec.rb +106 -0
  112. data/spec/unit/dispatcher_spec.rb +203 -0
  113. data/spec/unit/event_map_spec.rb +120 -0
  114. data/spec/unit/event_queue_spec.rb +36 -0
  115. data/spec/unit/event_spec.rb +181 -0
  116. data/spec/unit/logging_spec.rb +162 -0
  117. data/spec/unit/synchronization_spec.rb +150 -0
  118. data/spec/unit/target_validator_spec.rb +88 -0
  119. data/spec/unit/user_manager_spec.rb +165 -0
  120. metadata +320 -0
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ class ComplexProductController < WebsocketRails::BaseController
5
+
6
+ def simplify
7
+ end
8
+
9
+ end
10
+
11
+ module MyModule
12
+
13
+ class AnotherController < WebsocketRails::BaseController
14
+
15
+ def complicate
16
+ end
17
+
18
+ end
19
+
20
+ module MySubModule
21
+
22
+ class AThirdController < WebsocketRails::BaseController
23
+
24
+ def confuse
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+
34
+ module WebsocketRails
35
+
36
+ describe TargetValidator do
37
+
38
+ describe 'validate_target' do
39
+
40
+ it 'should raise an error when target class is not supported' do
41
+ expect{TargetValidator.validate_target(50)}.to raise_error
42
+ end
43
+
44
+ it 'should raise if passed hash does not contain the to: key' do
45
+ expect{TargetValidator.validate_target(from: ComplexProductController, with_method: :simplify)}.to raise_error
46
+ end
47
+
48
+ it 'should raise if passed hash does not contain the with_method: key' do
49
+ expect{TargetValidator.validate_target(to: ComplexProductController, without_method: :simplify)}.to raise_error
50
+ end
51
+
52
+ it 'should raise if the string is not in the correct format' do
53
+ expect{TargetValidator.validate_target('malformed_string')}.to raise_error
54
+ expect{TargetValidator.validate_target('very#malformed#string')}.to raise_error
55
+ end
56
+
57
+ it 'should raise if the class specified in the String does not exist' do
58
+ expect{TargetValidator.validate_target('my_non_existent#my_method')}.to raise_error
59
+ end
60
+
61
+ it 'should parse correctly a well-formed Hash' do
62
+ TargetValidator::validate_target(to: ComplexProductController, with_method: :simplify).should == [ComplexProductController, :simplify]
63
+ end
64
+
65
+ context 'when the string is well-formed' do
66
+
67
+ it 'should parse correctly when the controller is a top-level' do
68
+ TargetValidator::validate_target('complex_product#simplify').should == [ComplexProductController, :simplify]
69
+ end
70
+
71
+ it 'should parse correctly when the controller belongs to a module' do
72
+ TargetValidator::validate_target('my_module/another#complicate').should == [MyModule::AnotherController, :complicate]
73
+ end
74
+
75
+ it 'should parse correctly with many levels of module nesting' do
76
+ TargetValidator::validate_target('my_module/my_sub_module/a_third#confuse').should == [MyModule::MySubModule::AThirdController, :confuse]
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+
84
+ end
85
+
86
+
87
+
88
+ end
@@ -0,0 +1,165 @@
1
+ require "spec_helper"
2
+
3
+ module WebsocketRails
4
+
5
+ describe ".users" do
6
+ before do
7
+ Synchronization.stub(:find_user)
8
+ Synchronization.stub(:register_user)
9
+ Synchronization.stub(:destroy_user)
10
+ end
11
+
12
+ it "returns the global instance of UserManager" do
13
+ WebsocketRails.users.should be_a UserManager
14
+ end
15
+
16
+ context "when synchronization is enabled" do
17
+ before do
18
+ WebsocketRails.stub(:synchronize?).and_return(true)
19
+ end
20
+
21
+ context "and the user is connected to a different worker" do
22
+ before do
23
+ user_attr = {name: 'test', email: 'test@test.com'}
24
+ Synchronization.stub(:find_user).and_return(user_attr)
25
+ end
26
+
27
+ it "publishes the event to redis" do
28
+ Synchronization.should_receive(:publish) do |event|
29
+ event.user_id.should == "remote"
30
+ end
31
+
32
+ WebsocketRails.users["remote"].send_message :test, :data
33
+ end
34
+
35
+ it "instantiates a user object pulled from redis" do
36
+ remote = WebsocketRails.users["remote"]
37
+
38
+ remote.class.should == UserManager::RemoteConnection
39
+ remote.user.class.should == User
40
+ remote.user.name.should == 'test'
41
+ remote.user.persisted?.should == true
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ describe UserManager do
48
+
49
+ before do
50
+ Synchronization.stub(:find_user)
51
+ Synchronization.stub(:register_user)
52
+ Synchronization.stub(:destroy_user)
53
+ end
54
+
55
+ let(:connection) do
56
+ connection = double('Connection')
57
+ connection.stub(:id).and_return(1)
58
+ connection.stub(:user_identifier).and_return('Juanita')
59
+ connection
60
+ end
61
+
62
+ describe "#[]=" do
63
+ it "store's a reference to a connection in the user's hash" do
64
+ subject["username"] = connection
65
+ subject.users["username"].connections.first.should == connection
66
+ end
67
+ end
68
+
69
+ describe "#[]" do
70
+ before do
71
+ subject["username"] = connection
72
+ end
73
+
74
+ context "when passed a known user identifier" do
75
+ it "returns that user's connection" do
76
+ subject["username"].connections.first.should == connection
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "#delete" do
82
+ before do
83
+ subject["Juanita"] = connection
84
+ end
85
+
86
+ it "deletes the connection from the users hash" do
87
+ subject.delete(connection)
88
+ subject["Juanita"].should be_a UserManager::MissingConnection
89
+ end
90
+ end
91
+
92
+ describe "#each" do
93
+ before do
94
+ subject['Juanita'] = connection
95
+ end
96
+
97
+ context "when synchronization is disabled" do
98
+ before do
99
+ WebsocketRails.stub(:synchronize?).and_return false
100
+ end
101
+
102
+ it "passes each local connection to the given block" do
103
+ subject.each do |conn|
104
+ connection.should == conn.connections.first
105
+ end
106
+ end
107
+ end
108
+
109
+ context "when synchronization is enabled" do
110
+ before do
111
+ WebsocketRails.stub(:synchronize?).and_return true
112
+
113
+ user_attr = {name: 'test', email: 'test@test.com'}.to_json
114
+ Synchronization.stub(:all_users).and_return 'test' => user_attr
115
+ end
116
+
117
+ it "passes each remote connection to the given block" do
118
+ subject.each do |conn|
119
+ conn.class.should == UserManager::RemoteConnection
120
+ conn.user.class.should == User
121
+ conn.user.name.should == 'test'
122
+ conn.user.email.should == 'test@test.com'
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ describe "#map" do
129
+ before do
130
+ subject['Juanita'] = connection
131
+ end
132
+
133
+ context "when synchronization is disabled" do
134
+ before do
135
+ WebsocketRails.stub(:synchronize?).and_return false
136
+ end
137
+
138
+ it "passes each local connection to the given block and collects the results" do
139
+ results = subject.map do |conn|
140
+ [conn, true]
141
+ end
142
+ results.count.should == 1
143
+ results[0][0].connections.count.should == 1
144
+ end
145
+ end
146
+
147
+ context "when synchronization is enabled" do
148
+ before do
149
+ WebsocketRails.stub(:synchronize?).and_return true
150
+
151
+ user_attr = {name: 'test', email: 'test@test.com'}.to_json
152
+ Synchronization.stub(:all_users).and_return 'test' => user_attr
153
+ end
154
+
155
+ it "passes each remote connection to the given block and collects the results" do
156
+ results = subject.map do |conn|
157
+ [conn, true]
158
+ end
159
+ results.count.should == 1
160
+ results[0].first.class.should == UserManager::RemoteConnection
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
metadata ADDED
@@ -0,0 +1,320 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hkroger-websocket-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.1
5
+ platform: ruby
6
+ authors:
7
+ - Hannu Kröger
8
+ - Dan Knox
9
+ - Kyle Whalen
10
+ - Three Dot Loft LLC
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2019-11-20 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rails
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rack
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ - !ruby/object:Gem::Dependency
45
+ name: faye-websocket
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ - !ruby/object:Gem::Dependency
59
+ name: thin
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: redis
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ - !ruby/object:Gem::Dependency
87
+ name: hiredis
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :runtime
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: em-synchrony
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ type: :runtime
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: redis-objects
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ - !ruby/object:Gem::Dependency
129
+ name: rake
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rspec-rails
144
+ requirement: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ type: :development
150
+ prerelease: false
151
+ version_requirements: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ - !ruby/object:Gem::Dependency
157
+ name: rspec-matchers-matchers
158
+ requirement: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ description: Seamless Ruby on Rails websocket integration.
171
+ email:
172
+ - hkroger@gmail.com
173
+ executables:
174
+ - thin-socketrails
175
+ extensions: []
176
+ extra_rdoc_files: []
177
+ files:
178
+ - CHANGELOG.md
179
+ - Gemfile
180
+ - MIT-LICENSE
181
+ - README.md
182
+ - Rakefile
183
+ - bin/thin-socketrails
184
+ - lib/assets/javascripts/websocket_rails/abstract_connection.js.coffee
185
+ - lib/assets/javascripts/websocket_rails/channel.js.coffee
186
+ - lib/assets/javascripts/websocket_rails/event.js.coffee
187
+ - lib/assets/javascripts/websocket_rails/http_connection.js.coffee
188
+ - lib/assets/javascripts/websocket_rails/main.js
189
+ - lib/assets/javascripts/websocket_rails/websocket_connection.js.coffee
190
+ - lib/assets/javascripts/websocket_rails/websocket_rails.js.coffee
191
+ - lib/config.ru
192
+ - lib/generators/websocket_rails/install/install_generator.rb
193
+ - lib/generators/websocket_rails/install/templates/events.rb
194
+ - lib/generators/websocket_rails/install/templates/websocket_rails.rb
195
+ - lib/hkroger-websocket-rails.rb
196
+ - lib/rails/app/controllers/websocket_rails/delegation_controller.rb
197
+ - lib/rails/config/routes.rb
198
+ - lib/rails/tasks/websocket_rails.tasks
199
+ - lib/spec_helpers/matchers/route_matchers.rb
200
+ - lib/spec_helpers/matchers/trigger_matchers.rb
201
+ - lib/spec_helpers/spec_helper_event.rb
202
+ - lib/websocket-rails.rb
203
+ - lib/websocket_rails/base_controller.rb
204
+ - lib/websocket_rails/channel.rb
205
+ - lib/websocket_rails/channel_manager.rb
206
+ - lib/websocket_rails/configuration.rb
207
+ - lib/websocket_rails/connection_adapters.rb
208
+ - lib/websocket_rails/connection_adapters/http.rb
209
+ - lib/websocket_rails/connection_adapters/web_socket.rb
210
+ - lib/websocket_rails/connection_manager.rb
211
+ - lib/websocket_rails/controller_factory.rb
212
+ - lib/websocket_rails/data_store.rb
213
+ - lib/websocket_rails/dispatcher.rb
214
+ - lib/websocket_rails/engine.rb
215
+ - lib/websocket_rails/event.rb
216
+ - lib/websocket_rails/event_map.rb
217
+ - lib/websocket_rails/event_queue.rb
218
+ - lib/websocket_rails/internal_events.rb
219
+ - lib/websocket_rails/logging.rb
220
+ - lib/websocket_rails/spec_helpers.rb
221
+ - lib/websocket_rails/synchronization.rb
222
+ - lib/websocket_rails/user_manager.rb
223
+ - lib/websocket_rails/version.rb
224
+ - spec/dummy/Rakefile
225
+ - spec/dummy/app/controllers/application_controller.rb
226
+ - spec/dummy/app/controllers/chat_controller.rb
227
+ - spec/dummy/app/helpers/application_helper.rb
228
+ - spec/dummy/app/models/user.rb
229
+ - spec/dummy/app/views/layouts/application.html.erb
230
+ - spec/dummy/config.ru
231
+ - spec/dummy/config/application.rb
232
+ - spec/dummy/config/boot.rb
233
+ - spec/dummy/config/database.yml
234
+ - spec/dummy/config/environment.rb
235
+ - spec/dummy/config/environments/development.rb
236
+ - spec/dummy/config/environments/production.rb
237
+ - spec/dummy/config/environments/test.rb
238
+ - spec/dummy/config/events.rb
239
+ - spec/dummy/config/initializers/backtrace_silencers.rb
240
+ - spec/dummy/config/initializers/inflections.rb
241
+ - spec/dummy/config/initializers/mime_types.rb
242
+ - spec/dummy/config/initializers/secret_token.rb
243
+ - spec/dummy/config/initializers/session_store.rb
244
+ - spec/dummy/config/locales/en.yml
245
+ - spec/dummy/config/routes.rb
246
+ - spec/dummy/db/development.sqlite3
247
+ - spec/dummy/db/migrate/20130902222552_create_users.rb
248
+ - spec/dummy/db/schema.rb
249
+ - spec/dummy/db/test.sqlite3
250
+ - spec/dummy/log/development.log
251
+ - spec/dummy/log/production.log
252
+ - spec/dummy/log/server.log
253
+ - spec/dummy/public/404.html
254
+ - spec/dummy/public/422.html
255
+ - spec/dummy/public/500.html
256
+ - spec/dummy/public/favicon.ico
257
+ - spec/dummy/public/javascripts/application.js
258
+ - spec/dummy/public/javascripts/controls.js
259
+ - spec/dummy/public/javascripts/dragdrop.js
260
+ - spec/dummy/public/javascripts/effects.js
261
+ - spec/dummy/public/javascripts/prototype.js
262
+ - spec/dummy/public/javascripts/rails.js
263
+ - spec/dummy/script/rails
264
+ - spec/integration/connection_manager_spec.rb
265
+ - spec/javascripts/support/jasmine.yml
266
+ - spec/javascripts/support/jasmine_helper.rb
267
+ - spec/javascripts/support/vendor/sinon-1.7.1.js
268
+ - spec/javascripts/websocket_rails/channel_spec.coffee
269
+ - spec/javascripts/websocket_rails/event_spec.coffee
270
+ - spec/javascripts/websocket_rails/helpers.coffee
271
+ - spec/javascripts/websocket_rails/websocket_connection_spec.coffee
272
+ - spec/javascripts/websocket_rails/websocket_rails_spec.coffee
273
+ - spec/spec_helper.rb
274
+ - spec/spec_helpers/matchers/route_matchers_spec.rb
275
+ - spec/spec_helpers/matchers/trigger_matchers_spec.rb
276
+ - spec/spec_helpers/spec_helper_event_spec.rb
277
+ - spec/support/helper_methods.rb
278
+ - spec/support/mock_web_socket.rb
279
+ - spec/unit/base_controller_spec.rb
280
+ - spec/unit/channel_manager_spec.rb
281
+ - spec/unit/channel_spec.rb
282
+ - spec/unit/connection_adapters/http_spec.rb
283
+ - spec/unit/connection_adapters/web_socket_spec.rb
284
+ - spec/unit/connection_adapters_spec.rb
285
+ - spec/unit/connection_manager_spec.rb
286
+ - spec/unit/controller_factory_spec.rb
287
+ - spec/unit/data_store_spec.rb
288
+ - spec/unit/dispatcher_spec.rb
289
+ - spec/unit/event_map_spec.rb
290
+ - spec/unit/event_queue_spec.rb
291
+ - spec/unit/event_spec.rb
292
+ - spec/unit/logging_spec.rb
293
+ - spec/unit/synchronization_spec.rb
294
+ - spec/unit/target_validator_spec.rb
295
+ - spec/unit/user_manager_spec.rb
296
+ homepage: http://websocket-rails.github.io
297
+ licenses:
298
+ - MIT
299
+ metadata: {}
300
+ post_install_message: Welcome to WebsocketRails v0.7.1!
301
+ rdoc_options: []
302
+ require_paths:
303
+ - lib
304
+ required_ruby_version: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: '0'
309
+ required_rubygems_version: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ requirements: []
315
+ rubygems_version: 3.0.6
316
+ signing_key:
317
+ specification_version: 4
318
+ summary: Plug and play websocket support for ruby on rails. Includes event router
319
+ for mapping javascript events to controller actions.
320
+ test_files: []