websocket-rails 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +32 -0
- data/Gemfile +2 -1
- data/README.md +29 -34
- data/lib/assets/javascripts/websocket_rails/abstract_connection.js.coffee +45 -0
- data/lib/assets/javascripts/websocket_rails/channel.js.coffee +34 -17
- data/lib/assets/javascripts/websocket_rails/event.js.coffee +13 -11
- data/lib/assets/javascripts/websocket_rails/http_connection.js.coffee +44 -45
- data/lib/assets/javascripts/websocket_rails/main.js +1 -0
- data/lib/assets/javascripts/websocket_rails/websocket_connection.js.coffee +20 -34
- data/lib/assets/javascripts/websocket_rails/websocket_rails.js.coffee +60 -15
- data/lib/generators/websocket_rails/install/templates/websocket_rails.rb +15 -0
- data/lib/rails/config/routes.rb +1 -1
- data/lib/rails/tasks/websocket_rails.tasks +6 -2
- data/lib/websocket_rails/channel.rb +28 -2
- data/lib/websocket_rails/channel_manager.rb +16 -0
- data/lib/websocket_rails/configuration.rb +26 -1
- data/lib/websocket_rails/connection_adapters/http.rb +7 -0
- data/lib/websocket_rails/connection_adapters/web_socket.rb +3 -1
- data/lib/websocket_rails/connection_manager.rb +1 -1
- data/lib/websocket_rails/controller_factory.rb +1 -1
- data/lib/websocket_rails/event.rb +9 -2
- data/lib/websocket_rails/logging.rb +0 -1
- data/lib/websocket_rails/synchronization.rb +11 -7
- data/lib/websocket_rails/version.rb +1 -1
- data/spec/javascripts/generated/assets/abstract_connection.js +71 -0
- data/spec/javascripts/generated/assets/channel.js +58 -34
- data/spec/javascripts/generated/assets/event.js +12 -16
- data/spec/javascripts/generated/assets/http_connection.js +67 -65
- data/spec/javascripts/generated/assets/websocket_connection.js +36 -51
- data/spec/javascripts/generated/assets/websocket_rails.js +68 -21
- data/spec/javascripts/generated/specs/channel_spec.js +102 -19
- data/spec/javascripts/generated/specs/helpers.js +17 -0
- data/spec/javascripts/generated/specs/websocket_connection_spec.js +72 -19
- data/spec/javascripts/generated/specs/websocket_rails_spec.js +146 -47
- data/spec/javascripts/support/jasmine.yml +10 -2
- data/spec/javascripts/support/jasmine_helper.rb +38 -0
- data/spec/javascripts/websocket_rails/channel_spec.coffee +66 -12
- data/spec/javascripts/websocket_rails/event_spec.coffee +7 -7
- data/spec/javascripts/websocket_rails/helpers.coffee +6 -0
- data/spec/javascripts/websocket_rails/websocket_connection_spec.coffee +53 -15
- data/spec/javascripts/websocket_rails/websocket_rails_spec.coffee +108 -25
- data/spec/unit/base_controller_spec.rb +41 -0
- data/spec/unit/channel_manager_spec.rb +21 -0
- data/spec/unit/channel_spec.rb +43 -3
- data/spec/unit/connection_adapters/http_spec.rb +24 -3
- data/spec/unit/connection_adapters_spec.rb +2 -2
- data/spec/unit/connection_manager_spec.rb +1 -1
- data/spec/unit/event_spec.rb +25 -1
- data/spec/unit/logging_spec.rb +1 -1
- metadata +57 -67
- data/spec/javascripts/support/jasmine_config.rb +0 -63
@@ -29,5 +29,46 @@ module WebsocketRails
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
describe "before actions" do
|
33
|
+
class BeforeActionController < WebsocketRails::BaseController
|
34
|
+
before_action { self.before_array << :all }
|
35
|
+
before_action(:only => :only) { self.before_array << :only_1 }
|
36
|
+
before_action(:only => :except) { self.before_array << :only_2 }
|
37
|
+
before_action(:only => [:main, :only]) { self.before_array << :only_3 }
|
38
|
+
before_action(:only => [:except, :only]) { self.before_array << :only_4 }
|
39
|
+
before_action(:except => :except) { self.before_array << :except_1 }
|
40
|
+
before_action(:except => :only) { self.before_array << :except_2 }
|
41
|
+
before_action(:except => [:main, :except]){ self.before_array << :except_3 }
|
42
|
+
before_action(:except => [:only, :except]){ self.before_array << :except_4 }
|
43
|
+
|
44
|
+
attr_accessor :before_array
|
45
|
+
|
46
|
+
def initialize
|
47
|
+
@before_array = []
|
48
|
+
end
|
49
|
+
def main;end
|
50
|
+
def only;end
|
51
|
+
def except;end
|
52
|
+
end
|
53
|
+
|
54
|
+
let(:controller) { BeforeActionController.new }
|
55
|
+
it 'should handle before_action with no args' do
|
56
|
+
controller.instance_variable_set :@_action_name, 'main'
|
57
|
+
controller.process_action(:main, nil)
|
58
|
+
controller.before_array.should == [:all, :only_3, :except_1, :except_2, :except_4]
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should handle before_action with :only flag' do
|
62
|
+
controller.instance_variable_set :@_action_name, 'only'
|
63
|
+
controller.process_action(:only, nil)
|
64
|
+
controller.before_array.should == [:all, :only_1, :only_3, :only_4, :except_1, :except_3]
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should handle before_action with :except flag' do
|
68
|
+
controller.instance_variable_set :@_action_name, 'except'
|
69
|
+
controller.process_action(:except, nil)
|
70
|
+
controller.before_array.should == [:all, :only_2, :only_4, :except_2]
|
71
|
+
end
|
72
|
+
end
|
32
73
|
end
|
33
74
|
end
|
@@ -15,8 +15,29 @@ module WebsocketRails
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
describe ".channel_tokens" do
|
19
|
+
it "should delegate to channel manager" do
|
20
|
+
ChannelManager.any_instance.should_receive(:channel_tokens)
|
21
|
+
WebsocketRails.channel_tokens
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
18
25
|
describe ChannelManager do
|
19
26
|
|
27
|
+
describe "#channel_tokens" do
|
28
|
+
it "should return a Hash-like" do
|
29
|
+
subject.channel_tokens.respond_to? :[]
|
30
|
+
subject.channel_tokens.respond_to? :has_key?
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'is used to store Channel\'s token' do
|
34
|
+
ChannelManager.any_instance.should_receive(:channel_tokens)
|
35
|
+
.at_least(:twice).and_call_original
|
36
|
+
token = Channel.new(:my_new_test_channel).token
|
37
|
+
WebsocketRails.channel_tokens[:my_new_test_channel].should == token
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
20
41
|
describe "#[]" do
|
21
42
|
context "accessing a channel" do
|
22
43
|
it "should create the channel if it does not exist" do
|
data/spec/unit/channel_spec.rb
CHANGED
@@ -15,6 +15,15 @@ module WebsocketRails
|
|
15
15
|
end
|
16
16
|
|
17
17
|
describe "#subscribe" do
|
18
|
+
before do
|
19
|
+
connection.stub(:user).and_return({})
|
20
|
+
WebsocketRails.config.stub(:broadcast_subscriber_events?).and_return(true)
|
21
|
+
end
|
22
|
+
it "should trigger an event when subscriber joins" do
|
23
|
+
subject.should_receive(:trigger).with("subscriber_join", connection.user)
|
24
|
+
subject.subscribe connection
|
25
|
+
end
|
26
|
+
|
18
27
|
it "should add the connection to the subscriber pool" do
|
19
28
|
subject.subscribe connection
|
20
29
|
subject.subscribers.include?(connection).should be_true
|
@@ -22,6 +31,10 @@ module WebsocketRails
|
|
22
31
|
end
|
23
32
|
|
24
33
|
describe "#unsubscribe" do
|
34
|
+
before do
|
35
|
+
connection.stub(:user).and_return({})
|
36
|
+
WebsocketRails.config.stub(:broadcast_subscriber_events?).and_return(true)
|
37
|
+
end
|
25
38
|
it "should remove connection from subscriber pool" do
|
26
39
|
subject.subscribe connection
|
27
40
|
subject.unsubscribe connection
|
@@ -32,6 +45,12 @@ module WebsocketRails
|
|
32
45
|
subject.unsubscribe connection
|
33
46
|
subject.subscribers.include?(connection).should be_false
|
34
47
|
end
|
48
|
+
|
49
|
+
it "should trigger an event when subscriber parts" do
|
50
|
+
subject.subscribers << connection
|
51
|
+
subject.should_receive(:trigger).with('subscriber_part', connection.user)
|
52
|
+
subject.unsubscribe connection
|
53
|
+
end
|
35
54
|
end
|
36
55
|
|
37
56
|
describe "#trigger" do
|
@@ -43,17 +62,23 @@ module WebsocketRails
|
|
43
62
|
event
|
44
63
|
end
|
45
64
|
connection.should_receive(:trigger).with(event)
|
46
|
-
subject.
|
65
|
+
subject.subscribers << connection
|
47
66
|
subject.trigger 'event', 'data'
|
48
67
|
end
|
49
68
|
end
|
50
69
|
|
51
70
|
describe "#trigger_event" do
|
52
|
-
it "should forward the event to
|
53
|
-
event =
|
71
|
+
it "should forward the event to subscribers if token matches" do
|
72
|
+
event = Event.new 'awesome_event', {:channel => 'awesome_channel', :token => subject.token}
|
54
73
|
subject.should_receive(:send_data).with(event)
|
55
74
|
subject.trigger_event event
|
56
75
|
end
|
76
|
+
|
77
|
+
it "should ignore the event if the token is invalid" do
|
78
|
+
event = Event.new 'invalid_event', {:channel => 'awesome_channel', :token => 'invalid_token'}
|
79
|
+
subject.should_not_receive(:send_data).with(event)
|
80
|
+
subject.trigger_event event
|
81
|
+
end
|
57
82
|
end
|
58
83
|
|
59
84
|
context "private channels" do
|
@@ -103,6 +128,21 @@ module WebsocketRails
|
|
103
128
|
subject.is_private?.should_not be_true
|
104
129
|
end
|
105
130
|
end
|
131
|
+
|
132
|
+
describe "#token" do
|
133
|
+
it 'is long enough' do
|
134
|
+
subject.token.length.should > 10
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'remains the same between two call' do
|
138
|
+
subject.token.should == subject.token
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'is the same for two channels with the same name' do
|
142
|
+
subject.token.should == Channel.new(subject.name).token
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
106
146
|
end
|
107
147
|
end
|
108
148
|
end
|
@@ -3,9 +3,14 @@ require 'spec_helper'
|
|
3
3
|
module WebsocketRails
|
4
4
|
module ConnectionAdapters
|
5
5
|
describe Http do
|
6
|
-
|
7
|
-
subject {
|
8
|
-
|
6
|
+
|
7
|
+
subject {
|
8
|
+
mr = mock_request
|
9
|
+
mr.stub(:protocol).and_return('http://')
|
10
|
+
mr.stub(:raw_host_with_port).and_return('localhost:3000')
|
11
|
+
Http.new(mr , double('Dispatcher').as_null_object )
|
12
|
+
}
|
13
|
+
|
9
14
|
it "should be a subclass of ConnectionAdapters::Base" do
|
10
15
|
subject.class.superclass.should == ConnectionAdapters::Base
|
11
16
|
end
|
@@ -18,6 +23,22 @@ module WebsocketRails
|
|
18
23
|
subject.headers['Transfer-Encoding'].should == "chunked"
|
19
24
|
end
|
20
25
|
|
26
|
+
it "should not set the Access-Control-Allow-Origin header" do
|
27
|
+
subject.headers['Access-Control-Allow-Origin'].should be_blank
|
28
|
+
end
|
29
|
+
|
30
|
+
context "with IE CORS hack enabled" do
|
31
|
+
it "should set the Access-Control-Allow-Origin when passed an array as configuration" do
|
32
|
+
WebsocketRails.config.allowed_origins = ['http://localhost:3000']
|
33
|
+
subject.headers['Access-Control-Allow-Origin'].should == 'http://localhost:3000'
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should set the Access-Control-Allow-Origin when passed a string as configuration" do
|
37
|
+
WebsocketRails.config.allowed_origins = 'http://localhost:3000'
|
38
|
+
subject.headers['Access-Control-Allow-Origin'].should == 'http://localhost:3000'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
21
42
|
context "#encode_chunk" do
|
22
43
|
it "should properly encode strings" do
|
23
44
|
subject.__send__(:encode_chunk,"test").should == "4\r\ntest\r\n"
|
@@ -192,8 +192,8 @@ module WebsocketRails
|
|
192
192
|
|
193
193
|
it "should serialize all events into one array" do
|
194
194
|
serialized_array = <<-EOF.strip_heredoc
|
195
|
-
[["queued_event",{"id":null,"channel":null,"user_id":null,"data":"test","success":null,"result":null,"server_token":null}],
|
196
|
-
["queued_event",{"id":null,"channel":null,"user_id":null,"data":"test","success":null,"result":null,"server_token":null}]]
|
195
|
+
[["queued_event",{"id":null,"channel":null,"user_id":null,"data":"test","success":null,"result":null,"token":null,"server_token":null}],
|
196
|
+
["queued_event",{"id":null,"channel":null,"user_id":null,"data":"test","success":null,"result":null,"token":null,"server_token":null}]]
|
197
197
|
EOF
|
198
198
|
|
199
199
|
subject.should_receive(:send).with(serialized_array.gsub(/\n/,'').strip)
|
data/spec/unit/event_spec.rb
CHANGED
@@ -6,9 +6,10 @@ module WebsocketRails
|
|
6
6
|
let(:encoded_message_string) { '["new_message",{"id":"1234","data":"this is a message"}]' }
|
7
7
|
let(:namespace_encoded_message_string) { '["product.new_message",{"id":"1234","data":"this is a message"}]' }
|
8
8
|
let(:namespace_encoded_message) { '["product.new_message",{"id":"1234","data":{"message":"this is a message"}}]' }
|
9
|
-
let(:channel_encoded_message_string) { '["new_message",{"id":"1234","channel":"awesome_channel","user_id":null,"data":"this is a message","success":null,"result":null,"server_token":"1234"}]' }
|
9
|
+
let(:channel_encoded_message_string) { '["new_message",{"id":"1234","channel":"awesome_channel","user_id":null,"data":"this is a message","success":null,"result":null,"token":null,"server_token":"1234"}]' }
|
10
10
|
let(:synchronizable_encoded_message) { '["new_message",{"id":"1234","data":{"message":"this is a message"},"server_token":"1234"}]' }
|
11
11
|
let(:connection) { double('connection') }
|
12
|
+
let(:wrongly_encoded_message) { '["new_message",[{"id":"1234","data":{"message":"this is a message"}}]]' }
|
12
13
|
|
13
14
|
before { connection.stub!(:id).and_return(1) }
|
14
15
|
|
@@ -31,6 +32,13 @@ module WebsocketRails
|
|
31
32
|
event.data[:message].should == 'this is a message'
|
32
33
|
end
|
33
34
|
end
|
35
|
+
|
36
|
+
context "invalid messages" do
|
37
|
+
it "should return an invalid event if data is wrongly encoded" do
|
38
|
+
event = Event.new_from_json( wrongly_encoded_message, connection )
|
39
|
+
event.is_invalid?.should be_true
|
40
|
+
end
|
41
|
+
end
|
34
42
|
end
|
35
43
|
|
36
44
|
describe ".new_on_open" do
|
@@ -87,6 +95,12 @@ module WebsocketRails
|
|
87
95
|
event.channel.should == :awesome_channel
|
88
96
|
event.name.should == :event
|
89
97
|
end
|
98
|
+
|
99
|
+
it "should not raise an error if the channel name cannot be symbolized" do
|
100
|
+
expect { Event.new "event", :data => {}, :connection => connection, :channel => 5 }.to_not raise_error(NoMethodError)
|
101
|
+
event = Event.new "event", :data => {}, :connection => connection, :channel => 5
|
102
|
+
event.channel.should == :"5"
|
103
|
+
end
|
90
104
|
end
|
91
105
|
|
92
106
|
describe "#is_channel?" do
|
@@ -151,6 +165,16 @@ module WebsocketRails
|
|
151
165
|
data[1]['server_token'].should == '1234'
|
152
166
|
end
|
153
167
|
end
|
168
|
+
|
169
|
+
describe "#as_json" do
|
170
|
+
it "returns a Hash representation of the Event" do
|
171
|
+
hash = { data: { 'test' => 'test'}, channel: :awesome_channel }
|
172
|
+
event = Event.new 'test', hash
|
173
|
+
event.as_json[0].should == :test
|
174
|
+
event.as_json[1][:data].should == hash[:data]
|
175
|
+
event.as_json[1][:channel].should == hash[:channel]
|
176
|
+
end
|
177
|
+
end
|
154
178
|
end
|
155
179
|
|
156
180
|
end
|
data/spec/unit/logging_spec.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: websocket-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.7.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dan Knox
|
@@ -11,166 +10,160 @@ authors:
|
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 2014-03-14 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: rails
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
18
|
requirements:
|
21
|
-
- -
|
19
|
+
- - ">="
|
22
20
|
- !ruby/object:Gem::Version
|
23
21
|
version: '0'
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
24
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
-
none: false
|
28
25
|
requirements:
|
29
|
-
- -
|
26
|
+
- - ">="
|
30
27
|
- !ruby/object:Gem::Version
|
31
28
|
version: '0'
|
32
29
|
- !ruby/object:Gem::Dependency
|
33
30
|
name: rack
|
34
31
|
requirement: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
32
|
requirements:
|
37
|
-
- -
|
33
|
+
- - ">="
|
38
34
|
- !ruby/object:Gem::Version
|
39
35
|
version: '0'
|
40
36
|
type: :runtime
|
41
37
|
prerelease: false
|
42
38
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
39
|
requirements:
|
45
|
-
- -
|
40
|
+
- - ">="
|
46
41
|
- !ruby/object:Gem::Version
|
47
42
|
version: '0'
|
48
43
|
- !ruby/object:Gem::Dependency
|
49
44
|
name: faye-websocket
|
50
45
|
requirement: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
46
|
requirements:
|
53
|
-
- -
|
47
|
+
- - ">="
|
54
48
|
- !ruby/object:Gem::Version
|
55
49
|
version: '0'
|
56
50
|
type: :runtime
|
57
51
|
prerelease: false
|
58
52
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
53
|
requirements:
|
61
|
-
- -
|
54
|
+
- - ">="
|
62
55
|
- !ruby/object:Gem::Version
|
63
56
|
version: '0'
|
64
57
|
- !ruby/object:Gem::Dependency
|
65
58
|
name: thin
|
66
59
|
requirement: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
60
|
requirements:
|
69
|
-
- -
|
61
|
+
- - ">="
|
70
62
|
- !ruby/object:Gem::Version
|
71
63
|
version: '0'
|
72
64
|
type: :runtime
|
73
65
|
prerelease: false
|
74
66
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
67
|
requirements:
|
77
|
-
- -
|
68
|
+
- - ">="
|
78
69
|
- !ruby/object:Gem::Version
|
79
70
|
version: '0'
|
80
71
|
- !ruby/object:Gem::Dependency
|
81
72
|
name: redis
|
82
73
|
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
74
|
requirements:
|
85
|
-
- -
|
75
|
+
- - ">="
|
86
76
|
- !ruby/object:Gem::Version
|
87
77
|
version: '0'
|
88
78
|
type: :runtime
|
89
79
|
prerelease: false
|
90
80
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
81
|
requirements:
|
93
|
-
- -
|
82
|
+
- - ">="
|
94
83
|
- !ruby/object:Gem::Version
|
95
84
|
version: '0'
|
96
85
|
- !ruby/object:Gem::Dependency
|
97
86
|
name: hiredis
|
98
87
|
requirement: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
88
|
requirements:
|
101
|
-
- -
|
89
|
+
- - ">="
|
102
90
|
- !ruby/object:Gem::Version
|
103
91
|
version: '0'
|
104
92
|
type: :runtime
|
105
93
|
prerelease: false
|
106
94
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
95
|
requirements:
|
109
|
-
- -
|
96
|
+
- - ">="
|
110
97
|
- !ruby/object:Gem::Version
|
111
98
|
version: '0'
|
112
99
|
- !ruby/object:Gem::Dependency
|
113
100
|
name: em-synchrony
|
114
101
|
requirement: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
102
|
requirements:
|
117
|
-
- -
|
103
|
+
- - ">="
|
118
104
|
- !ruby/object:Gem::Version
|
119
105
|
version: '0'
|
120
106
|
type: :runtime
|
121
107
|
prerelease: false
|
122
108
|
version_requirements: !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
124
109
|
requirements:
|
125
|
-
- -
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: redis-objects
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
126
125
|
- !ruby/object:Gem::Version
|
127
126
|
version: '0'
|
128
127
|
- !ruby/object:Gem::Dependency
|
129
128
|
name: rake
|
130
129
|
requirement: !ruby/object:Gem::Requirement
|
131
|
-
none: false
|
132
130
|
requirements:
|
133
|
-
- -
|
131
|
+
- - ">="
|
134
132
|
- !ruby/object:Gem::Version
|
135
133
|
version: '0'
|
136
134
|
type: :development
|
137
135
|
prerelease: false
|
138
136
|
version_requirements: !ruby/object:Gem::Requirement
|
139
|
-
none: false
|
140
137
|
requirements:
|
141
|
-
- -
|
138
|
+
- - ">="
|
142
139
|
- !ruby/object:Gem::Version
|
143
140
|
version: '0'
|
144
141
|
- !ruby/object:Gem::Dependency
|
145
142
|
name: rspec-rails
|
146
143
|
requirement: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
144
|
requirements:
|
149
|
-
- -
|
145
|
+
- - ">="
|
150
146
|
- !ruby/object:Gem::Version
|
151
147
|
version: '0'
|
152
148
|
type: :development
|
153
149
|
prerelease: false
|
154
150
|
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
none: false
|
156
151
|
requirements:
|
157
|
-
- -
|
152
|
+
- - ">="
|
158
153
|
- !ruby/object:Gem::Version
|
159
154
|
version: '0'
|
160
155
|
- !ruby/object:Gem::Dependency
|
161
156
|
name: rspec-matchers-matchers
|
162
157
|
requirement: !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
158
|
requirements:
|
165
|
-
- -
|
159
|
+
- - ">="
|
166
160
|
- !ruby/object:Gem::Version
|
167
161
|
version: '0'
|
168
162
|
type: :development
|
169
163
|
prerelease: false
|
170
164
|
version_requirements: !ruby/object:Gem::Requirement
|
171
|
-
none: false
|
172
165
|
requirements:
|
173
|
-
- -
|
166
|
+
- - ">="
|
174
167
|
- !ruby/object:Gem::Version
|
175
168
|
version: '0'
|
176
169
|
description: Seamless Ruby on Rails websocket integration.
|
@@ -181,6 +174,13 @@ executables:
|
|
181
174
|
extensions: []
|
182
175
|
extra_rdoc_files: []
|
183
176
|
files:
|
177
|
+
- CHANGELOG.md
|
178
|
+
- Gemfile
|
179
|
+
- MIT-LICENSE
|
180
|
+
- README.md
|
181
|
+
- Rakefile
|
182
|
+
- bin/thin-socketrails
|
183
|
+
- lib/assets/javascripts/websocket_rails/abstract_connection.js.coffee
|
184
184
|
- lib/assets/javascripts/websocket_rails/channel.js.coffee
|
185
185
|
- lib/assets/javascripts/websocket_rails/event.js.coffee
|
186
186
|
- lib/assets/javascripts/websocket_rails/http_connection.js.coffee
|
@@ -202,9 +202,9 @@ files:
|
|
202
202
|
- lib/websocket_rails/channel.rb
|
203
203
|
- lib/websocket_rails/channel_manager.rb
|
204
204
|
- lib/websocket_rails/configuration.rb
|
205
|
+
- lib/websocket_rails/connection_adapters.rb
|
205
206
|
- lib/websocket_rails/connection_adapters/http.rb
|
206
207
|
- lib/websocket_rails/connection_adapters/web_socket.rb
|
207
|
-
- lib/websocket_rails/connection_adapters.rb
|
208
208
|
- lib/websocket_rails/connection_manager.rb
|
209
209
|
- lib/websocket_rails/controller_factory.rb
|
210
210
|
- lib/websocket_rails/data_store.rb
|
@@ -219,12 +219,13 @@ files:
|
|
219
219
|
- lib/websocket_rails/synchronization.rb
|
220
220
|
- lib/websocket_rails/user_manager.rb
|
221
221
|
- lib/websocket_rails/version.rb
|
222
|
-
-
|
222
|
+
- spec/dummy/Rakefile
|
223
223
|
- spec/dummy/app/controllers/application_controller.rb
|
224
224
|
- spec/dummy/app/controllers/chat_controller.rb
|
225
225
|
- spec/dummy/app/helpers/application_helper.rb
|
226
226
|
- spec/dummy/app/models/user.rb
|
227
227
|
- spec/dummy/app/views/layouts/application.html.erb
|
228
|
+
- spec/dummy/config.ru
|
228
229
|
- spec/dummy/config/application.rb
|
229
230
|
- spec/dummy/config/boot.rb
|
230
231
|
- spec/dummy/config/database.yml
|
@@ -240,7 +241,6 @@ files:
|
|
240
241
|
- spec/dummy/config/initializers/session_store.rb
|
241
242
|
- spec/dummy/config/locales/en.yml
|
242
243
|
- spec/dummy/config/routes.rb
|
243
|
-
- spec/dummy/config.ru
|
244
244
|
- spec/dummy/db/development.sqlite3
|
245
245
|
- spec/dummy/db/migrate/20130902222552_create_users.rb
|
246
246
|
- spec/dummy/db/schema.rb
|
@@ -259,9 +259,9 @@ files:
|
|
259
259
|
- spec/dummy/public/javascripts/effects.js
|
260
260
|
- spec/dummy/public/javascripts/prototype.js
|
261
261
|
- spec/dummy/public/javascripts/rails.js
|
262
|
-
- spec/dummy/Rakefile
|
263
262
|
- spec/dummy/script/rails
|
264
263
|
- spec/integration/connection_manager_spec.rb
|
264
|
+
- spec/javascripts/generated/assets/abstract_connection.js
|
265
265
|
- spec/javascripts/generated/assets/channel.js
|
266
266
|
- spec/javascripts/generated/assets/event.js
|
267
267
|
- spec/javascripts/generated/assets/http_connection.js
|
@@ -269,13 +269,15 @@ files:
|
|
269
269
|
- spec/javascripts/generated/assets/websocket_rails.js
|
270
270
|
- spec/javascripts/generated/specs/channel_spec.js
|
271
271
|
- spec/javascripts/generated/specs/event_spec.js
|
272
|
+
- spec/javascripts/generated/specs/helpers.js
|
272
273
|
- spec/javascripts/generated/specs/websocket_connection_spec.js
|
273
274
|
- spec/javascripts/generated/specs/websocket_rails_spec.js
|
274
275
|
- spec/javascripts/support/jasmine.yml
|
275
|
-
- spec/javascripts/support/
|
276
|
+
- spec/javascripts/support/jasmine_helper.rb
|
276
277
|
- spec/javascripts/support/vendor/sinon-1.7.1.js
|
277
278
|
- spec/javascripts/websocket_rails/channel_spec.coffee
|
278
279
|
- spec/javascripts/websocket_rails/event_spec.coffee
|
280
|
+
- spec/javascripts/websocket_rails/helpers.coffee
|
279
281
|
- spec/javascripts/websocket_rails/websocket_connection_spec.coffee
|
280
282
|
- spec/javascripts/websocket_rails/websocket_rails_spec.coffee
|
281
283
|
- spec/spec_helper.rb
|
@@ -301,41 +303,29 @@ files:
|
|
301
303
|
- spec/unit/synchronization_spec.rb
|
302
304
|
- spec/unit/target_validator_spec.rb
|
303
305
|
- spec/unit/user_manager_spec.rb
|
304
|
-
|
305
|
-
- Rakefile
|
306
|
-
- Gemfile
|
307
|
-
- README.md
|
308
|
-
- CHANGELOG.md
|
309
|
-
homepage: http://danknox.github.com/websocket-rails/
|
306
|
+
homepage: http://websocket-rails.github.io
|
310
307
|
licenses:
|
311
308
|
- MIT
|
312
|
-
|
309
|
+
metadata: {}
|
310
|
+
post_install_message: Welcome to WebsocketRails v0.7.0!
|
313
311
|
rdoc_options: []
|
314
312
|
require_paths:
|
315
313
|
- lib
|
316
314
|
required_ruby_version: !ruby/object:Gem::Requirement
|
317
|
-
none: false
|
318
315
|
requirements:
|
319
|
-
- -
|
316
|
+
- - ">="
|
320
317
|
- !ruby/object:Gem::Version
|
321
318
|
version: '0'
|
322
|
-
segments:
|
323
|
-
- 0
|
324
|
-
hash: -822058374610225796
|
325
319
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
326
|
-
none: false
|
327
320
|
requirements:
|
328
|
-
- -
|
321
|
+
- - ">="
|
329
322
|
- !ruby/object:Gem::Version
|
330
323
|
version: '0'
|
331
|
-
segments:
|
332
|
-
- 0
|
333
|
-
hash: -822058374610225796
|
334
324
|
requirements: []
|
335
325
|
rubyforge_project: websocket-rails
|
336
|
-
rubygems_version:
|
326
|
+
rubygems_version: 2.2.2
|
337
327
|
signing_key:
|
338
|
-
specification_version:
|
328
|
+
specification_version: 4
|
339
329
|
summary: Plug and play websocket support for ruby on rails. Includes event router
|
340
330
|
for mapping javascript events to controller actions.
|
341
331
|
test_files: []
|