firehose 1.2.20 → 1.3.6

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 (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: