ably 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +14 -0
  3. data/.travis.yml +4 -4
  4. data/CHANGELOG.md +26 -3
  5. data/Rakefile +32 -0
  6. data/SPEC.md +920 -565
  7. data/ably.gemspec +9 -4
  8. data/lib/ably/auth.rb +28 -2
  9. data/lib/ably/exceptions.rb +8 -2
  10. data/lib/ably/models/channel_state_change.rb +1 -1
  11. data/lib/ably/models/connection_state_change.rb +1 -1
  12. data/lib/ably/models/device_details.rb +87 -0
  13. data/lib/ably/models/device_push_details.rb +86 -0
  14. data/lib/ably/models/error_info.rb +23 -2
  15. data/lib/ably/models/idiomatic_ruby_wrapper.rb +4 -4
  16. data/lib/ably/models/protocol_message.rb +32 -2
  17. data/lib/ably/models/push_channel_subscription.rb +89 -0
  18. data/lib/ably/modules/conversions.rb +1 -1
  19. data/lib/ably/modules/encodeable.rb +1 -1
  20. data/lib/ably/modules/exception_codes.rb +128 -0
  21. data/lib/ably/modules/model_common.rb +15 -2
  22. data/lib/ably/modules/state_machine.rb +1 -1
  23. data/lib/ably/realtime.rb +1 -0
  24. data/lib/ably/realtime/auth.rb +1 -1
  25. data/lib/ably/realtime/channel.rb +24 -102
  26. data/lib/ably/realtime/channel/channel_manager.rb +2 -6
  27. data/lib/ably/realtime/channel/channel_state_machine.rb +2 -2
  28. data/lib/ably/realtime/channel/publisher.rb +74 -0
  29. data/lib/ably/realtime/channel/push_channel.rb +62 -0
  30. data/lib/ably/realtime/client.rb +87 -0
  31. data/lib/ably/realtime/client/incoming_message_dispatcher.rb +6 -2
  32. data/lib/ably/realtime/client/outgoing_message_dispatcher.rb +1 -1
  33. data/lib/ably/realtime/connection.rb +8 -5
  34. data/lib/ably/realtime/connection/connection_manager.rb +7 -7
  35. data/lib/ably/realtime/connection/websocket_transport.rb +1 -1
  36. data/lib/ably/realtime/presence.rb +4 -4
  37. data/lib/ably/realtime/presence/members_map.rb +3 -3
  38. data/lib/ably/realtime/push.rb +40 -0
  39. data/lib/ably/realtime/push/admin.rb +61 -0
  40. data/lib/ably/realtime/push/channel_subscriptions.rb +108 -0
  41. data/lib/ably/realtime/push/device_registrations.rb +105 -0
  42. data/lib/ably/rest.rb +1 -0
  43. data/lib/ably/rest/channel.rb +33 -5
  44. data/lib/ably/rest/channel/push_channel.rb +62 -0
  45. data/lib/ably/rest/client.rb +137 -28
  46. data/lib/ably/rest/middleware/parse_message_pack.rb +17 -1
  47. data/lib/ably/rest/presence.rb +1 -0
  48. data/lib/ably/rest/push.rb +42 -0
  49. data/lib/ably/rest/push/admin.rb +54 -0
  50. data/lib/ably/rest/push/channel_subscriptions.rb +121 -0
  51. data/lib/ably/rest/push/device_registrations.rb +103 -0
  52. data/lib/ably/version.rb +7 -2
  53. data/spec/acceptance/realtime/auth_spec.rb +6 -8
  54. data/spec/acceptance/realtime/channel_spec.rb +166 -51
  55. data/spec/acceptance/realtime/client_spec.rb +149 -0
  56. data/spec/acceptance/realtime/connection_failures_spec.rb +1 -1
  57. data/spec/acceptance/realtime/connection_spec.rb +4 -4
  58. data/spec/acceptance/realtime/message_spec.rb +19 -17
  59. data/spec/acceptance/realtime/presence_spec.rb +5 -5
  60. data/spec/acceptance/realtime/push_admin_spec.rb +696 -0
  61. data/spec/acceptance/realtime/push_spec.rb +27 -0
  62. data/spec/acceptance/rest/auth_spec.rb +4 -3
  63. data/spec/acceptance/rest/base_spec.rb +2 -2
  64. data/spec/acceptance/rest/client_spec.rb +129 -10
  65. data/spec/acceptance/rest/message_spec.rb +175 -4
  66. data/spec/acceptance/rest/push_admin_spec.rb +896 -0
  67. data/spec/acceptance/rest/push_spec.rb +25 -0
  68. data/spec/acceptance/rest/time_spec.rb +1 -1
  69. data/spec/run_parallel_tests +33 -0
  70. data/spec/unit/logger_spec.rb +10 -3
  71. data/spec/unit/models/device_details_spec.rb +102 -0
  72. data/spec/unit/models/device_push_details_spec.rb +101 -0
  73. data/spec/unit/models/error_info_spec.rb +51 -3
  74. data/spec/unit/models/message_spec.rb +17 -2
  75. data/spec/unit/models/presence_message_spec.rb +1 -1
  76. data/spec/unit/models/push_channel_subscription_spec.rb +86 -0
  77. data/spec/unit/realtime/client_spec.rb +12 -0
  78. data/spec/unit/realtime/push_channel_spec.rb +36 -0
  79. data/spec/unit/rest/channel_spec.rb +8 -1
  80. data/spec/unit/rest/client_spec.rb +30 -0
  81. data/spec/unit/rest/push_channel_spec.rb +36 -0
  82. metadata +71 -8
@@ -28,6 +28,18 @@ describe Ably::Realtime::Client do
28
28
  end
29
29
  end
30
30
 
31
+ context 'push' do
32
+ let(:client_options) { { key: 'appid.keyuid:keysecret' } }
33
+
34
+ specify '#device is not supported and raises an exception' do
35
+ expect { subject.device }.to raise_error Ably::Exceptions::PushNotificationsNotSupported
36
+ end
37
+
38
+ specify '#push returns a Push object' do
39
+ expect(subject.push).to be_a(Ably::Realtime::Push)
40
+ end
41
+ end
42
+
31
43
  after(:all) do
32
44
  sleep 1 # let realtime library shut down any open clients
33
45
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ably::Realtime::Channel::PushChannel do
4
+ subject { Ably::Realtime::Channel::PushChannel }
5
+
6
+ let(:channel_name) { 'unique' }
7
+ let(:client) { double('client').as_null_object }
8
+ let(:channel) { Ably::Realtime::Channel.new(client, channel_name) }
9
+
10
+ it 'is constructed with a channel' do
11
+ expect(subject.new(channel)).to be_a(Ably::Realtime::Channel::PushChannel)
12
+ end
13
+
14
+ it 'raises an exception if constructed with an invalid type' do
15
+ expect { subject.new(Hash.new) }.to raise_error(ArgumentError)
16
+ end
17
+
18
+ it 'exposes the channel as attribute #channel' do
19
+ expect(subject.new(channel).channel).to eql(channel)
20
+ end
21
+
22
+ it 'is available in the #push attribute of the channel' do
23
+ expect(channel.push).to be_a(Ably::Realtime::Channel::PushChannel)
24
+ expect(channel.push.channel).to eql(channel)
25
+ end
26
+
27
+ context 'methods not implemented as push notifications' do
28
+ subject { Ably::Realtime::Channel::PushChannel.new(channel) }
29
+
30
+ %w(subscribe_device subscribe_client_id unsubscribe_device unsubscribe_client_id get_subscriptions).each do |method_name|
31
+ specify "##{method_name} raises an unsupported exception" do
32
+ expect { subject.public_send(method_name, 'foo') }.to raise_error(Ably::Exceptions::PushNotificationsNotSupported)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -2,7 +2,14 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Ably::Rest::Channel do
5
- let(:client) { instance_double('Ably::Rest::Client', encoders: [], post: instance_double('Faraday::Response', status: 201)) }
5
+ let(:client) do
6
+ instance_double(
7
+ 'Ably::Rest::Client',
8
+ encoders: [],
9
+ post: instance_double('Faraday::Response', status: 201),
10
+ idempotent_rest_publishing: false,
11
+ )
12
+ end
6
13
  let(:channel_name) { 'unique' }
7
14
 
8
15
  subject { Ably::Rest::Channel.new(client, channel_name) }
@@ -20,6 +20,24 @@ describe Ably::Rest::Client do
20
20
  end
21
21
  end
22
22
 
23
+ context 'fallback_retry_timeout (#RSC15f)' do
24
+ context 'default' do
25
+ let(:client_options) { { key: 'appid.keyuid:keysecret' } }
26
+
27
+ it 'is set to 10 minutes' do
28
+ expect(subject.options.fetch(:fallback_retry_timeout)).to eql(10 * 60)
29
+ end
30
+ end
31
+
32
+ context 'when provided' do
33
+ let(:client_options) { { key: 'appid.keyuid:keysecret', fallback_retry_timeout: 30 } }
34
+
35
+ it 'configures a new timeout' do
36
+ expect(subject.options.fetch(:fallback_retry_timeout)).to eql(30)
37
+ end
38
+ end
39
+ end
40
+
23
41
  context ':use_token_auth' do
24
42
  context 'set to false' do
25
43
  context 'with a key and :tls => false' do
@@ -57,4 +75,16 @@ describe Ably::Rest::Client do
57
75
  expect(subject.add_request_ids).to eql(true)
58
76
  end
59
77
  end
78
+
79
+ context 'push' do
80
+ let(:client_options) { { key: 'appid.keyuid:keysecret' } }
81
+
82
+ specify '#device is not supported and raises an exception' do
83
+ expect { subject.device }.to raise_error Ably::Exceptions::PushNotificationsNotSupported
84
+ end
85
+
86
+ specify '#push returns a Push object' do
87
+ expect(subject.push).to be_a(Ably::Rest::Push)
88
+ end
89
+ end
60
90
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ably::Rest::Channel::PushChannel do
4
+ subject { Ably::Rest::Channel::PushChannel }
5
+
6
+ let(:channel_name) { 'unique' }
7
+ let(:client) { double('client').as_null_object }
8
+ let(:channel) { Ably::Rest::Channel.new(client, channel_name) }
9
+
10
+ it 'is constructed with a channel' do
11
+ expect(subject.new(channel)).to be_a(Ably::Rest::Channel::PushChannel)
12
+ end
13
+
14
+ it 'raises an exception if constructed with an invalid type' do
15
+ expect { subject.new(Hash.new) }.to raise_error(ArgumentError)
16
+ end
17
+
18
+ it 'exposes the channel as attribute #channel' do
19
+ expect(subject.new(channel).channel).to eql(channel)
20
+ end
21
+
22
+ it 'is available in the #push attribute of the channel' do
23
+ expect(channel.push).to be_a(Ably::Rest::Channel::PushChannel)
24
+ expect(channel.push.channel).to eql(channel)
25
+ end
26
+
27
+ context 'methods not implemented as push notifications' do
28
+ subject { Ably::Rest::Channel::PushChannel.new(channel) }
29
+
30
+ %w(subscribe_device subscribe_client_id unsubscribe_device unsubscribe_client_id get_subscriptions).each do |method_name|
31
+ specify "##{method_name} raises an unsupported exception" do
32
+ expect { subject.public_send(method_name, 'foo') }.to raise_error(Ably::Exceptions::PushNotificationsNotSupported)
33
+ end
34
+ end
35
+ end
36
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ably
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lewis Marshall
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-06-18 00:00:00.000000000 Z
12
+ date: 2019-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
@@ -185,28 +185,28 @@ dependencies:
185
185
  requirements:
186
186
  - - "~>"
187
187
  - !ruby/object:Gem::Version
188
- version: 3.2.0
188
+ version: 3.3.0
189
189
  type: :development
190
190
  prerelease: false
191
191
  version_requirements: !ruby/object:Gem::Requirement
192
192
  requirements:
193
193
  - - "~>"
194
194
  - !ruby/object:Gem::Version
195
- version: 3.2.0
195
+ version: 3.3.0
196
196
  - !ruby/object:Gem::Dependency
197
197
  name: rspec-retry
198
198
  requirement: !ruby/object:Gem::Requirement
199
199
  requirements:
200
200
  - - "~>"
201
201
  - !ruby/object:Gem::Version
202
- version: '0.4'
202
+ version: '0.6'
203
203
  type: :development
204
204
  prerelease: false
205
205
  version_requirements: !ruby/object:Gem::Requirement
206
206
  requirements:
207
207
  - - "~>"
208
208
  - !ruby/object:Gem::Version
209
- version: '0.4'
209
+ version: '0.6'
210
210
  - !ruby/object:Gem::Dependency
211
211
  name: yard
212
212
  requirement: !ruby/object:Gem::Requirement
@@ -221,6 +221,20 @@ dependencies:
221
221
  - - "~>"
222
222
  - !ruby/object:Gem::Version
223
223
  version: '0.9'
224
+ - !ruby/object:Gem::Dependency
225
+ name: rspec-instafail
226
+ requirement: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - "~>"
229
+ - !ruby/object:Gem::Version
230
+ version: '1.0'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: '1.0'
224
238
  - !ruby/object:Gem::Dependency
225
239
  name: webmock
226
240
  requirement: !ruby/object:Gem::Requirement
@@ -249,6 +263,20 @@ dependencies:
249
263
  - - ">="
250
264
  - !ruby/object:Gem::Version
251
265
  version: '0'
266
+ - !ruby/object:Gem::Dependency
267
+ name: parallel_tests
268
+ requirement: !ruby/object:Gem::Requirement
269
+ requirements:
270
+ - - "~>"
271
+ - !ruby/object:Gem::Version
272
+ version: '2.22'
273
+ type: :development
274
+ prerelease: false
275
+ version_requirements: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - "~>"
278
+ - !ruby/object:Gem::Version
279
+ version: '2.22'
252
280
  - !ruby/object:Gem::Dependency
253
281
  name: pry
254
282
  requirement: !ruby/object:Gem::Requirement
@@ -285,6 +313,7 @@ executables: []
285
313
  extensions: []
286
314
  extra_rdoc_files: []
287
315
  files:
316
+ - ".editorconfig"
288
317
  - ".gitignore"
289
318
  - ".gitmodules"
290
319
  - ".rspec"
@@ -305,6 +334,8 @@ files:
305
334
  - lib/ably/models/cipher_params.rb
306
335
  - lib/ably/models/connection_details.rb
307
336
  - lib/ably/models/connection_state_change.rb
337
+ - lib/ably/models/device_details.rb
338
+ - lib/ably/models/device_push_details.rb
308
339
  - lib/ably/models/error_info.rb
309
340
  - lib/ably/models/http_paginated_response.rb
310
341
  - lib/ably/models/idiomatic_ruby_wrapper.rb
@@ -318,6 +349,7 @@ files:
318
349
  - lib/ably/models/paginated_result.rb
319
350
  - lib/ably/models/presence_message.rb
320
351
  - lib/ably/models/protocol_message.rb
352
+ - lib/ably/models/push_channel_subscription.rb
321
353
  - lib/ably/models/stats.rb
322
354
  - lib/ably/models/stats_types.rb
323
355
  - lib/ably/models/token_details.rb
@@ -330,6 +362,7 @@ files:
330
362
  - lib/ably/modules/enum.rb
331
363
  - lib/ably/modules/event_emitter.rb
332
364
  - lib/ably/modules/event_machine_helpers.rb
365
+ - lib/ably/modules/exception_codes.rb
333
366
  - lib/ably/modules/http_helpers.rb
334
367
  - lib/ably/modules/message_emitter.rb
335
368
  - lib/ably/modules/message_pack.rb
@@ -345,6 +378,8 @@ files:
345
378
  - lib/ably/realtime/channel.rb
346
379
  - lib/ably/realtime/channel/channel_manager.rb
347
380
  - lib/ably/realtime/channel/channel_state_machine.rb
381
+ - lib/ably/realtime/channel/publisher.rb
382
+ - lib/ably/realtime/channel/push_channel.rb
348
383
  - lib/ably/realtime/channels.rb
349
384
  - lib/ably/realtime/client.rb
350
385
  - lib/ably/realtime/client/incoming_message_dispatcher.rb
@@ -358,8 +393,13 @@ files:
358
393
  - lib/ably/realtime/presence/members_map.rb
359
394
  - lib/ably/realtime/presence/presence_manager.rb
360
395
  - lib/ably/realtime/presence/presence_state_machine.rb
396
+ - lib/ably/realtime/push.rb
397
+ - lib/ably/realtime/push/admin.rb
398
+ - lib/ably/realtime/push/channel_subscriptions.rb
399
+ - lib/ably/realtime/push/device_registrations.rb
361
400
  - lib/ably/rest.rb
362
401
  - lib/ably/rest/channel.rb
402
+ - lib/ably/rest/channel/push_channel.rb
363
403
  - lib/ably/rest/channels.rb
364
404
  - lib/ably/rest/client.rb
365
405
  - lib/ably/rest/middleware/encoder.rb
@@ -370,6 +410,10 @@ files:
370
410
  - lib/ably/rest/middleware/parse_json.rb
371
411
  - lib/ably/rest/middleware/parse_message_pack.rb
372
412
  - lib/ably/rest/presence.rb
413
+ - lib/ably/rest/push.rb
414
+ - lib/ably/rest/push/admin.rb
415
+ - lib/ably/rest/push/channel_subscriptions.rb
416
+ - lib/ably/rest/push/device_registrations.rb
373
417
  - lib/ably/util/crypto.rb
374
418
  - lib/ably/util/pub_sub.rb
375
419
  - lib/ably/util/safe_deferrable.rb
@@ -384,6 +428,8 @@ files:
384
428
  - spec/acceptance/realtime/message_spec.rb
385
429
  - spec/acceptance/realtime/presence_history_spec.rb
386
430
  - spec/acceptance/realtime/presence_spec.rb
431
+ - spec/acceptance/realtime/push_admin_spec.rb
432
+ - spec/acceptance/realtime/push_spec.rb
387
433
  - spec/acceptance/realtime/stats_spec.rb
388
434
  - spec/acceptance/realtime/time_spec.rb
389
435
  - spec/acceptance/rest/auth_spec.rb
@@ -394,9 +440,12 @@ files:
394
440
  - spec/acceptance/rest/encoders_spec.rb
395
441
  - spec/acceptance/rest/message_spec.rb
396
442
  - spec/acceptance/rest/presence_spec.rb
443
+ - spec/acceptance/rest/push_admin_spec.rb
444
+ - spec/acceptance/rest/push_spec.rb
397
445
  - spec/acceptance/rest/stats_spec.rb
398
446
  - spec/acceptance/rest/time_spec.rb
399
447
  - spec/rspec_config.rb
448
+ - spec/run_parallel_tests
400
449
  - spec/shared/client_initializer_behaviour.rb
401
450
  - spec/shared/model_behaviour.rb
402
451
  - spec/shared/protocol_msgbus_behaviour.rb
@@ -420,6 +469,8 @@ files:
420
469
  - spec/unit/models/cipher_params_spec.rb
421
470
  - spec/unit/models/connection_details_spec.rb
422
471
  - spec/unit/models/connection_state_change_spec.rb
472
+ - spec/unit/models/device_details_spec.rb
473
+ - spec/unit/models/device_push_details_spec.rb
423
474
  - spec/unit/models/error_info_spec.rb
424
475
  - spec/unit/models/http_paginated_result_spec.rb
425
476
  - spec/unit/models/idiomatic_ruby_wrapper_spec.rb
@@ -431,6 +482,7 @@ files:
431
482
  - spec/unit/models/paginated_result_spec.rb
432
483
  - spec/unit/models/presence_message_spec.rb
433
484
  - spec/unit/models/protocol_message_spec.rb
485
+ - spec/unit/models/push_channel_subscription_spec.rb
434
486
  - spec/unit/models/stats_spec.rb
435
487
  - spec/unit/models/token_details_spec.rb
436
488
  - spec/unit/models/token_request_spec.rb
@@ -445,12 +497,14 @@ files:
445
497
  - spec/unit/realtime/connection_spec.rb
446
498
  - spec/unit/realtime/incoming_message_dispatcher_spec.rb
447
499
  - spec/unit/realtime/presence_spec.rb
500
+ - spec/unit/realtime/push_channel_spec.rb
448
501
  - spec/unit/realtime/realtime_spec.rb
449
502
  - spec/unit/realtime/safe_deferrable_spec.rb
450
503
  - spec/unit/realtime/websocket_transport_spec.rb
451
504
  - spec/unit/rest/channel_spec.rb
452
505
  - spec/unit/rest/channels_spec.rb
453
506
  - spec/unit/rest/client_spec.rb
507
+ - spec/unit/rest/push_channel_spec.rb
454
508
  - spec/unit/rest/rest_spec.rb
455
509
  - spec/unit/util/crypto_spec.rb
456
510
  - spec/unit/util/pub_sub_spec.rb
@@ -473,8 +527,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
473
527
  - !ruby/object:Gem::Version
474
528
  version: '0'
475
529
  requirements: []
476
- rubyforge_project:
477
- rubygems_version: 2.7.6
530
+ rubygems_version: 3.0.2
478
531
  signing_key:
479
532
  specification_version: 4
480
533
  summary: A Ruby client library for ably.io realtime messaging implemented using EventMachine
@@ -489,6 +542,8 @@ test_files:
489
542
  - spec/acceptance/realtime/message_spec.rb
490
543
  - spec/acceptance/realtime/presence_history_spec.rb
491
544
  - spec/acceptance/realtime/presence_spec.rb
545
+ - spec/acceptance/realtime/push_admin_spec.rb
546
+ - spec/acceptance/realtime/push_spec.rb
492
547
  - spec/acceptance/realtime/stats_spec.rb
493
548
  - spec/acceptance/realtime/time_spec.rb
494
549
  - spec/acceptance/rest/auth_spec.rb
@@ -499,9 +554,12 @@ test_files:
499
554
  - spec/acceptance/rest/encoders_spec.rb
500
555
  - spec/acceptance/rest/message_spec.rb
501
556
  - spec/acceptance/rest/presence_spec.rb
557
+ - spec/acceptance/rest/push_admin_spec.rb
558
+ - spec/acceptance/rest/push_spec.rb
502
559
  - spec/acceptance/rest/stats_spec.rb
503
560
  - spec/acceptance/rest/time_spec.rb
504
561
  - spec/rspec_config.rb
562
+ - spec/run_parallel_tests
505
563
  - spec/shared/client_initializer_behaviour.rb
506
564
  - spec/shared/model_behaviour.rb
507
565
  - spec/shared/protocol_msgbus_behaviour.rb
@@ -525,6 +583,8 @@ test_files:
525
583
  - spec/unit/models/cipher_params_spec.rb
526
584
  - spec/unit/models/connection_details_spec.rb
527
585
  - spec/unit/models/connection_state_change_spec.rb
586
+ - spec/unit/models/device_details_spec.rb
587
+ - spec/unit/models/device_push_details_spec.rb
528
588
  - spec/unit/models/error_info_spec.rb
529
589
  - spec/unit/models/http_paginated_result_spec.rb
530
590
  - spec/unit/models/idiomatic_ruby_wrapper_spec.rb
@@ -536,6 +596,7 @@ test_files:
536
596
  - spec/unit/models/paginated_result_spec.rb
537
597
  - spec/unit/models/presence_message_spec.rb
538
598
  - spec/unit/models/protocol_message_spec.rb
599
+ - spec/unit/models/push_channel_subscription_spec.rb
539
600
  - spec/unit/models/stats_spec.rb
540
601
  - spec/unit/models/token_details_spec.rb
541
602
  - spec/unit/models/token_request_spec.rb
@@ -550,12 +611,14 @@ test_files:
550
611
  - spec/unit/realtime/connection_spec.rb
551
612
  - spec/unit/realtime/incoming_message_dispatcher_spec.rb
552
613
  - spec/unit/realtime/presence_spec.rb
614
+ - spec/unit/realtime/push_channel_spec.rb
553
615
  - spec/unit/realtime/realtime_spec.rb
554
616
  - spec/unit/realtime/safe_deferrable_spec.rb
555
617
  - spec/unit/realtime/websocket_transport_spec.rb
556
618
  - spec/unit/rest/channel_spec.rb
557
619
  - spec/unit/rest/channels_spec.rb
558
620
  - spec/unit/rest/client_spec.rb
621
+ - spec/unit/rest/push_channel_spec.rb
559
622
  - spec/unit/rest/rest_spec.rb
560
623
  - spec/unit/util/crypto_spec.rb
561
624
  - spec/unit/util/pub_sub_spec.rb