ably-rest 1.1.4.rc → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/MAINTAINERS.md +1 -0
  3. data/ably-rest.gemspec +6 -6
  4. data/lib/submodules/ably-ruby/.github/workflows/check.yml +27 -0
  5. data/lib/submodules/ably-ruby/CHANGELOG.md +35 -0
  6. data/lib/submodules/ably-ruby/COPYRIGHT +1 -0
  7. data/lib/submodules/ably-ruby/LICENSE +173 -10
  8. data/lib/submodules/ably-ruby/MAINTAINERS.md +1 -0
  9. data/lib/submodules/ably-ruby/README.md +2 -10
  10. data/lib/submodules/ably-ruby/SPEC.md +944 -914
  11. data/lib/submodules/ably-ruby/ably.gemspec +4 -4
  12. data/lib/submodules/ably-ruby/lib/ably/auth.rb +12 -2
  13. data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +7 -11
  14. data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +2 -2
  15. data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_properties.rb +24 -0
  16. data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +8 -0
  17. data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +5 -4
  18. data/lib/submodules/ably-ruby/lib/ably/realtime/connection/websocket_transport.rb +67 -1
  19. data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +0 -14
  20. data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +9 -15
  21. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/fail_if_unsupported_mime_type.rb +1 -4
  22. data/lib/submodules/ably-ruby/lib/ably/version.rb +1 -1
  23. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +10 -0
  24. data/lib/submodules/ably-ruby/spec/acceptance/realtime/client_spec.rb +72 -16
  25. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +28 -12
  26. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_history_spec.rb +0 -58
  27. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +54 -0
  28. data/lib/submodules/ably-ruby/spec/acceptance/realtime/push_admin_spec.rb +3 -19
  29. data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +6 -75
  30. data/lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb +72 -12
  31. data/lib/submodules/ably-ruby/spec/acceptance/rest/push_admin_spec.rb +3 -19
  32. data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +0 -8
  33. data/lib/submodules/ably-ruby/spec/spec_helper.rb +1 -0
  34. data/lib/submodules/ably-ruby/spec/support/serialization_helper.rb +21 -0
  35. data/lib/submodules/ably-ruby/spec/unit/realtime/client_spec.rb +19 -6
  36. metadata +30 -25
  37. data/lib/submodules/ably-ruby/.travis.yml +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12d0c3187eec6e03160420f9266a02e4b57017c45cc9792cb701644bd594b8f6
4
- data.tar.gz: c5c0a1da2d5f750452b3693ea616c58ddb9bf925afc7a6766859668293241adb
3
+ metadata.gz: 59842f1a0a75ab131a1af2714d6704094c3c3a035a31b74516d00251df41439b
4
+ data.tar.gz: 26695916c25bd63adde7c9c42de9dd037f6153d9317a7b3a9545ed31572f13f1
5
5
  SHA512:
6
- metadata.gz: f321aa69c45f938136ab02c5fd466cc33b661a6481b5244edf8d4eca1090879c9bb1b568d181794a88df623bb971ac3fd5da879b9df012a110a247ae86807eed
7
- data.tar.gz: b4df91228d73641db9ce8b9ed3e98420c0ada82cd657d0122dacc471307104932c13be50938d0f8b14b5a68b51e12ae475f962235d5e05097aad811388cb5c3d
6
+ metadata.gz: 8e9ddaa69b29f548a9c938b92ab318c03ba77b8cc96c5ba1eb9742f8d3351728a1439e2656224b2be9c2733ecfe0a1b8585980155b663e95e90c35cfd8ed3fc3
7
+ data.tar.gz: fc3ec7a89827eb0fae4831f99ce83891fd4d7a6f658e719808067b6374da87aa77edb545473a046de0ffe521c680fcd0bde8539ed6b8fd7bafd3ef9e6ee3b158
data/MAINTAINERS.md ADDED
@@ -0,0 +1 @@
1
+ This repository is owned by the Ably SDK team.
data/ably-rest.gemspec CHANGED
@@ -31,8 +31,8 @@ Gem::Specification.new do |spec|
31
31
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_runtime_dependency 'faraday', '~> 1.0'
35
- spec.add_runtime_dependency 'typhoeus', '~> 1.4'
34
+ spec.add_runtime_dependency 'faraday', '~> 0.12'
35
+ spec.add_runtime_dependency 'excon', '~> 0.55'
36
36
 
37
37
  if RUBY_VERSION.match(/^1/)
38
38
  spec.add_runtime_dependency 'json', '< 2.0'
@@ -42,11 +42,11 @@ Gem::Specification.new do |spec|
42
42
  spec.add_runtime_dependency 'msgpack', '>= 0.6.2'
43
43
  spec.add_runtime_dependency 'addressable', '>= 2.0.0'
44
44
 
45
- spec.add_development_dependency 'rake', '~> 13.0'
46
- spec.add_development_dependency 'bundler', '~> 2.2.1'
45
+ spec.add_development_dependency 'bundler', '>= 1.3.0'
46
+ spec.add_development_dependency 'rake', '~> 11.3'
47
47
  spec.add_development_dependency 'redcarpet', '~> 3.3'
48
- spec.add_development_dependency 'rspec', '~> 3.10.0'
49
- spec.add_development_dependency 'rspec-retry', '~> 0.6'
48
+ spec.add_development_dependency 'rspec', '~> 3.2.0'
49
+ spec.add_development_dependency 'rspec-retry', '~> 0.4'
50
50
  spec.add_development_dependency 'yard', '~> 0.9'
51
51
 
52
52
  if RUBY_VERSION.match(/^1/)
@@ -0,0 +1,27 @@
1
+ on:
2
+ pull_request:
3
+ push:
4
+ branches:
5
+ - main
6
+
7
+ jobs:
8
+ check:
9
+ runs-on: ubuntu-latest
10
+ continue-on-error: true
11
+ strategy:
12
+ matrix:
13
+ ruby: [ '2.5', '2.6', '2.7' ]
14
+ protocol: [ 'json', 'msgpack' ]
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ with:
18
+ submodules: 'recursive'
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ bundler-cache: true
23
+ - env:
24
+ RSPEC_RETRY: true
25
+ PARALLEL_TEST_PROCESSORS: 2
26
+ PROTOCOL: ${{ matrix.protocol }}
27
+ run: ./spec/run_parallel_tests
@@ -1,5 +1,40 @@
1
1
  # Change Log
2
2
 
3
+ ## [v1.1.4](https://github.com/ably/ably-ruby/tree/v1.1.4)
4
+
5
+ [Full Changelog](https://github.com/ably/ably-ruby/compare/v1.1.3...v1.1.4)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - statesman dependency very outdated [\#199](https://github.com/ably/ably-ruby/issues/199)
10
+ - Add support for custom transportParams [\#176](https://github.com/ably/ably-ruby/issues/176)
11
+ - Re-enable imempotency tests as part of 1.1 release [\#174](https://github.com/ably/ably-ruby/issues/174)
12
+ - Ensure request method accepts UPDATE, PATCH & DELETE verbs [\#168](https://github.com/ably/ably-ruby/issues/168)
13
+ - my-members presenceMap requirement change for 1.1 [\#163](https://github.com/ably/ably-ruby/issues/163)
14
+ - Add ChannelProperties as part of 1.0 spec \(RTL15\) [\#112](https://github.com/ably/ably-ruby/issues/112)
15
+
16
+ **Fixed bugs:**
17
+
18
+ - client\_id should be passed as clientId [\#159](https://github.com/ably/ably-ruby/issues/159)
19
+ - Error in the HTTP2 framing layer issue before heroku-20 [\#215](https://github.com/ably/ably-ruby/issues/215)
20
+ - Using a clientId should no longer be forcing token auth in the 1.1 spec [\#182](https://github.com/ably/ably-ruby/issues/182)
21
+
22
+ **Merged pull requests:**
23
+
24
+ - Continue running all workflow jobs when one fails [\#235](https://github.com/ably/ably-ruby/pull/235) ([owenpearson](https://github.com/owenpearson))
25
+ - Set SNI hostname and verify peer certificates when using TLS [\#234](https://github.com/ably/ably-ruby/pull/234) ([lmars](https://github.com/lmars))
26
+ - Validate that members presenceMap does not change on synthesized leave [\#231](https://github.com/ably/ably-ruby/pull/231) ([TheSmartnik](https://github.com/TheSmartnik))
27
+ - Conform license and copyright [\#229](https://github.com/ably/ably-ruby/pull/229) ([QuintinWillison](https://github.com/QuintinWillison))
28
+ - Add ChannelProperties \(RTL15\) [\#227](https://github.com/ably/ably-ruby/pull/227) ([TheSmartnik](https://github.com/TheSmartnik))
29
+ - Replace fury badges with shields.io [\#226](https://github.com/ably/ably-ruby/pull/226) ([owenpearson](https://github.com/owenpearson))
30
+ - Add transport\_params option to realtime client \(RTC1f1\) [\#224](https://github.com/ably/ably-ruby/pull/224) ([TheSmartnik](https://github.com/TheSmartnik))
31
+ - Use GitHub actions [\#223](https://github.com/ably/ably-ruby/pull/223) ([owenpearson](https://github.com/owenpearson))
32
+ - Add support for delete, patch, put method in \#request [\#218](https://github.com/ably/ably-ruby/pull/218) ([TheSmartnik](https://github.com/TheSmartnik))
33
+ - Upgrade statesman [\#217](https://github.com/ably/ably-ruby/pull/217) ([TheSmartnik](https://github.com/TheSmartnik))
34
+ - Remove until\_attach option for presence history [\#216](https://github.com/ably/ably-ruby/pull/216) ([TheSmartnik](https://github.com/TheSmartnik))
35
+ - Update Travis CI versions [\#214](https://github.com/ably/ably-ruby/pull/214) ([TheSmartnik](https://github.com/TheSmartnik))
36
+ - Add maintainers file [\#213](https://github.com/ably/ably-ruby/pull/213) ([niksilver](https://github.com/niksilver))
37
+
3
38
  ## [v1.1.3](https://github.com/ably/ably-ruby/tree/v1.1.3)
4
39
 
5
40
  [Full Changelog](https://github.com/ably/ably-ruby/compare/v1.1.2...v1.1.3)
@@ -0,0 +1 @@
1
+ Copyright 2015-2021 Ably Real-time Ltd (ably.com)
@@ -1,13 +1,176 @@
1
- Copyright 2015-2020 Ably Real-time Ltd (ably.com)
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
2
4
 
3
- Licensed under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License.
5
- You may obtain a copy of the License at
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
6
 
7
- http://www.apache.org/licenses/LICENSE-2.0
7
+ 1. Definitions.
8
8
 
9
- Unless required by applicable law or agreed to in writing, software
10
- distributed under the License is distributed on an "AS IS" BASIS,
11
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- See the License for the specific language governing permissions and
13
- limitations under the License.
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
@@ -0,0 +1 @@
1
+ This repository is owned by the Ably SDK team.
@@ -1,6 +1,6 @@
1
1
  # [Ably](https://www.ably.io)
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/ably.svg)](http://badge.fury.io/rb/ably)
3
+ [![Gem Version](https://img.shields.io/gem/v/ably?style=flat)](https://img.shields.io/gem/v/ably?style=flat)
4
4
  [![Coverage Status](https://coveralls.io/repos/ably/ably-ruby/badge.svg)](https://coveralls.io/r/ably/ably-ruby)
5
5
 
6
6
  A Ruby client library for [ably.io](https://www.ably.io), the realtime messaging service. This library currently targets the [Ably 1.1 client library specification](https://www.ably.io/documentation/client-lib-development-guide/features/). You can jump to the '[Known Limitations](#known-limitations)' section to see the features this client library does not yet support or [view our client library SDKs feature support matrix](https://www.ably.io/download/sdk-feature-support-matrix) to see the list of all the available features.
@@ -9,18 +9,10 @@ A Ruby client library for [ably.io](https://www.ably.io), the realtime messaging
9
9
 
10
10
  This SDK supports Ruby 1.9.3+.
11
11
 
12
- We regression-test the SDK against a selection of Ruby versions (which we update over time, but usually consists of mainstream and widely used versions). Please refer to [.travis.yml](./.travis.yml) for the set of versions that currently undergo CI testing.
12
+ We regression-test the SDK against a selection of Ruby versions (which we update over time, but usually consists of mainstream and widely used versions). Please refer to [.github/workflows/check.yml](./.github/workflows/check.yml) for the set of versions that currently undergo CI testing.
13
13
 
14
14
  If you find any compatibility issues, please [do raise an issue](https://github.com/ably/ably-ruby/issues/new) in this repository or [contact Ably customer support](https://support.ably.io/) for advice.
15
15
 
16
- ## Known Limitations
17
-
18
- This client library is currently *not compatible* with some of the Ably features:
19
-
20
- | Feature |
21
- | :--- |
22
- | [Custom transportParams](https://www.ably.io/documentation/realtime/connection#client-options) |
23
-
24
16
  ## Documentation
25
17
 
26
18
  Visit https://www.ably.io/documentation for a complete API reference and more examples.
@@ -1,4 +1,4 @@
1
- # Ably Realtime & REST Client Library 1.1.0 Specification
1
+ # Ably Realtime & REST Client Library 1.1.4 Specification
2
2
 
3
3
  ### Ably::Realtime::Auth
4
4
  _(see [spec/acceptance/realtime/auth_spec.rb](./spec/acceptance/realtime/auth_spec.rb))_
@@ -55,7 +55,7 @@ _(see [spec/acceptance/realtime/auth_spec.rb](./spec/acceptance/realtime/auth_sp
55
55
  * and an incompatible client_id in a TokenDetails object passed to the auth callback
56
56
  * [rejects a TokenDetails object with an incompatible client_id and fails with an exception](./spec/acceptance/realtime/auth_spec.rb#L287)
57
57
  * when already authenticated with a valid token
58
- * [ensures message delivery continuity whilst upgrading (#RTC8a1)](./spec/acceptance/realtime/auth_spec.rb#L701)
58
+ * [ensures message delivery continuity whilst upgrading (#RTC8a1)](./spec/acceptance/realtime/auth_spec.rb#L703)
59
59
  * when INITIALIZED
60
60
  * [obtains a token and connects to Ably (#RTC8c, #RTC8b1)](./spec/acceptance/realtime/auth_spec.rb#L328)
61
61
  * when CONNECTING
@@ -82,93 +82,93 @@ _(see [spec/acceptance/realtime/auth_spec.rb](./spec/acceptance/realtime/auth_sp
82
82
  * when upgrading capabilities
83
83
  * [is allowed (#RTC8a1)](./spec/acceptance/realtime/auth_spec.rb#L659)
84
84
  * when downgrading capabilities (#RTC8a1)
85
- * [is allowed and channels are detached](./spec/acceptance/realtime/auth_spec.rb#L684)
85
+ * [is allowed and channels are detached](./spec/acceptance/realtime/auth_spec.rb#L686)
86
86
  * #authorize_async
87
- * [returns a token synchronously](./spec/acceptance/realtime/auth_spec.rb#L735)
87
+ * [returns a token synchronously](./spec/acceptance/realtime/auth_spec.rb#L737)
88
88
  * server initiated AUTH ProtocolMessage
89
89
  * when received
90
- * [should immediately start a new authentication process (#RTN22)](./spec/acceptance/realtime/auth_spec.rb#L756)
90
+ * [should immediately start a new authentication process (#RTN22)](./spec/acceptance/realtime/auth_spec.rb#L758)
91
91
  * when not received
92
- * [should expect the connection to be disconnected by the server but should resume automatically (#RTN22a)](./spec/acceptance/realtime/auth_spec.rb#L779)
92
+ * [should expect the connection to be disconnected by the server but should resume automatically (#RTN22a)](./spec/acceptance/realtime/auth_spec.rb#L781)
93
93
  * #auth_params
94
- * [returns the auth params asynchronously](./spec/acceptance/realtime/auth_spec.rb#L805)
94
+ * [returns the auth params asynchronously](./spec/acceptance/realtime/auth_spec.rb#L807)
95
95
  * #auth_params_sync
96
- * [returns the auth params synchronously](./spec/acceptance/realtime/auth_spec.rb#L814)
96
+ * [returns the auth params synchronously](./spec/acceptance/realtime/auth_spec.rb#L816)
97
97
  * #auth_header
98
- * [returns an auth header asynchronously](./spec/acceptance/realtime/auth_spec.rb#L821)
98
+ * [returns an auth header asynchronously](./spec/acceptance/realtime/auth_spec.rb#L823)
99
99
  * #auth_header_sync
100
- * [returns an auth header synchronously](./spec/acceptance/realtime/auth_spec.rb#L830)
100
+ * [returns an auth header synchronously](./spec/acceptance/realtime/auth_spec.rb#L832)
101
101
  * #client_id_validated?
102
102
  * when using basic auth
103
103
  * before connected
104
- * [is false as basic auth users do not have an identity](./spec/acceptance/realtime/auth_spec.rb#L843)
104
+ * [is false as basic auth users do not have an identity](./spec/acceptance/realtime/auth_spec.rb#L845)
105
105
  * once connected
106
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L850)
107
- * [contains a validated wildcard client_id](./spec/acceptance/realtime/auth_spec.rb#L857)
106
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L852)
107
+ * [contains a validated wildcard client_id](./spec/acceptance/realtime/auth_spec.rb#L859)
108
108
  * when using a token string
109
109
  * with a valid client_id
110
110
  * before connected
111
- * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L871)
112
- * [#client_id is nil](./spec/acceptance/realtime/auth_spec.rb#L876)
111
+ * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L873)
112
+ * [#client_id is nil](./spec/acceptance/realtime/auth_spec.rb#L878)
113
113
  * once connected
114
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L883)
115
- * [#client_id is populated](./spec/acceptance/realtime/auth_spec.rb#L890)
114
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L885)
115
+ * [#client_id is populated](./spec/acceptance/realtime/auth_spec.rb#L892)
116
116
  * with no client_id (anonymous)
117
117
  * before connected
118
- * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L903)
118
+ * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L905)
119
119
  * once connected
120
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L910)
120
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L912)
121
121
  * with a wildcard client_id (anonymous)
122
122
  * before connected
123
- * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L923)
123
+ * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L925)
124
124
  * once connected
125
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L930)
125
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L932)
126
126
  * when using a token
127
127
  * with a client_id
128
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L944)
128
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L946)
129
129
  * once connected
130
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L950)
130
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L952)
131
131
  * with no client_id (anonymous)
132
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L962)
132
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L964)
133
133
  * once connected
134
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L968)
134
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L970)
135
135
  * with a wildcard client_id (anonymous)
136
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L980)
136
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L982)
137
137
  * once connected
138
- * [is true](./spec/acceptance/realtime/auth_spec.rb#L986)
138
+ * [is true](./spec/acceptance/realtime/auth_spec.rb#L988)
139
139
  * when using a token request with a client_id
140
- * [is not true as identification is not confirmed until authenticated](./spec/acceptance/realtime/auth_spec.rb#L999)
140
+ * [is not true as identification is not confirmed until authenticated](./spec/acceptance/realtime/auth_spec.rb#L1001)
141
141
  * once connected
142
- * [is true as identification is completed following CONNECTED ProtocolMessage](./spec/acceptance/realtime/auth_spec.rb#L1005)
142
+ * [is true as identification is completed following CONNECTED ProtocolMessage](./spec/acceptance/realtime/auth_spec.rb#L1007)
143
143
  * deprecated #authorise
144
- * [logs a deprecation warning (#RSA10l)](./spec/acceptance/realtime/auth_spec.rb#L1019)
145
- * [returns a valid token (#RSA10l)](./spec/acceptance/realtime/auth_spec.rb#L1025)
144
+ * [logs a deprecation warning (#RSA10l)](./spec/acceptance/realtime/auth_spec.rb#L1021)
145
+ * [returns a valid token (#RSA10l)](./spec/acceptance/realtime/auth_spec.rb#L1027)
146
146
  * when using JWT
147
147
  * when using auth_url
148
148
  * when credentials are valid
149
- * [client successfully fetches a channel and publishes a message](./spec/acceptance/realtime/auth_spec.rb#L1044)
149
+ * [client successfully fetches a channel and publishes a message](./spec/acceptance/realtime/auth_spec.rb#L1046)
150
150
  * when credentials are wrong
151
- * [disconnected includes and invalid signature message](./spec/acceptance/realtime/auth_spec.rb#L1057)
151
+ * [disconnected includes and invalid signature message](./spec/acceptance/realtime/auth_spec.rb#L1059)
152
152
  * when token is expired
153
- * [receives a 40142 error from the server](./spec/acceptance/realtime/auth_spec.rb#L1070)
153
+ * [receives a 40142 error from the server](./spec/acceptance/realtime/auth_spec.rb#L1072)
154
154
  * when using auth_callback
155
155
  * when credentials are valid
156
- * [authentication succeeds and client can post a message](./spec/acceptance/realtime/auth_spec.rb#L1095)
156
+ * [authentication succeeds and client can post a message](./spec/acceptance/realtime/auth_spec.rb#L1097)
157
157
  * when credentials are invalid
158
- * [authentication fails and reason for disconnection is invalid signature](./spec/acceptance/realtime/auth_spec.rb#L1110)
158
+ * [authentication fails and reason for disconnection is invalid signature](./spec/acceptance/realtime/auth_spec.rb#L1112)
159
159
  * when the client is initialized with ClientOptions and the token is a JWT token
160
160
  * when credentials are valid
161
- * [posts successfully to a channel](./spec/acceptance/realtime/auth_spec.rb#L1127)
161
+ * [posts successfully to a channel](./spec/acceptance/realtime/auth_spec.rb#L1129)
162
162
  * when credentials are invalid
163
- * [fails with an invalid signature error](./spec/acceptance/realtime/auth_spec.rb#L1141)
163
+ * [fails with an invalid signature error](./spec/acceptance/realtime/auth_spec.rb#L1144)
164
164
  * when JWT token expires
165
- * [client disconnects, a new token is requested via auth_callback and the client gets reconnected](./spec/acceptance/realtime/auth_spec.rb#L1168)
165
+ * [client disconnects, a new token is requested via auth_callback and the client gets reconnected](./spec/acceptance/realtime/auth_spec.rb#L1171)
166
166
  * and an AUTH procol message is received
167
- * [client reauths correctly without going through a disconnection](./spec/acceptance/realtime/auth_spec.rb#L1196)
167
+ * [client reauths correctly without going through a disconnection](./spec/acceptance/realtime/auth_spec.rb#L1199)
168
168
  * when the JWT token request includes a client_id
169
- * [the client_id is the same that was specified in the auth_callback that generated the JWT token](./spec/acceptance/realtime/auth_spec.rb#L1224)
169
+ * [the client_id is the same that was specified in the auth_callback that generated the JWT token](./spec/acceptance/realtime/auth_spec.rb#L1227)
170
170
  * when the JWT token request includes a subscribe-only capability
171
- * [client fails to publish to a channel with subscribe-only capability and publishes successfully on a channel with permissions](./spec/acceptance/realtime/auth_spec.rb#L1242)
171
+ * [client fails to publish to a channel with subscribe-only capability and publishes successfully on a channel with permissions](./spec/acceptance/realtime/auth_spec.rb#L1245)
172
172
 
173
173
  ### Ably::Realtime::Channel#history
174
174
  _(see [spec/acceptance/realtime/channel_history_spec.rb](./spec/acceptance/realtime/channel_history_spec.rb))_
@@ -183,15 +183,15 @@ _(see [spec/acceptance/realtime/channel_history_spec.rb](./spec/acceptance/realt
183
183
  * [retrieves history forwards with pagination through :limit option](./spec/acceptance/realtime/channel_history_spec.rb#L94)
184
184
  * [retrieves history backwards with pagination through :limit option](./spec/acceptance/realtime/channel_history_spec.rb#L103)
185
185
  * in multiple ProtocolMessages
186
- * FAILED: ~~[retrieves limited history forwards with pagination](./spec/acceptance/realtime/channel_history_spec.rb#L114)~~
187
- * FAILED: ~~[retrieves limited history backwards with pagination](./spec/acceptance/realtime/channel_history_spec.rb#L125)~~
186
+ * [retrieves limited history forwards with pagination](./spec/acceptance/realtime/channel_history_spec.rb#L114)
187
+ * [retrieves limited history backwards with pagination](./spec/acceptance/realtime/channel_history_spec.rb#L127)
188
188
  * and REST history
189
- * [return the same results with unique matching message IDs](./spec/acceptance/realtime/channel_history_spec.rb#L141)
189
+ * [return the same results with unique matching message IDs](./spec/acceptance/realtime/channel_history_spec.rb#L145)
190
190
  * with option until_attach: true
191
- * [retrieves all messages before channel was attached](./spec/acceptance/realtime/channel_history_spec.rb#L166)
192
- * [fails the deferrable unless the state is attached](./spec/acceptance/realtime/channel_history_spec.rb#L215)
191
+ * [retrieves all messages before channel was attached](./spec/acceptance/realtime/channel_history_spec.rb#L172)
192
+ * [fails the deferrable unless the state is attached](./spec/acceptance/realtime/channel_history_spec.rb#L221)
193
193
  * and two pages of messages
194
- * [retrieves two pages of messages before channel was attached](./spec/acceptance/realtime/channel_history_spec.rb#L181)
194
+ * [retrieves two pages of messages before channel was attached](./spec/acceptance/realtime/channel_history_spec.rb#L187)
195
195
 
196
196
  ### Ably::Realtime::Channel
197
197
  _(see [spec/acceptance/realtime/channel_spec.rb](./spec/acceptance/realtime/channel_spec.rb))_
@@ -201,286 +201,287 @@ _(see [spec/acceptance/realtime/channel_spec.rb](./spec/acceptance/realtime/chan
201
201
  * [remains initialized when accessing a channel](./spec/acceptance/realtime/channel_spec.rb#L29)
202
202
  * [opens a connection implicitly on #attach](./spec/acceptance/realtime/channel_spec.rb#L37)
203
203
  * #attach
204
- * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/channel_spec.rb#L142)
205
- * [calls the SafeDeferrable callback on success (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L147)
204
+ * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/channel_spec.rb#L152)
205
+ * [calls the SafeDeferrable callback on success (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L157)
206
206
  * when initialized
207
207
  * [emits attaching then attached events](./spec/acceptance/realtime/channel_spec.rb#L48)
208
208
  * [ignores subsequent #attach calls but calls the success callback if provided](./spec/acceptance/realtime/channel_spec.rb#L58)
209
209
  * [attaches to a channel](./spec/acceptance/realtime/channel_spec.rb#L71)
210
210
  * [attaches to a channel and calls the provided block (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L79)
211
- * [sends an ATTACH and waits for an ATTACHED (#RTL4c)](./spec/acceptance/realtime/channel_spec.rb#L86)
212
- * [implicitly attaches the channel (#RTL7c)](./spec/acceptance/realtime/channel_spec.rb#L110)
211
+ * [sets attach_serial property after the attachment (#RTL15a)](./spec/acceptance/realtime/channel_spec.rb#L86)
212
+ * [sends an ATTACH and waits for an ATTACHED (#RTL4c)](./spec/acceptance/realtime/channel_spec.rb#L96)
213
+ * [implicitly attaches the channel (#RTL7c)](./spec/acceptance/realtime/channel_spec.rb#L120)
213
214
  * when the implicit channel attach fails
214
- * [registers the listener anyway (#RTL7c)](./spec/acceptance/realtime/channel_spec.rb#L127)
215
+ * [registers the listener anyway (#RTL7c)](./spec/acceptance/realtime/channel_spec.rb#L137)
215
216
  * when an ATTACHED acknowledge is not received on the current connection
216
- * [sends another ATTACH each time the connection becomes connected](./spec/acceptance/realtime/channel_spec.rb#L158)
217
+ * [sends another ATTACH each time the connection becomes connected](./spec/acceptance/realtime/channel_spec.rb#L168)
217
218
  * when state is :attached
218
- * [does nothing (#RTL4a)](./spec/acceptance/realtime/channel_spec.rb#L196)
219
+ * [does nothing (#RTL4a)](./spec/acceptance/realtime/channel_spec.rb#L206)
219
220
  * when state is :failed
220
- * [reattaches and sets the errorReason to nil (#RTL4g)](./spec/acceptance/realtime/channel_spec.rb#L216)
221
+ * [reattaches and sets the errorReason to nil (#RTL4g)](./spec/acceptance/realtime/channel_spec.rb#L226)
221
222
  * when state is :detaching
222
- * [does the attach operation after the completion of the pending request (#RTL4h)](./spec/acceptance/realtime/channel_spec.rb#L231)
223
+ * [does the attach operation after the completion of the pending request (#RTL4h)](./spec/acceptance/realtime/channel_spec.rb#L241)
223
224
  * with many connections and many channels on each simultaneously
224
- * [attaches all channels](./spec/acceptance/realtime/channel_spec.rb#L259)
225
+ * [attaches all channels](./spec/acceptance/realtime/channel_spec.rb#L269)
225
226
  * failure as a result of insufficient key permissions
226
- * [emits failed event (#RTL4e)](./spec/acceptance/realtime/channel_spec.rb#L291)
227
- * [calls the errback of the returned Deferrable (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L300)
228
- * [updates the error_reason](./spec/acceptance/realtime/channel_spec.rb#L308)
227
+ * [emits failed event (#RTL4e)](./spec/acceptance/realtime/channel_spec.rb#L300)
228
+ * [calls the errback of the returned Deferrable (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L309)
229
+ * [updates the error_reason](./spec/acceptance/realtime/channel_spec.rb#L317)
229
230
  * and subsequent authorisation with suitable permissions
230
- * [attaches to the channel successfully and resets the channel error_reason](./spec/acceptance/realtime/channel_spec.rb#L317)
231
+ * [attaches to the channel successfully and resets the channel error_reason](./spec/acceptance/realtime/channel_spec.rb#L326)
231
232
  * with connection state
232
- * [is initialized (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L336)
233
- * [is connecting (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L343)
234
- * [is disconnected (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L351)
233
+ * [is initialized (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L345)
234
+ * [is connecting (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L352)
235
+ * [is disconnected (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L360)
235
236
  * #detach
236
237
  * when state is :attached
237
- * [it detaches from a channel (#RTL5d)](./spec/acceptance/realtime/channel_spec.rb#L366)
238
- * [detaches from a channel and calls the provided block (#RTL5d, #RTL5e)](./spec/acceptance/realtime/channel_spec.rb#L376)
239
- * [emits :detaching then :detached events](./spec/acceptance/realtime/channel_spec.rb#L386)
240
- * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/channel_spec.rb#L398)
241
- * [calls the Deferrable callback on success](./spec/acceptance/realtime/channel_spec.rb#L405)
238
+ * [it detaches from a channel (#RTL5d)](./spec/acceptance/realtime/channel_spec.rb#L375)
239
+ * [detaches from a channel and calls the provided block (#RTL5d, #RTL5e)](./spec/acceptance/realtime/channel_spec.rb#L385)
240
+ * [emits :detaching then :detached events](./spec/acceptance/realtime/channel_spec.rb#L395)
241
+ * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/channel_spec.rb#L407)
242
+ * [calls the Deferrable callback on success](./spec/acceptance/realtime/channel_spec.rb#L414)
242
243
  * and DETACHED message is not received within realtime request timeout
243
- * [fails the deferrable and returns to the previous state (#RTL5f, #RTL5e)](./spec/acceptance/realtime/channel_spec.rb#L419)
244
+ * [fails the deferrable and returns to the previous state (#RTL5f, #RTL5e)](./spec/acceptance/realtime/channel_spec.rb#L428)
244
245
  * when state is :failed
245
- * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L439)
246
+ * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L448)
246
247
  * when state is :attaching
247
- * [waits for the attach to complete and then moves to detached](./spec/acceptance/realtime/channel_spec.rb#L452)
248
+ * [waits for the attach to complete and then moves to detached](./spec/acceptance/realtime/channel_spec.rb#L461)
248
249
  * when state is :detaching
249
- * [ignores subsequent #detach calls but calls the callback if provided (#RTL5i)](./spec/acceptance/realtime/channel_spec.rb#L469)
250
+ * [ignores subsequent #detach calls but calls the callback if provided (#RTL5i)](./spec/acceptance/realtime/channel_spec.rb#L478)
250
251
  * when state is :suspended
251
- * [moves the channel state immediately to DETACHED state (#RTL5j)](./spec/acceptance/realtime/channel_spec.rb#L486)
252
+ * [moves the channel state immediately to DETACHED state (#RTL5j)](./spec/acceptance/realtime/channel_spec.rb#L495)
252
253
  * when state is :initialized
253
- * [does nothing as there is no channel to detach (#RTL5a)](./spec/acceptance/realtime/channel_spec.rb#L506)
254
- * [returns a valid deferrable](./spec/acceptance/realtime/channel_spec.rb#L514)
254
+ * [does nothing as there is no channel to detach (#RTL5a)](./spec/acceptance/realtime/channel_spec.rb#L515)
255
+ * [returns a valid deferrable](./spec/acceptance/realtime/channel_spec.rb#L523)
255
256
  * when state is :detached
256
- * [does nothing as the channel is detached (#RTL5a)](./spec/acceptance/realtime/channel_spec.rb#L524)
257
+ * [does nothing as the channel is detached (#RTL5a)](./spec/acceptance/realtime/channel_spec.rb#L533)
257
258
  * when connection state is
258
259
  * closing
259
- * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L541)
260
+ * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L550)
260
261
  * failed and channel is failed
261
- * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L561)
262
+ * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L570)
262
263
  * failed and channel is detached
263
- * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L583)
264
+ * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L592)
264
265
  * initialized
265
- * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L603)
266
+ * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L612)
266
267
  * connecting
267
- * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L618)
268
+ * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L627)
268
269
  * disconnected
269
- * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L637)
270
+ * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L646)
270
271
  * automatic channel recovery
271
272
  * when an ATTACH request times out
272
- * [moves to the SUSPENDED state (#RTL4f)](./spec/acceptance/realtime/channel_spec.rb#L664)
273
+ * [moves to the SUSPENDED state (#RTL4f)](./spec/acceptance/realtime/channel_spec.rb#L673)
273
274
  * if a subsequent ATTACHED is received on an ATTACHED channel
274
- * [ignores the additional ATTACHED if resumed is true (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L678)
275
- * [emits an UPDATE only when resumed is true (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L692)
276
- * [emits an UPDATE when resumed is true and includes the reason error from the ProtocolMessage (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L708)
275
+ * [ignores the additional ATTACHED if resumed is true (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L687)
276
+ * [emits an UPDATE only when resumed is true (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L701)
277
+ * [emits an UPDATE when resumed is true and includes the reason error from the ProtocolMessage (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L717)
277
278
  * #publish
278
279
  * when channel is attached (#RTL6c1)
279
- * [publishes messages](./spec/acceptance/realtime/channel_spec.rb#L733)
280
+ * [publishes messages](./spec/acceptance/realtime/channel_spec.rb#L742)
280
281
  * when channel is not attached in state Initializing (#RTL6c1)
281
- * [publishes messages immediately and does not implicitly attach (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L745)
282
+ * [publishes messages immediately and does not implicitly attach (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L754)
282
283
  * when channel is Attaching (#RTL6c1)
283
- * [publishes messages immediately (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L762)
284
+ * [publishes messages immediately (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L771)
284
285
  * when channel is Detaching (#RTL6c1)
285
- * [publishes messages immediately (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L787)
286
+ * [publishes messages immediately (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L796)
286
287
  * when channel is Detached (#RTL6c1)
287
- * [publishes messages immediately (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L814)
288
+ * [publishes messages immediately (#RTL6c1)](./spec/acceptance/realtime/channel_spec.rb#L823)
288
289
  * with :queue_messages client option set to false (#RTL6c4)
289
290
  * and connection state connected (#RTL6c4)
290
- * [publishes the message](./spec/acceptance/realtime/channel_spec.rb#L845)
291
+ * [publishes the message](./spec/acceptance/realtime/channel_spec.rb#L854)
291
292
  * and connection state initialized (#RTL6c4)
292
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L854)
293
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L863)
293
294
  * and connection state connecting (#RTL6c4)
294
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L864)
295
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L873)
295
296
  * and connection state disconnected (#RTL6c4)
296
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L879)
297
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L888)
297
298
  * and connection state suspended (#RTL6c4)
298
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L879)
299
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L888)
299
300
  * and connection state closing (#RTL6c4)
300
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L879)
301
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L888)
301
302
  * and connection state closed (#RTL6c4)
302
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L879)
303
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L888)
303
304
  * and the channel state is failed (#RTL6c4)
304
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L900)
305
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L909)
305
306
  * with name and data arguments
306
- * [publishes the message and return true indicating success](./spec/acceptance/realtime/channel_spec.rb#L918)
307
+ * [publishes the message and return true indicating success](./spec/acceptance/realtime/channel_spec.rb#L927)
307
308
  * and additional attributes
308
- * [publishes the message with the attributes and return true indicating success](./spec/acceptance/realtime/channel_spec.rb#L931)
309
+ * [publishes the message with the attributes and return true indicating success](./spec/acceptance/realtime/channel_spec.rb#L940)
309
310
  * and additional invalid attributes
310
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L944)
311
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L953)
311
312
  * with an array of Hash objects with :name and :data attributes
312
- * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb#L958)
313
+ * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb#L967)
313
314
  * with an array of Message objects
314
- * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb#L986)
315
+ * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb#L995)
315
316
  * nil attributes
316
317
  * when name is nil
317
- * [publishes the message without a name attribute in the payload](./spec/acceptance/realtime/channel_spec.rb#L1010)
318
+ * [publishes the message without a name attribute in the payload](./spec/acceptance/realtime/channel_spec.rb#L1019)
318
319
  * when data is nil
319
- * [publishes the message without a data attribute in the payload](./spec/acceptance/realtime/channel_spec.rb#L1033)
320
+ * [publishes the message without a data attribute in the payload](./spec/acceptance/realtime/channel_spec.rb#L1043)
320
321
  * with neither name or data attributes
321
- * [publishes the message without any attributes in the payload](./spec/acceptance/realtime/channel_spec.rb#L1056)
322
+ * [publishes the message without any attributes in the payload](./spec/acceptance/realtime/channel_spec.rb#L1067)
322
323
  * with two invalid message out of 12
323
324
  * before client_id is known (validated)
324
- * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb#L1080)
325
+ * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb#L1091)
325
326
  * when client_id is known (validated)
326
- * [raises an exception](./spec/acceptance/realtime/channel_spec.rb#L1100)
327
+ * [raises an exception](./spec/acceptance/realtime/channel_spec.rb#L1111)
327
328
  * only invalid messages
328
329
  * before client_id is known (validated)
329
- * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb#L1119)
330
+ * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb#L1130)
330
331
  * when client_id is known (validated)
331
- * [raises an exception](./spec/acceptance/realtime/channel_spec.rb#L1138)
332
+ * [raises an exception](./spec/acceptance/realtime/channel_spec.rb#L1149)
332
333
  * with many many messages and many connections simultaneously
333
- * [publishes all messages, all success callbacks are called, and a history request confirms all messages were published](./spec/acceptance/realtime/channel_spec.rb#L1152)
334
+ * [publishes all messages, all success callbacks are called, and a history request confirms all messages were published](./spec/acceptance/realtime/channel_spec.rb#L1163)
334
335
  * with more than allowed messages in a single publish
335
- * [rejects the publish](./spec/acceptance/realtime/channel_spec.rb#L1175)
336
+ * [rejects the publish](./spec/acceptance/realtime/channel_spec.rb#L1186)
336
337
  * identified clients
337
338
  * when authenticated with a wildcard client_id
338
339
  * with a valid client_id in the message
339
- * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1195)
340
+ * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1206)
340
341
  * with a wildcard client_id in the message
341
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1207)
342
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1218)
342
343
  * with a non-String client_id in the message
343
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1214)
344
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1225)
344
345
  * with an empty client_id in the message
345
- * [succeeds and publishes without a client_id](./spec/acceptance/realtime/channel_spec.rb#L1221)
346
+ * [succeeds and publishes without a client_id](./spec/acceptance/realtime/channel_spec.rb#L1232)
346
347
  * when authenticated with a Token string with an implicit client_id
347
348
  * before the client is CONNECTED and the client's identity has been obtained
348
349
  * with a valid client_id in the message
349
- * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1241)
350
+ * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1252)
350
351
  * with an invalid client_id in the message
351
- * [succeeds in the client library but then fails when delivered to Ably](./spec/acceptance/realtime/channel_spec.rb#L1254)
352
+ * [succeeds in the client library but then fails when delivered to Ably](./spec/acceptance/realtime/channel_spec.rb#L1265)
352
353
  * with an empty client_id in the message
353
- * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1265)
354
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1276)
354
355
  * after the client is CONNECTED and the client's identity is known
355
356
  * with a valid client_id in the message
356
- * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1279)
357
+ * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1290)
357
358
  * with an invalid client_id in the message
358
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1293)
359
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1304)
359
360
  * with an empty client_id in the message
360
- * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1302)
361
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1313)
361
362
  * when authenticated with a valid client_id
362
363
  * with a valid client_id
363
- * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1324)
364
+ * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1335)
364
365
  * with a wildcard client_id in the message
365
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1336)
366
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1347)
366
367
  * with an invalid client_id in the message
367
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1343)
368
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1354)
368
369
  * with an empty client_id in the message
369
- * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1350)
370
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1361)
370
371
  * when anonymous and no client_id
371
372
  * with a client_id in the message
372
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1369)
373
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1380)
373
374
  * with a wildcard client_id in the message
374
- * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1376)
375
+ * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1387)
375
376
  * with an empty client_id in the message
376
- * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1383)
377
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1394)
377
378
  * #subscribe
378
379
  * with an event argument
379
- * [subscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1399)
380
+ * [subscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1410)
380
381
  * before attach
381
- * [receives messages as soon as attached](./spec/acceptance/realtime/channel_spec.rb#L1409)
382
+ * [receives messages as soon as attached](./spec/acceptance/realtime/channel_spec.rb#L1420)
382
383
  * with no event argument
383
- * [subscribes for all events](./spec/acceptance/realtime/channel_spec.rb#L1423)
384
+ * [subscribes for all events](./spec/acceptance/realtime/channel_spec.rb#L1434)
384
385
  * with a callback that raises an exception
385
- * [logs the error and continues](./spec/acceptance/realtime/channel_spec.rb#L1435)
386
+ * [logs the error and continues](./spec/acceptance/realtime/channel_spec.rb#L1446)
386
387
  * many times with different event names
387
- * [filters events accordingly to each callback](./spec/acceptance/realtime/channel_spec.rb#L1454)
388
+ * [filters events accordingly to each callback](./spec/acceptance/realtime/channel_spec.rb#L1465)
388
389
  * #unsubscribe
389
390
  * with an event argument
390
- * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1477)
391
+ * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1488)
391
392
  * with no event argument
392
- * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1490)
393
+ * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1501)
393
394
  * when connection state changes to
394
395
  * :failed
395
396
  * an :attaching channel
396
- * [transitions state to :failed (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1513)
397
+ * [transitions state to :failed (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1524)
397
398
  * an :attached channel
398
- * [transitions state to :failed (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1530)
399
- * [updates the channel error_reason (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1542)
399
+ * [transitions state to :failed (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1541)
400
+ * [updates the channel error_reason (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1553)
400
401
  * a :detached channel
401
- * [remains in the :detached state (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1556)
402
+ * [remains in the :detached state (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1567)
402
403
  * a :failed channel
403
- * [remains in the :failed state and ignores the failure error (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1575)
404
+ * [remains in the :failed state and ignores the failure error (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1586)
404
405
  * a channel ATTACH request
405
- * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1595)
406
+ * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1606)
406
407
  * :closed
407
408
  * an :attached channel
408
- * [transitions state to :detached (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1611)
409
+ * [transitions state to :detached (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1622)
409
410
  * an :attaching channel (#RTL3b)
410
- * [transitions state to :detached](./spec/acceptance/realtime/channel_spec.rb#L1622)
411
+ * [transitions state to :detached](./spec/acceptance/realtime/channel_spec.rb#L1633)
411
412
  * a :detached channel
412
- * [remains in the :detached state (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1637)
413
+ * [remains in the :detached state (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1648)
413
414
  * a :failed channel
414
- * [remains in the :failed state and retains the error_reason (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1657)
415
+ * [remains in the :failed state and retains the error_reason (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1668)
415
416
  * a channel ATTACH request when connection CLOSED
416
- * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1677)
417
+ * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1688)
417
418
  * a channel ATTACH request when connection CLOSING
418
- * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1691)
419
+ * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1702)
419
420
  * :suspended
420
421
  * an :attaching channel
421
- * [transitions state to :suspended (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1707)
422
+ * [transitions state to :suspended (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1718)
422
423
  * an :attached channel
423
- * [transitions state to :suspended (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1721)
424
- * [transitions state automatically to :attaching once the connection is re-established (#RTN15c3)](./spec/acceptance/realtime/channel_spec.rb#L1730)
424
+ * [transitions state to :suspended (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1732)
425
+ * [transitions state automatically to :attaching once the connection is re-established (#RTN15c3)](./spec/acceptance/realtime/channel_spec.rb#L1741)
425
426
  * a :detached channel
426
- * [remains in the :detached state (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1744)
427
+ * [remains in the :detached state (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1755)
427
428
  * a :failed channel
428
- * [remains in the :failed state and retains the error_reason (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1764)
429
+ * [remains in the :failed state and retains the error_reason (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1775)
429
430
  * a channel ATTACH request when connection SUSPENDED (#RTL4b)
430
- * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L1786)
431
+ * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L1797)
431
432
  * :connected
432
433
  * a :suspended channel
433
- * [is automatically reattached (#RTL3d)](./spec/acceptance/realtime/channel_spec.rb#L1802)
434
+ * [is automatically reattached (#RTL3d)](./spec/acceptance/realtime/channel_spec.rb#L1813)
434
435
  * when re-attach attempt fails
435
- * [returns to a suspended state (#RTL3d)](./spec/acceptance/realtime/channel_spec.rb#L1819)
436
+ * [returns to a suspended state (#RTL3d)](./spec/acceptance/realtime/channel_spec.rb#L1830)
436
437
  * :disconnected
437
438
  * with an initialized channel
438
- * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1845)
439
+ * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1856)
439
440
  * with an attaching channel
440
- * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1858)
441
+ * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1869)
441
442
  * with an attached channel
442
- * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1873)
443
+ * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1884)
443
444
  * with a detached channel
444
- * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1885)
445
+ * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1896)
445
446
  * with a failed channel
446
- * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1907)
447
+ * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1918)
447
448
  * #presence
448
- * [returns a Ably::Realtime::Presence object](./spec/acceptance/realtime/channel_spec.rb#L1922)
449
+ * [returns a Ably::Realtime::Presence object](./spec/acceptance/realtime/channel_spec.rb#L1933)
449
450
  * channel state change
450
- * [emits a ChannelStateChange object](./spec/acceptance/realtime/channel_spec.rb#L1929)
451
+ * [emits a ChannelStateChange object](./spec/acceptance/realtime/channel_spec.rb#L1940)
451
452
  * ChannelStateChange object
452
- * [has current state](./spec/acceptance/realtime/channel_spec.rb#L1938)
453
- * [has a previous state](./spec/acceptance/realtime/channel_spec.rb#L1947)
454
- * [has the event that generated the state change (#TA5)](./spec/acceptance/realtime/channel_spec.rb#L1956)
455
- * [has an empty reason when there is no error](./spec/acceptance/realtime/channel_spec.rb#L1974)
453
+ * [has current state](./spec/acceptance/realtime/channel_spec.rb#L1949)
454
+ * [has a previous state](./spec/acceptance/realtime/channel_spec.rb#L1958)
455
+ * [has the event that generated the state change (#TA5)](./spec/acceptance/realtime/channel_spec.rb#L1967)
456
+ * [has an empty reason when there is no error](./spec/acceptance/realtime/channel_spec.rb#L1985)
456
457
  * on failure
457
- * [has a reason Error object when there is an error on the channel](./spec/acceptance/realtime/channel_spec.rb#L1987)
458
+ * [has a reason Error object when there is an error on the channel](./spec/acceptance/realtime/channel_spec.rb#L1998)
458
459
  * #resume (#RTL2f)
459
- * [is false when a channel first attaches](./spec/acceptance/realtime/channel_spec.rb#L2000)
460
- * [is true when a connection is recovered and the channel is attached](./spec/acceptance/realtime/channel_spec.rb#L2008)
461
- * [is false when a connection fails to recover and the channel is attached](./spec/acceptance/realtime/channel_spec.rb#L2027)
460
+ * [is false when a channel first attaches](./spec/acceptance/realtime/channel_spec.rb#L2013)
461
+ * [is true when a connection is recovered and the channel is attached](./spec/acceptance/realtime/channel_spec.rb#L2021)
462
+ * [is false when a connection fails to recover and the channel is attached](./spec/acceptance/realtime/channel_spec.rb#L2040)
462
463
  * when a resume fails
463
- * [is false when a resume fails to recover and the channel is automatically re-attached](./spec/acceptance/realtime/channel_spec.rb#L2049)
464
+ * [is false when a resume fails to recover and the channel is automatically re-attached](./spec/acceptance/realtime/channel_spec.rb#L2062)
464
465
  * moves to
465
466
  * suspended
466
- * [all queued messages fail with NACK (#RTL11)](./spec/acceptance/realtime/channel_spec.rb#L2072)
467
- * [all published messages awaiting an ACK do nothing (#RTL11a)](./spec/acceptance/realtime/channel_spec.rb#L2095)
467
+ * [all queued messages fail with NACK (#RTL11)](./spec/acceptance/realtime/channel_spec.rb#L2085)
468
+ * [all published messages awaiting an ACK do nothing (#RTL11a)](./spec/acceptance/realtime/channel_spec.rb#L2108)
468
469
  * failed
469
- * [all queued messages fail with NACK (#RTL11)](./spec/acceptance/realtime/channel_spec.rb#L2072)
470
- * [all published messages awaiting an ACK do nothing (#RTL11a)](./spec/acceptance/realtime/channel_spec.rb#L2095)
470
+ * [all queued messages fail with NACK (#RTL11)](./spec/acceptance/realtime/channel_spec.rb#L2085)
471
+ * [all published messages awaiting an ACK do nothing (#RTL11a)](./spec/acceptance/realtime/channel_spec.rb#L2108)
471
472
  * when it receives a server-initiated DETACHED (#RTL13)
472
473
  * and channel is initialized (#RTL13)
473
- * [does nothing](./spec/acceptance/realtime/channel_spec.rb#L2130)
474
+ * [does nothing](./spec/acceptance/realtime/channel_spec.rb#L2143)
474
475
  * and channel is failed
475
- * [does nothing (#RTL13)](./spec/acceptance/realtime/channel_spec.rb#L2151)
476
+ * [does nothing (#RTL13)](./spec/acceptance/realtime/channel_spec.rb#L2164)
476
477
  * and channel is attached
477
- * [reattaches immediately (#RTL13a)](./spec/acceptance/realtime/channel_spec.rb#L2167)
478
+ * [reattaches immediately (#RTL13a)](./spec/acceptance/realtime/channel_spec.rb#L2180)
478
479
  * and channel is suspended
479
- * [reattaches immediately (#RTL13a)](./spec/acceptance/realtime/channel_spec.rb#L2183)
480
+ * [reattaches immediately (#RTL13a)](./spec/acceptance/realtime/channel_spec.rb#L2196)
480
481
  * and channel is attaching
481
- * [will move to the SUSPENDED state and then attempt to ATTACH with the ATTACHING state (#RTL13b)](./spec/acceptance/realtime/channel_spec.rb#L2205)
482
+ * [will move to the SUSPENDED state and then attempt to ATTACH with the ATTACHING state (#RTL13b)](./spec/acceptance/realtime/channel_spec.rb#L2218)
482
483
  * when it receives an ERROR ProtocolMessage
483
- * [should transition to the failed state and the error_reason should be set (#RTL14)](./spec/acceptance/realtime/channel_spec.rb#L2253)
484
+ * [should transition to the failed state and the error_reason should be set (#RTL14)](./spec/acceptance/realtime/channel_spec.rb#L2266)
484
485
 
485
486
  ### Ably::Realtime::Channels
486
487
  _(see [spec/acceptance/realtime/channels_spec.rb](./spec/acceptance/realtime/channels_spec.rb))_
@@ -519,63 +520,67 @@ _(see [spec/acceptance/realtime/client_spec.rb](./spec/acceptance/realtime/clien
519
520
  * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L69)
520
521
  * with valid :key and :use_token_auth option set to true
521
522
  * [automatically authorizes on connect and generates a token](./spec/acceptance/realtime/client_spec.rb#L82)
522
- * with client_id
523
- * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L95)
524
523
  * with TLS disabled
525
524
  * and a pre-generated Token provided with the :token option
526
525
  * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L69)
527
526
  * with valid :key and :use_token_auth option set to true
528
527
  * [automatically authorizes on connect and generates a token](./spec/acceptance/realtime/client_spec.rb#L82)
529
- * with client_id
530
- * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L95)
531
528
  * with a Proc for the :auth_callback option
532
- * [calls the Proc](./spec/acceptance/realtime/client_spec.rb#L120)
533
- * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/realtime/client_spec.rb#L127)
529
+ * [calls the Proc](./spec/acceptance/realtime/client_spec.rb#L104)
530
+ * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/realtime/client_spec.rb#L111)
534
531
  * when the returned token has a client_id
535
- * [sets Auth#client_id to the new token's client_id immediately when connecting](./spec/acceptance/realtime/client_spec.rb#L135)
536
- * [sets Client#client_id to the new token's client_id immediately when connecting](./spec/acceptance/realtime/client_spec.rb#L143)
532
+ * [sets Auth#client_id to the new token's client_id immediately when connecting](./spec/acceptance/realtime/client_spec.rb#L119)
533
+ * [sets Client#client_id to the new token's client_id immediately when connecting](./spec/acceptance/realtime/client_spec.rb#L127)
537
534
  * with a wildcard client_id token
538
535
  * and an explicit client_id in ClientOptions
539
- * [allows uses the explicit client_id in the connection](./spec/acceptance/realtime/client_spec.rb#L161)
536
+ * [allows uses the explicit client_id in the connection](./spec/acceptance/realtime/client_spec.rb#L145)
540
537
  * and client_id omitted in ClientOptions
541
- * [uses the token provided clientId in the connection](./spec/acceptance/realtime/client_spec.rb#L177)
538
+ * [uses the token provided clientId in the connection](./spec/acceptance/realtime/client_spec.rb#L161)
542
539
  * with an invalid wildcard "*" :client_id
543
- * [raises an exception](./spec/acceptance/realtime/client_spec.rb#L193)
540
+ * [raises an exception](./spec/acceptance/realtime/client_spec.rb#L177)
544
541
  * realtime connection settings
545
542
  * defaults
546
- * [disconnected_retry_timeout is 15s](./spec/acceptance/realtime/client_spec.rb#L202)
547
- * [suspended_retry_timeout is 30s](./spec/acceptance/realtime/client_spec.rb#L207)
543
+ * [disconnected_retry_timeout is 15s](./spec/acceptance/realtime/client_spec.rb#L186)
544
+ * [suspended_retry_timeout is 30s](./spec/acceptance/realtime/client_spec.rb#L191)
548
545
  * overriden in ClientOptions
549
- * [disconnected_retry_timeout is updated](./spec/acceptance/realtime/client_spec.rb#L216)
550
- * [suspended_retry_timeout is updated](./spec/acceptance/realtime/client_spec.rb#L221)
546
+ * [disconnected_retry_timeout is updated](./spec/acceptance/realtime/client_spec.rb#L200)
547
+ * [suspended_retry_timeout is updated](./spec/acceptance/realtime/client_spec.rb#L205)
551
548
  * #connection
552
- * [provides access to the Connection object](./spec/acceptance/realtime/client_spec.rb#L230)
549
+ * [provides access to the Connection object](./spec/acceptance/realtime/client_spec.rb#L214)
553
550
  * #channels
554
- * [provides access to the Channels collection object](./spec/acceptance/realtime/client_spec.rb#L237)
551
+ * [provides access to the Channels collection object](./spec/acceptance/realtime/client_spec.rb#L221)
555
552
  * #auth
556
- * [provides access to the Realtime::Auth object](./spec/acceptance/realtime/client_spec.rb#L244)
553
+ * [provides access to the Realtime::Auth object](./spec/acceptance/realtime/client_spec.rb#L228)
557
554
  * #request (#RSC19*)
558
555
  * get
559
- * [returns an HttpPaginatedResponse object](./spec/acceptance/realtime/client_spec.rb#L254)
556
+ * [returns an HttpPaginatedResponse object](./spec/acceptance/realtime/client_spec.rb#L240)
560
557
  * 404 request to invalid URL
561
- * [returns an object with 404 status code and error message](./spec/acceptance/realtime/client_spec.rb#L263)
558
+ * [returns an object with 404 status code and error message](./spec/acceptance/realtime/client_spec.rb#L249)
562
559
  * paged results
563
- * [provides paging](./spec/acceptance/realtime/client_spec.rb#L277)
560
+ * [provides paging](./spec/acceptance/realtime/client_spec.rb#L263)
561
+ * post
562
+ * [supports post](./spec/acceptance/realtime/client_spec.rb#L294)
563
+ * delete
564
+ * [supports delete](./spec/acceptance/realtime/client_spec.rb#L308)
565
+ * patch
566
+ * [supports patch](./spec/acceptance/realtime/client_spec.rb#L325)
567
+ * put
568
+ * [supports put](./spec/acceptance/realtime/client_spec.rb#L349)
564
569
  * #publish (#TBC)
565
- * [publishing a message implicity connects and publishes the message successfully on the provided channel](./spec/acceptance/realtime/client_spec.rb#L311)
566
- * [publishing does not result in a channel being created](./spec/acceptance/realtime/client_spec.rb#L322)
567
- * [publishing supports an array of Message objects](./spec/acceptance/realtime/client_spec.rb#L349)
568
- * [publishing supports an array of Hash objects](./spec/acceptance/realtime/client_spec.rb#L360)
569
- * [publishing on a closed connection fails](./spec/acceptance/realtime/client_spec.rb#L371)
570
+ * [publishing a message implicity connects and publishes the message successfully on the provided channel](./spec/acceptance/realtime/client_spec.rb#L367)
571
+ * [publishing does not result in a channel being created](./spec/acceptance/realtime/client_spec.rb#L379)
572
+ * [publishing supports an array of Message objects](./spec/acceptance/realtime/client_spec.rb#L407)
573
+ * [publishing supports an array of Hash objects](./spec/acceptance/realtime/client_spec.rb#L419)
574
+ * [publishing on a closed connection fails](./spec/acceptance/realtime/client_spec.rb#L431)
570
575
  * with extras
571
- * [publishing supports extras](./spec/acceptance/realtime/client_spec.rb#L338)
576
+ * [publishing supports extras](./spec/acceptance/realtime/client_spec.rb#L395)
572
577
  * queue_messages ClientOption
573
578
  * when true
574
- * [will queue messages whilst connecting and publish once connected](./spec/acceptance/realtime/client_spec.rb#L387)
579
+ * [will queue messages whilst connecting and publish once connected](./spec/acceptance/realtime/client_spec.rb#L447)
575
580
  * when false
576
- * [will reject messages on an initializing connection](./spec/acceptance/realtime/client_spec.rb#L404)
581
+ * [will reject messages on an initializing connection](./spec/acceptance/realtime/client_spec.rb#L464)
577
582
  * with more than allowed messages in a single publish
578
- * [rejects the publish](./spec/acceptance/realtime/client_spec.rb#L421)
583
+ * [rejects the publish](./spec/acceptance/realtime/client_spec.rb#L481)
579
584
 
580
585
  ### Ably::Realtime::Connection failures
581
586
  _(see [spec/acceptance/realtime/connection_failures_spec.rb](./spec/acceptance/realtime/connection_failures_spec.rb))_
@@ -592,331 +597,348 @@ _(see [spec/acceptance/realtime/connection_failures_spec.rb](./spec/acceptance/r
592
597
  * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L62)
593
598
  * request fails due to invalid content
594
599
  * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L92)
600
+ * request fails due to slow response and subsequent timeout
601
+ * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L127)
602
+ * request fails once due to slow response but succeeds the second time
603
+ * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L165)
595
604
  * existing CONNECTED connection
596
605
  * authorize request failure leaves connection in existing condition
597
- * [the connection remains in the CONNECTED state and authorize fails (#RSA4c, #RSA4c1, #RSA4c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L120)
606
+ * [the connection remains in the CONNECTED state and authorize fails (#RSA4c, #RSA4c1, #RSA4c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L186)
598
607
  * with auth_callback
599
608
  * opening a new connection
600
609
  * when callback fails due to an exception
601
- * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L148)
610
+ * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L214)
602
611
  * existing CONNECTED connection
603
612
  * when callback fails due to the request taking longer than realtime_request_timeout
604
- * [the authorization request fails as configured in the realtime_request_timeout (#RSA4c, #RSA4c1, #RSA4c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L179)
613
+ * [the authorization request fails as configured in the realtime_request_timeout (#RSA4c, #RSA4c1, #RSA4c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L245)
605
614
  * automatic connection retry
606
615
  * with invalid WebSocket host
607
616
  * when disconnected
608
- * [enters the suspended state after multiple attempts to connect](./spec/acceptance/realtime/connection_failures_spec.rb#L244)
617
+ * [enters the suspended state after multiple attempts to connect](./spec/acceptance/realtime/connection_failures_spec.rb#L310)
609
618
  * for the first time
610
- * [reattempts connection immediately and then waits disconnected_retry_timeout for a subsequent attempt](./spec/acceptance/realtime/connection_failures_spec.rb#L265)
619
+ * [reattempts connection immediately and then waits disconnected_retry_timeout for a subsequent attempt](./spec/acceptance/realtime/connection_failures_spec.rb#L331)
611
620
  * #close
612
- * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L282)
621
+ * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L348)
613
622
  * when connection state is :suspended
614
- * [stays in the suspended state after any number of reconnection attempts](./spec/acceptance/realtime/connection_failures_spec.rb#L301)
623
+ * [stays in the suspended state after any number of reconnection attempts](./spec/acceptance/realtime/connection_failures_spec.rb#L367)
615
624
  * for the first time
616
- * [waits suspended_retry_timeout before attempting to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb#L324)
625
+ * [waits suspended_retry_timeout before attempting to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb#L390)
617
626
  * #close
618
- * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L346)
627
+ * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L412)
619
628
  * when connection state is :failed
620
629
  * #close
621
- * [will not transition state to :close and fails with an InvalidStateChange exception](./spec/acceptance/realtime/connection_failures_spec.rb#L365)
630
+ * [will not transition state to :close and fails with an InvalidStateChange exception](./spec/acceptance/realtime/connection_failures_spec.rb#L431)
622
631
  * #error_reason
623
- * [contains the error when state is disconnected](./spec/acceptance/realtime/connection_failures_spec.rb#L386)
624
- * [contains the error when state is suspended](./spec/acceptance/realtime/connection_failures_spec.rb#L386)
625
- * [contains the error when state is failed](./spec/acceptance/realtime/connection_failures_spec.rb#L386)
626
- * [is reset to nil when :connected](./spec/acceptance/realtime/connection_failures_spec.rb#L400)
627
- * [is reset to nil when :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L411)
632
+ * [contains the error when state is disconnected](./spec/acceptance/realtime/connection_failures_spec.rb#L452)
633
+ * [contains the error when state is suspended](./spec/acceptance/realtime/connection_failures_spec.rb#L452)
634
+ * [contains the error when state is failed](./spec/acceptance/realtime/connection_failures_spec.rb#L452)
635
+ * [is reset to nil when :connected](./spec/acceptance/realtime/connection_failures_spec.rb#L466)
636
+ * [is reset to nil when :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L477)
628
637
  * #connect
629
638
  * connection opening times out
630
- * [attempts to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb#L442)
639
+ * [attempts to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb#L508)
631
640
  * when retry intervals are stubbed to attempt reconnection quickly
632
- * [never calls the provided success block](./spec/acceptance/realtime/connection_failures_spec.rb#L466)
641
+ * [never calls the provided success block](./spec/acceptance/realtime/connection_failures_spec.rb#L532)
633
642
  * connection resume
634
643
  * when DISCONNECTED ProtocolMessage received from the server
635
- * [reconnects automatically and immediately](./spec/acceptance/realtime/connection_failures_spec.rb#L497)
644
+ * [reconnects automatically and immediately](./spec/acceptance/realtime/connection_failures_spec.rb#L563)
636
645
  * connection state freshness is monitored
637
- * [resumes connections when disconnected within the connection_state_ttl period (#RTN15g)](./spec/acceptance/realtime/connection_failures_spec.rb#L518)
646
+ * [resumes connections when disconnected within the connection_state_ttl period (#RTN15g)](./spec/acceptance/realtime/connection_failures_spec.rb#L584)
638
647
  * when connection_state_ttl period has passed since being disconnected
639
- * [clears the local connection state and uses a new connection when the connection_state_ttl period has passed (#RTN15g)](./spec/acceptance/realtime/connection_failures_spec.rb#L558)
648
+ * [clears the local connection state and uses a new connection when the connection_state_ttl period has passed (#RTN15g)](./spec/acceptance/realtime/connection_failures_spec.rb#L624)
640
649
  * when connection_state_ttl period has passed since last activity on the connection
641
- * [does not clear the local connection state when the connection_state_ttl period has passed since last activity, but the idle timeout has not passed (#RTN15g1, #RTN15g2)](./spec/acceptance/realtime/connection_failures_spec.rb#L611)
642
- * [clears the local connection state and uses a new connection when the connection_state_ttl + max_idle_interval period has passed since last activity (#RTN15g1, #RTN15g2)](./spec/acceptance/realtime/connection_failures_spec.rb#L645)
643
- * [still reattaches the channels automatically following a new connection being established (#RTN15g2)](./spec/acceptance/realtime/connection_failures_spec.rb#L680)
650
+ * [does not clear the local connection state when the connection_state_ttl period has passed since last activity, but the idle timeout has not passed (#RTN15g1, #RTN15g2)](./spec/acceptance/realtime/connection_failures_spec.rb#L677)
651
+ * [clears the local connection state and uses a new connection when the connection_state_ttl + max_idle_interval period has passed since last activity (#RTN15g1, #RTN15g2)](./spec/acceptance/realtime/connection_failures_spec.rb#L711)
652
+ * [still reattaches the channels automatically following a new connection being established (#RTN15g2)](./spec/acceptance/realtime/connection_failures_spec.rb#L746)
644
653
  * and subsequently fails to reconnect
645
- * [retries every 15 seconds](./spec/acceptance/realtime/connection_failures_spec.rb#L739)
654
+ * [retries every 15 seconds](./spec/acceptance/realtime/connection_failures_spec.rb#L805)
646
655
  * when websocket transport is abruptly disconnected
647
- * [reconnects automatically](./spec/acceptance/realtime/connection_failures_spec.rb#L782)
656
+ * [reconnects automatically](./spec/acceptance/realtime/connection_failures_spec.rb#L848)
648
657
  * hosts used
649
- * [reconnects with the default host](./spec/acceptance/realtime/connection_failures_spec.rb#L798)
658
+ * [reconnects with the default host](./spec/acceptance/realtime/connection_failures_spec.rb#L864)
650
659
  * after successfully reconnecting and resuming
651
- * [retains connection_id and updates the connection_key (#RTN15e, #RTN16d)](./spec/acceptance/realtime/connection_failures_spec.rb#L822)
652
- * [includes the error received in the connection state change from Ably but leaves the channels attached](./spec/acceptance/realtime/connection_failures_spec.rb#L837)
653
- * [retains channel subscription state](./spec/acceptance/realtime/connection_failures_spec.rb#L863)
654
- * [retains the client_serial (#RTN15c2, #RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L924)
660
+ * [retains connection_id and updates the connection_key (#RTN15e, #RTN16d)](./spec/acceptance/realtime/connection_failures_spec.rb#L888)
661
+ * [includes the error received in the connection state change from Ably but leaves the channels attached](./spec/acceptance/realtime/connection_failures_spec.rb#L903)
662
+ * [retains channel subscription state](./spec/acceptance/realtime/connection_failures_spec.rb#L929)
663
+ * [retains the client_msg_serial (#RTN15c2, #RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L990)
655
664
  * when messages were published whilst the client was disconnected
656
- * [receives the messages published whilst offline](./spec/acceptance/realtime/connection_failures_spec.rb#L891)
665
+ * [receives the messages published whilst offline](./spec/acceptance/realtime/connection_failures_spec.rb#L957)
657
666
  * when failing to resume
658
667
  * because the connection_key is not or no longer valid
659
- * [updates the connection_id and connection_key](./spec/acceptance/realtime/connection_failures_spec.rb#L964)
660
- * [issue a reattach for all attached channels and fail all message awaiting an ACK (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L979)
661
- * [issue a reattach for all attaching channels and fail all queued messages (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L1017)
662
- * [issue a attach for all suspended channels (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L1053)
663
- * [sets the error reason on each channel](./spec/acceptance/realtime/connection_failures_spec.rb#L1091)
664
- * [resets the client_serial (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L1106)
668
+ * [updates the connection_id and connection_key](./spec/acceptance/realtime/connection_failures_spec.rb#L1030)
669
+ * [issue a reattach for all attached channels and fail all message awaiting an ACK (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L1045)
670
+ * [issue a reattach for all attaching channels and fail all queued messages (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L1083)
671
+ * [issue a attach for all suspended channels (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L1119)
672
+ * [sets the error reason on each channel](./spec/acceptance/realtime/connection_failures_spec.rb#L1157)
673
+ * [continues to use the client_msg_serial (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L1172)
665
674
  * as the DISCONNECTED window to resume has passed
666
- * [starts a new connection automatically and does not try and resume](./spec/acceptance/realtime/connection_failures_spec.rb#L1143)
675
+ * [starts a new connection automatically and does not try and resume](./spec/acceptance/realtime/connection_failures_spec.rb#L1209)
667
676
  * when an ERROR protocol message is received
668
677
  * whilst connecting
669
678
  * with a token error code in the range 40140 <= code < 40150 (#RTN14b)
670
- * [triggers a re-authentication](./spec/acceptance/realtime/connection_failures_spec.rb#L1174)
679
+ * [triggers a re-authentication](./spec/acceptance/realtime/connection_failures_spec.rb#L1240)
671
680
  * with an error code indicating an error other than a token failure (#RTN14g, #RTN15i)
672
- * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1190)
681
+ * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1256)
673
682
  * with no error code indicating an error other than a token failure (#RTN14g, #RTN15i)
674
- * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1203)
683
+ * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1269)
675
684
  * whilst connected
676
685
  * with a token error code in the range 40140 <= code < 40150 (#RTN14b)
677
- * [triggers a re-authentication](./spec/acceptance/realtime/connection_failures_spec.rb#L1174)
686
+ * [triggers a re-authentication](./spec/acceptance/realtime/connection_failures_spec.rb#L1240)
678
687
  * with an error code indicating an error other than a token failure (#RTN14g, #RTN15i)
679
- * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1190)
688
+ * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1256)
680
689
  * with no error code indicating an error other than a token failure (#RTN14g, #RTN15i)
681
- * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1203)
690
+ * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L1269)
682
691
  * whilst resuming
683
692
  * with a token error code in the region 40140 <= code < 40150 (RTN15c5)
684
- * [triggers a re-authentication and then resumes the connection](./spec/acceptance/realtime/connection_failures_spec.rb#L1247)
693
+ * [triggers a re-authentication and then resumes the connection](./spec/acceptance/realtime/connection_failures_spec.rb#L1313)
685
694
  * with any other error (#RTN15c4)
686
- * [moves the connection to the failed state](./spec/acceptance/realtime/connection_failures_spec.rb#L1279)
695
+ * [moves the connection to the failed state](./spec/acceptance/realtime/connection_failures_spec.rb#L1345)
687
696
  * fallback host feature
688
697
  * with custom realtime websocket host option
689
- * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1323)
698
+ * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1389)
690
699
  * with custom realtime websocket port option
691
- * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1341)
700
+ * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1407)
692
701
  * with non-production environment
693
- * [does not use a fallback host by default](./spec/acceptance/realtime/connection_failures_spec.rb#L1360)
702
+ * [does not use a fallback host by default](./spec/acceptance/realtime/connection_failures_spec.rb#L1426)
694
703
  * :fallback_hosts_use_default is true
695
- * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k7)](./spec/acceptance/realtime/connection_failures_spec.rb#L1378)
696
- * [does not use a fallback host if the connection connects on the default host and then later becomes disconnected](./spec/acceptance/realtime/connection_failures_spec.rb#L1396)
704
+ * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k7)](./spec/acceptance/realtime/connection_failures_spec.rb#L1444)
705
+ * [does not use a fallback host if the connection connects on the default host and then later becomes disconnected](./spec/acceptance/realtime/connection_failures_spec.rb#L1462)
697
706
  * :fallback_hosts array is provided
698
- * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1424)
707
+ * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1490)
699
708
  * with production environment
700
709
  * when the Internet is down
701
- * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1460)
710
+ * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1526)
702
711
  * when the Internet is up
703
712
  * and default options
704
- * [uses a fallback host + the original host once on every subsequent disconnected attempt until suspended](./spec/acceptance/realtime/connection_failures_spec.rb#L1483)
705
- * [uses the primary host when suspended, and then every fallback host and the primary host again on every subsequent suspended attempt](./spec/acceptance/realtime/connection_failures_spec.rb#L1502)
706
- * [uses the correct host name for the WebSocket requests to the fallback hosts](./spec/acceptance/realtime/connection_failures_spec.rb#L1525)
713
+ * [uses a fallback host + the original host once on every subsequent disconnected attempt until suspended](./spec/acceptance/realtime/connection_failures_spec.rb#L1549)
714
+ * [uses the primary host when suspended, and then every fallback host and the primary host again on every subsequent suspended attempt](./spec/acceptance/realtime/connection_failures_spec.rb#L1568)
715
+ * [uses the correct host name for the WebSocket requests to the fallback hosts](./spec/acceptance/realtime/connection_failures_spec.rb#L1591)
707
716
  * :fallback_hosts array is provided by an empty array
708
- * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1555)
717
+ * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1621)
709
718
  * :fallback_hosts array is provided
710
- * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1575)
719
+ * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1641)
711
720
 
712
721
  ### Ably::Realtime::Connection
713
722
  _(see [spec/acceptance/realtime/connection_spec.rb](./spec/acceptance/realtime/connection_spec.rb))_
714
723
  * using JSON protocol
715
724
  * intialization
716
725
  * [connects automatically](./spec/acceptance/realtime/connection_spec.rb#L23)
726
+ * current_host
727
+ * [is available immediately after the client is instanced](./spec/acceptance/realtime/connection_spec.rb#L31)
717
728
  * with :auto_connect option set to false
718
- * [does not connect automatically](./spec/acceptance/realtime/connection_spec.rb#L35)
719
- * [connects when method #connect is called](./spec/acceptance/realtime/connection_spec.rb#L43)
729
+ * [does not connect automatically](./spec/acceptance/realtime/connection_spec.rb#L42)
730
+ * [connects when method #connect is called](./spec/acceptance/realtime/connection_spec.rb#L50)
720
731
  * with token auth
721
732
  * for renewable tokens
722
733
  * that are valid for the duration of the test
723
734
  * with valid pre authorized token expiring in the future
724
- * [uses the existing token created by Auth](./spec/acceptance/realtime/connection_spec.rb#L65)
725
- * with implicit authorisation
726
- * [uses the token created by the implicit authorisation](./spec/acceptance/realtime/connection_spec.rb#L77)
735
+ * [uses the existing token created by Auth](./spec/acceptance/realtime/connection_spec.rb#L72)
727
736
  * that expire
728
737
  * opening a new connection
729
738
  * with almost expired tokens
730
- * [renews token every time after it expires](./spec/acceptance/realtime/connection_spec.rb#L111)
739
+ * [renews token every time after it expires](./spec/acceptance/realtime/connection_spec.rb#L106)
731
740
  * with immediately expired token
732
- * [renews the token on connect, and makes one immediate subsequent attempt to obtain a new token (#RSA4b)](./spec/acceptance/realtime/connection_spec.rb#L141)
741
+ * [renews the token on connect, and makes one immediate subsequent attempt to obtain a new token (#RSA4b)](./spec/acceptance/realtime/connection_spec.rb#L136)
733
742
  * when disconnected_retry_timeout is 0.5 seconds
734
- * [renews the token on connect, and continues to attempt renew based on the retry schedule](./spec/acceptance/realtime/connection_spec.rb#L156)
743
+ * [renews the token on connect, and continues to attempt renew based on the retry schedule](./spec/acceptance/realtime/connection_spec.rb#L151)
735
744
  * using implicit token auth
736
- * [uses the primary host for subsequent connection and auth requests](./spec/acceptance/realtime/connection_spec.rb#L186)
745
+ * [uses the primary host for subsequent connection and auth requests](./spec/acceptance/realtime/connection_spec.rb#L181)
737
746
  * when connected with a valid non-expired token
738
747
  * that then expires following the connection being opened
739
748
  * the server
740
- * [disconnects the client, and the client automatically renews the token and then reconnects](./spec/acceptance/realtime/connection_spec.rb#L217)
749
+ * [disconnects the client, and the client automatically renews the token and then reconnects](./spec/acceptance/realtime/connection_spec.rb#L212)
741
750
  * connection state
742
- * [retains messages published when disconnected three times during authentication](./spec/acceptance/realtime/connection_spec.rb#L277)
751
+ * [retains messages published when disconnected three times during authentication](./spec/acceptance/realtime/connection_spec.rb#L272)
743
752
  * and subsequent token is invalid
744
- * [transitions the connection to the failed state](./spec/acceptance/realtime/connection_spec.rb#L312)
753
+ * [transitions the connection to the failed state](./spec/acceptance/realtime/connection_spec.rb#L307)
745
754
  * for non-renewable tokens
746
755
  * that are expired
747
756
  * opening a new connection
748
- * [transitions state to failed (#RSA4a)](./spec/acceptance/realtime/connection_spec.rb#L342)
757
+ * [transitions state to failed (#RSA4a)](./spec/acceptance/realtime/connection_spec.rb#L337)
749
758
  * when connected
750
- * [transitions state to failed (#RSA4a)](./spec/acceptance/realtime/connection_spec.rb#L358)
759
+ * [transitions state to failed (#RSA4a)](./spec/acceptance/realtime/connection_spec.rb#L353)
751
760
  * with opaque token string that contain an implicit client_id
752
761
  * string
753
- * [sets the Client#client_id and Auth#client_id once CONNECTED](./spec/acceptance/realtime/connection_spec.rb#L378)
762
+ * [sets the Client#client_id and Auth#client_id once CONNECTED](./spec/acceptance/realtime/connection_spec.rb#L373)
754
763
  * that is incompatible with the current client client_id
755
- * [fails the connection](./spec/acceptance/realtime/connection_spec.rb#L390)
764
+ * [fails the connection](./spec/acceptance/realtime/connection_spec.rb#L385)
756
765
  * wildcard
757
- * [configures the Client#client_id and Auth#client_id with a wildcard once CONNECTED](./spec/acceptance/realtime/connection_spec.rb#L404)
766
+ * [configures the Client#client_id and Auth#client_id with a wildcard once CONNECTED](./spec/acceptance/realtime/connection_spec.rb#L399)
758
767
  * initialization state changes
759
768
  * with implicit #connect
760
- * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb#L436)
769
+ * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb#L431)
761
770
  * with explicit #connect
762
- * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb#L442)
771
+ * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb#L437)
763
772
  * #connect
764
- * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb#L450)
765
- * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb#L455)
766
- * [calls the provided block on success even if state changes to disconnected first](./spec/acceptance/realtime/connection_spec.rb#L462)
773
+ * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb#L445)
774
+ * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb#L450)
775
+ * [calls the provided block on success even if state changes to disconnected first](./spec/acceptance/realtime/connection_spec.rb#L457)
767
776
  * with invalid auth details
768
- * [calls the Deferrable errback only once on connection failure](./spec/acceptance/realtime/connection_spec.rb#L491)
777
+ * [calls the Deferrable errback only once on connection failure](./spec/acceptance/realtime/connection_spec.rb#L486)
769
778
  * when already connected
770
- * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb#L507)
779
+ * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb#L502)
771
780
  * connection#id
772
- * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb#L521)
781
+ * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb#L516)
773
782
  * connection#key
774
- * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb#L528)
783
+ * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb#L523)
775
784
  * once connected
776
785
  * connection#id
777
- * [is a string](./spec/acceptance/realtime/connection_spec.rb#L539)
778
- * [is unique from the connection#key](./spec/acceptance/realtime/connection_spec.rb#L546)
779
- * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb#L553)
786
+ * [is a string](./spec/acceptance/realtime/connection_spec.rb#L534)
787
+ * [is unique from the connection#key](./spec/acceptance/realtime/connection_spec.rb#L541)
788
+ * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb#L548)
780
789
  * connection#key
781
- * [is a string](./spec/acceptance/realtime/connection_spec.rb#L562)
782
- * [is unique from the connection#id](./spec/acceptance/realtime/connection_spec.rb#L569)
783
- * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb#L576)
790
+ * [is a string](./spec/acceptance/realtime/connection_spec.rb#L557)
791
+ * [is unique from the connection#id](./spec/acceptance/realtime/connection_spec.rb#L564)
792
+ * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb#L571)
784
793
  * following a previous connection being opened and closed
785
- * [reconnects and is provided with a new connection ID and connection key from the server](./spec/acceptance/realtime/connection_spec.rb#L586)
794
+ * [reconnects and is provided with a new connection ID and connection key from the server](./spec/acceptance/realtime/connection_spec.rb#L581)
786
795
  * when closing
787
- * [fails the deferrable before the connection is closed](./spec/acceptance/realtime/connection_spec.rb#L603)
796
+ * [fails the deferrable before the connection is closed](./spec/acceptance/realtime/connection_spec.rb#L598)
788
797
  * #serial connection serial
789
- * [is set to -1 when a new connection is opened](./spec/acceptance/realtime/connection_spec.rb#L620)
790
- * [is set to 0 when a message is received back](./spec/acceptance/realtime/connection_spec.rb#L643)
791
- * [is set to 1 when the second message is received](./spec/acceptance/realtime/connection_spec.rb#L651)
798
+ * [is set to -1 when a new connection is opened](./spec/acceptance/realtime/connection_spec.rb#L615)
799
+ * [is set to 0 when a message is received back](./spec/acceptance/realtime/connection_spec.rb#L638)
800
+ * [is set to 1 when the second message is received](./spec/acceptance/realtime/connection_spec.rb#L646)
792
801
  * when a message is sent but the ACK has not yet been received
793
- * [the sent message msgSerial is 0 but the connection serial remains at -1](./spec/acceptance/realtime/connection_spec.rb#L628)
802
+ * [the sent message msgSerial is 0 but the connection serial remains at -1](./spec/acceptance/realtime/connection_spec.rb#L623)
803
+ * #msgSerial
804
+ * when messages are queued for publish before a connection is established
805
+ * [the msgSerial is always incrementing (and not reset when the new connection is established) ensuring messages are never de-duped by the realtime service](./spec/acceptance/realtime/connection_spec.rb#L674)
794
806
  * #close
795
- * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb#L668)
796
- * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb#L675)
807
+ * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb#L694)
808
+ * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb#L701)
797
809
  * when already closed
798
- * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb#L686)
810
+ * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb#L712)
799
811
  * when connection state is
800
812
  * :initialized
801
- * [changes the connection state to :closing and then immediately :closed without sending a ProtocolMessage CLOSE](./spec/acceptance/realtime/connection_spec.rb#L713)
813
+ * [changes the connection state to :closing and then immediately :closed without sending a ProtocolMessage CLOSE](./spec/acceptance/realtime/connection_spec.rb#L739)
802
814
  * :connected
803
- * [changes the connection state to :closing and waits for the server to confirm connection is :closed with a ProtocolMessage](./spec/acceptance/realtime/connection_spec.rb#L730)
815
+ * [changes the connection state to :closing and waits for the server to confirm connection is :closed with a ProtocolMessage](./spec/acceptance/realtime/connection_spec.rb#L756)
804
816
  * with an unresponsive connection
805
- * [force closes the connection when a :closed ProtocolMessage response is not received](./spec/acceptance/realtime/connection_spec.rb#L757)
817
+ * [force closes the connection when a :closed ProtocolMessage response is not received](./spec/acceptance/realtime/connection_spec.rb#L783)
806
818
  * #ping
807
- * [echoes a heart beat (#RTN13a)](./spec/acceptance/realtime/connection_spec.rb#L779)
808
- * [sends a unique ID in each protocol message (#RTN13e)](./spec/acceptance/realtime/connection_spec.rb#L789)
809
- * [waits until the connection becomes CONNECTED when in the CONNETING state](./spec/acceptance/realtime/connection_spec.rb#L813)
819
+ * [echoes a heart beat (#RTN13a)](./spec/acceptance/realtime/connection_spec.rb#L805)
820
+ * [sends a unique ID in each protocol message (#RTN13e)](./spec/acceptance/realtime/connection_spec.rb#L815)
821
+ * [waits until the connection becomes CONNECTED when in the CONNETING state](./spec/acceptance/realtime/connection_spec.rb#L839)
810
822
  * with incompatible states
811
823
  * when not connected
812
- * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L826)
824
+ * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L852)
813
825
  * when suspended
814
- * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L835)
826
+ * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L861)
815
827
  * when failed
816
- * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L847)
828
+ * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L873)
817
829
  * when closed
818
- * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L859)
830
+ * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L885)
819
831
  * when it becomes closed
820
- * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L873)
832
+ * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L899)
821
833
  * with a success block that raises an exception
822
- * [catches the exception and logs the error](./spec/acceptance/realtime/connection_spec.rb#L886)
834
+ * [catches the exception and logs the error](./spec/acceptance/realtime/connection_spec.rb#L912)
823
835
  * when ping times out
824
- * [fails the deferrable logs a warning (#RTN13a, #RTN13c)](./spec/acceptance/realtime/connection_spec.rb#L900)
825
- * [yields to the block with a nil value](./spec/acceptance/realtime/connection_spec.rb#L919)
836
+ * [fails the deferrable logs a warning (#RTN13a, #RTN13c)](./spec/acceptance/realtime/connection_spec.rb#L926)
837
+ * [yields to the block with a nil value](./spec/acceptance/realtime/connection_spec.rb#L945)
826
838
  * Heartbeats (#RTN23)
827
839
  * heartbeat interval
828
840
  * when reduced artificially
829
- * [is the sum of the max_idle_interval and realtime_request_timeout (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L946)
830
- * [disconnects the transport if no heartbeat received since connected (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L956)
831
- * [disconnects the transport if no heartbeat received since last event received (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L967)
841
+ * [is the sum of the max_idle_interval and realtime_request_timeout (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L972)
842
+ * [disconnects the transport if no heartbeat received since connected (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L982)
843
+ * [disconnects the transport if no heartbeat received since last event received (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L993)
832
844
  * transport-level heartbeats are supported in the websocket transport
833
- * [provides the heartbeats argument in the websocket connection params (#RTN23b)](./spec/acceptance/realtime/connection_spec.rb#L982)
834
- * [receives websocket heartbeat messages (#RTN23b) [slow test as need to wait for heartbeat]](./spec/acceptance/realtime/connection_spec.rb#L991)
845
+ * [provides the heartbeats argument in the websocket connection params (#RTN23b)](./spec/acceptance/realtime/connection_spec.rb#L1008)
846
+ * [receives websocket heartbeat messages (#RTN23b) [slow test as need to wait for heartbeat]](./spec/acceptance/realtime/connection_spec.rb#L1017)
835
847
  * with websocket heartbeats disabled (undocumented)
836
- * PENDING: *[does not provide the heartbeats argument in the websocket connection params (#RTN23b)](./spec/acceptance/realtime/connection_spec.rb#L1007)*
837
- * [receives websocket protocol messages (#RTN23b) [slow test as need to wait for heartbeat]](./spec/acceptance/realtime/connection_spec.rb#L1017)
848
+ * [does not provide the heartbeats argument in the websocket connection params (#RTN23b)](./spec/acceptance/realtime/connection_spec.rb#L1033)
849
+ * [receives websocket protocol messages (#RTN23b) [slow test as need to wait for heartbeat]](./spec/acceptance/realtime/connection_spec.rb#L1042)
838
850
  * #details
839
- * [is nil before connected](./spec/acceptance/realtime/connection_spec.rb#L1035)
840
- * [contains the ConnectionDetails object once connected (#RTN21)](./spec/acceptance/realtime/connection_spec.rb#L1042)
841
- * [contains the new ConnectionDetails object once a subsequent connection is created (#RTN21)](./spec/acceptance/realtime/connection_spec.rb#L1051)
851
+ * [is nil before connected](./spec/acceptance/realtime/connection_spec.rb#L1060)
852
+ * [contains the ConnectionDetails object once connected (#RTN21)](./spec/acceptance/realtime/connection_spec.rb#L1067)
853
+ * [contains the new ConnectionDetails object once a subsequent connection is created (#RTN21)](./spec/acceptance/realtime/connection_spec.rb#L1076)
842
854
  * with a different default connection_state_ttl
843
- * [updates the private Connection#connection_state_ttl when received from Ably in ConnectionDetails](./spec/acceptance/realtime/connection_spec.rb#L1072)
855
+ * [updates the private Connection#connection_state_ttl when received from Ably in ConnectionDetails](./spec/acceptance/realtime/connection_spec.rb#L1097)
844
856
  * recovery
845
857
  * #recovery_key
846
- * [is composed of connection key and serial that is kept up to date with each message ACK received](./spec/acceptance/realtime/connection_spec.rb#L1109)
847
- * [is available when connection is in one of the states: connecting, connected, disconnected](./spec/acceptance/realtime/connection_spec.rb#L1137)
848
- * [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb#L1166)
858
+ * [is composed of connection key and serial that is kept up to date with each message ACK received](./spec/acceptance/realtime/connection_spec.rb#L1134)
859
+ * [is available when connection is in one of the states: connecting, connected, disconnected](./spec/acceptance/realtime/connection_spec.rb#L1162)
860
+ * [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb#L1191)
849
861
  * opening a new connection using a recently disconnected connection's #recovery_key
850
862
  * connection#id after recovery
851
- * [remains the same](./spec/acceptance/realtime/connection_spec.rb#L1178)
863
+ * [remains the same](./spec/acceptance/realtime/connection_spec.rb#L1203)
852
864
  * when messages have been sent whilst the old connection is disconnected
853
865
  * the new connection
854
- * [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb#L1214)
866
+ * [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb#L1239)
867
+ * when messages have been published
868
+ * the new connection
869
+ * [uses the correct msgSerial from the old connection](./spec/acceptance/realtime/connection_spec.rb#L1268)
870
+ * when messages are published before the new connection is recovered
871
+ * the new connection
872
+ * [uses the correct msgSerial from the old connection for the queued messages](./spec/acceptance/realtime/connection_spec.rb#L1298)
855
873
  * with :recover option
856
874
  * with invalid syntax
857
- * [raises an exception](./spec/acceptance/realtime/connection_spec.rb#L1246)
875
+ * [raises an exception](./spec/acceptance/realtime/connection_spec.rb#L1345)
858
876
  * with invalid formatted value sent to server
859
- * [sets the #error_reason and moves the connection to FAILED](./spec/acceptance/realtime/connection_spec.rb#L1255)
877
+ * [sets the #error_reason and moves the connection to FAILED](./spec/acceptance/realtime/connection_spec.rb#L1354)
860
878
  * with expired (missing) value sent to server
861
- * [connects but sets the error reason and includes the reason in the state change](./spec/acceptance/realtime/connection_spec.rb#L1270)
879
+ * [connects but sets the error reason and includes the reason in the state change](./spec/acceptance/realtime/connection_spec.rb#L1369)
862
880
  * with many connections simultaneously
863
- * [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb#L1289)
881
+ * [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb#L1388)
864
882
  * when a state transition is unsupported
865
- * [logs the invalid state change as fatal](./spec/acceptance/realtime/connection_spec.rb#L1309)
883
+ * [logs the invalid state change as fatal](./spec/acceptance/realtime/connection_spec.rb#L1408)
866
884
  * protocol failure
867
885
  * receiving an invalid ProtocolMessage
868
- * [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb#L1325)
886
+ * [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb#L1424)
869
887
  * undocumented method
870
888
  * #internet_up?
871
- * [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1343)
889
+ * [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1442)
872
890
  * internet up URL protocol
873
891
  * when using TLS for the connection
874
- * [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L1354)
892
+ * [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L1453)
875
893
  * when using a non-secured connection
876
- * [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L1364)
894
+ * [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L1463)
877
895
  * when the Internet is up
878
- * [calls the block with true](./spec/acceptance/realtime/connection_spec.rb#L1395)
879
- * [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1402)
896
+ * [calls the block with true](./spec/acceptance/realtime/connection_spec.rb#L1494)
897
+ * [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1501)
880
898
  * with a TLS connection
881
- * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb#L1378)
899
+ * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb#L1477)
882
900
  * with a non-TLS connection
883
- * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb#L1388)
901
+ * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb#L1487)
884
902
  * when the Internet is down
885
- * [calls the block with false](./spec/acceptance/realtime/connection_spec.rb#L1417)
886
- * [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1424)
903
+ * [calls the block with false](./spec/acceptance/realtime/connection_spec.rb#L1516)
904
+ * [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1523)
887
905
  * state change side effects
888
906
  * when connection enters the :disconnected state
889
- * [queues messages to be sent and all channels remain attached](./spec/acceptance/realtime/connection_spec.rb#L1438)
907
+ * [queues messages to be sent and all channels remain attached](./spec/acceptance/realtime/connection_spec.rb#L1537)
890
908
  * when connection enters the :suspended state
891
- * [moves the channels into the suspended state and prevents publishing of messages on those channels](./spec/acceptance/realtime/connection_spec.rb#L1471)
909
+ * [moves the channels into the suspended state and prevents publishing of messages on those channels](./spec/acceptance/realtime/connection_spec.rb#L1570)
892
910
  * when connection enters the :failed state
893
- * [sets all channels to failed and prevents publishing of messages on those channels](./spec/acceptance/realtime/connection_spec.rb#L1502)
911
+ * [sets all channels to failed and prevents publishing of messages on those channels](./spec/acceptance/realtime/connection_spec.rb#L1601)
894
912
  * connection state change
895
- * [emits event to all and single subscribers](./spec/acceptance/realtime/connection_spec.rb#L1516)
896
- * [emits a ConnectionStateChange object](./spec/acceptance/realtime/connection_spec.rb#L1531)
913
+ * [emits event to all and single subscribers](./spec/acceptance/realtime/connection_spec.rb#L1615)
914
+ * [emits a ConnectionStateChange object](./spec/acceptance/realtime/connection_spec.rb#L1630)
897
915
  * ConnectionStateChange object
898
- * [has current state](./spec/acceptance/realtime/connection_spec.rb#L1539)
899
- * [has a previous state](./spec/acceptance/realtime/connection_spec.rb#L1547)
900
- * [has the event that generated the state change (#TH5)](./spec/acceptance/realtime/connection_spec.rb#L1555)
901
- * [has an empty reason when there is no error](./spec/acceptance/realtime/connection_spec.rb#L1571)
916
+ * [has current state](./spec/acceptance/realtime/connection_spec.rb#L1638)
917
+ * [has a previous state](./spec/acceptance/realtime/connection_spec.rb#L1646)
918
+ * [has the event that generated the state change (#TH5)](./spec/acceptance/realtime/connection_spec.rb#L1654)
919
+ * [has an empty reason when there is no error](./spec/acceptance/realtime/connection_spec.rb#L1670)
902
920
  * on failure
903
- * [has a reason Error object when there is an error on the connection](./spec/acceptance/realtime/connection_spec.rb#L1584)
921
+ * [has a reason Error object when there is an error on the connection](./spec/acceptance/realtime/connection_spec.rb#L1683)
904
922
  * retry_in
905
- * [is nil when a retry is not required](./spec/acceptance/realtime/connection_spec.rb#L1599)
906
- * [is 0 when first attempt to connect fails](./spec/acceptance/realtime/connection_spec.rb#L1606)
907
- * [is 0 when an immediate reconnect will occur](./spec/acceptance/realtime/connection_spec.rb#L1616)
908
- * [contains the next retry period when an immediate reconnect will not occur](./spec/acceptance/realtime/connection_spec.rb#L1626)
923
+ * [is nil when a retry is not required](./spec/acceptance/realtime/connection_spec.rb#L1698)
924
+ * [is 0 when first attempt to connect fails](./spec/acceptance/realtime/connection_spec.rb#L1705)
925
+ * [is 0 when an immediate reconnect will occur](./spec/acceptance/realtime/connection_spec.rb#L1715)
926
+ * [contains the next retry period when an immediate reconnect will not occur](./spec/acceptance/realtime/connection_spec.rb#L1725)
909
927
  * whilst CONNECTED
910
928
  * when a CONNECTED message is received (#RTN24)
911
- * [emits an UPDATE event](./spec/acceptance/realtime/connection_spec.rb#L1661)
912
- * [updates the ConnectionDetail and Connection attributes (#RTC8a1)](./spec/acceptance/realtime/connection_spec.rb#L1676)
929
+ * [emits an UPDATE event](./spec/acceptance/realtime/connection_spec.rb#L1760)
930
+ * [updates the ConnectionDetail and Connection attributes (#RTC8a1)](./spec/acceptance/realtime/connection_spec.rb#L1775)
913
931
  * when a CONNECTED message with an error is received
914
- * [emits an UPDATE event](./spec/acceptance/realtime/connection_spec.rb#L1711)
932
+ * [emits an UPDATE event](./spec/acceptance/realtime/connection_spec.rb#L1810)
915
933
  * version params
916
- * [sends the protocol version param v (#G4, #RTN2f)](./spec/acceptance/realtime/connection_spec.rb#L1732)
917
- * [sends the lib version param lib (#RTN2g)](./spec/acceptance/realtime/connection_spec.rb#L1741)
934
+ * [sends the protocol version param v (#G4, #RTN2f)](./spec/acceptance/realtime/connection_spec.rb#L1831)
935
+ * [sends the lib version param lib (#RTN2g)](./spec/acceptance/realtime/connection_spec.rb#L1840)
918
936
  * with variant
919
- * [sends the lib version param lib with the variant (#RTN2g + #RSC7b)](./spec/acceptance/realtime/connection_spec.rb#L1761)
937
+ * [sends the lib version param lib with the variant (#RTN2g + #RSC7b)](./spec/acceptance/realtime/connection_spec.rb#L1860)
938
+ * transport_params (#RTC1f)
939
+ * [pases transport_params to query](./spec/acceptance/realtime/connection_spec.rb#L1874)
940
+ * when changing default param
941
+ * [overrides default param (#RTC1f1)](./spec/acceptance/realtime/connection_spec.rb#L1887)
920
942
 
921
943
  ### Ably::Realtime::Channel Message
922
944
  _(see [spec/acceptance/realtime/message_spec.rb](./spec/acceptance/realtime/message_spec.rb))_
@@ -935,102 +957,102 @@ _(see [spec/acceptance/realtime/message_spec.rb](./spec/acceptance/realtime/mess
935
957
  * JSON Object (Hash)
936
958
  * [is encoded and decoded to the same hash](./spec/acceptance/realtime/message_spec.rb#L93)
937
959
  * JSON Array
938
- * [is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L102)
960
+ * [is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L101)
939
961
  * nil
940
- * [is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L108)
962
+ * [is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L107)
941
963
  * with unsupported data payload content type
942
964
  * Integer
943
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L119)
965
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L118)
944
966
  * Float
945
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L128)
967
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L127)
946
968
  * Boolean
947
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L137)
969
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L136)
948
970
  * False
949
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L146)
971
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/realtime/message_spec.rb#L145)
950
972
  * with ASCII_8BIT message name
951
- * [is converted into UTF_8](./spec/acceptance/realtime/message_spec.rb#L155)
973
+ * [is converted into UTF_8](./spec/acceptance/realtime/message_spec.rb#L154)
952
974
  * when the message publisher has a client_id
953
- * [contains a #client_id attribute](./spec/acceptance/realtime/message_spec.rb#L171)
975
+ * [contains a #client_id attribute](./spec/acceptance/realtime/message_spec.rb#L170)
954
976
  * #connection_id attribute
955
977
  * over realtime
956
- * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb#L184)
978
+ * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb#L183)
957
979
  * when retrieved over REST
958
- * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb#L196)
980
+ * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb#L195)
959
981
  * local echo when published
960
- * [is enabled by default](./spec/acceptance/realtime/message_spec.rb#L208)
982
+ * [is enabled by default](./spec/acceptance/realtime/message_spec.rb#L207)
961
983
  * with :echo_messages option set to false
962
- * [will not echo messages to the client but will still broadcast messages to other connected clients](./spec/acceptance/realtime/message_spec.rb#L228)
963
- * [will not echo messages to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb#L247)
964
- * [will echo messages with a valid connection_id to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb#L260)
984
+ * [will not echo messages to the client but will still broadcast messages to other connected clients](./spec/acceptance/realtime/message_spec.rb#L227)
985
+ * [will not echo messages to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb#L246)
986
+ * [will echo messages with a valid connection_id to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb#L259)
965
987
  * publishing lots of messages across two connections
966
- * [sends and receives the messages on both opened connections and calls the success callbacks for each message published](./spec/acceptance/realtime/message_spec.rb#L286)
988
+ * [sends and receives the messages on both opened connections and calls the success callbacks for each message published](./spec/acceptance/realtime/message_spec.rb#L285)
967
989
  * without suitable publishing permissions
968
- * [calls the error callback](./spec/acceptance/realtime/message_spec.rb#L331)
990
+ * [calls the error callback](./spec/acceptance/realtime/message_spec.rb#L330)
969
991
  * server incorrectly resends a message that was already received by the client library
970
- * [discards the message and logs it as an error to the channel](./spec/acceptance/realtime/message_spec.rb#L350)
992
+ * [discards the message and logs it as an error to the channel](./spec/acceptance/realtime/message_spec.rb#L349)
971
993
  * encoding and decoding encrypted messages
972
994
  * with AES-128-CBC using crypto-data-128.json fixtures (#RTL7d)
973
995
  * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
974
996
  * behaves like an Ably encrypter and decrypter
975
997
  * with #publish and #subscribe
976
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
977
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
998
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
999
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
978
1000
  * item 1 with encrypted encoding cipher+aes-128-cbc/base64
979
1001
  * behaves like an Ably encrypter and decrypter
980
1002
  * with #publish and #subscribe
981
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
982
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
1003
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
1004
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
983
1005
  * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
984
1006
  * behaves like an Ably encrypter and decrypter
985
1007
  * with #publish and #subscribe
986
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
987
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
1008
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
1009
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
988
1010
  * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
989
1011
  * behaves like an Ably encrypter and decrypter
990
1012
  * with #publish and #subscribe
991
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
992
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
1013
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
1014
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
993
1015
  * with AES-256-CBC using crypto-data-256.json fixtures (#RTL7d)
994
1016
  * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
995
1017
  * behaves like an Ably encrypter and decrypter
996
1018
  * with #publish and #subscribe
997
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
998
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
1019
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
1020
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
999
1021
  * item 1 with encrypted encoding cipher+aes-256-cbc/base64
1000
1022
  * behaves like an Ably encrypter and decrypter
1001
1023
  * with #publish and #subscribe
1002
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
1003
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
1024
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
1025
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
1004
1026
  * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
1005
1027
  * behaves like an Ably encrypter and decrypter
1006
1028
  * with #publish and #subscribe
1007
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
1008
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
1029
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
1030
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
1009
1031
  * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
1010
1032
  * behaves like an Ably encrypter and decrypter
1011
1033
  * with #publish and #subscribe
1012
- * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L415)
1013
- * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L435)
1034
+ * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L416)
1035
+ * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L436)
1014
1036
  * with multiple sends from one client to another
1015
- * [encrypts and decrypts all messages](./spec/acceptance/realtime/message_spec.rb#L474)
1016
- * [receives raw messages with the correct encoding](./spec/acceptance/realtime/message_spec.rb#L491)
1037
+ * [encrypts and decrypts all messages](./spec/acceptance/realtime/message_spec.rb#L475)
1038
+ * [receives raw messages with the correct encoding](./spec/acceptance/realtime/message_spec.rb#L492)
1017
1039
  * subscribing with a different transport protocol
1018
- * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L525)
1019
- * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L525)
1020
- * [delivers a Hash payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L525)
1040
+ * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L526)
1041
+ * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L526)
1042
+ * [delivers a Hash payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L526)
1021
1043
  * publishing on an unencrypted channel and subscribing on an encrypted channel with another client
1022
- * [does not attempt to decrypt the message](./spec/acceptance/realtime/message_spec.rb#L546)
1044
+ * [does not attempt to decrypt the message](./spec/acceptance/realtime/message_spec.rb#L547)
1023
1045
  * publishing on an encrypted channel and subscribing on an unencrypted channel with another client
1024
- * [delivers the message but still encrypted with a value in the #encoding attribute (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L564)
1025
- * [logs a Cipher error (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L575)
1046
+ * [delivers the message but still encrypted with a value in the #encoding attribute (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L565)
1047
+ * [logs a Cipher error (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L576)
1026
1048
  * publishing on an encrypted channel and subscribing with a different algorithm on another client
1027
- * [delivers the message but still encrypted with the cipher detials in the #encoding attribute (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L595)
1028
- * [emits a Cipher error on the channel (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L604)
1049
+ * [delivers the message but still encrypted with the cipher detials in the #encoding attribute (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L596)
1050
+ * [emits a Cipher error on the channel (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L605)
1029
1051
  * publishing on an encrypted channel and subscribing with a different key on another client
1030
- * [delivers the message but still encrypted with the cipher details in the #encoding attribute](./spec/acceptance/realtime/message_spec.rb#L624)
1031
- * [emits a Cipher error on the channel](./spec/acceptance/realtime/message_spec.rb#L635)
1052
+ * [delivers the message but still encrypted with the cipher details in the #encoding attribute](./spec/acceptance/realtime/message_spec.rb#L625)
1053
+ * [emits a Cipher error on the channel](./spec/acceptance/realtime/message_spec.rb#L636)
1032
1054
  * when message is published, the connection disconnects before the ACK is received, and the connection is resumed
1033
- * [publishes the message again, later receives the ACK and only one message is ever received from Ably](./spec/acceptance/realtime/message_spec.rb#L654)
1055
+ * [publishes the message again, later receives the ACK and only one message is ever received from Ably](./spec/acceptance/realtime/message_spec.rb#L655)
1034
1056
  * when message is published, the connection disconnects before the ACK is received
1035
1057
  * the connection is not resumed
1036
1058
  * [calls the errback for all messages](./spec/acceptance/realtime/message_spec.rb#L697)
@@ -1087,11 +1109,6 @@ _(see [spec/acceptance/realtime/presence_history_spec.rb](./spec/acceptance/real
1087
1109
  * using JSON protocol
1088
1110
  * [provides up to the moment presence history](./spec/acceptance/realtime/presence_history_spec.rb#L21)
1089
1111
  * [ensures REST presence history message IDs match ProtocolMessage wrapped message and connection IDs via Realtime](./spec/acceptance/realtime/presence_history_spec.rb#L42)
1090
- * with option until_attach: true
1091
- * [retrieves all presence messages before channel was attached](./spec/acceptance/realtime/presence_history_spec.rb#L61)
1092
- * [fails with an exception unless state is attached](./spec/acceptance/realtime/presence_history_spec.rb#L106)
1093
- * and two pages of messages
1094
- * [retrieves two pages of messages before channel was attached](./spec/acceptance/realtime/presence_history_spec.rb#L81)
1095
1112
 
1096
1113
  ### Ably::Realtime::Presence
1097
1114
  _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/presence_spec.rb))_
@@ -1171,7 +1188,7 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
1171
1188
  * #update
1172
1189
  * [without previous #enter automatically enters](./spec/acceptance/realtime/presence_spec.rb#L1105)
1173
1190
  * [updates the data if :data argument provided](./spec/acceptance/realtime/presence_spec.rb#L1130)
1174
- * [updates the data to nil if :data argument is not provided (assumes nil value)](./spec/acceptance/realtime/presence_spec.rb#L1140)
1191
+ * [updates the data to nil if :data argument is not provided (assumes nil value)](./spec/acceptance/realtime/presence_spec.rb#L1142)
1175
1192
  * when ENTERED
1176
1193
  * [has no effect on the state](./spec/acceptance/realtime/presence_spec.rb#L1115)
1177
1194
  * it should behave like a public presence method
@@ -1214,16 +1231,16 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
1214
1231
  * if connection fails before success
1215
1232
  * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
1216
1233
  * #leave
1217
- * [succeeds and does not emit an event (#RTP10d)](./spec/acceptance/realtime/presence_spec.rb#L1224)
1234
+ * [succeeds and does not emit an event (#RTP10d)](./spec/acceptance/realtime/presence_spec.rb#L1236)
1218
1235
  * :data option
1219
1236
  * when set to a string
1220
- * [emits the new data for the leave event](./spec/acceptance/realtime/presence_spec.rb#L1159)
1237
+ * [emits the new data for the leave event](./spec/acceptance/realtime/presence_spec.rb#L1163)
1221
1238
  * when set to nil
1222
- * [emits the last value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L1172)
1239
+ * [emits the last value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L1178)
1223
1240
  * when not passed as an argument (i.e. nil)
1224
- * [emits the previous value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L1185)
1241
+ * [emits the previous value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L1193)
1225
1242
  * and sync is complete
1226
- * [does not cache members that have left](./spec/acceptance/realtime/presence_spec.rb#L1198)
1243
+ * [does not cache members that have left](./spec/acceptance/realtime/presence_spec.rb#L1208)
1227
1244
  * it should behave like a public presence method
1228
1245
  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L293)
1229
1246
  * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb#L300)
@@ -1250,17 +1267,17 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
1250
1267
  * if connection fails before success
1251
1268
  * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
1252
1269
  * :left event
1253
- * [emits the data defined in enter](./spec/acceptance/realtime/presence_spec.rb#L1240)
1254
- * [emits the data defined in update](./spec/acceptance/realtime/presence_spec.rb#L1251)
1270
+ * [emits the data defined in enter](./spec/acceptance/realtime/presence_spec.rb#L1254)
1271
+ * [emits the data defined in update](./spec/acceptance/realtime/presence_spec.rb#L1267)
1255
1272
  * entering/updating/leaving presence state on behalf of another client_id
1256
1273
  * #enter_client
1257
1274
  * multiple times on the same channel with different client_ids
1258
- * [has no affect on the client's presence state and only enters on behalf of the provided client_id](./spec/acceptance/realtime/presence_spec.rb#L1274)
1259
- * [enters a channel and sets the data based on the provided :data option](./spec/acceptance/realtime/presence_spec.rb#L1288)
1275
+ * [has no affect on the client's presence state and only enters on behalf of the provided client_id](./spec/acceptance/realtime/presence_spec.rb#L1292)
1276
+ * [enters a channel and sets the data based on the provided :data option](./spec/acceptance/realtime/presence_spec.rb#L1306)
1260
1277
  * message #connection_id
1261
- * [matches the current client connection_id](./spec/acceptance/realtime/presence_spec.rb#L1307)
1278
+ * [matches the current client connection_id](./spec/acceptance/realtime/presence_spec.rb#L1327)
1262
1279
  * without necessary capabilities to enter on behalf of another client
1263
- * [calls the Deferrable errback on capabilities failure](./spec/acceptance/realtime/presence_spec.rb#L1327)
1280
+ * [calls the Deferrable errback on capabilities failure](./spec/acceptance/realtime/presence_spec.rb#L1347)
1264
1281
  * it should behave like a public presence method
1265
1282
  * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
1266
1283
  * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
@@ -1332,9 +1349,9 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
1332
1349
  * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L470)
1333
1350
  * #update_client
1334
1351
  * multiple times on the same channel with different client_ids
1335
- * [updates the data attribute for the member when :data option provided](./spec/acceptance/realtime/presence_spec.rb#L1341)
1336
- * [updates the data attribute to null for the member when :data option is not provided (assumed null)](./spec/acceptance/realtime/presence_spec.rb#L1365)
1337
- * [enters if not already entered](./spec/acceptance/realtime/presence_spec.rb#L1377)
1352
+ * [updates the data attribute for the member when :data option provided](./spec/acceptance/realtime/presence_spec.rb#L1361)
1353
+ * [updates the data attribute to null for the member when :data option is not provided (assumed null)](./spec/acceptance/realtime/presence_spec.rb#L1387)
1354
+ * [enters if not already entered](./spec/acceptance/realtime/presence_spec.rb#L1401)
1338
1355
  * it should behave like a public presence method
1339
1356
  * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
1340
1357
  * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
@@ -1407,14 +1424,14 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
1407
1424
  * #leave_client
1408
1425
  * leaves a channel
1409
1426
  * multiple times on the same channel with different client_ids
1410
- * [emits the :leave event for each client_id](./spec/acceptance/realtime/presence_spec.rb#L1407)
1411
- * [succeeds if that client_id has not previously entered the channel](./spec/acceptance/realtime/presence_spec.rb#L1431)
1427
+ * [emits the :leave event for each client_id](./spec/acceptance/realtime/presence_spec.rb#L1433)
1428
+ * [succeeds if that client_id has not previously entered the channel](./spec/acceptance/realtime/presence_spec.rb#L1459)
1412
1429
  * with a new value in :data option
1413
- * [emits the leave event with the new data value](./spec/acceptance/realtime/presence_spec.rb#L1455)
1430
+ * [emits the leave event with the new data value](./spec/acceptance/realtime/presence_spec.rb#L1485)
1414
1431
  * with a nil value in :data option
1415
- * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L1468)
1432
+ * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L1500)
1416
1433
  * with no :data option
1417
- * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L1481)
1434
+ * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L1515)
1418
1435
  * it should behave like a public presence method
1419
1436
  * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
1420
1437
  * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
@@ -1485,162 +1502,165 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
1485
1502
  * and an empty client_id
1486
1503
  * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L470)
1487
1504
  * #get
1488
- * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L1500)
1489
- * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L1505)
1490
- * [catches exceptions in the provided method block](./spec/acceptance/realtime/presence_spec.rb#L1512)
1491
- * [implicitly attaches the channel (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1520)
1492
- * [fails if the connection is DETACHED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1555)
1493
- * [fails if the connection is FAILED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1570)
1494
- * [returns the current members on the channel (#RTP11a)](./spec/acceptance/realtime/presence_spec.rb#L1654)
1495
- * [filters by connection_id option if provided (#RTP11c3)](./spec/acceptance/realtime/presence_spec.rb#L1671)
1496
- * [filters by client_id option if provided (#RTP11c2)](./spec/acceptance/realtime/presence_spec.rb#L1693)
1497
- * [does not wait for SYNC to complete if :wait_for_sync option is false (#RTP11c1)](./spec/acceptance/realtime/presence_spec.rb#L1717)
1498
- * [returns the list of members and waits for SYNC to complete by default (#RTP11a)](./spec/acceptance/realtime/presence_spec.rb#L1729)
1505
+ * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L1536)
1506
+ * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L1541)
1507
+ * [catches exceptions in the provided method block](./spec/acceptance/realtime/presence_spec.rb#L1548)
1508
+ * [implicitly attaches the channel (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1556)
1509
+ * [fails if the connection is DETACHED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1591)
1510
+ * [fails if the connection is FAILED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1606)
1511
+ * [returns the current members on the channel (#RTP11a)](./spec/acceptance/realtime/presence_spec.rb#L1690)
1512
+ * [filters by connection_id option if provided (#RTP11c3)](./spec/acceptance/realtime/presence_spec.rb#L1707)
1513
+ * [filters by client_id option if provided (#RTP11c2)](./spec/acceptance/realtime/presence_spec.rb#L1729)
1514
+ * [does not wait for SYNC to complete if :wait_for_sync option is false (#RTP11c1)](./spec/acceptance/realtime/presence_spec.rb#L1753)
1515
+ * [returns the list of members and waits for SYNC to complete by default (#RTP11a)](./spec/acceptance/realtime/presence_spec.rb#L1765)
1499
1516
  * when the channel is SUSPENDED
1500
1517
  * with wait_for_sync: true
1501
- * [results in an error with @code@ @91005@ and a @message@ stating that the presence state is out of sync (#RTP11d)](./spec/acceptance/realtime/presence_spec.rb#L1530)
1518
+ * [results in an error with @code@ @91005@ and a @message@ stating that the presence state is out of sync (#RTP11d)](./spec/acceptance/realtime/presence_spec.rb#L1566)
1502
1519
  * with wait_for_sync: false
1503
- * [returns the current PresenceMap and does not wait for the channel to change to the ATTACHED state (#RTP11d)](./spec/acceptance/realtime/presence_spec.rb#L1543)
1520
+ * [returns the current PresenceMap and does not wait for the channel to change to the ATTACHED state (#RTP11d)](./spec/acceptance/realtime/presence_spec.rb#L1579)
1504
1521
  * during a sync
1505
1522
  * when :wait_for_sync is true
1506
- * [fails if the connection becomes FAILED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1607)
1507
- * [fails if the channel becomes detached (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1630)
1523
+ * [fails if the connection becomes FAILED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1643)
1524
+ * [fails if the channel becomes detached (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1666)
1508
1525
  * when a member enters and then leaves
1509
- * [has no members](./spec/acceptance/realtime/presence_spec.rb#L1742)
1526
+ * [has no members](./spec/acceptance/realtime/presence_spec.rb#L1778)
1510
1527
  * when a member enters and the presence map is updated
1511
- * [adds the member as being :present (#RTP2d)](./spec/acceptance/realtime/presence_spec.rb#L1757)
1528
+ * [adds the member as being :present (#RTP2d)](./spec/acceptance/realtime/presence_spec.rb#L1793)
1512
1529
  * with lots of members on different clients
1513
- * [returns a complete list of members on all clients](./spec/acceptance/realtime/presence_spec.rb#L1778)
1530
+ * [returns a complete list of members on all clients](./spec/acceptance/realtime/presence_spec.rb#L1814)
1514
1531
  * #subscribe
1515
- * [implicitly attaches](./spec/acceptance/realtime/presence_spec.rb#L1853)
1532
+ * [implicitly attaches](./spec/acceptance/realtime/presence_spec.rb#L1889)
1516
1533
  * with no arguments
1517
- * [calls the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb#L1814)
1534
+ * [calls the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb#L1850)
1518
1535
  * with event name
1519
- * [calls the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb#L1834)
1536
+ * [calls the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb#L1870)
1520
1537
  * with a callback that raises an exception
1521
- * [logs the error and continues](./spec/acceptance/realtime/presence_spec.rb#L1866)
1538
+ * [logs the error and continues](./spec/acceptance/realtime/presence_spec.rb#L1902)
1522
1539
  * #unsubscribe
1523
1540
  * with no arguments
1524
- * [removes the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb#L1887)
1541
+ * [removes the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb#L1923)
1525
1542
  * with event name
1526
- * [removes the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb#L1905)
1543
+ * [removes the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb#L1941)
1527
1544
  * REST #get
1528
- * [returns current members](./spec/acceptance/realtime/presence_spec.rb#L1924)
1529
- * [returns no members once left](./spec/acceptance/realtime/presence_spec.rb#L1940)
1545
+ * [returns current members](./spec/acceptance/realtime/presence_spec.rb#L1960)
1546
+ * [returns no members once left](./spec/acceptance/realtime/presence_spec.rb#L1976)
1530
1547
  * client_id with ASCII_8BIT
1531
1548
  * in connection set up
1532
- * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb#L1960)
1549
+ * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb#L1996)
1533
1550
  * in channel options
1534
- * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb#L1973)
1551
+ * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb#L2009)
1535
1552
  * encoding and decoding of presence message data
1536
- * [encrypts presence message data](./spec/acceptance/realtime/presence_spec.rb#L1999)
1553
+ * [encrypts presence message data](./spec/acceptance/realtime/presence_spec.rb#L2035)
1537
1554
  * #subscribe
1538
- * [emits decrypted enter events](./spec/acceptance/realtime/presence_spec.rb#L2018)
1539
- * [emits decrypted update events](./spec/acceptance/realtime/presence_spec.rb#L2030)
1540
- * [emits previously set data for leave events](./spec/acceptance/realtime/presence_spec.rb#L2044)
1555
+ * [emits decrypted enter events](./spec/acceptance/realtime/presence_spec.rb#L2054)
1556
+ * [emits decrypted update events](./spec/acceptance/realtime/presence_spec.rb#L2066)
1557
+ * [emits previously set data for leave events](./spec/acceptance/realtime/presence_spec.rb#L2080)
1541
1558
  * #get
1542
- * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb#L2060)
1559
+ * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb#L2096)
1543
1560
  * REST #get
1544
- * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb#L2074)
1561
+ * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb#L2110)
1545
1562
  * when cipher settings do not match publisher
1546
- * [delivers an unencoded presence message left with encoding value](./spec/acceptance/realtime/presence_spec.rb#L2090)
1547
- * [emits an error when cipher does not match and presence data cannot be decoded](./spec/acceptance/realtime/presence_spec.rb#L2103)
1563
+ * [delivers an unencoded presence message left with encoding value](./spec/acceptance/realtime/presence_spec.rb#L2126)
1564
+ * [emits an error when cipher does not match and presence data cannot be decoded](./spec/acceptance/realtime/presence_spec.rb#L2139)
1548
1565
  * leaving
1549
- * [expect :left event once underlying connection is closed](./spec/acceptance/realtime/presence_spec.rb#L2119)
1550
- * [expect :left event with client data from enter event](./spec/acceptance/realtime/presence_spec.rb#L2129)
1566
+ * [expect :left event once underlying connection is closed](./spec/acceptance/realtime/presence_spec.rb#L2155)
1567
+ * [expect :left event with client data from enter event](./spec/acceptance/realtime/presence_spec.rb#L2165)
1551
1568
  * connection failure mid-way through a large member sync
1552
- * [resumes the SYNC operation (#RTP3)](./spec/acceptance/realtime/presence_spec.rb#L2148)
1569
+ * [resumes the SYNC operation (#RTP3)](./spec/acceptance/realtime/presence_spec.rb#L2184)
1553
1570
  * server-initiated sync
1554
1571
  * with multiple SYNC pages
1555
- * [is initiated with a SYNC message and completed with a later SYNC message with no cursor value part of the channelSerial (#RTP18a, #RTP18b) ](./spec/acceptance/realtime/presence_spec.rb#L2186)
1572
+ * [is initiated with a SYNC message and completed with a later SYNC message with no cursor value part of the channelSerial (#RTP18a, #RTP18b) ](./spec/acceptance/realtime/presence_spec.rb#L2222)
1556
1573
  * with a single SYNC page
1557
- * [is initiated and completed with a single SYNC message (and no channelSerial) (#RTP18a, #RTP18c) ](./spec/acceptance/realtime/presence_spec.rb#L2237)
1574
+ * [is initiated and completed with a single SYNC message (and no channelSerial) (#RTP18a, #RTP18c) ](./spec/acceptance/realtime/presence_spec.rb#L2273)
1558
1575
  * when members exist in the PresenceMap before a SYNC completes
1559
- * [removes the members that are no longer present (#RTP19)](./spec/acceptance/realtime/presence_spec.rb#L2285)
1576
+ * [removes the members that are no longer present (#RTP19)](./spec/acceptance/realtime/presence_spec.rb#L2321)
1560
1577
  * when the client does not have presence subscribe privileges but is present on the channel
1561
- * PENDING: *[receives presence updates for all presence events generated by the current connection and the presence map is kept up to date (#RTP17a)](./spec/acceptance/realtime/presence_spec.rb#L2343)*
1578
+ * [receives presence updates for all presence events generated by the current connection and the presence map is kept up to date (#RTP17a)](./spec/acceptance/realtime/presence_spec.rb#L2379)
1562
1579
  * local PresenceMap for presence members entered by this client
1563
- * [maintains a copy of the member map for any member that shares this connection's connection ID (#RTP17)](./spec/acceptance/realtime/presence_spec.rb#L2393)
1580
+ * [maintains a copy of the member map for any member that shares this connection's connection ID (#RTP17)](./spec/acceptance/realtime/presence_spec.rb#L2427)
1581
+ * #RTP17b
1582
+ * FAILED: ~~[updates presence members on leave](./spec/acceptance/realtime/presence_spec.rb#L2455)~~
1583
+ * [does no update presence members on fabricated leave](./spec/acceptance/realtime/presence_spec.rb#L2480)
1564
1584
  * when a channel becomes attached again
1565
1585
  * and the resume flag is true
1566
1586
  * and the presence flag is false
1567
- * [does not send any presence events as the PresenceMap is in sync (#RTP5c1)](./spec/acceptance/realtime/presence_spec.rb#L2439)
1587
+ * [does not send any presence events as the PresenceMap is in sync (#RTP5c1)](./spec/acceptance/realtime/presence_spec.rb#L2527)
1568
1588
  * and the presence flag is true
1569
1589
  * and following the SYNC all local MemberMap members are present in the PresenceMap
1570
- * [does nothing as MemberMap is in sync (#RTP5c2)](./spec/acceptance/realtime/presence_spec.rb#L2469)
1590
+ * [does nothing as MemberMap is in sync (#RTP5c2)](./spec/acceptance/realtime/presence_spec.rb#L2557)
1571
1591
  * and following the SYNC a local MemberMap member is not present in the PresenceMap
1572
- * [re-enters the missing members automatically (#RTP5c2)](./spec/acceptance/realtime/presence_spec.rb#L2508)
1592
+ * [re-enters the missing members automatically (#RTP5c2)](./spec/acceptance/realtime/presence_spec.rb#L2596)
1573
1593
  * and the resume flag is false
1574
1594
  * and the presence flag is false
1575
- * [immediately resends all local presence members (#RTP5c2, #RTP19a)](./spec/acceptance/realtime/presence_spec.rb#L2591)
1595
+ * [immediately resends all local presence members (#RTP5c2, #RTP19a)](./spec/acceptance/realtime/presence_spec.rb#L2679)
1576
1596
  * when re-entering a client automatically, if the re-enter fails for any reason
1577
- * [should emit an ErrorInfo with error code 91004 (#RTP5c3)](./spec/acceptance/realtime/presence_spec.rb#L2642)
1597
+ * [should emit an ErrorInfo with error code 91004 (#RTP5c3)](./spec/acceptance/realtime/presence_spec.rb#L2730)
1578
1598
  * channel state side effects
1579
1599
  * channel transitions to the FAILED state
1580
- * [clears the PresenceMap and local member map copy and does not emit any presence events (#RTP5a)](./spec/acceptance/realtime/presence_spec.rb#L2699)
1600
+ * [clears the PresenceMap and local member map copy and does not emit any presence events (#RTP5a)](./spec/acceptance/realtime/presence_spec.rb#L2787)
1581
1601
  * channel transitions to the DETACHED state
1582
- * [clears the PresenceMap and local member map copy and does not emit any presence events (#RTP5a)](./spec/acceptance/realtime/presence_spec.rb#L2726)
1602
+ * [clears the PresenceMap and local member map copy and does not emit any presence events (#RTP5a)](./spec/acceptance/realtime/presence_spec.rb#L2814)
1583
1603
  * channel transitions to the SUSPENDED state
1584
- * [maintains the PresenceMap and only publishes presence event changes since the last attached state (#RTP5f)](./spec/acceptance/realtime/presence_spec.rb#L2762)
1604
+ * [maintains the PresenceMap and only publishes presence event changes since the last attached state (#RTP5f)](./spec/acceptance/realtime/presence_spec.rb#L2850)
1585
1605
 
1586
1606
  ### Ably::Realtime::Push::Admin
1587
1607
  _(see [spec/acceptance/realtime/push_admin_spec.rb](./spec/acceptance/realtime/push_admin_spec.rb))_
1588
1608
  * using JSON protocol
1589
1609
  * #publish
1590
1610
  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/push_admin_spec.rb#L35)
1591
- * [accepts valid push data and recipient](./spec/acceptance/realtime/push_admin_spec.rb#L139)
1611
+ * [accepts valid push data and recipient](./spec/acceptance/realtime/push_admin_spec.rb#L125)
1592
1612
  * invalid arguments
1593
1613
  * [raises an exception with a nil recipient](./spec/acceptance/realtime/push_admin_spec.rb#L44)
1594
1614
  * [raises an exception with a empty recipient](./spec/acceptance/realtime/push_admin_spec.rb#L49)
1595
1615
  * [raises an exception with a nil recipient](./spec/acceptance/realtime/push_admin_spec.rb#L54)
1596
1616
  * [raises an exception with a empty recipient](./spec/acceptance/realtime/push_admin_spec.rb#L59)
1597
1617
  * invalid recipient
1598
- * PENDING: *[raises an error after receiving a 40x realtime response](./spec/acceptance/realtime/push_admin_spec.rb#L66)*
1618
+ * [raises an error after receiving a 40x realtime response](./spec/acceptance/realtime/push_admin_spec.rb#L68)
1599
1619
  * invalid push data
1600
- * PENDING: *[raises an error after receiving a 40x realtime response](./spec/acceptance/realtime/push_admin_spec.rb#L76)*
1620
+ * [raises an error after receiving a 40x realtime response](./spec/acceptance/realtime/push_admin_spec.rb#L79)
1601
1621
  * recipient variable case
1602
- * [is converted to snakeCase](./spec/acceptance/realtime/push_admin_spec.rb#L131)
1622
+ * [is converted to snakeCase](./spec/acceptance/realtime/push_admin_spec.rb#L117)
1603
1623
  * using test environment channel recipient (#RSH1a)
1604
- * [triggers a push notification](./spec/acceptance/realtime/push_admin_spec.rb#L169)
1624
+ * [triggers a push notification](./spec/acceptance/realtime/push_admin_spec.rb#L155)
1605
1625
  * #device_registrations
1606
1626
  * without permissions
1607
- * [raises a permissions not authorized exception](./spec/acceptance/realtime/push_admin_spec.rb#L197)
1627
+ * [raises a permissions not authorized exception](./spec/acceptance/realtime/push_admin_spec.rb#L183)
1608
1628
  * #list
1609
- * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/realtime/push_admin_spec.rb#L241)
1610
- * [supports paging](./spec/acceptance/realtime/push_admin_spec.rb#L249)
1611
- * [raises an exception if params are invalid](./spec/acceptance/realtime/push_admin_spec.rb#L265)
1629
+ * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/realtime/push_admin_spec.rb#L233)
1630
+ * [supports paging](./spec/acceptance/realtime/push_admin_spec.rb#L241)
1631
+ * [raises an exception if params are invalid](./spec/acceptance/realtime/push_admin_spec.rb#L257)
1612
1632
  * #get
1613
- * [returns a DeviceDetails object if a device ID string is provided](./spec/acceptance/realtime/push_admin_spec.rb#L298)
1633
+ * [returns a DeviceDetails object if a device ID string is provided](./spec/acceptance/realtime/push_admin_spec.rb#L296)
1614
1634
  * with a failed request
1615
- * [raises a ResourceMissing exception if device ID does not exist](./spec/acceptance/realtime/push_admin_spec.rb#L315)
1635
+ * [raises a ResourceMissing exception if device ID does not exist](./spec/acceptance/realtime/push_admin_spec.rb#L313)
1616
1636
  * #save
1617
- * [saves the new DeviceDetails Hash object](./spec/acceptance/realtime/push_admin_spec.rb#L358)
1637
+ * [saves the new DeviceDetails Hash object](./spec/acceptance/realtime/push_admin_spec.rb#L362)
1618
1638
  * with a failed request
1619
- * [fails if data is invalid](./spec/acceptance/realtime/push_admin_spec.rb#L376)
1639
+ * [fails if data is invalid](./spec/acceptance/realtime/push_admin_spec.rb#L380)
1620
1640
  * #remove_where
1621
- * [removes all matching device registrations by client_id](./spec/acceptance/realtime/push_admin_spec.rb#L408)
1641
+ * [removes all matching device registrations by client_id](./spec/acceptance/realtime/push_admin_spec.rb#L418)
1622
1642
  * #remove
1623
- * [removes the provided device id string](./spec/acceptance/realtime/push_admin_spec.rb#L441)
1643
+ * [removes the provided device id string](./spec/acceptance/realtime/push_admin_spec.rb#L457)
1624
1644
  * #channel_subscriptions
1625
1645
  * #list
1626
- * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/realtime/push_admin_spec.rb#L511)
1627
- * [supports paging](./spec/acceptance/realtime/push_admin_spec.rb#L519)
1628
- * [raises an exception if none of the required filters are provided](./spec/acceptance/realtime/push_admin_spec.rb#L535)
1646
+ * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/realtime/push_admin_spec.rb#L533)
1647
+ * [supports paging](./spec/acceptance/realtime/push_admin_spec.rb#L541)
1648
+ * [raises an exception if none of the required filters are provided](./spec/acceptance/realtime/push_admin_spec.rb#L557)
1629
1649
  * #list_channels
1630
- * [returns a PaginatedResult object containing String objects](./spec/acceptance/realtime/push_admin_spec.rb#L560)
1650
+ * [returns a PaginatedResult object containing String objects](./spec/acceptance/realtime/push_admin_spec.rb#L584)
1631
1651
  * #save
1632
- * [saves the new client_id PushChannelSubscription Hash object](./spec/acceptance/realtime/push_admin_spec.rb#L575)
1633
- * [raises an exception for invalid params](./spec/acceptance/realtime/push_admin_spec.rb#L586)
1652
+ * [saves the new client_id PushChannelSubscription Hash object](./spec/acceptance/realtime/push_admin_spec.rb#L599)
1653
+ * [raises an exception for invalid params](./spec/acceptance/realtime/push_admin_spec.rb#L610)
1634
1654
  * failed requests
1635
- * [fails for invalid requests](./spec/acceptance/realtime/push_admin_spec.rb#L599)
1655
+ * [fails for invalid requests](./spec/acceptance/realtime/push_admin_spec.rb#L623)
1636
1656
  * #remove_where
1637
- * [removes matching client_ids](./spec/acceptance/realtime/push_admin_spec.rb#L626)
1638
- * [succeeds on no match](./spec/acceptance/realtime/push_admin_spec.rb#L653)
1657
+ * [removes matching client_ids](./spec/acceptance/realtime/push_admin_spec.rb#L650)
1658
+ * [succeeds on no match](./spec/acceptance/realtime/push_admin_spec.rb#L677)
1639
1659
  * failed requests
1640
- * [device_id and client_id filters in the same request are not supported](./spec/acceptance/realtime/push_admin_spec.rb#L645)
1660
+ * [device_id and client_id filters in the same request are not supported](./spec/acceptance/realtime/push_admin_spec.rb#L669)
1641
1661
  * #remove
1642
- * [removes match for Hash object by channel and client_id](./spec/acceptance/realtime/push_admin_spec.rb#L673)
1643
- * [succeeds even if there is no match](./spec/acceptance/realtime/push_admin_spec.rb#L685)
1662
+ * [removes match for Hash object by channel and client_id](./spec/acceptance/realtime/push_admin_spec.rb#L697)
1663
+ * [succeeds even if there is no match](./spec/acceptance/realtime/push_admin_spec.rb#L709)
1644
1664
 
1645
1665
  ### Ably::Realtime::Push
1646
1666
  _(see [spec/acceptance/realtime/push_spec.rb](./spec/acceptance/realtime/push_spec.rb))_
@@ -1671,213 +1691,205 @@ _(see [spec/acceptance/realtime/time_spec.rb](./spec/acceptance/realtime/time_sp
1671
1691
  ### Ably::Auth
1672
1692
  _(see [spec/acceptance/rest/auth_spec.rb](./spec/acceptance/rest/auth_spec.rb))_
1673
1693
  * using JSON protocol
1674
- * [has immutable options](./spec/acceptance/rest/auth_spec.rb#L60)
1694
+ * [has immutable options](./spec/acceptance/rest/auth_spec.rb#L48)
1675
1695
  * #request_token
1676
- * [creates a TokenRequest automatically and sends it to Ably to obtain a token](./spec/acceptance/rest/auth_spec.rb#L75)
1677
- * [returns a valid TokenDetails object in the expected format with valid issued and expires attributes](./spec/acceptance/rest/auth_spec.rb#L84)
1696
+ * [creates a TokenRequest automatically and sends it to Ably to obtain a token](./spec/acceptance/rest/auth_spec.rb#L63)
1697
+ * [returns a valid TokenDetails object in the expected format with valid issued and expires attributes](./spec/acceptance/rest/auth_spec.rb#L72)
1678
1698
  * with token_param :client_id
1679
- * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L117)
1699
+ * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L105)
1680
1700
  * with token_param :capability
1681
- * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L117)
1701
+ * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L105)
1682
1702
  * with token_param :nonce
1683
- * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L117)
1703
+ * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L105)
1684
1704
  * with token_param :timestamp
1685
- * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L117)
1705
+ * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L105)
1686
1706
  * with token_param :ttl
1687
- * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L117)
1707
+ * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L105)
1688
1708
  * with :key option
1689
- * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L147)
1709
+ * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L135)
1690
1710
  * with :key_name & :key_secret options
1691
- * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L177)
1711
+ * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L165)
1692
1712
  * with :query_time option
1693
- * [queries the server for the time (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L185)
1713
+ * [queries the server for the time (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L173)
1694
1714
  * without :query_time option
1695
- * [does not query the server for the time](./spec/acceptance/rest/auth_spec.rb#L194)
1715
+ * [does not query the server for the time](./spec/acceptance/rest/auth_spec.rb#L182)
1696
1716
  * with :auth_url option merging
1697
1717
  * with existing configured auth options
1698
1718
  * using unspecified :auth_method
1699
- * [requests a token using a GET request with provided headers, and merges client_id into auth_params](./spec/acceptance/rest/auth_spec.rb#L234)
1719
+ * [requests a token using a GET request with provided headers, and merges client_id into auth_params](./spec/acceptance/rest/auth_spec.rb#L222)
1700
1720
  * with provided token_params
1701
- * [merges provided token_params with existing auth_params and client_id](./spec/acceptance/rest/auth_spec.rb#L242)
1721
+ * [merges provided token_params with existing auth_params and client_id](./spec/acceptance/rest/auth_spec.rb#L230)
1702
1722
  * with provided auth option auth_params and auth_headers
1703
- * [replaces any preconfigured auth_params](./spec/acceptance/rest/auth_spec.rb#L250)
1723
+ * [replaces any preconfigured auth_params](./spec/acceptance/rest/auth_spec.rb#L238)
1704
1724
  * using :get :auth_method and query params in the URL
1705
- * [requests a token using a GET request with provided headers, and merges client_id into auth_params and existing URL querystring into new URL querystring](./spec/acceptance/rest/auth_spec.rb#L261)
1725
+ * [requests a token using a GET request with provided headers, and merges client_id into auth_params and existing URL querystring into new URL querystring](./spec/acceptance/rest/auth_spec.rb#L249)
1706
1726
  * using :post :auth_method
1707
- * [requests a token using a POST request with provided headers, and merges client_id into auth_params as form-encoded post data](./spec/acceptance/rest/auth_spec.rb#L271)
1727
+ * [requests a token using a POST request with provided headers, and merges client_id into auth_params as form-encoded post data](./spec/acceptance/rest/auth_spec.rb#L259)
1708
1728
  * with :auth_url option
1709
1729
  * when response from :auth_url is a valid token request
1710
- * [requests a token from :auth_url using an HTTP GET request](./spec/acceptance/rest/auth_spec.rb#L321)
1711
- * [returns a valid token generated from the token request](./spec/acceptance/rest/auth_spec.rb#L326)
1730
+ * [requests a token from :auth_url using an HTTP GET request](./spec/acceptance/rest/auth_spec.rb#L309)
1731
+ * [returns a valid token generated from the token request](./spec/acceptance/rest/auth_spec.rb#L314)
1712
1732
  * with :query_params
1713
- * [requests a token from :auth_url with the :query_params](./spec/acceptance/rest/auth_spec.rb#L333)
1733
+ * [requests a token from :auth_url with the :query_params](./spec/acceptance/rest/auth_spec.rb#L321)
1714
1734
  * with :headers
1715
- * [requests a token from :auth_url with the HTTP headers set](./spec/acceptance/rest/auth_spec.rb#L341)
1735
+ * [requests a token from :auth_url with the HTTP headers set](./spec/acceptance/rest/auth_spec.rb#L329)
1716
1736
  * with POST
1717
- * [requests a token from :auth_url using an HTTP POST instead of the default GET](./spec/acceptance/rest/auth_spec.rb#L349)
1737
+ * [requests a token from :auth_url using an HTTP POST instead of the default GET](./spec/acceptance/rest/auth_spec.rb#L337)
1718
1738
  * when response from :auth_url is a token details object
1719
- * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L374)
1739
+ * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L362)
1720
1740
  * when response from :auth_url is text/plain content type and a token string
1721
- * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L392)
1741
+ * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L380)
1722
1742
  * when response is invalid
1723
1743
  * 500
1724
- * [raises ServerError](./spec/acceptance/rest/auth_spec.rb#L406)
1744
+ * [raises ServerError](./spec/acceptance/rest/auth_spec.rb#L394)
1725
1745
  * XML
1726
- * [raises InvalidResponseBody](./spec/acceptance/rest/auth_spec.rb#L417)
1746
+ * [raises InvalidResponseBody](./spec/acceptance/rest/auth_spec.rb#L405)
1727
1747
  * with a Proc for the :auth_callback option
1728
1748
  * that returns a TokenRequest
1729
- * [calls the Proc with token_params when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L440)
1730
- * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L444)
1749
+ * [calls the Proc with token_params when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L428)
1750
+ * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L432)
1731
1751
  * when authorized
1732
- * [sets Auth#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L451)
1733
- * [sets Client#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L455)
1752
+ * [sets Auth#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L439)
1753
+ * [sets Client#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L443)
1734
1754
  * that returns a TokenDetails JSON object
1735
- * [calls the lambda when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L489)
1736
- * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L494)
1755
+ * [calls the lambda when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L477)
1756
+ * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L482)
1737
1757
  * when authorized
1738
- * [sets Auth#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L506)
1739
- * [sets Client#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L510)
1758
+ * [sets Auth#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L494)
1759
+ * [sets Client#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L498)
1740
1760
  * that returns a TokenDetails object
1741
- * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L525)
1761
+ * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L513)
1742
1762
  * that returns a Token string
1743
- * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L541)
1763
+ * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L529)
1744
1764
  * with auth_option :client_id
1745
- * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L571)
1765
+ * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L559)
1746
1766
  * with token_param :client_id
1747
- * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L580)
1767
+ * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L568)
1748
1768
  * before #authorize has been called
1749
- * [has no current_token_details](./spec/acceptance/rest/auth_spec.rb#L587)
1769
+ * [has no current_token_details](./spec/acceptance/rest/auth_spec.rb#L575)
1750
1770
  * #authorize (#RSA10, #RSA10j)
1751
- * [updates the persisted token params that are then used for subsequent authorize requests](./spec/acceptance/rest/auth_spec.rb#L754)
1752
- * [updates the persisted auth options that are then used for subsequent authorize requests](./spec/acceptance/rest/auth_spec.rb#L760)
1771
+ * [updates the persisted token params that are then used for subsequent authorize requests](./spec/acceptance/rest/auth_spec.rb#L742)
1772
+ * [updates the persisted auth options that are then used for subsequent authorize requests](./spec/acceptance/rest/auth_spec.rb#L748)
1753
1773
  * when called for the first time since the client has been instantiated
1754
- * [passes all auth_options and token_params to #request_token](./spec/acceptance/rest/auth_spec.rb#L601)
1755
- * [returns a valid token](./spec/acceptance/rest/auth_spec.rb#L606)
1756
- * [issues a new token every time (#RSA10a)](./spec/acceptance/rest/auth_spec.rb#L610)
1774
+ * [passes all auth_options and token_params to #request_token](./spec/acceptance/rest/auth_spec.rb#L589)
1775
+ * [returns a valid token](./spec/acceptance/rest/auth_spec.rb#L594)
1776
+ * [issues a new token every time (#RSA10a)](./spec/acceptance/rest/auth_spec.rb#L598)
1757
1777
  * query_time: true with authorize
1758
- * [only queries the server time once and then works out the offset, query_time option is never persisted (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L624)
1778
+ * [only queries the server time once and then works out the offset, query_time option is never persisted (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L612)
1759
1779
  * query_time: true ClientOption when instanced
1760
- * [only queries the server time once and then works out the offset, query_time option is never persisted (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L644)
1780
+ * [only queries the server time once and then works out the offset, query_time option is never persisted (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L632)
1761
1781
  * TokenParams argument
1762
- * [has no effect on the defaults when null and TokenParam defaults remain the same](./spec/acceptance/rest/auth_spec.rb#L661)
1763
- * [updates defaults when present and all previous configured TokenParams are discarded (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L668)
1764
- * [updates Auth#token_params attribute with an immutable hash](./spec/acceptance/rest/auth_spec.rb#L676)
1765
- * [uses TokenParams#timestamp for this request but obtains a new timestamp for subsequence requests (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L681)
1782
+ * [has no effect on the defaults when null and TokenParam defaults remain the same](./spec/acceptance/rest/auth_spec.rb#L649)
1783
+ * [updates defaults when present and all previous configured TokenParams are discarded (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L656)
1784
+ * [updates Auth#token_params attribute with an immutable hash](./spec/acceptance/rest/auth_spec.rb#L664)
1785
+ * [uses TokenParams#timestamp for this request but obtains a new timestamp for subsequence requests (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L669)
1766
1786
  * AuthOptions argument
1767
- * [has no effect on the defaults when null and AuthOptions defaults remain the same](./spec/acceptance/rest/auth_spec.rb#L706)
1768
- * [updates defaults when present and all previous configured AuthOptions are discarded (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L712)
1769
- * [updates Auth#options attribute with an immutable hash](./spec/acceptance/rest/auth_spec.rb#L719)
1770
- * [uses AuthOptions#query_time for this request and will not query_time for subsequent requests (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L724)
1771
- * [uses AuthOptions#query_time for this request and will query_time again if provided subsequently](./spec/acceptance/rest/auth_spec.rb#L730)
1787
+ * [has no effect on the defaults when null and AuthOptions defaults remain the same](./spec/acceptance/rest/auth_spec.rb#L694)
1788
+ * [updates defaults when present and all previous configured AuthOptions are discarded (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L700)
1789
+ * [updates Auth#options attribute with an immutable hash](./spec/acceptance/rest/auth_spec.rb#L707)
1790
+ * [uses AuthOptions#query_time for this request and will not query_time for subsequent requests (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L712)
1791
+ * [uses AuthOptions#query_time for this request and will query_time again if provided subsequently](./spec/acceptance/rest/auth_spec.rb#L718)
1772
1792
  * with previous authorisation
1773
- * [requests a new token if token is expired](./spec/acceptance/rest/auth_spec.rb#L743)
1774
- * [issues a new token every time #authorize is called](./spec/acceptance/rest/auth_spec.rb#L749)
1793
+ * [requests a new token if token is expired](./spec/acceptance/rest/auth_spec.rb#L731)
1794
+ * [issues a new token every time #authorize is called](./spec/acceptance/rest/auth_spec.rb#L737)
1775
1795
  * with a lambda for the :auth_callback option
1776
- * [calls the lambda](./spec/acceptance/rest/auth_spec.rb#L777)
1777
- * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L781)
1796
+ * [calls the lambda](./spec/acceptance/rest/auth_spec.rb#L765)
1797
+ * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L769)
1778
1798
  * for every subsequent #request_token
1779
1799
  * without a :auth_callback lambda
1780
- * [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb#L787)
1800
+ * [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb#L775)
1781
1801
  * with a provided block
1782
- * [does not call the originally provided lambda and calls the new #request_token :auth_callback lambda](./spec/acceptance/rest/auth_spec.rb#L794)
1802
+ * [does not call the originally provided lambda and calls the new #request_token :auth_callback lambda](./spec/acceptance/rest/auth_spec.rb#L782)
1783
1803
  * with an explicit token string that expires
1784
1804
  * and a lambda for the :auth_callback option to provide a means to renew the token
1785
- * [calls the lambda once the token has expired and the new token is used](./spec/acceptance/rest/auth_spec.rb#L821)
1805
+ * [calls the lambda once the token has expired and the new token is used](./spec/acceptance/rest/auth_spec.rb#L809)
1786
1806
  * with an explicit ClientOptions client_id
1787
1807
  * and an incompatible client_id in a TokenDetails object passed to the auth callback
1788
- * [rejects a TokenDetails object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L839)
1808
+ * [rejects a TokenDetails object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L827)
1789
1809
  * and an incompatible client_id in a TokenRequest object passed to the auth callback and raises an exception
1790
- * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L847)
1810
+ * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L835)
1791
1811
  * and a token string without any retrievable client_id
1792
- * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L855)
1812
+ * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L843)
1793
1813
  * #create_token_request
1794
- * [returns a TokenRequest object](./spec/acceptance/rest/auth_spec.rb#L870)
1795
- * [returns a TokenRequest that can be passed to a client that can use it for authentication without an API key](./spec/acceptance/rest/auth_spec.rb#L874)
1796
- * [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb#L881)
1797
- * [specifies no TTL (#RSA5)](./spec/acceptance/rest/auth_spec.rb#L885)
1798
- * [specifies no capability (#RSA6)](./spec/acceptance/rest/auth_spec.rb#L899)
1814
+ * [returns a TokenRequest object](./spec/acceptance/rest/auth_spec.rb#L858)
1815
+ * [returns a TokenRequest that can be passed to a client that can use it for authentication without an API key](./spec/acceptance/rest/auth_spec.rb#L862)
1816
+ * [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb#L869)
1817
+ * [specifies no TTL (#RSA5)](./spec/acceptance/rest/auth_spec.rb#L873)
1818
+ * [specifies no capability (#RSA6)](./spec/acceptance/rest/auth_spec.rb#L887)
1799
1819
  * with a :ttl option below the Token expiry buffer that ensures tokens are renewed 15s before they expire as they are considered expired
1800
- * [uses the Token expiry buffer default + 10s to allow for a token request in flight](./spec/acceptance/rest/auth_spec.rb#L893)
1820
+ * [uses the Token expiry buffer default + 10s to allow for a token request in flight](./spec/acceptance/rest/auth_spec.rb#L881)
1801
1821
  * the nonce
1802
- * [is unique for every request](./spec/acceptance/rest/auth_spec.rb#L904)
1803
- * [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb#L909)
1822
+ * [is unique for every request](./spec/acceptance/rest/auth_spec.rb#L892)
1823
+ * [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb#L897)
1804
1824
  * with token param :ttl
1805
- * [overrides default](./spec/acceptance/rest/auth_spec.rb#L920)
1825
+ * [overrides default](./spec/acceptance/rest/auth_spec.rb#L908)
1806
1826
  * with token param :nonce
1807
- * [overrides default](./spec/acceptance/rest/auth_spec.rb#L920)
1827
+ * [overrides default](./spec/acceptance/rest/auth_spec.rb#L908)
1808
1828
  * with token param :client_id
1809
- * [overrides default](./spec/acceptance/rest/auth_spec.rb#L920)
1829
+ * [overrides default](./spec/acceptance/rest/auth_spec.rb#L908)
1810
1830
  * when specifying capability
1811
- * [overrides the default](./spec/acceptance/rest/auth_spec.rb#L931)
1812
- * [uses these capabilities when Ably issues an actual token](./spec/acceptance/rest/auth_spec.rb#L935)
1831
+ * [overrides the default](./spec/acceptance/rest/auth_spec.rb#L919)
1832
+ * [uses these capabilities when Ably issues an actual token](./spec/acceptance/rest/auth_spec.rb#L923)
1813
1833
  * with additional invalid attributes
1814
- * [are ignored](./spec/acceptance/rest/auth_spec.rb#L945)
1834
+ * [are ignored](./spec/acceptance/rest/auth_spec.rb#L933)
1815
1835
  * when required fields are missing
1816
- * [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb#L956)
1817
- * [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb#L960)
1836
+ * [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb#L944)
1837
+ * [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb#L948)
1818
1838
  * timestamp attribute
1819
- * [is a Time object in Ruby and is set to the local time](./spec/acceptance/rest/auth_spec.rb#L987)
1839
+ * [is a Time object in Ruby and is set to the local time](./spec/acceptance/rest/auth_spec.rb#L975)
1820
1840
  * with :query_time auth_option
1821
- * [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb#L972)
1841
+ * [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb#L960)
1822
1842
  * with :timestamp option
1823
- * [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb#L982)
1843
+ * [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb#L970)
1824
1844
  * signing
1825
- * [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb#L1011)
1845
+ * [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb#L999)
1826
1846
  * lexicographic ordering of channels and operations
1827
- * [HMAC is lexicographic ordered and thus the HMAC is identical](./spec/acceptance/rest/auth_spec.rb#L1038)
1828
- * [is valid when used for authentication](./spec/acceptance/rest/auth_spec.rb#L1044)
1847
+ * [HMAC is lexicographic ordered and thus the HMAC is identical](./spec/acceptance/rest/auth_spec.rb#L1026)
1848
+ * [is valid when used for authentication](./spec/acceptance/rest/auth_spec.rb#L1032)
1829
1849
  * using token authentication
1830
1850
  * with :token option
1831
- * [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb#L1071)
1832
- * [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb#L1075)
1833
- * [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb#L1083)
1834
- * [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb#L1091)
1851
+ * [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb#L1059)
1852
+ * [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb#L1063)
1853
+ * [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb#L1071)
1854
+ * [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb#L1079)
1835
1855
  * and the token expires
1836
- * [should indicate an error and not retry the request (#RSA4a)](./spec/acceptance/rest/auth_spec.rb#L1125)
1837
- * when implicit as a result of using :client_id
1838
- * and requests to the Ably server are mocked
1839
- * [will send a token request to the server](./spec/acceptance/rest/auth_spec.rb#L1155)
1840
- * a token is created
1841
- * [before a request is made](./spec/acceptance/rest/auth_spec.rb#L1164)
1842
- * [when a message is published](./spec/acceptance/rest/auth_spec.rb#L1168)
1843
- * [with capability and TTL defaults (#TK2a, #TK2b)](./spec/acceptance/rest/auth_spec.rb#L1172)
1844
- * [#client_id contains the client_id](./spec/acceptance/rest/auth_spec.rb#L1183)
1856
+ * [should indicate an error and not retry the request (#RSA4a)](./spec/acceptance/rest/auth_spec.rb#L1113)
1845
1857
  * when token expires
1846
- * [automatically renews the token (#RSA4b)](./spec/acceptance/rest/auth_spec.rb#L1212)
1847
- * [fails if the token renewal fails (#RSA4b)](./spec/acceptance/rest/auth_spec.rb#L1222)
1858
+ * [automatically renews the token (#RSA4b)](./spec/acceptance/rest/auth_spec.rb#L1143)
1859
+ * [fails if the token renewal fails (#RSA4b)](./spec/acceptance/rest/auth_spec.rb#L1153)
1848
1860
  * when :client_id is provided in a token
1849
- * [#client_id contains the client_id](./spec/acceptance/rest/auth_spec.rb#L1246)
1861
+ * [#client_id contains the client_id](./spec/acceptance/rest/auth_spec.rb#L1177)
1850
1862
  * #client_id_validated?
1851
1863
  * when using basic auth
1852
- * [is false as basic auth users do not have an identity](./spec/acceptance/rest/auth_spec.rb#L1258)
1864
+ * [is false as basic auth users do not have an identity](./spec/acceptance/rest/auth_spec.rb#L1189)
1853
1865
  * when using a token auth string for a token with a client_id
1854
- * [is false as identification is not possible from an opaque token string](./spec/acceptance/rest/auth_spec.rb#L1266)
1866
+ * [is false as identification is not possible from an opaque token string](./spec/acceptance/rest/auth_spec.rb#L1197)
1855
1867
  * when using a token
1856
1868
  * with a client_id
1857
- * [is true](./spec/acceptance/rest/auth_spec.rb#L1275)
1869
+ * [is true](./spec/acceptance/rest/auth_spec.rb#L1206)
1858
1870
  * with no client_id (anonymous)
1859
- * [is true](./spec/acceptance/rest/auth_spec.rb#L1283)
1871
+ * [is true](./spec/acceptance/rest/auth_spec.rb#L1214)
1860
1872
  * with a wildcard client_id (anonymous)
1861
- * [is false](./spec/acceptance/rest/auth_spec.rb#L1291)
1873
+ * [is false](./spec/acceptance/rest/auth_spec.rb#L1222)
1862
1874
  * when using a token request with a client_id
1863
- * [is not true as identification is not confirmed until authenticated](./spec/acceptance/rest/auth_spec.rb#L1300)
1875
+ * [is not true as identification is not confirmed until authenticated](./spec/acceptance/rest/auth_spec.rb#L1231)
1864
1876
  * after authentication
1865
- * [is true as identification is completed during implicit authentication](./spec/acceptance/rest/auth_spec.rb#L1307)
1877
+ * [is true as identification is completed during implicit authentication](./spec/acceptance/rest/auth_spec.rb#L1238)
1866
1878
  * when using a :key and basic auth
1867
- * [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb#L1315)
1868
- * [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb#L1319)
1869
- * [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb#L1323)
1879
+ * [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb#L1246)
1880
+ * [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb#L1250)
1881
+ * [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb#L1254)
1870
1882
  * deprecated #authorise
1871
- * [logs a deprecation warning (#RSA10l)](./spec/acceptance/rest/auth_spec.rb#L1332)
1872
- * [returns a valid token (#RSA10l)](./spec/acceptance/rest/auth_spec.rb#L1337)
1883
+ * [logs a deprecation warning (#RSA10l)](./spec/acceptance/rest/auth_spec.rb#L1263)
1884
+ * [returns a valid token (#RSA10l)](./spec/acceptance/rest/auth_spec.rb#L1268)
1873
1885
  * when using JWT
1874
- * [authenticates correctly using the JWT token generated by the echo server](./spec/acceptance/rest/auth_spec.rb#L1349)
1886
+ * [authenticates correctly using the JWT token generated by the echo server](./spec/acceptance/rest/auth_spec.rb#L1280)
1875
1887
  * when the JWT embeds an Ably token
1876
- * [authenticates correctly using the embedded token](./spec/acceptance/rest/auth_spec.rb#L1356)
1888
+ * [authenticates correctly using the embedded token](./spec/acceptance/rest/auth_spec.rb#L1287)
1877
1889
  * and the requested token is encrypted
1878
- * [authenticates correctly using the embedded token](./spec/acceptance/rest/auth_spec.rb#L1363)
1890
+ * [authenticates correctly using the embedded token](./spec/acceptance/rest/auth_spec.rb#L1294)
1879
1891
  * when the token requested is returned with application/jwt content type
1880
- * [authenticates correctly and pulls stats](./spec/acceptance/rest/auth_spec.rb#L1374)
1892
+ * [authenticates correctly and pulls stats](./spec/acceptance/rest/auth_spec.rb#L1305)
1881
1893
 
1882
1894
  ### Ably::Rest
1883
1895
  _(see [spec/acceptance/rest/base_spec.rb](./spec/acceptance/rest/base_spec.rb))_
@@ -1921,78 +1933,88 @@ _(see [spec/acceptance/rest/channel_spec.rb](./spec/acceptance/rest/channel_spec
1921
1933
  * [publishes an array of messages in one HTTP request](./spec/acceptance/rest/channel_spec.rb#L62)
1922
1934
  * with an array of Message objects
1923
1935
  * [publishes an array of messages in one HTTP request](./spec/acceptance/rest/channel_spec.rb#L77)
1936
+ * with a Message object
1937
+ * [publishes the message](./spec/acceptance/rest/channel_spec.rb#L92)
1938
+ * with a Message object and query params
1939
+ * [should fail to publish the message (RSL1l1)](./spec/acceptance/rest/channel_spec.rb#L104)
1940
+ * with Messages and query params
1941
+ * [should fail to publish the message (RSL1l1)](./spec/acceptance/rest/channel_spec.rb#L117)
1924
1942
  * without adequate permissions on the channel
1925
- * [raises a permission error when publishing](./spec/acceptance/rest/channel_spec.rb#L89)
1943
+ * [raises a permission error when publishing](./spec/acceptance/rest/channel_spec.rb#L127)
1926
1944
  * null attributes
1927
1945
  * when name is null
1928
- * [publishes the message without a name attribute in the payload](./spec/acceptance/rest/channel_spec.rb#L98)
1946
+ * [publishes the message without a name attribute in the payload](./spec/acceptance/rest/channel_spec.rb#L136)
1929
1947
  * when data is null
1930
- * [publishes the message without a data attribute in the payload](./spec/acceptance/rest/channel_spec.rb#L109)
1948
+ * [publishes the message without a data attribute in the payload](./spec/acceptance/rest/channel_spec.rb#L147)
1931
1949
  * with neither name or data attributes
1932
- * [publishes the message without any attributes in the payload](./spec/acceptance/rest/channel_spec.rb#L120)
1950
+ * [publishes the message without any attributes in the payload](./spec/acceptance/rest/channel_spec.rb#L158)
1933
1951
  * identified clients
1934
1952
  * when authenticated with a wildcard client_id
1935
1953
  * with a valid client_id in the message
1936
- * [succeeds](./spec/acceptance/rest/channel_spec.rb#L137)
1954
+ * [succeeds](./spec/acceptance/rest/channel_spec.rb#L175)
1937
1955
  * with a wildcard client_id in the message
1938
- * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L146)
1956
+ * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L184)
1939
1957
  * with an empty client_id in the message
1940
- * [succeeds and publishes without a client_id](./spec/acceptance/rest/channel_spec.rb#L152)
1958
+ * [succeeds and publishes without a client_id](./spec/acceptance/rest/channel_spec.rb#L190)
1941
1959
  * when authenticated with a Token string with an implicit client_id
1942
1960
  * without having a confirmed identity
1943
1961
  * with a valid client_id in the message
1944
- * [succeeds](./spec/acceptance/rest/channel_spec.rb#L169)
1962
+ * [succeeds](./spec/acceptance/rest/channel_spec.rb#L207)
1945
1963
  * with an invalid client_id in the message
1946
- * [succeeds in the client library but then fails when published to Ably](./spec/acceptance/rest/channel_spec.rb#L178)
1964
+ * [succeeds in the client library but then fails when published to Ably](./spec/acceptance/rest/channel_spec.rb#L216)
1947
1965
  * with an empty client_id in the message
1948
- * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L184)
1966
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L222)
1949
1967
  * when authenticated with TokenDetails with a valid client_id
1950
1968
  * with a valid client_id in the message
1951
- * [succeeds](./spec/acceptance/rest/channel_spec.rb#L201)
1969
+ * [succeeds](./spec/acceptance/rest/channel_spec.rb#L239)
1952
1970
  * with a wildcard client_id in the message
1953
- * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L210)
1971
+ * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L248)
1954
1972
  * with an invalid client_id in the message
1955
- * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L216)
1973
+ * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L254)
1956
1974
  * with an empty client_id in the message
1957
- * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L222)
1975
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L260)
1958
1976
  * when anonymous and no client_id
1959
1977
  * with a client_id in the message
1960
- * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L238)
1978
+ * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L276)
1961
1979
  * with a wildcard client_id in the message
1962
- * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L244)
1980
+ * [throws an exception](./spec/acceptance/rest/channel_spec.rb#L282)
1963
1981
  * with an empty client_id in the message
1964
- * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L250)
1982
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L288)
1965
1983
  * with a non ASCII channel name
1966
1984
  * stubbed
1967
- * [correctly encodes the channel name](./spec/acceptance/rest/channel_spec.rb#L272)
1985
+ * [correctly encodes the channel name](./spec/acceptance/rest/channel_spec.rb#L310)
1986
+ * with a frozen message event name
1987
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L320)
1988
+ * with a frozen payload
1989
+ * [succeeds and publishes with an implicit client_id](./spec/acceptance/rest/channel_spec.rb#L342)
1968
1990
  * #history
1969
- * [returns a PaginatedResult model](./spec/acceptance/rest/channel_spec.rb#L297)
1970
- * [returns the current message history for the channel](./spec/acceptance/rest/channel_spec.rb#L301)
1971
- * [returns paged history using the PaginatedResult model](./spec/acceptance/rest/channel_spec.rb#L329)
1991
+ * [returns a PaginatedResult model](./spec/acceptance/rest/channel_spec.rb#L372)
1992
+ * [returns the current message history for the channel](./spec/acceptance/rest/channel_spec.rb#L376)
1993
+ * [returns paged history using the PaginatedResult model](./spec/acceptance/rest/channel_spec.rb#L404)
1972
1994
  * message timestamps
1973
- * [are after the messages were published](./spec/acceptance/rest/channel_spec.rb#L314)
1995
+ * [are after the messages were published](./spec/acceptance/rest/channel_spec.rb#L389)
1974
1996
  * message IDs
1975
- * [is unique](./spec/acceptance/rest/channel_spec.rb#L322)
1997
+ * [is unique](./spec/acceptance/rest/channel_spec.rb#L397)
1976
1998
  * direction
1977
- * [returns paged history backwards by default](./spec/acceptance/rest/channel_spec.rb#L356)
1978
- * [returns history forward if specified in the options](./spec/acceptance/rest/channel_spec.rb#L362)
1999
+ * [returns paged history backwards by default](./spec/acceptance/rest/channel_spec.rb#L431)
2000
+ * [returns history forward if specified in the options](./spec/acceptance/rest/channel_spec.rb#L437)
1979
2001
  * limit
1980
- * [defaults to 100](./spec/acceptance/rest/channel_spec.rb#L374)
2002
+ * [defaults to 100](./spec/acceptance/rest/channel_spec.rb#L449)
1981
2003
  * #history option
1982
2004
  * :start
1983
2005
  * with milliseconds since epoch value
1984
- * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb#L414)
2006
+ * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb#L489)
1985
2007
  * with a Time object value
1986
- * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb#L424)
2008
+ * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb#L499)
1987
2009
  * :end
1988
2010
  * with milliseconds since epoch value
1989
- * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb#L414)
2011
+ * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb#L489)
1990
2012
  * with a Time object value
1991
- * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb#L424)
2013
+ * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb#L499)
1992
2014
  * when argument start is after end
1993
- * [should raise an exception](./spec/acceptance/rest/channel_spec.rb#L434)
2015
+ * [should raise an exception](./spec/acceptance/rest/channel_spec.rb#L509)
1994
2016
  * #presence
1995
- * [returns a REST Presence object](./spec/acceptance/rest/channel_spec.rb#L444)
2017
+ * [returns a REST Presence object](./spec/acceptance/rest/channel_spec.rb#L519)
1996
2018
 
1997
2019
  ### Ably::Rest::Channels
1998
2020
  _(see [spec/acceptance/rest/channels_spec.rb](./spec/acceptance/rest/channels_spec.rb))_
@@ -2013,6 +2035,10 @@ _(see [spec/acceptance/rest/channels_spec.rb](./spec/acceptance/rest/channels_sp
2013
2035
  * behaves like a channel
2014
2036
  * [returns a channel object](./spec/acceptance/rest/channels_spec.rb#L6)
2015
2037
  * [returns channel object and passes the provided options](./spec/acceptance/rest/channels_spec.rb#L11)
2038
+ * using a frozen channel name
2039
+ * behaves like a channel
2040
+ * [returns a channel object](./spec/acceptance/rest/channels_spec.rb#L6)
2041
+ * [returns channel object and passes the provided options](./spec/acceptance/rest/channels_spec.rb#L11)
2016
2042
 
2017
2043
  ### Ably::Rest::Client
2018
2044
  _(see [spec/acceptance/rest/client_spec.rb](./spec/acceptance/rest/client_spec.rb))_
@@ -2026,162 +2052,168 @@ _(see [spec/acceptance/rest/client_spec.rb](./spec/acceptance/rest/client_spec.r
2026
2052
  * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L46)
2027
2053
  * with :use_token_auth set to true
2028
2054
  * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L54)
2029
- * with a :client_id configured
2030
- * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L62)
2031
2055
  * with a non string :client_id
2032
- * [raises an ArgumentError](./spec/acceptance/rest/client_spec.rb#L70)
2056
+ * [raises an ArgumentError](./spec/acceptance/rest/client_spec.rb#L62)
2033
2057
  * with an invalid wildcard "*" :client_id
2034
- * [raises an exception](./spec/acceptance/rest/client_spec.rb#L76)
2058
+ * [raises an exception](./spec/acceptance/rest/client_spec.rb#L68)
2035
2059
  * with an :auth_callback lambda
2036
- * [calls the auth lambda to get a new token](./spec/acceptance/rest/client_spec.rb#L84)
2037
- * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L89)
2060
+ * [calls the auth lambda to get a new token](./spec/acceptance/rest/client_spec.rb#L76)
2061
+ * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L81)
2038
2062
  * with :default_token_params
2039
- * [overides the default token params (#TO3j11)](./spec/acceptance/rest/client_spec.rb#L103)
2063
+ * [overides the default token params (#TO3j11)](./spec/acceptance/rest/client_spec.rb#L95)
2040
2064
  * with an :auth_callback lambda (clientId provided in library options instead of as a token_request param)
2041
- * [correctly sets the clientId on the token](./spec/acceptance/rest/client_spec.rb#L113)
2065
+ * [correctly sets the clientId on the token](./spec/acceptance/rest/client_spec.rb#L105)
2042
2066
  * with an auth URL
2043
- * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L123)
2067
+ * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L115)
2044
2068
  * before any REST request
2045
- * [sends an HTTP request to the provided auth URL to get a new token](./spec/acceptance/rest/client_spec.rb#L134)
2069
+ * [sends an HTTP request to the provided auth URL to get a new token](./spec/acceptance/rest/client_spec.rb#L126)
2046
2070
  * auth headers
2047
2071
  * with basic auth
2048
- * [sends the API key in authentication part of the secure URL (the Authorization: Basic header is not used with the Faraday HTTP library by default)](./spec/acceptance/rest/client_spec.rb#L154)
2072
+ * [sends the API key in authentication part of the secure URL (the Authorization: Basic header is not used with the Faraday HTTP library by default)](./spec/acceptance/rest/client_spec.rb#L147)
2049
2073
  * with token auth
2050
2074
  * without specifying protocol
2051
- * [sends the token string over HTTPS in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb#L173)
2075
+ * [sends the token string over HTTPS in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb#L166)
2052
2076
  * when setting constructor ClientOption :tls to false
2053
- * [sends the token string over HTTP in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb#L183)
2077
+ * [sends the token string over HTTP in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb#L176)
2054
2078
  * using tokens
2055
2079
  * when expired
2056
- * [creates a new token automatically when the old token expires](./spec/acceptance/rest/client_spec.rb#L216)
2080
+ * [creates a new token automatically when the old token expires](./spec/acceptance/rest/client_spec.rb#L209)
2057
2081
  * with a different client_id in the subsequent token
2058
- * [fails to authenticate and raises an exception](./spec/acceptance/rest/client_spec.rb#L229)
2082
+ * [fails to authenticate and raises an exception](./spec/acceptance/rest/client_spec.rb#L222)
2059
2083
  * when token has not expired
2060
- * [reuses the existing token for every request](./spec/acceptance/rest/client_spec.rb#L240)
2084
+ * [reuses the existing token for every request](./spec/acceptance/rest/client_spec.rb#L233)
2061
2085
  * connection transport
2062
2086
  * defaults
2063
2087
  * for default host
2064
- * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L257)
2065
- * [is configured to timeout connection requests in 10 seconds](./spec/acceptance/rest/client_spec.rb#L261)
2088
+ * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L250)
2089
+ * [is configured to timeout connection requests in 10 seconds](./spec/acceptance/rest/client_spec.rb#L254)
2066
2090
  * for the fallback hosts
2067
- * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L267)
2068
- * [is configured to timeout connection requests in 10 seconds](./spec/acceptance/rest/client_spec.rb#L271)
2091
+ * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L260)
2092
+ * [is configured to timeout connection requests in 10 seconds](./spec/acceptance/rest/client_spec.rb#L264)
2069
2093
  * with custom http_open_timeout and http_request_timeout options
2070
2094
  * for default host
2071
- * [is configured to use custom open timeout](./spec/acceptance/rest/client_spec.rb#L283)
2072
- * [is configured to use custom request timeout](./spec/acceptance/rest/client_spec.rb#L287)
2095
+ * [is configured to use custom open timeout](./spec/acceptance/rest/client_spec.rb#L276)
2096
+ * [is configured to use custom request timeout](./spec/acceptance/rest/client_spec.rb#L280)
2073
2097
  * for the fallback hosts
2074
- * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L293)
2075
- * [is configured to timeout connection requests in 10 seconds](./spec/acceptance/rest/client_spec.rb#L297)
2098
+ * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L286)
2099
+ * [is configured to timeout connection requests in 10 seconds](./spec/acceptance/rest/client_spec.rb#L290)
2076
2100
  * fallback hosts
2077
2101
  * configured
2078
- * [should make connection attempts to A.ably-realtime.com, B.ably-realtime.com, C.ably-realtime.com, D.ably-realtime.com, E.ably-realtime.com (#RSC15a)](./spec/acceptance/rest/client_spec.rb#L311)
2102
+ * [should make connection attempts to A.ably-realtime.com, B.ably-realtime.com, C.ably-realtime.com, D.ably-realtime.com, E.ably-realtime.com (#RSC15a)](./spec/acceptance/rest/client_spec.rb#L304)
2079
2103
  * when environment is NOT production (#RSC15b)
2080
- * [does not retry failed requests with fallback hosts when there is a connection error](./spec/acceptance/rest/client_spec.rb#L328)
2104
+ * [does not retry failed requests with fallback hosts when there is a connection error](./spec/acceptance/rest/client_spec.rb#L321)
2081
2105
  * when environment is production
2082
2106
  * and connection times out
2083
- * [tries fallback hosts 3 times (#RSC15b, #RSC15b)](./spec/acceptance/rest/client_spec.rb#L367)
2107
+ * [tries fallback hosts 3 times (#RSC15b, #RSC15b)](./spec/acceptance/rest/client_spec.rb#L360)
2084
2108
  * and the total request time exeeds 15 seconds
2085
- * [makes no further attempts to any fallback hosts](./spec/acceptance/rest/client_spec.rb#L382)
2109
+ * [makes no further attempts to any fallback hosts](./spec/acceptance/rest/client_spec.rb#L375)
2086
2110
  * and connection fails
2087
- * [tries fallback hosts 3 times](./spec/acceptance/rest/client_spec.rb#L398)
2111
+ * [tries fallback hosts 3 times](./spec/acceptance/rest/client_spec.rb#L391)
2088
2112
  * and first request to primary endpoint fails
2089
- * [tries a fallback host, and for the next request tries the primary endpoint again (#RSC15e)](./spec/acceptance/rest/client_spec.rb#L432)
2113
+ * [tries a fallback host, and for the next request tries the primary endpoint again (#RSC15e)](./spec/acceptance/rest/client_spec.rb#L425)
2090
2114
  * and basic authentication fails
2091
- * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L459)
2115
+ * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L452)
2092
2116
  * and server returns a 50x error
2093
- * [attempts the fallback hosts as this is an authentication failure (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L481)
2117
+ * [attempts the fallback hosts as this is an authentication failure (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L474)
2094
2118
  * when environment is production and server returns a 50x error
2095
2119
  * with custom fallback hosts provided
2096
- * [attempts the fallback hosts as this is an authentication failure (#RSC15b, #RSC15a, #TO3k6)](./spec/acceptance/rest/client_spec.rb#L530)
2120
+ * [attempts the fallback hosts as this is an authentication failure (#RSC15b, #RSC15a, #TO3k6)](./spec/acceptance/rest/client_spec.rb#L523)
2097
2121
  * with an empty array of fallback hosts provided (#RSC15b, #RSC15a, #TO3k6)
2098
- * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L543)
2122
+ * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L536)
2099
2123
  * using a local web-server
2100
2124
  * and timing out the primary host
2101
2125
  * POST with request timeout less than max_retry_duration
2102
- * [tries the primary host, then both fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L607)
2126
+ * [tries the primary host, then both fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L600)
2103
2127
  * GET with request timeout less than max_retry_duration
2104
- * [tries the primary host, then both fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L630)
2128
+ * [tries the primary host, then both fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L623)
2105
2129
  * POST with request timeout more than max_retry_duration
2106
- * [does not try any fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L653)
2130
+ * [does not try any fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L646)
2107
2131
  * GET with request timeout more than max_retry_duration
2108
- * [does not try any fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L675)
2132
+ * [does not try any fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L668)
2109
2133
  * and failing the primary host
2110
- * [tries one of the fallback hosts](./spec/acceptance/rest/client_spec.rb#L720)
2134
+ * [tries one of the fallback hosts](./spec/acceptance/rest/client_spec.rb#L713)
2111
2135
  * to fail the primary host, allow a fallback to succeed, then later trigger a fallback to the primary host (#RSC15f)
2112
- * [succeeds and remembers fallback host preferences across requests](./spec/acceptance/rest/client_spec.rb#L776)
2136
+ * [succeeds and remembers fallback host preferences across requests](./spec/acceptance/rest/client_spec.rb#L769)
2113
2137
  * with custom :fallback_retry_timeout
2114
- * [stops using the preferred fallback after this time](./spec/acceptance/rest/client_spec.rb#L813)
2138
+ * [stops using the preferred fallback after this time](./spec/acceptance/rest/client_spec.rb#L806)
2115
2139
  * when environment is not production and server returns a 50x error
2116
2140
  * with custom fallback hosts provided (#RSC15b, #TO3k6)
2117
- * [attempts the fallback hosts as this is not an authentication failure](./spec/acceptance/rest/client_spec.rb#L874)
2141
+ * [attempts the fallback hosts as this is not an authentication failure](./spec/acceptance/rest/client_spec.rb#L867)
2118
2142
  * with an empty array of fallback hosts provided (#RSC15b, #TO3k6)
2119
- * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L887)
2143
+ * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L880)
2120
2144
  * with fallback_hosts_use_default: true (#RSC15b, #TO3k7)
2121
- * [attempts the default fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L912)
2145
+ * [attempts the default fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L905)
2122
2146
  * with a custom host
2123
2147
  * that does not exist
2124
- * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb#L928)
2148
+ * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb#L921)
2125
2149
  * fallback hosts
2126
- * [are never used](./spec/acceptance/rest/client_spec.rb#L949)
2150
+ * [are never used](./spec/acceptance/rest/client_spec.rb#L942)
2127
2151
  * that times out
2128
- * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb#L964)
2152
+ * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb#L957)
2129
2153
  * fallback hosts
2130
- * [are never used](./spec/acceptance/rest/client_spec.rb#L977)
2154
+ * [are never used](./spec/acceptance/rest/client_spec.rb#L970)
2131
2155
  * HTTP configuration options
2132
- * [is frozen](./spec/acceptance/rest/client_spec.rb#L1034)
2156
+ * [is frozen](./spec/acceptance/rest/client_spec.rb#L1027)
2133
2157
  * defaults
2134
- * [#http_open_timeout is 4s](./spec/acceptance/rest/client_spec.rb#L989)
2135
- * [#http_request_timeout is 10s](./spec/acceptance/rest/client_spec.rb#L993)
2136
- * [#http_max_retry_count is 3](./spec/acceptance/rest/client_spec.rb#L997)
2137
- * [#http_max_retry_duration is 15s](./spec/acceptance/rest/client_spec.rb#L1001)
2158
+ * [#http_open_timeout is 4s](./spec/acceptance/rest/client_spec.rb#L982)
2159
+ * [#http_request_timeout is 10s](./spec/acceptance/rest/client_spec.rb#L986)
2160
+ * [#http_max_retry_count is 3](./spec/acceptance/rest/client_spec.rb#L990)
2161
+ * [#http_max_retry_duration is 15s](./spec/acceptance/rest/client_spec.rb#L994)
2138
2162
  * configured
2139
- * [#http_open_timeout uses provided value](./spec/acceptance/rest/client_spec.rb#L1017)
2140
- * [#http_request_timeout uses provided value](./spec/acceptance/rest/client_spec.rb#L1021)
2141
- * [#http_max_retry_count uses provided value](./spec/acceptance/rest/client_spec.rb#L1025)
2142
- * [#http_max_retry_duration uses provided value](./spec/acceptance/rest/client_spec.rb#L1029)
2163
+ * [#http_open_timeout uses provided value](./spec/acceptance/rest/client_spec.rb#L1010)
2164
+ * [#http_request_timeout uses provided value](./spec/acceptance/rest/client_spec.rb#L1014)
2165
+ * [#http_max_retry_count uses provided value](./spec/acceptance/rest/client_spec.rb#L1018)
2166
+ * [#http_max_retry_duration uses provided value](./spec/acceptance/rest/client_spec.rb#L1022)
2143
2167
  * #auth
2144
- * [is provides access to the Auth object](./spec/acceptance/rest/client_spec.rb#L1045)
2145
- * [configures the Auth object with all ClientOptions passed to client in the initializer](./spec/acceptance/rest/client_spec.rb#L1049)
2168
+ * [is provides access to the Auth object](./spec/acceptance/rest/client_spec.rb#L1038)
2169
+ * [configures the Auth object with all ClientOptions passed to client in the initializer](./spec/acceptance/rest/client_spec.rb#L1042)
2146
2170
  * version headers
2147
2171
  * with variant none
2148
- * [sends a protocol version and lib version header (#G4, #RSC7a, #RSC7b)](./spec/acceptance/rest/client_spec.rb#L1083)
2172
+ * [sends a protocol version and lib version header (#G4, #RSC7a, #RSC7b)](./spec/acceptance/rest/client_spec.rb#L1076)
2149
2173
  * with variant foo
2150
- * [sends a protocol version and lib version header (#G4, #RSC7a, #RSC7b)](./spec/acceptance/rest/client_spec.rb#L1083)
2174
+ * [sends a protocol version and lib version header (#G4, #RSC7a, #RSC7b)](./spec/acceptance/rest/client_spec.rb#L1076)
2151
2175
  * #request (#RSC19*)
2152
2176
  * get
2153
- * [returns an HttpPaginatedResponse object](./spec/acceptance/rest/client_spec.rb#L1096)
2177
+ * [returns an HttpPaginatedResponse object](./spec/acceptance/rest/client_spec.rb#L1091)
2154
2178
  * 404 request to invalid URL
2155
- * [returns an object with 404 status code and error message](./spec/acceptance/rest/client_spec.rb#L1103)
2179
+ * [returns an object with 404 status code and error message](./spec/acceptance/rest/client_spec.rb#L1098)
2156
2180
  * paged results
2157
- * [provides paging](./spec/acceptance/rest/client_spec.rb#L1115)
2181
+ * [provides paging](./spec/acceptance/rest/client_spec.rb#L1110)
2182
+ * post
2183
+ * [supports post](./spec/acceptance/rest/client_spec.rb#L1135)
2184
+ * delete
2185
+ * [supports delete](./spec/acceptance/rest/client_spec.rb#L1148)
2186
+ * patch
2187
+ * [supports patch](./spec/acceptance/rest/client_spec.rb#L1164)
2188
+ * put
2189
+ * [supports put](./spec/acceptance/rest/client_spec.rb#L1187)
2158
2190
  * request_id generation
2159
2191
  * Timeout error
2160
2192
  * with option add_request_ids: true
2161
- * [has an error with the same request_id of the request](./spec/acceptance/rest/client_spec.rb#L1150)
2193
+ * [has an error with the same request_id of the request](./spec/acceptance/rest/client_spec.rb#L1210)
2162
2194
  * with option add_request_ids: true and REST operations with a message body
2163
2195
  * with mocks to inspect the params
2164
2196
  * with a single publish
2165
- * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1172)
2197
+ * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1232)
2166
2198
  * with an array publish
2167
- * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1179)
2199
+ * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1239)
2168
2200
  * without mocks to ensure the requests are accepted
2169
2201
  * with a single publish
2170
- * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1188)
2202
+ * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1248)
2171
2203
  * with an array publish
2172
- * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1195)
2204
+ * [succeeds and sends the request_id as a param](./spec/acceptance/rest/client_spec.rb#L1255)
2173
2205
  * option add_request_ids: true and specified fallback hosts
2174
- * [request_id is the same across retries](./spec/acceptance/rest/client_spec.rb#L1220)
2206
+ * [request_id is the same across retries](./spec/acceptance/rest/client_spec.rb#L1280)
2175
2207
  * without request_id
2176
- * [does not include request_id in ConnectionTimeout error](./spec/acceptance/rest/client_spec.rb#L1232)
2208
+ * [does not include request_id in ConnectionTimeout error](./spec/acceptance/rest/client_spec.rb#L1292)
2177
2209
  * UnauthorizedRequest nonce error
2178
- * [includes request_id in UnauthorizedRequest error due to replayed nonce](./spec/acceptance/rest/client_spec.rb#L1245)
2210
+ * [includes request_id in UnauthorizedRequest error due to replayed nonce](./spec/acceptance/rest/client_spec.rb#L1305)
2179
2211
  * failed request logging
2180
- * [is absent when requests do not fail](./spec/acceptance/rest/client_spec.rb#L1262)
2212
+ * [is absent when requests do not fail](./spec/acceptance/rest/client_spec.rb#L1322)
2181
2213
  * with the first request failing
2182
- * [is present with success message when requests do not actually fail](./spec/acceptance/rest/client_spec.rb#L1277)
2214
+ * [is present with success message when requests do not actually fail](./spec/acceptance/rest/client_spec.rb#L1337)
2183
2215
  * with all requests failing
2184
- * [is present when all requests fail](./spec/acceptance/rest/client_spec.rb#L1294)
2216
+ * [is present when all requests fail](./spec/acceptance/rest/client_spec.rb#L1354)
2185
2217
 
2186
2218
  ### Ably::Models::MessageEncoders
2187
2219
  _(see [spec/acceptance/rest/encoders_spec.rb](./spec/acceptance/rest/encoders_spec.rb))_
@@ -2234,99 +2266,99 @@ _(see [spec/acceptance/rest/message_spec.rb](./spec/acceptance/rest/message_spec
2234
2266
  * JSON Object (Hash)
2235
2267
  * [is encoded and decoded to the same hash](./spec/acceptance/rest/message_spec.rb#L71)
2236
2268
  * JSON Array
2237
- * [is encoded and decoded to the same deep multi-type object](./spec/acceptance/rest/message_spec.rb#L81)
2269
+ * [is encoded and decoded to the same deep multi-type object](./spec/acceptance/rest/message_spec.rb#L80)
2238
2270
  * nil
2239
- * [is encoded and decoded to the same Array](./spec/acceptance/rest/message_spec.rb#L88)
2271
+ * [is encoded and decoded to the same Array](./spec/acceptance/rest/message_spec.rb#L87)
2240
2272
  * idempotency (#RSL1k)
2241
- * [idempotent publishing is disabled by default with 1.1 (#TO3n)](./spec/acceptance/rest/message_spec.rb#L165)
2242
- * [idempotent publishing is enabled by default with 1.2 (#TO3n)](./spec/acceptance/rest/message_spec.rb#L170)
2273
+ * [idempotent publishing is disabled by default with 1.1 (#TO3n)](./spec/acceptance/rest/message_spec.rb#L156)
2274
+ * [idempotent publishing is enabled by default with 1.2 (#TO3n)](./spec/acceptance/rest/message_spec.rb#L161)
2243
2275
  * when ID is not included (#RSL1k2)
2244
2276
  * with Message object
2245
- * [publishes the same message three times](./spec/acceptance/rest/message_spec.rb#L104)
2277
+ * [publishes the same message three times](./spec/acceptance/rest/message_spec.rb#L103)
2246
2278
  * with #publish arguments only
2247
- * [publishes the same message three times](./spec/acceptance/rest/message_spec.rb#L111)
2279
+ * [publishes the same message three times](./spec/acceptance/rest/message_spec.rb#L110)
2248
2280
  * when ID is included (#RSL1k2, #RSL1k5)
2249
- * [the ID provided is used for the published messages](./spec/acceptance/rest/message_spec.rb#L140)
2250
- * PENDING: *[for multiple messages in one publish operation (#RSL1k3)](./spec/acceptance/rest/message_spec.rb#L145)*
2251
- * PENDING: *[for multiple messages in one publish operation with IDs following the required format described in RSL1k1 (#RSL1k3)](./spec/acceptance/rest/message_spec.rb#L154)*
2281
+ * [the ID provided is used for the published messages](./spec/acceptance/rest/message_spec.rb#L135)
2282
+ * [for multiple messages in one publish operation (#RSL1k3)](./spec/acceptance/rest/message_spec.rb#L140)
2283
+ * [for multiple messages in one publish operation with IDs following the required format described in RSL1k1 (#RSL1k3)](./spec/acceptance/rest/message_spec.rb#L147)
2252
2284
  * with Message object
2253
- * PENDING: *[three REST publishes result in only one message being published](./spec/acceptance/rest/message_spec.rb#L122)*
2285
+ * [three REST publishes result in only one message being published](./spec/acceptance/rest/message_spec.rb#L121)
2254
2286
  * with #publish arguments only
2255
- * PENDING: *[three REST publishes result in only one message being published](./spec/acceptance/rest/message_spec.rb#L132)*
2287
+ * [three REST publishes result in only one message being published](./spec/acceptance/rest/message_spec.rb#L129)
2256
2288
  * when idempotent publishing is enabled in the client library ClientOptions (#TO3n)
2257
- * [the ID is populated with a random ID and serial 0 from this lib (#RSL1k1)](./spec/acceptance/rest/message_spec.rb#L242)
2289
+ * [the ID is populated with a random ID and serial 0 from this lib (#RSL1k1)](./spec/acceptance/rest/message_spec.rb#L225)
2258
2290
  * when there is a network failure triggering an automatic retry (#RSL1k4)
2259
- * PENDING: *[for multiple messages in one publish operation](./spec/acceptance/rest/message_spec.rb#L233)*
2291
+ * [for multiple messages in one publish operation](./spec/acceptance/rest/message_spec.rb#L218)
2260
2292
  * with Message object
2261
- * PENDING: *[two REST publish retries result in only one message being published](./spec/acceptance/rest/message_spec.rb#L197)*
2293
+ * [two REST publish retries result in only one message being published](./spec/acceptance/rest/message_spec.rb#L188)
2262
2294
  * with #publish arguments only
2263
- * PENDING: *[two REST publish retries result in only one message being published](./spec/acceptance/rest/message_spec.rb#L209)*
2295
+ * [two REST publish retries result in only one message being published](./spec/acceptance/rest/message_spec.rb#L198)
2264
2296
  * with explicitly provided message ID
2265
- * PENDING: *[two REST publish retries result in only one message being published](./spec/acceptance/rest/message_spec.rb#L223)*
2297
+ * [two REST publish retries result in only one message being published](./spec/acceptance/rest/message_spec.rb#L210)
2266
2298
  * when publishing a batch of messages
2267
- * PENDING: *[the ID is populated with a single random ID and sequence of serials from this lib (#RSL1k1)](./spec/acceptance/rest/message_spec.rb#L250)*
2299
+ * [the ID is populated with a single random ID and sequence of serials from this lib (#RSL1k1)](./spec/acceptance/rest/message_spec.rb#L233)
2268
2300
  * with unsupported data payload content type
2269
2301
  * Integer
2270
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L269)
2302
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L250)
2271
2303
  * Float
2272
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L277)
2304
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L258)
2273
2305
  * Boolean
2274
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L285)
2306
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L266)
2275
2307
  * False
2276
- * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L293)
2308
+ * [is raises an UnsupportedDataType 40013 exception](./spec/acceptance/rest/message_spec.rb#L274)
2277
2309
  * encryption and encoding
2278
2310
  * with #publish and #history
2279
2311
  * with AES-128-CBC using crypto-data-128.json fixtures (#RTL7d)
2280
2312
  * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
2281
2313
  * behaves like an Ably encrypter and decrypter
2282
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2283
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2314
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2315
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2284
2316
  * item 1 with encrypted encoding cipher+aes-128-cbc/base64
2285
2317
  * behaves like an Ably encrypter and decrypter
2286
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2287
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2318
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2319
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2288
2320
  * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
2289
2321
  * behaves like an Ably encrypter and decrypter
2290
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2291
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2322
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2323
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2292
2324
  * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
2293
2325
  * behaves like an Ably encrypter and decrypter
2294
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2295
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2326
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2327
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2296
2328
  * with AES-256-CBC using crypto-data-256.json fixtures (#RTL7d)
2297
2329
  * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
2298
2330
  * behaves like an Ably encrypter and decrypter
2299
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2300
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2331
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2332
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2301
2333
  * item 1 with encrypted encoding cipher+aes-256-cbc/base64
2302
2334
  * behaves like an Ably encrypter and decrypter
2303
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2304
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2335
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2336
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2305
2337
  * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
2306
2338
  * behaves like an Ably encrypter and decrypter
2307
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2308
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2339
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2340
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2309
2341
  * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
2310
2342
  * behaves like an Ably encrypter and decrypter
2311
- * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L338)
2312
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L353)
2343
+ * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L319)
2344
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L334)
2313
2345
  * when publishing lots of messages
2314
- * [encrypts on #publish and decrypts on #history](./spec/acceptance/rest/message_spec.rb#L386)
2346
+ * [encrypts on #publish and decrypts on #history](./spec/acceptance/rest/message_spec.rb#L367)
2315
2347
  * when retrieving #history with a different protocol
2316
- * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/rest/message_spec.rb#L413)
2317
- * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/rest/message_spec.rb#L413)
2318
- * [delivers a Hash payload to the receiver](./spec/acceptance/rest/message_spec.rb#L413)
2348
+ * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/rest/message_spec.rb#L394)
2349
+ * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/rest/message_spec.rb#L394)
2350
+ * [delivers a Hash payload to the receiver](./spec/acceptance/rest/message_spec.rb#L394)
2319
2351
  * when publishing on an unencrypted channel and retrieving with #history on an encrypted channel
2320
- * [does not attempt to decrypt the message](./spec/acceptance/rest/message_spec.rb#L429)
2352
+ * [does not attempt to decrypt the message](./spec/acceptance/rest/message_spec.rb#L410)
2321
2353
  * when publishing on an encrypted channel and retrieving with #history on an unencrypted channel
2322
- * [retrieves the message that remains encrypted with an encrypted encoding attribute (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L450)
2323
- * [logs a Cipher exception (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L456)
2354
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L431)
2355
+ * [logs a Cipher exception (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L437)
2324
2356
  * publishing on an encrypted channel and retrieving #history with a different algorithm on another client (#RTL7e)
2325
- * [retrieves the message that remains encrypted with an encrypted encoding attribute (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L477)
2326
- * [logs a Cipher exception (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L483)
2357
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L458)
2358
+ * [logs a Cipher exception (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L464)
2327
2359
  * publishing on an encrypted channel and subscribing with a different key on another client
2328
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](./spec/acceptance/rest/message_spec.rb#L504)
2329
- * [logs a Cipher exception](./spec/acceptance/rest/message_spec.rb#L510)
2360
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](./spec/acceptance/rest/message_spec.rb#L485)
2361
+ * [logs a Cipher exception](./spec/acceptance/rest/message_spec.rb#L491)
2330
2362
 
2331
2363
  ### Ably::Rest::Presence
2332
2364
  _(see [spec/acceptance/rest/presence_spec.rb](./spec/acceptance/rest/presence_spec.rb))_
@@ -2399,7 +2431,7 @@ _(see [spec/acceptance/rest/presence_spec.rb](./spec/acceptance/rest/presence_sp
2399
2431
  _(see [spec/acceptance/rest/push_admin_spec.rb](./spec/acceptance/rest/push_admin_spec.rb))_
2400
2432
  * using JSON protocol
2401
2433
  * #publish
2402
- * [accepts valid push data and recipient (#RSH1a)](./spec/acceptance/rest/push_admin_spec.rb#L127)
2434
+ * [accepts valid push data and recipient (#RSH1a)](./spec/acceptance/rest/push_admin_spec.rb#L111)
2403
2435
  * without publish permissions
2404
2436
  * [raises a permissions issue exception](./spec/acceptance/rest/push_admin_spec.rb#L40)
2405
2437
  * invalid arguments (#RHS1a)
@@ -2412,71 +2444,71 @@ _(see [spec/acceptance/rest/push_admin_spec.rb](./spec/acceptance/rest/push_admi
2412
2444
  * invalid push data (#RSH1a)
2413
2445
  * [raises an error after receiving a 40x realtime response](./spec/acceptance/rest/push_admin_spec.rb#L70)
2414
2446
  * recipient variable case
2415
- * [is converted to snakeCase](./spec/acceptance/rest/push_admin_spec.rb#L121)
2447
+ * [is converted to snakeCase](./spec/acceptance/rest/push_admin_spec.rb#L105)
2416
2448
  * using test environment channel recipient (#RSH1a)
2417
- * [triggers a push notification](./spec/acceptance/rest/push_admin_spec.rb#L152)
2449
+ * [triggers a push notification](./spec/acceptance/rest/push_admin_spec.rb#L136)
2418
2450
  * #device_registrations (#RSH1b)
2419
2451
  * without permissions
2420
- * [raises a permissions not authorized exception](./spec/acceptance/rest/push_admin_spec.rb#L172)
2452
+ * [raises a permissions not authorized exception](./spec/acceptance/rest/push_admin_spec.rb#L156)
2421
2453
  * #list (#RSH1b2)
2422
- * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/rest/push_admin_spec.rb#L207)
2423
- * [returns an empty PaginatedResult if not params match](./spec/acceptance/rest/push_admin_spec.rb#L213)
2424
- * [supports paging](./spec/acceptance/rest/push_admin_spec.rb#L219)
2425
- * [provides filtering](./spec/acceptance/rest/push_admin_spec.rb#L231)
2454
+ * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/rest/push_admin_spec.rb#L197)
2455
+ * [returns an empty PaginatedResult if not params match](./spec/acceptance/rest/push_admin_spec.rb#L203)
2456
+ * [supports paging](./spec/acceptance/rest/push_admin_spec.rb#L209)
2457
+ * [provides filtering](./spec/acceptance/rest/push_admin_spec.rb#L221)
2426
2458
  * #get (#RSH1b1)
2427
- * [returns a DeviceDetails object if a device ID string is provided](./spec/acceptance/rest/push_admin_spec.rb#L270)
2428
- * [returns a DeviceDetails object if a DeviceDetails object is provided](./spec/acceptance/rest/push_admin_spec.rb#L278)
2429
- * [raises a ResourceMissing exception if device ID does not exist](./spec/acceptance/rest/push_admin_spec.rb#L286)
2459
+ * [returns a DeviceDetails object if a device ID string is provided](./spec/acceptance/rest/push_admin_spec.rb#L266)
2460
+ * [returns a DeviceDetails object if a DeviceDetails object is provided](./spec/acceptance/rest/push_admin_spec.rb#L274)
2461
+ * [raises a ResourceMissing exception if device ID does not exist](./spec/acceptance/rest/push_admin_spec.rb#L282)
2430
2462
  * #save (#RSH1b3)
2431
- * [saves the new DeviceDetails Hash object](./spec/acceptance/rest/push_admin_spec.rb#L325)
2432
- * [saves the associated DevicePushDetails](./spec/acceptance/rest/push_admin_spec.rb#L340)
2433
- * [does not allow some fields to be configured](./spec/acceptance/rest/push_admin_spec.rb#L394)
2434
- * [allows device_secret to be configured](./spec/acceptance/rest/push_admin_spec.rb#L407)
2435
- * [saves the new DeviceDetails object](./spec/acceptance/rest/push_admin_spec.rb#L416)
2436
- * [allows arbitrary number of subsequent saves](./spec/acceptance/rest/push_admin_spec.rb#L425)
2437
- * [fails if data is invalid](./spec/acceptance/rest/push_admin_spec.rb#L438)
2463
+ * [saves the new DeviceDetails Hash object](./spec/acceptance/rest/push_admin_spec.rb#L327)
2464
+ * [saves the associated DevicePushDetails](./spec/acceptance/rest/push_admin_spec.rb#L342)
2465
+ * [does not allow some fields to be configured](./spec/acceptance/rest/push_admin_spec.rb#L396)
2466
+ * [allows device_secret to be configured](./spec/acceptance/rest/push_admin_spec.rb#L409)
2467
+ * [saves the new DeviceDetails object](./spec/acceptance/rest/push_admin_spec.rb#L418)
2468
+ * [allows arbitrary number of subsequent saves](./spec/acceptance/rest/push_admin_spec.rb#L427)
2469
+ * [fails if data is invalid](./spec/acceptance/rest/push_admin_spec.rb#L440)
2438
2470
  * with GCM target
2439
- * [saves the associated DevicePushDetails](./spec/acceptance/rest/push_admin_spec.rb#L354)
2471
+ * [saves the associated DevicePushDetails](./spec/acceptance/rest/push_admin_spec.rb#L356)
2440
2472
  * with web target
2441
- * [saves the associated DevicePushDetails](./spec/acceptance/rest/push_admin_spec.rb#L375)
2473
+ * [saves the associated DevicePushDetails](./spec/acceptance/rest/push_admin_spec.rb#L377)
2442
2474
  * #remove_where (#RSH1b5)
2443
- * [removes all matching device registrations by client_id](./spec/acceptance/rest/push_admin_spec.rb#L484)
2444
- * [removes device by device_id](./spec/acceptance/rest/push_admin_spec.rb#L489)
2445
- * [succeeds even if there is no match](./spec/acceptance/rest/push_admin_spec.rb#L494)
2475
+ * [removes all matching device registrations by client_id](./spec/acceptance/rest/push_admin_spec.rb#L492)
2476
+ * [removes device by device_id](./spec/acceptance/rest/push_admin_spec.rb#L497)
2477
+ * [succeeds even if there is no match](./spec/acceptance/rest/push_admin_spec.rb#L502)
2446
2478
  * #remove (#RSH1b4)
2447
- * [removes the provided device id string](./spec/acceptance/rest/push_admin_spec.rb#L541)
2448
- * [removes the provided DeviceDetails](./spec/acceptance/rest/push_admin_spec.rb#L546)
2449
- * [succeeds if the item does not exist](./spec/acceptance/rest/push_admin_spec.rb#L551)
2479
+ * [removes the provided device id string](./spec/acceptance/rest/push_admin_spec.rb#L555)
2480
+ * [removes the provided DeviceDetails](./spec/acceptance/rest/push_admin_spec.rb#L560)
2481
+ * [succeeds if the item does not exist](./spec/acceptance/rest/push_admin_spec.rb#L565)
2450
2482
  * #channel_subscriptions (#RSH1c)
2451
2483
  * #list (#RSH1c1)
2452
- * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/rest/push_admin_spec.rb#L613)
2453
- * [returns an empty PaginatedResult if params do not match](./spec/acceptance/rest/push_admin_spec.rb#L619)
2454
- * [supports paging](./spec/acceptance/rest/push_admin_spec.rb#L625)
2455
- * [provides filtering](./spec/acceptance/rest/push_admin_spec.rb#L637)
2456
- * [raises an exception if none of the required filters are provided](./spec/acceptance/rest/push_admin_spec.rb#L665)
2484
+ * [returns a PaginatedResult object containing DeviceDetails objects](./spec/acceptance/rest/push_admin_spec.rb#L633)
2485
+ * [returns an empty PaginatedResult if params do not match](./spec/acceptance/rest/push_admin_spec.rb#L639)
2486
+ * [supports paging](./spec/acceptance/rest/push_admin_spec.rb#L645)
2487
+ * [provides filtering](./spec/acceptance/rest/push_admin_spec.rb#L657)
2488
+ * [raises an exception if none of the required filters are provided](./spec/acceptance/rest/push_admin_spec.rb#L685)
2457
2489
  * #list_channels (#RSH1c2)
2458
- * [returns a PaginatedResult object containing String objects](./spec/acceptance/rest/push_admin_spec.rb#L689)
2459
- * PENDING: *[supports paging](./spec/acceptance/rest/push_admin_spec.rb#L696)*
2460
- * [returns an accurate number of channels after devices are deleted](./spec/acceptance/rest/push_admin_spec.rb#L714)
2490
+ * [returns a PaginatedResult object containing String objects](./spec/acceptance/rest/push_admin_spec.rb#L712)
2491
+ * [supports paging](./spec/acceptance/rest/push_admin_spec.rb#L719)
2492
+ * [returns an accurate number of channels after devices are deleted](./spec/acceptance/rest/push_admin_spec.rb#L734)
2461
2493
  * #save (#RSH1c3)
2462
- * [saves the new client_id PushChannelSubscription Hash object](./spec/acceptance/rest/push_admin_spec.rb#L733)
2463
- * [saves the new device_id PushChannelSubscription Hash object](./spec/acceptance/rest/push_admin_spec.rb#L744)
2464
- * [saves the client_id PushChannelSubscription object](./spec/acceptance/rest/push_admin_spec.rb#L755)
2465
- * [saves the device_id PushChannelSubscription object](./spec/acceptance/rest/push_admin_spec.rb#L766)
2466
- * [allows arbitrary number of subsequent saves](./spec/acceptance/rest/push_admin_spec.rb#L777)
2467
- * [fails if data is invalid](./spec/acceptance/rest/push_admin_spec.rb#L790)
2494
+ * [saves the new client_id PushChannelSubscription Hash object](./spec/acceptance/rest/push_admin_spec.rb#L759)
2495
+ * [saves the new device_id PushChannelSubscription Hash object](./spec/acceptance/rest/push_admin_spec.rb#L770)
2496
+ * [saves the client_id PushChannelSubscription object](./spec/acceptance/rest/push_admin_spec.rb#L781)
2497
+ * [saves the device_id PushChannelSubscription object](./spec/acceptance/rest/push_admin_spec.rb#L792)
2498
+ * [allows arbitrary number of subsequent saves](./spec/acceptance/rest/push_admin_spec.rb#L803)
2499
+ * [fails if data is invalid](./spec/acceptance/rest/push_admin_spec.rb#L816)
2468
2500
  * #remove_where (#RSH1c5)
2469
- * PENDING: *[removes matching channels](./spec/acceptance/rest/push_admin_spec.rb#L817)*
2470
- * [removes matching client_ids](./spec/acceptance/rest/push_admin_spec.rb#L825)
2471
- * [removes matching device_ids](./spec/acceptance/rest/push_admin_spec.rb#L831)
2472
- * [device_id and client_id filters in the same request are not suppoorted](./spec/acceptance/rest/push_admin_spec.rb#L837)
2473
- * [succeeds on no match](./spec/acceptance/rest/push_admin_spec.rb#L841)
2501
+ * PENDING: *[removes matching channels](./spec/acceptance/rest/push_admin_spec.rb#L851)*
2502
+ * [removes matching client_ids](./spec/acceptance/rest/push_admin_spec.rb#L859)
2503
+ * [removes matching device_ids](./spec/acceptance/rest/push_admin_spec.rb#L865)
2504
+ * [device_id and client_id filters in the same request are not suppoorted](./spec/acceptance/rest/push_admin_spec.rb#L871)
2505
+ * [succeeds on no match](./spec/acceptance/rest/push_admin_spec.rb#L875)
2474
2506
  * #remove (#RSH1c4)
2475
- * [removes match for Hash object by channel and client_id](./spec/acceptance/rest/push_admin_spec.rb#L865)
2476
- * [removes match for PushChannelSubscription object by channel and client_id](./spec/acceptance/rest/push_admin_spec.rb#L870)
2477
- * [removes match for Hash object by channel and device_id](./spec/acceptance/rest/push_admin_spec.rb#L877)
2478
- * [removes match for PushChannelSubscription object by channel and client_id](./spec/acceptance/rest/push_admin_spec.rb#L882)
2479
- * [succeeds even if there is no match](./spec/acceptance/rest/push_admin_spec.rb#L889)
2507
+ * [removes match for Hash object by channel and client_id](./spec/acceptance/rest/push_admin_spec.rb#L905)
2508
+ * [removes match for PushChannelSubscription object by channel and client_id](./spec/acceptance/rest/push_admin_spec.rb#L910)
2509
+ * [removes match for Hash object by channel and device_id](./spec/acceptance/rest/push_admin_spec.rb#L917)
2510
+ * [removes match for PushChannelSubscription object by channel and client_id](./spec/acceptance/rest/push_admin_spec.rb#L922)
2511
+ * [succeeds even if there is no match](./spec/acceptance/rest/push_admin_spec.rb#L929)
2480
2512
 
2481
2513
  ### Ably::Rest::Push
2482
2514
  _(see [spec/acceptance/rest/push_spec.rb](./spec/acceptance/rest/push_spec.rb))_
@@ -3772,54 +3804,52 @@ _(see [spec/unit/realtime/client_spec.rb](./spec/unit/realtime/client_spec.rb))_
3772
3804
  * [raises an exception](./spec/shared/client_initializer_behaviour.rb#L60)
3773
3805
  * key and key_secret
3774
3806
  * [raises an exception](./spec/shared/client_initializer_behaviour.rb#L68)
3775
- * client_id as only option
3776
- * [requires a valid key](./spec/shared/client_initializer_behaviour.rb#L76)
3777
3807
  * with valid arguments
3778
3808
  * key only
3779
- * [connects to the Ably service](./spec/shared/client_initializer_behaviour.rb#L87)
3780
- * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L91)
3809
+ * [connects to the Ably service](./spec/shared/client_initializer_behaviour.rb#L79)
3810
+ * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L83)
3781
3811
  * with a string key instead of options hash
3782
- * [sets the key](./spec/shared/client_initializer_behaviour.rb#L111)
3783
- * [sets the key_name](./spec/shared/client_initializer_behaviour.rb#L115)
3784
- * [sets the key_secret](./spec/shared/client_initializer_behaviour.rb#L119)
3785
- * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L123)
3812
+ * [sets the key](./spec/shared/client_initializer_behaviour.rb#L103)
3813
+ * [sets the key_name](./spec/shared/client_initializer_behaviour.rb#L107)
3814
+ * [sets the key_secret](./spec/shared/client_initializer_behaviour.rb#L111)
3815
+ * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L115)
3786
3816
  * with a string token key instead of options hash
3787
- * [sets the token](./spec/shared/client_initializer_behaviour.rb#L135)
3817
+ * [sets the token](./spec/shared/client_initializer_behaviour.rb#L127)
3788
3818
  * with token
3789
- * [sets the token](./spec/shared/client_initializer_behaviour.rb#L143)
3819
+ * [sets the token](./spec/shared/client_initializer_behaviour.rb#L135)
3790
3820
  * with token_details
3791
- * [sets the token](./spec/shared/client_initializer_behaviour.rb#L151)
3821
+ * [sets the token](./spec/shared/client_initializer_behaviour.rb#L143)
3792
3822
  * with token_params
3793
- * [configures default_token_params](./spec/shared/client_initializer_behaviour.rb#L159)
3823
+ * [configures default_token_params](./spec/shared/client_initializer_behaviour.rb#L151)
3794
3824
  * endpoint
3795
- * [defaults to production](./spec/shared/client_initializer_behaviour.rb#L170)
3825
+ * [defaults to production](./spec/shared/client_initializer_behaviour.rb#L162)
3796
3826
  * with environment option
3797
- * [uses an alternate endpoint](./spec/shared/client_initializer_behaviour.rb#L177)
3827
+ * [uses an alternate endpoint](./spec/shared/client_initializer_behaviour.rb#L169)
3798
3828
  * with rest_host option
3799
- * PENDING: *[uses an alternate endpoint for REST clients](./spec/shared/client_initializer_behaviour.rb#L185)*
3829
+ * PENDING: *[uses an alternate endpoint for REST clients](./spec/shared/client_initializer_behaviour.rb#L177)*
3800
3830
  * with realtime_host option
3801
- * [uses an alternate endpoint for Realtime clients](./spec/shared/client_initializer_behaviour.rb#L194)
3831
+ * [uses an alternate endpoint for Realtime clients](./spec/shared/client_initializer_behaviour.rb#L186)
3802
3832
  * with port option and non-TLS connections
3803
- * [uses the custom port for non-TLS requests](./spec/shared/client_initializer_behaviour.rb#L203)
3833
+ * [uses the custom port for non-TLS requests](./spec/shared/client_initializer_behaviour.rb#L195)
3804
3834
  * with tls_port option and a TLS connection
3805
- * [uses the custom port for TLS requests](./spec/shared/client_initializer_behaviour.rb#L211)
3835
+ * [uses the custom port for TLS requests](./spec/shared/client_initializer_behaviour.rb#L203)
3806
3836
  * tls
3807
- * [defaults to TLS](./spec/shared/client_initializer_behaviour.rb#L234)
3837
+ * [defaults to TLS](./spec/shared/client_initializer_behaviour.rb#L226)
3808
3838
  * set to false
3809
- * [uses plain text](./spec/shared/client_initializer_behaviour.rb#L225)
3810
- * [uses HTTP](./spec/shared/client_initializer_behaviour.rb#L229)
3839
+ * [uses plain text](./spec/shared/client_initializer_behaviour.rb#L217)
3840
+ * [uses HTTP](./spec/shared/client_initializer_behaviour.rb#L221)
3811
3841
  * logger
3812
3842
  * default
3813
- * [uses Ruby Logger](./spec/shared/client_initializer_behaviour.rb#L245)
3814
- * [specifies Logger::WARN log level](./spec/shared/client_initializer_behaviour.rb#L249)
3843
+ * [uses Ruby Logger](./spec/shared/client_initializer_behaviour.rb#L237)
3844
+ * [specifies Logger::WARN log level](./spec/shared/client_initializer_behaviour.rb#L241)
3815
3845
  * with log_level :none
3816
- * [silences all logging with a NilLogger](./spec/shared/client_initializer_behaviour.rb#L257)
3846
+ * [silences all logging with a NilLogger](./spec/shared/client_initializer_behaviour.rb#L249)
3817
3847
  * with custom logger and log_level
3818
- * [uses the custom logger](./spec/shared/client_initializer_behaviour.rb#L267)
3819
- * [sets the custom log level](./spec/shared/client_initializer_behaviour.rb#L271)
3848
+ * [uses the custom logger](./spec/shared/client_initializer_behaviour.rb#L259)
3849
+ * [sets the custom log level](./spec/shared/client_initializer_behaviour.rb#L263)
3820
3850
  * delegators
3821
- * [delegates :client_id to .auth](./spec/shared/client_initializer_behaviour.rb#L285)
3822
- * [delegates :auth_options to .auth](./spec/shared/client_initializer_behaviour.rb#L290)
3851
+ * [delegates :client_id to .auth](./spec/shared/client_initializer_behaviour.rb#L277)
3852
+ * [delegates :auth_options to .auth](./spec/shared/client_initializer_behaviour.rb#L282)
3823
3853
  * delegation to the REST Client
3824
3854
  * [passes on the options to the initializer](./spec/unit/realtime/client_spec.rb#L15)
3825
3855
  * for attribute
@@ -3827,9 +3857,11 @@ _(see [spec/unit/realtime/client_spec.rb](./spec/unit/realtime/client_spec.rb))_
3827
3857
  * [#use_tls?](./spec/unit/realtime/client_spec.rb#L23)
3828
3858
  * [#log_level](./spec/unit/realtime/client_spec.rb#L23)
3829
3859
  * [#custom_host](./spec/unit/realtime/client_spec.rb#L23)
3860
+ * when :transport_params option is passed
3861
+ * [converts options to strings](./spec/unit/realtime/client_spec.rb#L39)
3830
3862
  * push
3831
- * [#device is not supported and raises an exception](./spec/unit/realtime/client_spec.rb#L34)
3832
- * [#push returns a Push object](./spec/unit/realtime/client_spec.rb#L38)
3863
+ * [#device is not supported and raises an exception](./spec/unit/realtime/client_spec.rb#L47)
3864
+ * [#push returns a Push object](./spec/unit/realtime/client_spec.rb#L51)
3833
3865
 
3834
3866
  ### Ably::Realtime::Connection
3835
3867
  _(see [spec/unit/realtime/connection_spec.rb](./spec/unit/realtime/connection_spec.rb))_
@@ -3980,54 +4012,52 @@ _(see [spec/unit/rest/client_spec.rb](./spec/unit/rest/client_spec.rb))_
3980
4012
  * [raises an exception](./spec/shared/client_initializer_behaviour.rb#L60)
3981
4013
  * key and key_secret
3982
4014
  * [raises an exception](./spec/shared/client_initializer_behaviour.rb#L68)
3983
- * client_id as only option
3984
- * [requires a valid key](./spec/shared/client_initializer_behaviour.rb#L76)
3985
4015
  * with valid arguments
3986
4016
  * key only
3987
- * [connects to the Ably service](./spec/shared/client_initializer_behaviour.rb#L87)
3988
- * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L91)
4017
+ * [connects to the Ably service](./spec/shared/client_initializer_behaviour.rb#L79)
4018
+ * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L83)
3989
4019
  * with a string key instead of options hash
3990
- * [sets the key](./spec/shared/client_initializer_behaviour.rb#L111)
3991
- * [sets the key_name](./spec/shared/client_initializer_behaviour.rb#L115)
3992
- * [sets the key_secret](./spec/shared/client_initializer_behaviour.rb#L119)
3993
- * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L123)
4020
+ * [sets the key](./spec/shared/client_initializer_behaviour.rb#L103)
4021
+ * [sets the key_name](./spec/shared/client_initializer_behaviour.rb#L107)
4022
+ * [sets the key_secret](./spec/shared/client_initializer_behaviour.rb#L111)
4023
+ * [uses basic auth](./spec/shared/client_initializer_behaviour.rb#L115)
3994
4024
  * with a string token key instead of options hash
3995
- * [sets the token](./spec/shared/client_initializer_behaviour.rb#L135)
4025
+ * [sets the token](./spec/shared/client_initializer_behaviour.rb#L127)
3996
4026
  * with token
3997
- * [sets the token](./spec/shared/client_initializer_behaviour.rb#L143)
4027
+ * [sets the token](./spec/shared/client_initializer_behaviour.rb#L135)
3998
4028
  * with token_details
3999
- * [sets the token](./spec/shared/client_initializer_behaviour.rb#L151)
4029
+ * [sets the token](./spec/shared/client_initializer_behaviour.rb#L143)
4000
4030
  * with token_params
4001
- * [configures default_token_params](./spec/shared/client_initializer_behaviour.rb#L159)
4031
+ * [configures default_token_params](./spec/shared/client_initializer_behaviour.rb#L151)
4002
4032
  * endpoint
4003
- * [defaults to production](./spec/shared/client_initializer_behaviour.rb#L170)
4033
+ * [defaults to production](./spec/shared/client_initializer_behaviour.rb#L162)
4004
4034
  * with environment option
4005
- * [uses an alternate endpoint](./spec/shared/client_initializer_behaviour.rb#L177)
4035
+ * [uses an alternate endpoint](./spec/shared/client_initializer_behaviour.rb#L169)
4006
4036
  * with rest_host option
4007
- * [uses an alternate endpoint for REST clients](./spec/shared/client_initializer_behaviour.rb#L185)
4037
+ * [uses an alternate endpoint for REST clients](./spec/shared/client_initializer_behaviour.rb#L177)
4008
4038
  * with realtime_host option
4009
- * PENDING: *[uses an alternate endpoint for Realtime clients](./spec/shared/client_initializer_behaviour.rb#L194)*
4039
+ * PENDING: *[uses an alternate endpoint for Realtime clients](./spec/shared/client_initializer_behaviour.rb#L186)*
4010
4040
  * with port option and non-TLS connections
4011
- * [uses the custom port for non-TLS requests](./spec/shared/client_initializer_behaviour.rb#L203)
4041
+ * [uses the custom port for non-TLS requests](./spec/shared/client_initializer_behaviour.rb#L195)
4012
4042
  * with tls_port option and a TLS connection
4013
- * [uses the custom port for TLS requests](./spec/shared/client_initializer_behaviour.rb#L211)
4043
+ * [uses the custom port for TLS requests](./spec/shared/client_initializer_behaviour.rb#L203)
4014
4044
  * tls
4015
- * [defaults to TLS](./spec/shared/client_initializer_behaviour.rb#L234)
4045
+ * [defaults to TLS](./spec/shared/client_initializer_behaviour.rb#L226)
4016
4046
  * set to false
4017
- * [uses plain text](./spec/shared/client_initializer_behaviour.rb#L225)
4018
- * [uses HTTP](./spec/shared/client_initializer_behaviour.rb#L229)
4047
+ * [uses plain text](./spec/shared/client_initializer_behaviour.rb#L217)
4048
+ * [uses HTTP](./spec/shared/client_initializer_behaviour.rb#L221)
4019
4049
  * logger
4020
4050
  * default
4021
- * [uses Ruby Logger](./spec/shared/client_initializer_behaviour.rb#L245)
4022
- * [specifies Logger::WARN log level](./spec/shared/client_initializer_behaviour.rb#L249)
4051
+ * [uses Ruby Logger](./spec/shared/client_initializer_behaviour.rb#L237)
4052
+ * [specifies Logger::WARN log level](./spec/shared/client_initializer_behaviour.rb#L241)
4023
4053
  * with log_level :none
4024
- * [silences all logging with a NilLogger](./spec/shared/client_initializer_behaviour.rb#L257)
4054
+ * [silences all logging with a NilLogger](./spec/shared/client_initializer_behaviour.rb#L249)
4025
4055
  * with custom logger and log_level
4026
- * [uses the custom logger](./spec/shared/client_initializer_behaviour.rb#L267)
4027
- * [sets the custom log level](./spec/shared/client_initializer_behaviour.rb#L271)
4056
+ * [uses the custom logger](./spec/shared/client_initializer_behaviour.rb#L259)
4057
+ * [sets the custom log level](./spec/shared/client_initializer_behaviour.rb#L263)
4028
4058
  * delegators
4029
- * [delegates :client_id to .auth](./spec/shared/client_initializer_behaviour.rb#L285)
4030
- * [delegates :auth_options to .auth](./spec/shared/client_initializer_behaviour.rb#L290)
4059
+ * [delegates :client_id to .auth](./spec/shared/client_initializer_behaviour.rb#L277)
4060
+ * [delegates :auth_options to .auth](./spec/shared/client_initializer_behaviour.rb#L282)
4031
4061
  * initializer options
4032
4062
  * TLS
4033
4063
  * disabled
@@ -4115,6 +4145,6 @@ _(see [spec/unit/util/pub_sub_spec.rb](./spec/unit/util/pub_sub_spec.rb))_
4115
4145
 
4116
4146
  ## Test summary
4117
4147
 
4118
- * Passing tests: 2045
4119
- * Pending tests: 19
4120
- * Failing tests: 2
4148
+ * Passing tests: 2073
4149
+ * Pending tests: 5
4150
+ * Failing tests: 1