firehose 1.2.20 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +29 -0
  3. data/.dockerignore +2 -0
  4. data/.gitignore +3 -1
  5. data/.rubocop.yml +1156 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +3 -7
  8. data/CHANGELOG.md +15 -0
  9. data/Dockerfile +11 -0
  10. data/Gemfile +4 -2
  11. data/Procfile.dev +0 -1
  12. data/README.md +66 -8
  13. data/Rakefile +43 -32
  14. data/coffeelint.json +129 -0
  15. data/docker-compose.yml +17 -0
  16. data/firehose.gemspec +5 -9
  17. data/karma.config.coffee +89 -0
  18. data/lib/assets/javascripts/firehose.js.coffee +1 -2
  19. data/lib/assets/javascripts/firehose/consumer.js.coffee +18 -2
  20. data/lib/assets/javascripts/firehose/core.js.coffee +2 -1
  21. data/lib/assets/javascripts/firehose/long_poll.js.coffee +69 -8
  22. data/lib/assets/javascripts/firehose/multiplexed_consumer.js.coffee +74 -0
  23. data/lib/assets/javascripts/firehose/transport.js.coffee +4 -2
  24. data/lib/assets/javascripts/firehose/web_socket.js.coffee +51 -5
  25. data/lib/firehose/cli.rb +2 -1
  26. data/lib/firehose/client/producer.rb +10 -4
  27. data/lib/firehose/rack/consumer.rb +39 -0
  28. data/lib/firehose/rack/consumer/http_long_poll.rb +118 -45
  29. data/lib/firehose/rack/consumer/web_socket.rb +133 -28
  30. data/lib/firehose/rack/ping.rb +1 -1
  31. data/lib/firehose/rack/publisher.rb +10 -4
  32. data/lib/firehose/server.rb +9 -9
  33. data/lib/firehose/server/channel.rb +23 -31
  34. data/lib/firehose/server/message_buffer.rb +59 -0
  35. data/lib/firehose/server/publisher.rb +16 -17
  36. data/lib/firehose/server/redis.rb +32 -0
  37. data/lib/firehose/server/subscriber.rb +7 -7
  38. data/lib/firehose/version.rb +2 -2
  39. data/package.json +14 -2
  40. data/spec/integrations/shared_examples.rb +89 -7
  41. data/spec/javascripts/firehose/multiplexed_consumer_spec.coffee +72 -0
  42. data/spec/javascripts/firehose/transport_spec.coffee +0 -2
  43. data/spec/javascripts/firehose/websocket_spec.coffee +2 -0
  44. data/spec/javascripts/helpers/spec_helper.js +1 -0
  45. data/spec/javascripts/support/jquery-1.11.1.js +10308 -0
  46. data/{lib/assets/javascripts/vendor → spec/javascripts/support}/json2.js +0 -0
  47. data/spec/javascripts/support/spec_helper.coffee +3 -0
  48. data/spec/lib/assets_spec.rb +8 -8
  49. data/spec/lib/client/producer_spec.rb +14 -14
  50. data/spec/lib/firehose_spec.rb +2 -2
  51. data/spec/lib/rack/consumer/http_long_poll_spec.rb +21 -3
  52. data/spec/lib/rack/consumer_spec.rb +4 -4
  53. data/spec/lib/rack/ping_spec.rb +4 -4
  54. data/spec/lib/rack/publisher_spec.rb +5 -5
  55. data/spec/lib/server/app_spec.rb +2 -2
  56. data/spec/lib/server/channel_spec.rb +58 -44
  57. data/spec/lib/server/message_buffer_spec.rb +148 -0
  58. data/spec/lib/server/publisher_spec.rb +29 -22
  59. data/spec/lib/server/redis_spec.rb +13 -0
  60. data/spec/lib/server/subscriber_spec.rb +14 -13
  61. data/spec/spec_helper.rb +8 -1
  62. metadata +34 -95
  63. data/.rbenv-version +0 -1
  64. data/Guardfile +0 -31
  65. data/config/evergreen.rb +0 -9
@@ -7,21 +7,17 @@ describe Firehose::Server::Publisher do
7
7
  let(:channel_key) { "/firehose/publisher/test/#{Time.now.to_i}" }
8
8
  let(:message) { "howdy friends!" }
9
9
 
10
- it "should have 100 MAX_MESSAGES" do
11
- Firehose::Server::Publisher::MAX_MESSAGES.should == 100
12
- end
13
-
14
- it "should have 1 day TTL" do
15
- Firehose::Server::Publisher::TTL.should == 86400
10
+ it "has 1 day TTL" do
11
+ expect(Firehose::Server::Publisher::TTL).to eql(86400)
16
12
  end
17
13
 
18
14
  describe "#publish" do
19
- it "should publish message change" do
15
+ it "publishes message change" do
20
16
  em do
21
- hiredis = EM::Hiredis.connect.pubsub
17
+ hiredis = Firehose::Server.redis.connection.pubsub
22
18
  hiredis.subscribe "firehose:channel_updates"
23
19
  hiredis.on(:message) {|_, msg|
24
- msg.should == "#{channel_key}\n1\n#{message}"
20
+ expect(msg).to eql("#{channel_key}\n1\n#{message}")
25
21
  em.next_tick { em.stop }
26
22
  }
27
23
  Firehose::Server::Publisher.new.publish channel_key, message
@@ -29,52 +25,63 @@ describe Firehose::Server::Publisher do
29
25
  end
30
26
 
31
27
  "\"'\r\t\n!@\#$%^&*()[]\v\f\a\b\e{}/=?+\\|".each_char do |char|
32
- it "should publish messages with the '#{char.inspect}' character" do
28
+ it "publishes messages with the '#{char.inspect}' character" do
33
29
  msg = [char, message, char].join
34
30
  em 1 do
35
31
  Firehose::Server::Publisher.new.publish(channel_key, msg).callback { em.stop }
36
32
  end
37
- redis_exec('lpop', "firehose:#{channel_key}:list").should == msg
33
+ expect(redis_exec('lpop', "firehose:#{channel_key}:list")).to eql(msg)
38
34
  end
39
35
  end
40
36
 
41
- it "should add message to list" do
37
+ it "adds message to list" do
42
38
  em do
43
39
  Firehose::Server::Publisher.new.publish(channel_key, message).callback { em.stop }
44
40
  end
45
- redis_exec('lpop', "firehose:#{channel_key}:list").should == message
41
+ expect(redis_exec('lpop', "firehose:#{channel_key}:list")).to eql(message)
46
42
  end
47
43
 
48
- it "should limit list to MAX_MESSAGES messages" do
44
+ it "limits list to DEFAULT_SIZE messages" do
49
45
  em do
50
- Firehose::Server::Publisher::MAX_MESSAGES.times do |n|
46
+ Firehose::Server::MessageBuffer::DEFAULT_SIZE.times do |n|
51
47
  publisher.publish(channel_key, message)
52
48
  end
53
49
  publisher.publish(channel_key, message).callback { em.stop }
54
50
  end
55
- redis_exec('llen', "firehose:#{channel_key}:list").should == Firehose::Server::Publisher::MAX_MESSAGES
51
+ expect(redis_exec('llen', "firehose:#{channel_key}:list")).to eql(Firehose::Server::MessageBuffer::DEFAULT_SIZE)
52
+ end
53
+
54
+ it "limits message list to a custom buffer size" do
55
+ buffer_size = rand(100)
56
+ em do
57
+ Firehose::Server::MessageBuffer::DEFAULT_SIZE.times do |n|
58
+ publisher.publish(channel_key, message)
59
+ end
60
+ publisher.publish(channel_key, message, buffer_size: buffer_size).callback { em.stop }
61
+ end
62
+ redis_exec('llen', "firehose:#{channel_key}:list").should == buffer_size
56
63
  end
57
64
 
58
- it "should increment sequence" do
65
+ it "increments sequence" do
59
66
  sequence_key = "firehose:#{channel_key}:sequence"
60
67
 
61
68
  @done_counter = 0
62
- redis_exec('get', sequence_key).should be_nil
69
+ expect(redis_exec('get', sequence_key)).to be_nil
63
70
  em do
64
71
  publisher.publish(channel_key, message).callback { @done_counter += 1; em.next_tick { em.stop } if @done_counter > 1 }
65
72
  publisher.publish(channel_key, message).callback { @done_counter += 1; em.next_tick { em.stop } if @done_counter > 1 }
66
73
  end
67
- redis_exec('get', sequence_key).to_i.should == 2
74
+ expect(redis_exec('get', sequence_key).to_i).to eql(2)
68
75
  end
69
76
 
70
- it "should set expirery on sequence and list keys" do
77
+ it "sets expiry on sequence and list keys" do
71
78
  ttl = 78 # Why 78? Why not!
72
79
 
73
80
  em do
74
81
  publisher.publish(channel_key, message, :ttl => 78).callback do
75
82
  # Allow for 1 second of slippage/delay
76
- redis_exec('TTL', "firehose:#{channel_key}:sequence").should > (ttl- 1)
77
- redis_exec('TTL', "firehose:#{channel_key}:list").should > (ttl - 1)
83
+ expect(redis_exec('TTL', "firehose:#{channel_key}:sequence")).to be > (ttl- 1)
84
+ expect(redis_exec('TTL', "firehose:#{channel_key}:list")).to be > (ttl - 1)
78
85
  em.stop
79
86
  end
80
87
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Firehose::Server::Redis do
4
+ describe ".key" do
5
+ subject { Firehose::Server::Redis.key("list", "channel", ["fizz", "buzz"]) }
6
+ it "has root `firehose` key" do
7
+ expect(subject).to start_with("firehose:")
8
+ end
9
+ it "flattens all arguments into key" do
10
+ expect(subject).to eql("firehose:list:channel:fizz:buzz")
11
+ end
12
+ end
13
+ end
@@ -4,23 +4,24 @@ describe Firehose::Server::Subscriber do
4
4
  include EM::TestHelper
5
5
 
6
6
  let(:channel_key) { '/bears/are/mean' }
7
- let(:subscriber) { Firehose::Server::Subscriber.new(EM::Hiredis.connect) }
7
+ let(:subscriber) { Firehose::Server::Subscriber.new(Firehose::Server.redis.connection) }
8
8
  let(:dummy_subscriber){ Firehose::Server::Subscriber.new(double('redis', :pubsub => double('pubsub', :subscribe => EM::DefaultDeferrable.new, :on => nil))) }
9
9
  let(:message) { 'Raaaarrrrrr!!!!' }
10
10
  let(:publisher) { Firehose::Server::Publisher.new }
11
11
 
12
12
  describe "#subscribe" do
13
- it "should add the deferrable to the subscriptions hash" do
13
+ it "adds the deferrable to the subscriptions hash" do
14
14
  deferrable = EM::DefaultDeferrable.new
15
15
  dummy_subscriber.subscribe(channel_key, deferrable)
16
- dummy_subscriber.send(:subscriptions)[channel_key].should == [deferrable]
16
+ expect(dummy_subscriber.send(:subscriptions)[channel_key]).to eql([deferrable])
17
17
  end
18
18
 
19
- it "should call succeed on the deferrable when a message is published" do
19
+ it "calls succeed on the deferrable when a message is published" do
20
20
  deferrable = EM::DefaultDeferrable.new
21
- deferrable.callback do |msg, sequence|
22
- msg.should == message
23
- sequence.should == 1 # The publisher is fresh, so the sequence ID will be 1.
21
+ deferrable.callback do |messages|
22
+ msg = messages.first
23
+ expect(msg.payload).to eql(message)
24
+ expect(msg.sequence).to eql(1) # The publisher is fresh, so the sequence ID will be 1.
24
25
  em.next_tick { em.stop }
25
26
  end
26
27
 
@@ -30,10 +31,10 @@ describe Firehose::Server::Subscriber do
30
31
  end
31
32
  end
32
33
 
33
- it "shouldn't call succeed on the deferrable when a 2nd message is published" do
34
+ it "doesn't call succeed on the deferrable when a 2nd message is published" do
34
35
  deferrable = EM::DefaultDeferrable.new
35
- deferrable.should_receive(:succeed).with(message, 1) # The publisher is fresh, so the sequence ID will be 1.
36
- deferrable.should_not_receive(:succeed).with('2nd message', 2)
36
+ deferrable.should_receive(:succeed).with([Firehose::Server::MessageBuffer::Message.new(message, 1)]) # The publisher is fresh, so the sequence ID will be 1.
37
+ deferrable.should_not_receive(:succeed).with([Firehose::Server::MessageBuffer::Message.new('2nd message', 2)])
37
38
  em do
38
39
  subscriber.subscribe(channel_key, deferrable)
39
40
  publisher.publish(channel_key, message).callback do
@@ -47,14 +48,14 @@ describe Firehose::Server::Subscriber do
47
48
  end
48
49
 
49
50
  describe "#unsubscribe" do
50
- it "should remove the deferrable from the subscriptions hash" do
51
+ it "removes the deferrable from the subscriptions hash" do
51
52
  deferrable = EM::DefaultDeferrable.new
52
53
  dummy_subscriber.subscribe(channel_key, deferrable)
53
54
  dummy_subscriber.unsubscribe(channel_key, deferrable)
54
- dummy_subscriber.send(:subscriptions).has_key?(channel_key).should be_false
55
+ expect(dummy_subscriber.send(:subscriptions).has_key?(channel_key)).to be_falsey
55
56
  end
56
57
 
57
- it "shouldn't call succeed on the deferrable when a message is published" do
58
+ it "doesn't call succeed on the deferrable when a message is published" do
58
59
  deferrable = EM::DefaultDeferrable.new
59
60
  deferrable.should_not_receive(:succeed).with(message, 1) # The publisher is fresh, so the sequence ID will be 1.
60
61
  em do
@@ -6,6 +6,13 @@ require 'faye/websocket'
6
6
  require 'hiredis'
7
7
  require 'firehose'
8
8
 
9
+ # Test coverage reports on CodeClimate.
10
+ begin
11
+ require "codeclimate-test-reporter"
12
+ CodeClimate::TestReporter.start
13
+ rescue LoadError
14
+ end
15
+
9
16
  # We use both EM::Http and Net::Http in this test lib. When EM:Http is fired up
10
17
  # we're usually hitting Rainbows! for integrations, and when Net::Http we want
11
18
  # to mock that up.
@@ -34,7 +41,7 @@ module Hiredis::TestHelper
34
41
  def redis
35
42
  @conn ||= begin
36
43
  conn = Hiredis::Connection.new
37
- conn.connect("127.0.0.1", 6379)
44
+ conn.connect(Firehose::Server.redis.url.host, Firehose::Server.redis.url.port)
38
45
  conn
39
46
  end
40
47
  end
metadata CHANGED
@@ -1,17 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firehose
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.20
4
+ version: 1.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brad Gessler
8
8
  - Steel Fu
9
9
  - Paul Cortens
10
10
  - Zach Zolton
11
+ - Christopher Bertels
11
12
  autorequire:
12
13
  bindir: bin
13
14
  cert_chain: []
14
- date: 2014-09-24 00:00:00.000000000 Z
15
+ date: 2016-06-21 00:00:00.000000000 Z
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
18
  name: eventmachine
@@ -59,16 +60,16 @@ dependencies:
59
60
  name: faraday
60
61
  requirement: !ruby/object:Gem::Requirement
61
62
  requirements:
62
- - - ">="
63
+ - - '='
63
64
  - !ruby/object:Gem::Version
64
- version: '0'
65
+ version: 0.9.0
65
66
  type: :runtime
66
67
  prerelease: false
67
68
  version_requirements: !ruby/object:Gem::Requirement
68
69
  requirements:
69
- - - ">="
70
+ - - '='
70
71
  - !ruby/object:Gem::Version
71
- version: '0'
72
+ version: 0.9.0
72
73
  - !ruby/object:Gem::Dependency
73
74
  name: faye-websocket
74
75
  requirement: !ruby/object:Gem::Requirement
@@ -97,20 +98,6 @@ dependencies:
97
98
  - - ">="
98
99
  - !ruby/object:Gem::Version
99
100
  version: 1.0.0
100
- - !ruby/object:Gem::Dependency
101
- name: json
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
101
  - !ruby/object:Gem::Dependency
115
102
  name: rack
116
103
  requirement: !ruby/object:Gem::Requirement
@@ -167,62 +154,6 @@ dependencies:
167
154
  - - ">="
168
155
  - !ruby/object:Gem::Version
169
156
  version: '0'
170
- - !ruby/object:Gem::Dependency
171
- name: guard-rspec
172
- requirement: !ruby/object:Gem::Requirement
173
- requirements:
174
- - - ">="
175
- - !ruby/object:Gem::Version
176
- version: '0'
177
- type: :development
178
- prerelease: false
179
- version_requirements: !ruby/object:Gem::Requirement
180
- requirements:
181
- - - ">="
182
- - !ruby/object:Gem::Version
183
- version: '0'
184
- - !ruby/object:Gem::Dependency
185
- name: guard-bundler
186
- requirement: !ruby/object:Gem::Requirement
187
- requirements:
188
- - - ">="
189
- - !ruby/object:Gem::Version
190
- version: '0'
191
- type: :development
192
- prerelease: false
193
- version_requirements: !ruby/object:Gem::Requirement
194
- requirements:
195
- - - ">="
196
- - !ruby/object:Gem::Version
197
- version: '0'
198
- - !ruby/object:Gem::Dependency
199
- name: guard-coffeescript
200
- requirement: !ruby/object:Gem::Requirement
201
- requirements:
202
- - - ">="
203
- - !ruby/object:Gem::Version
204
- version: '0'
205
- type: :development
206
- prerelease: false
207
- version_requirements: !ruby/object:Gem::Requirement
208
- requirements:
209
- - - ">="
210
- - !ruby/object:Gem::Version
211
- version: '0'
212
- - !ruby/object:Gem::Dependency
213
- name: guard-copy
214
- requirement: !ruby/object:Gem::Requirement
215
- requirements:
216
- - - ">="
217
- - !ruby/object:Gem::Version
218
- version: '0'
219
- type: :development
220
- prerelease: false
221
- version_requirements: !ruby/object:Gem::Requirement
222
- requirements:
223
- - - ">="
224
- - !ruby/object:Gem::Version
225
- version: '0'
226
157
  - !ruby/object:Gem::Dependency
227
158
  name: rainbows
228
159
  requirement: !ruby/object:Gem::Requirement
@@ -321,20 +252,6 @@ dependencies:
321
252
  - - ">="
322
253
  - !ruby/object:Gem::Version
323
254
  version: '0'
324
- - !ruby/object:Gem::Dependency
325
- name: evergreen
326
- requirement: !ruby/object:Gem::Requirement
327
- requirements:
328
- - - ">="
329
- - !ruby/object:Gem::Version
330
- version: '0'
331
- type: :development
332
- prerelease: false
333
- version_requirements: !ruby/object:Gem::Requirement
334
- requirements:
335
- - - ">="
336
- - !ruby/object:Gem::Version
337
- version: '0'
338
255
  - !ruby/object:Gem::Dependency
339
256
  name: capybara-webkit
340
257
  requirement: !ruby/object:Gem::Requirement
@@ -370,36 +287,43 @@ email:
370
287
  - steel@polleverywhere.com
371
288
  - paul@polleverywhere.com
372
289
  - zach@polleverywhere.com
290
+ - christopher@polleverywhere.com
373
291
  executables:
374
292
  - firehose
375
293
  extensions: []
376
294
  extra_rdoc_files: []
377
295
  files:
296
+ - ".codeclimate.yml"
297
+ - ".dockerignore"
378
298
  - ".env.sample"
379
299
  - ".gitignore"
380
- - ".rbenv-version"
381
300
  - ".rspec"
301
+ - ".rubocop.yml"
302
+ - ".ruby-version"
382
303
  - ".travis.yml"
304
+ - CHANGELOG.md
305
+ - Dockerfile
383
306
  - Gemfile
384
- - Guardfile
385
307
  - LICENSE.txt
386
308
  - Procfile
387
309
  - Procfile.dev
388
310
  - README.md
389
311
  - Rakefile
390
312
  - bin/firehose
391
- - config/evergreen.rb
313
+ - coffeelint.json
392
314
  - config/rainbows.rb
315
+ - docker-compose.yml
393
316
  - firehose.gemspec
317
+ - karma.config.coffee
394
318
  - lib/assets/javascripts/firehose.js.coffee
395
319
  - lib/assets/javascripts/firehose/base.js.coffee
396
320
  - lib/assets/javascripts/firehose/consumer.js.coffee
397
321
  - lib/assets/javascripts/firehose/core.js.coffee
398
322
  - lib/assets/javascripts/firehose/long_poll.js.coffee
323
+ - lib/assets/javascripts/firehose/multiplexed_consumer.js.coffee
399
324
  - lib/assets/javascripts/firehose/transport.js.coffee
400
325
  - lib/assets/javascripts/firehose/version.js.coffee.erb
401
326
  - lib/assets/javascripts/firehose/web_socket.js.coffee
402
- - lib/assets/javascripts/vendor/json2.js
403
327
  - lib/firehose.rb
404
328
  - lib/firehose/assets.rb
405
329
  - lib/firehose/cli.rb
@@ -418,7 +342,9 @@ files:
418
342
  - lib/firehose/server.rb
419
343
  - lib/firehose/server/app.rb
420
344
  - lib/firehose/server/channel.rb
345
+ - lib/firehose/server/message_buffer.rb
421
346
  - lib/firehose/server/publisher.rb
347
+ - lib/firehose/server/redis.rb
422
348
  - lib/firehose/server/subscriber.rb
423
349
  - lib/firehose/version.rb
424
350
  - package.json
@@ -429,10 +355,14 @@ files:
429
355
  - spec/javascripts/firehose/base_spec.coffee
430
356
  - spec/javascripts/firehose/consumer_spec.coffee
431
357
  - spec/javascripts/firehose/long_poll_spec.coffee
358
+ - spec/javascripts/firehose/multiplexed_consumer_spec.coffee
432
359
  - spec/javascripts/firehose/transport_spec.coffee
433
360
  - spec/javascripts/firehose/websocket_spec.coffee
434
361
  - spec/javascripts/helpers/spec_helper.js
362
+ - spec/javascripts/support/jquery-1.11.1.js
363
+ - spec/javascripts/support/json2.js
435
364
  - spec/javascripts/support/sinon-1.7.3.js
365
+ - spec/javascripts/support/spec_helper.coffee
436
366
  - spec/lib/assets_spec.rb
437
367
  - spec/lib/client/consumer_spec.rb
438
368
  - spec/lib/client/producer_spec.rb
@@ -443,7 +373,9 @@ files:
443
373
  - spec/lib/rack/publisher_spec.rb
444
374
  - spec/lib/server/app_spec.rb
445
375
  - spec/lib/server/channel_spec.rb
376
+ - spec/lib/server/message_buffer_spec.rb
446
377
  - spec/lib/server/publisher_spec.rb
378
+ - spec/lib/server/redis_spec.rb
447
379
  - spec/lib/server/subscriber_spec.rb
448
380
  - spec/spec_helper.rb
449
381
  homepage: http://firehose.io/
@@ -466,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
466
398
  version: '0'
467
399
  requirements: []
468
400
  rubyforge_project: firehose
469
- rubygems_version: 2.2.2
401
+ rubygems_version: 2.5.1
470
402
  signing_key:
471
403
  specification_version: 4
472
404
  summary: Build realtime Ruby web applications
@@ -478,10 +410,14 @@ test_files:
478
410
  - spec/javascripts/firehose/base_spec.coffee
479
411
  - spec/javascripts/firehose/consumer_spec.coffee
480
412
  - spec/javascripts/firehose/long_poll_spec.coffee
413
+ - spec/javascripts/firehose/multiplexed_consumer_spec.coffee
481
414
  - spec/javascripts/firehose/transport_spec.coffee
482
415
  - spec/javascripts/firehose/websocket_spec.coffee
483
416
  - spec/javascripts/helpers/spec_helper.js
417
+ - spec/javascripts/support/jquery-1.11.1.js
418
+ - spec/javascripts/support/json2.js
484
419
  - spec/javascripts/support/sinon-1.7.3.js
420
+ - spec/javascripts/support/spec_helper.coffee
485
421
  - spec/lib/assets_spec.rb
486
422
  - spec/lib/client/consumer_spec.rb
487
423
  - spec/lib/client/producer_spec.rb
@@ -492,6 +428,9 @@ test_files:
492
428
  - spec/lib/rack/publisher_spec.rb
493
429
  - spec/lib/server/app_spec.rb
494
430
  - spec/lib/server/channel_spec.rb
431
+ - spec/lib/server/message_buffer_spec.rb
495
432
  - spec/lib/server/publisher_spec.rb
433
+ - spec/lib/server/redis_spec.rb
496
434
  - spec/lib/server/subscriber_spec.rb
497
435
  - spec/spec_helper.rb
436
+ has_rdoc: