ably-rest 0.8.5 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/SPEC.md +1380 -631
  4. data/ably-rest.gemspec +11 -5
  5. data/lib/submodules/ably-ruby/.travis.yml +1 -1
  6. data/lib/submodules/ably-ruby/CHANGELOG.md +42 -48
  7. data/lib/submodules/ably-ruby/ably.gemspec +7 -1
  8. data/lib/submodules/ably-ruby/lib/ably.rb +2 -0
  9. data/lib/submodules/ably-ruby/lib/ably/auth.rb +155 -47
  10. data/lib/submodules/ably-ruby/lib/ably/exceptions.rb +2 -0
  11. data/lib/submodules/ably-ruby/lib/ably/models/channel_state_change.rb +2 -3
  12. data/lib/submodules/ably-ruby/lib/ably/models/connection_details.rb +54 -0
  13. data/lib/submodules/ably-ruby/lib/ably/models/protocol_message.rb +14 -4
  14. data/lib/submodules/ably-ruby/lib/ably/models/token_details.rb +13 -7
  15. data/lib/submodules/ably-ruby/lib/ably/models/token_request.rb +1 -2
  16. data/lib/submodules/ably-ruby/lib/ably/modules/ably.rb +3 -2
  17. data/lib/submodules/ably-ruby/lib/ably/modules/message_emitter.rb +1 -3
  18. data/lib/submodules/ably-ruby/lib/ably/modules/state_emitter.rb +2 -2
  19. data/lib/submodules/ably-ruby/lib/ably/realtime/auth.rb +6 -0
  20. data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +15 -4
  21. data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +2 -0
  22. data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +10 -3
  23. data/lib/submodules/ably-ruby/lib/ably/realtime/client/incoming_message_dispatcher.rb +11 -1
  24. data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +62 -6
  25. data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_manager.rb +58 -54
  26. data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +18 -5
  27. data/lib/submodules/ably-ruby/lib/ably/rest/channel.rb +9 -1
  28. data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +32 -14
  29. data/lib/submodules/ably-ruby/lib/ably/rest/presence.rb +1 -1
  30. data/lib/submodules/ably-ruby/lib/ably/version.rb +1 -1
  31. data/lib/submodules/ably-ruby/spec/acceptance/realtime/auth_spec.rb +251 -11
  32. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb +12 -2
  33. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +316 -24
  34. data/lib/submodules/ably-ruby/spec/acceptance/realtime/client_spec.rb +93 -1
  35. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_failures_spec.rb +177 -86
  36. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +284 -60
  37. data/lib/submodules/ably-ruby/spec/acceptance/realtime/message_spec.rb +45 -6
  38. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_history_spec.rb +4 -0
  39. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +181 -49
  40. data/lib/submodules/ably-ruby/spec/acceptance/realtime/time_spec.rb +13 -0
  41. data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +222 -4
  42. data/lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb +132 -1
  43. data/lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb +129 -28
  44. data/lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb +7 -7
  45. data/lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb +10 -0
  46. data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +41 -17
  47. data/lib/submodules/ably-ruby/spec/spec_helper.rb +1 -0
  48. data/lib/submodules/ably-ruby/spec/support/debug_failure_helper.rb +16 -0
  49. data/lib/submodules/ably-ruby/spec/unit/models/connection_details_spec.rb +60 -0
  50. data/lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb +45 -0
  51. data/lib/submodules/ably-ruby/spec/unit/modules/event_emitter_spec.rb +3 -1
  52. data/lib/submodules/ably-ruby/spec/unit/realtime/channel_spec.rb +6 -5
  53. data/lib/submodules/ably-ruby/spec/unit/realtime/client_spec.rb +5 -1
  54. data/lib/submodules/ably-ruby/spec/unit/realtime/connection_spec.rb +5 -1
  55. data/lib/submodules/ably-ruby/spec/unit/realtime/realtime_spec.rb +5 -1
  56. metadata +57 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1b1045e268247db9dd96742a0c11404b03fbb533
4
- data.tar.gz: 180a9c3dfee6b05b4fc8c8f947e1081bba97b635
3
+ metadata.gz: f21ace80cc1c0842b96711a845a533a1b2652c3f
4
+ data.tar.gz: 0cb8c36ae2caf4c5f742f97ecf2bf7b273b484c9
5
5
  SHA512:
6
- metadata.gz: 163805382715a09c67f446297b49c5c4588ff2c141c3cc6173eb9917423305b3f532d076f46af854d6b869439e9e465a02eb23735e40be64fe8d017773d782a0
7
- data.tar.gz: b024865d3a6f266681e0ed4224b6a14c1e4248e21f93958d357d3009010a662d02d779615a21d0c4616e6397fc6c1053c0afc887ef7c52dcde9c286e24960d3d
6
+ metadata.gz: 3761a7d1ac0ac0c5e2c87396a8ade1406de6e0aeb8a228188797a1507809d7c8dbfbca412ff7a8fece91e058c63089ebd90162d8e8b00e36215ee4aef17e6ded
7
+ data.tar.gz: 0361539b950279534571b607b83d5f38d3b4a2575fdda8248ebb1cc418822afd2fdb48d954a2aacbcbc281c320afddf463173778028eccaa1f208a8cb4feae2b
data/README.md CHANGED
@@ -29,7 +29,7 @@ Or install it yourself as:
29
29
  All examples assume a client and/or channel has been created as follows:
30
30
 
31
31
  ```ruby
32
- client = Ably::Rest.new(api_key: 'xxxxx')
32
+ client = Ably::Rest.new(key: 'xxxxx')
33
33
  channel = client.channel('test')
34
34
  ```
35
35
 
data/SPEC.md CHANGED
@@ -1,1205 +1,1954 @@
1
- # Ably REST Client Library 0.8.3 Specification
1
+ # Ably REST Client Library 0.8.6 Specification
2
2
 
3
3
  ### Ably::Auth
4
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb))_
5
- * using JSON and MsgPack protocol
6
- * [has immutable options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L60)
4
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb))_
5
+ * using JSON protocol
6
+ * [has immutable options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L60)
7
7
  * #request_token
8
- * [creates a TokenRequest automatically and sends it to Ably to obtain a token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L75)
9
- * [returns a valid TokenDetails object in the expected format with valid issued and expires attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L84)
8
+ * [creates a TokenRequest automatically and sends it to Ably to obtain a token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L75)
9
+ * [returns a valid TokenDetails object in the expected format with valid issued and expires attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L84)
10
10
  * with token_param :client_id
11
- * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L117)
11
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
12
12
  * with token_param :capability
13
- * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L117)
13
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
14
14
  * with token_param :nonce
15
- * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L117)
15
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
16
16
  * with token_param :timestamp
17
- * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L117)
17
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
18
18
  * with token_param :ttl
19
- * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L117)
19
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
20
20
  * with :key option
21
- * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L147)
21
+ * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L147)
22
22
  * with :key_name & :key_secret options
23
- * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L177)
23
+ * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L177)
24
24
  * with :query_time option
25
- * [queries the server for the time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L185)
25
+ * [queries the server for the time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L185)
26
26
  * without :query_time option
27
- * [does not query the server for the time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L194)
27
+ * [does not query the server for the time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L194)
28
+ * with :auth_url option merging
29
+ * with existing configured auth options
30
+ * using unspecified :auth_method
31
+ * [requests a token using a GET request with provided headers, and merges client_id into auth_params](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L234)
32
+ * with provided token_params
33
+ * [merges provided token_params with existing auth_params and client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L242)
34
+ * with provided auth option auth_params and auth_headers
35
+ * [replaces any preconfigured auth_params](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L250)
36
+ * using :get :auth_method and query params in the URL
37
+ * [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](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L261)
38
+ * using :post :auth_method
39
+ * [requests a token using a POST request with provided headers, and merges client_id into auth_params as form-encoded post data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L271)
28
40
  * with :auth_url option
29
41
  * when response from :auth_url is a valid token request
30
- * [requests a token from :auth_url using an HTTP GET request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L242)
31
- * [returns a valid token generated from the token request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L247)
42
+ * [requests a token from :auth_url using an HTTP GET request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L321)
43
+ * [returns a valid token generated from the token request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L326)
32
44
  * with :query_params
33
- * [requests a token from :auth_url with the :query_params](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L254)
45
+ * [requests a token from :auth_url with the :query_params](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L333)
34
46
  * with :headers
35
- * [requests a token from :auth_url with the HTTP headers set](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L262)
47
+ * [requests a token from :auth_url with the HTTP headers set](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L341)
36
48
  * with POST
37
- * [requests a token from :auth_url using an HTTP POST instead of the default GET](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L270)
49
+ * [requests a token from :auth_url using an HTTP POST instead of the default GET](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L349)
38
50
  * when response from :auth_url is a token details object
39
- * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L295)
51
+ * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L374)
40
52
  * when response from :auth_url is text/plain content type and a token string
41
- * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L313)
53
+ * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L392)
42
54
  * when response is invalid
43
55
  * 500
44
- * [raises ServerError](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L327)
56
+ * [raises ServerError](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L406)
45
57
  * XML
46
- * [raises InvalidResponseBody](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L338)
58
+ * [raises InvalidResponseBody](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L417)
47
59
  * with a Proc for the :auth_callback option
48
60
  * that returns a TokenRequest
49
- * [calls the Proc with token_params when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L361)
50
- * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L365)
61
+ * [calls the Proc with token_params when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L440)
62
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L444)
63
+ * when authorised
64
+ * [sets Auth#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L451)
65
+ * [sets Client#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L455)
51
66
  * that returns a TokenDetails JSON object
52
- * [calls the Proc when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L394)
53
- * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L399)
67
+ * [calls the Proc when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L489)
68
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L494)
69
+ * when authorised
70
+ * [sets Auth#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L506)
71
+ * [sets Client#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L510)
54
72
  * that returns a TokenDetails object
55
- * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L420)
73
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L525)
56
74
  * that returns a Token string
57
- * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L436)
75
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L541)
58
76
  * with auth_option :client_id
59
- * [returns a token with the client_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L467)
77
+ * [returns a token with the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L571)
60
78
  * with token_param :client_id
61
- * [returns a token with the client_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L476)
79
+ * [returns a token with the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L580)
62
80
  * before #authorise has been called
63
- * [has no current_token_details](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L483)
81
+ * [has no current_token_details](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L587)
64
82
  * #authorise
65
- * [updates the persisted auth options that are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L533)
83
+ * [updates the persisted token params that are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L637)
84
+ * [updates the persisted token params that are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L643)
66
85
  * when called for the first time since the client has been instantiated
67
- * [passes all auth_options and token_params to #request_token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L497)
68
- * [returns a valid token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L502)
69
- * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L506)
86
+ * [passes all auth_options and token_params to #request_token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L601)
87
+ * [returns a valid token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L606)
88
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L610)
70
89
  * with previous authorisation
71
- * [does not request a token if current_token_details has not expired](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L517)
72
- * [requests a new token if token is expired](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L522)
73
- * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L528)
90
+ * [does not request a token if current_token_details has not expired](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L621)
91
+ * [requests a new token if token is expired](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L626)
92
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L632)
74
93
  * with a Proc for the :auth_callback option
75
- * [calls the Proc](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L549)
76
- * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L553)
94
+ * [calls the Proc](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L659)
95
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L663)
77
96
  * for every subsequent #request_token
78
97
  * without a :auth_callback Proc
79
- * [calls the originally provided block](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L559)
98
+ * [calls the originally provided block](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L669)
80
99
  * with a provided block
81
- * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L566)
100
+ * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L676)
101
+ * with an explicit token string that expires
102
+ * and a Proc for the :auth_callback option to provide a means to renew the token
103
+ * [calls the Proc once the token has expired and the new token is used](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L703)
104
+ * with an explicit ClientOptions client_id
105
+ * and an incompatible client_id in a TokenDetails object passed to the auth callback
106
+ * [rejects a TokenDetails object with an incompatible client_id and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L721)
107
+ * and an incompatible client_id in a TokenRequest object passed to the auth callback and raises an exception
108
+ * [rejects a TokenRequests object with an incompatible client_id and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L729)
109
+ * and a token string without any retrievable client_id
110
+ * [rejects a TokenRequests object with an incompatible client_id and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L737)
82
111
  * #create_token_request
83
- * [returns a TokenRequest object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L583)
84
- * [returns a TokenRequest that can be passed to a client that can use it for authentication without an API key](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L587)
85
- * [uses the key name from the client](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L594)
86
- * [uses the default TTL](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L598)
87
- * [uses the default capability](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L611)
112
+ * [returns a TokenRequest object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L752)
113
+ * [returns a TokenRequest that can be passed to a client that can use it for authentication without an API key](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L756)
114
+ * [uses the key name from the client](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L763)
115
+ * [uses the default TTL](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L767)
116
+ * [uses the default capability](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L780)
88
117
  * with a :ttl option below the Token expiry buffer that ensures tokens are renewed 15s before they expire as they are considered expired
89
- * [uses the Token expiry buffer default + 10s to allow for a token request in flight](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L605)
118
+ * [uses the Token expiry buffer default + 10s to allow for a token request in flight](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L774)
90
119
  * the nonce
91
- * [is unique for every request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L616)
92
- * [is at least 16 characters](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L621)
120
+ * [is unique for every request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L785)
121
+ * [is at least 16 characters](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L790)
93
122
  * with token param :ttl
94
- * [overrides default](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L632)
123
+ * [overrides default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L801)
95
124
  * with token param :nonce
96
- * [overrides default](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L632)
125
+ * [overrides default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L801)
97
126
  * with token param :client_id
98
- * [overrides default](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L632)
127
+ * [overrides default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L801)
99
128
  * when specifying capability
100
- * [overrides the default](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L643)
101
- * [uses these capabilities when Ably issues an actual token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L647)
129
+ * [overrides the default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L812)
130
+ * [uses these capabilities when Ably issues an actual token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L816)
102
131
  * with additional invalid attributes
103
- * [are ignored](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L657)
132
+ * [are ignored](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L826)
104
133
  * when required fields are missing
105
- * [should raise an exception if key secret is missing](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L668)
106
- * [should raise an exception if key name is missing](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L672)
134
+ * [should raise an exception if key secret is missing](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L837)
135
+ * [should raise an exception if key name is missing](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L841)
107
136
  * timestamp attribute
108
- * [is a Time object in Ruby and is set to the local time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L699)
137
+ * [is a Time object in Ruby and is set to the local time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L868)
109
138
  * with :query_time auth_option
110
- * [queries the server for the timestamp](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L684)
139
+ * [queries the server for the timestamp](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L853)
111
140
  * with :timestamp option
112
- * [uses the provided timestamp in the token request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L694)
141
+ * [uses the provided timestamp in the token request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L863)
113
142
  * signing
114
- * [generates a valid HMAC](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L723)
143
+ * [generates a valid HMAC](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L892)
115
144
  * using token authentication
116
145
  * with :token option
117
- * [authenticates successfully using the provided :token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L746)
118
- * [disallows publishing on unspecified capability channels](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L750)
119
- * [fails if timestamp is invalid](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L758)
120
- * [cannot be renewed automatically](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L766)
121
- * when implicit as a result of using :client id
146
+ * [authenticates successfully using the provided :token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L915)
147
+ * [disallows publishing on unspecified capability channels](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L919)
148
+ * [fails if timestamp is invalid](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L927)
149
+ * [cannot be renewed automatically](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L935)
150
+ * when implicit as a result of using :client_id
122
151
  * and requests to the Ably server are mocked
123
- * [will send a token request to the server](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L794)
152
+ * [will send a token request to the server](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L963)
124
153
  * a token is created
125
- * [before a request is made](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L803)
126
- * [when a message is published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L807)
127
- * [with capability and TTL defaults](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L811)
128
- * when using an :key and basic auth
129
- * [#using_token_auth? is false](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L826)
130
- * [#key attribute contains the key string](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L830)
131
- * [#using_basic_auth? is true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/auth_spec.rb#L834)
154
+ * [before a request is made](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L972)
155
+ * [when a message is published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L976)
156
+ * [with capability and TTL defaults](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L980)
157
+ * [#client_id contains the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L991)
158
+ * when :client_id is provided in a token
159
+ * [#client_id contains the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1006)
160
+ * #client_id_validated?
161
+ * when using basic auth
162
+ * [is false as basic auth users do not have an identity](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1018)
163
+ * when using a token auth string for a token with a client_id
164
+ * [is false as identification is not possible from an opaque token string](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1026)
165
+ * when using a token
166
+ * with a client_id
167
+ * [is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1035)
168
+ * with no client_id (anonymous)
169
+ * [is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1043)
170
+ * with a wildcard client_id (anonymous)
171
+ * [is false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1051)
172
+ * when using a token request with a client_id
173
+ * [is not true as identification is not confirmed until authenticated](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1060)
174
+ * after authentication
175
+ * [is true as identification is completed during implicit authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1067)
176
+ * when using a :key and basic auth
177
+ * [#using_token_auth? is false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1075)
178
+ * [#key attribute contains the key string](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1079)
179
+ * [#using_basic_auth? is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1083)
180
+ * using MsgPack protocol
181
+ * [has immutable options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L60)
182
+ * #request_token
183
+ * [creates a TokenRequest automatically and sends it to Ably to obtain a token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L75)
184
+ * [returns a valid TokenDetails object in the expected format with valid issued and expires attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L84)
185
+ * with token_param :client_id
186
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
187
+ * with token_param :capability
188
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
189
+ * with token_param :nonce
190
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
191
+ * with token_param :timestamp
192
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
193
+ * with token_param :ttl
194
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L117)
195
+ * with :key option
196
+ * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L147)
197
+ * with :key_name & :key_secret options
198
+ * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L177)
199
+ * with :query_time option
200
+ * [queries the server for the time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L185)
201
+ * without :query_time option
202
+ * [does not query the server for the time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L194)
203
+ * with :auth_url option merging
204
+ * with existing configured auth options
205
+ * using unspecified :auth_method
206
+ * [requests a token using a GET request with provided headers, and merges client_id into auth_params](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L234)
207
+ * with provided token_params
208
+ * [merges provided token_params with existing auth_params and client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L242)
209
+ * with provided auth option auth_params and auth_headers
210
+ * [replaces any preconfigured auth_params](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L250)
211
+ * using :get :auth_method and query params in the URL
212
+ * [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](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L261)
213
+ * using :post :auth_method
214
+ * [requests a token using a POST request with provided headers, and merges client_id into auth_params as form-encoded post data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L271)
215
+ * with :auth_url option
216
+ * when response from :auth_url is a valid token request
217
+ * [requests a token from :auth_url using an HTTP GET request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L321)
218
+ * [returns a valid token generated from the token request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L326)
219
+ * with :query_params
220
+ * [requests a token from :auth_url with the :query_params](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L333)
221
+ * with :headers
222
+ * [requests a token from :auth_url with the HTTP headers set](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L341)
223
+ * with POST
224
+ * [requests a token from :auth_url using an HTTP POST instead of the default GET](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L349)
225
+ * when response from :auth_url is a token details object
226
+ * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L374)
227
+ * when response from :auth_url is text/plain content type and a token string
228
+ * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L392)
229
+ * when response is invalid
230
+ * 500
231
+ * [raises ServerError](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L406)
232
+ * XML
233
+ * [raises InvalidResponseBody](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L417)
234
+ * with a Proc for the :auth_callback option
235
+ * that returns a TokenRequest
236
+ * [calls the Proc with token_params when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L440)
237
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L444)
238
+ * when authorised
239
+ * [sets Auth#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L451)
240
+ * [sets Client#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L455)
241
+ * that returns a TokenDetails JSON object
242
+ * [calls the Proc when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L489)
243
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L494)
244
+ * when authorised
245
+ * [sets Auth#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L506)
246
+ * [sets Client#client_id to the new token's client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L510)
247
+ * that returns a TokenDetails object
248
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L525)
249
+ * that returns a Token string
250
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L541)
251
+ * with auth_option :client_id
252
+ * [returns a token with the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L571)
253
+ * with token_param :client_id
254
+ * [returns a token with the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L580)
255
+ * before #authorise has been called
256
+ * [has no current_token_details](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L587)
257
+ * #authorise
258
+ * [updates the persisted token params that are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L637)
259
+ * [updates the persisted token params that are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L643)
260
+ * when called for the first time since the client has been instantiated
261
+ * [passes all auth_options and token_params to #request_token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L601)
262
+ * [returns a valid token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L606)
263
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L610)
264
+ * with previous authorisation
265
+ * [does not request a token if current_token_details has not expired](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L621)
266
+ * [requests a new token if token is expired](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L626)
267
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L632)
268
+ * with a Proc for the :auth_callback option
269
+ * [calls the Proc](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L659)
270
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L663)
271
+ * for every subsequent #request_token
272
+ * without a :auth_callback Proc
273
+ * [calls the originally provided block](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L669)
274
+ * with a provided block
275
+ * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L676)
276
+ * with an explicit token string that expires
277
+ * and a Proc for the :auth_callback option to provide a means to renew the token
278
+ * [calls the Proc once the token has expired and the new token is used](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L703)
279
+ * with an explicit ClientOptions client_id
280
+ * and an incompatible client_id in a TokenDetails object passed to the auth callback
281
+ * [rejects a TokenDetails object with an incompatible client_id and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L721)
282
+ * and an incompatible client_id in a TokenRequest object passed to the auth callback and raises an exception
283
+ * [rejects a TokenRequests object with an incompatible client_id and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L729)
284
+ * and a token string without any retrievable client_id
285
+ * [rejects a TokenRequests object with an incompatible client_id and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L737)
286
+ * #create_token_request
287
+ * [returns a TokenRequest object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L752)
288
+ * [returns a TokenRequest that can be passed to a client that can use it for authentication without an API key](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L756)
289
+ * [uses the key name from the client](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L763)
290
+ * [uses the default TTL](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L767)
291
+ * [uses the default capability](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L780)
292
+ * with a :ttl option below the Token expiry buffer that ensures tokens are renewed 15s before they expire as they are considered expired
293
+ * [uses the Token expiry buffer default + 10s to allow for a token request in flight](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L774)
294
+ * the nonce
295
+ * [is unique for every request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L785)
296
+ * [is at least 16 characters](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L790)
297
+ * with token param :ttl
298
+ * [overrides default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L801)
299
+ * with token param :nonce
300
+ * [overrides default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L801)
301
+ * with token param :client_id
302
+ * [overrides default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L801)
303
+ * when specifying capability
304
+ * [overrides the default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L812)
305
+ * [uses these capabilities when Ably issues an actual token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L816)
306
+ * with additional invalid attributes
307
+ * [are ignored](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L826)
308
+ * when required fields are missing
309
+ * [should raise an exception if key secret is missing](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L837)
310
+ * [should raise an exception if key name is missing](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L841)
311
+ * timestamp attribute
312
+ * [is a Time object in Ruby and is set to the local time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L868)
313
+ * with :query_time auth_option
314
+ * [queries the server for the timestamp](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L853)
315
+ * with :timestamp option
316
+ * [uses the provided timestamp in the token request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L863)
317
+ * signing
318
+ * [generates a valid HMAC](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L892)
319
+ * using token authentication
320
+ * with :token option
321
+ * [authenticates successfully using the provided :token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L915)
322
+ * [disallows publishing on unspecified capability channels](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L919)
323
+ * [fails if timestamp is invalid](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L927)
324
+ * [cannot be renewed automatically](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L935)
325
+ * when implicit as a result of using :client_id
326
+ * and requests to the Ably server are mocked
327
+ * [will send a token request to the server](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L963)
328
+ * a token is created
329
+ * [before a request is made](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L972)
330
+ * [when a message is published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L976)
331
+ * [with capability and TTL defaults](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L980)
332
+ * [#client_id contains the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L991)
333
+ * when :client_id is provided in a token
334
+ * [#client_id contains the client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1006)
335
+ * #client_id_validated?
336
+ * when using basic auth
337
+ * [is false as basic auth users do not have an identity](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1018)
338
+ * when using a token auth string for a token with a client_id
339
+ * [is false as identification is not possible from an opaque token string](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1026)
340
+ * when using a token
341
+ * with a client_id
342
+ * [is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1035)
343
+ * with no client_id (anonymous)
344
+ * [is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1043)
345
+ * with a wildcard client_id (anonymous)
346
+ * [is false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1051)
347
+ * when using a token request with a client_id
348
+ * [is not true as identification is not confirmed until authenticated](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1060)
349
+ * after authentication
350
+ * [is true as identification is completed during implicit authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1067)
351
+ * when using a :key and basic auth
352
+ * [#using_token_auth? is false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1075)
353
+ * [#key attribute contains the key string](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1079)
354
+ * [#using_basic_auth? is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/auth_spec.rb#L1083)
132
355
 
133
356
  ### Ably::Rest
134
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb))_
357
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb))_
135
358
  * transport protocol
136
359
  * when protocol is not defined it defaults to :msgpack
137
- * [uses MsgPack](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L27)
360
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L27)
138
361
  * when option {:protocol=>:json} is used
139
- * [uses JSON](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L43)
362
+ * [uses JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L43)
140
363
  * when option {:use_binary_protocol=>false} is used
141
- * [uses JSON](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L43)
364
+ * [uses JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L43)
142
365
  * when option {:protocol=>:msgpack} is used
143
- * [uses MsgPack](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L60)
366
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L60)
144
367
  * when option {:use_binary_protocol=>true} is used
145
- * [uses MsgPack](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L60)
146
- * using JSON and MsgPack protocol
368
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L60)
369
+ * using JSON protocol
147
370
  * failed requests
148
371
  * due to invalid Auth
149
- * [should raise an InvalidRequest exception with a valid error message and code](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L75)
372
+ * [should raise an InvalidRequest exception with a valid error message and code](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L75)
150
373
  * server error with JSON error response body
151
- * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L94)
374
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L94)
152
375
  * 500 server error without a valid JSON response body
153
- * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L105)
376
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L105)
154
377
  * token authentication failures
155
378
  * when auth#token_renewable?
156
- * [should automatically reissue a token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L143)
379
+ * [should automatically reissue a token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L143)
157
380
  * when NOT auth#token_renewable?
158
- * [should raise an TokenExpired exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/base_spec.rb#L158)
381
+ * [should raise an TokenExpired exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L158)
382
+ * using MsgPack protocol
383
+ * failed requests
384
+ * due to invalid Auth
385
+ * [should raise an InvalidRequest exception with a valid error message and code](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L75)
386
+ * server error with JSON error response body
387
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L94)
388
+ * 500 server error without a valid JSON response body
389
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L105)
390
+ * token authentication failures
391
+ * when auth#token_renewable?
392
+ * [should automatically reissue a token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L143)
393
+ * when NOT auth#token_renewable?
394
+ * [should raise an TokenExpired exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/base_spec.rb#L158)
159
395
 
160
396
  ### Ably::Rest::Channel
161
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb))_
162
- * using JSON and MsgPack protocol
397
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb))_
398
+ * using JSON protocol
399
+ * #publish
400
+ * with name and data arguments
401
+ * [publishes the message and return true indicating success](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L21)
402
+ * and additional attributes
403
+ * [publishes the message with the attributes and return true indicating success](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L30)
404
+ * with a client_id configured in the ClientOptions
405
+ * [publishes the message without a client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L41)
406
+ * [expects a client_id to be added by the realtime service](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L49)
407
+ * with an array of Hash objects with :name and :data attributes
408
+ * [publishes an array of messages in one HTTP request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L62)
409
+ * with an array of Message objects
410
+ * [publishes an array of messages in one HTTP request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L77)
411
+ * without adequate permissions on the channel
412
+ * [raises a permission error when publishing](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L89)
413
+ * null attributes
414
+ * when name is null
415
+ * [publishes the message without a name attribute in the payload](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L98)
416
+ * when data is null
417
+ * [publishes the message without a data attribute in the payload](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L109)
418
+ * with neither name or data attributes
419
+ * [publishes the message without any attributes in the payload](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L120)
420
+ * identified clients
421
+ * when authenticated with a wildcard client_id
422
+ * with a valid client_id in the message
423
+ * [succeeds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L137)
424
+ * with a wildcard client_id in the message
425
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L146)
426
+ * with an empty client_id in the message
427
+ * [succeeds and publishes without a client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L152)
428
+ * when authenticated with a Token string with an implicit client_id
429
+ * without having a confirmed identity
430
+ * with a valid client_id in the message
431
+ * [succeeds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L169)
432
+ * with an invalid client_id in the message
433
+ * [succeeds in the client library but then fails when published to Ably](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L178)
434
+ * with an empty client_id in the message
435
+ * [succeeds and publishes with an implicit client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L184)
436
+ * when authenticated with TokenDetails with a valid client_id
437
+ * with a valid client_id in the message
438
+ * [succeeds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L201)
439
+ * with a wildcard client_id in the message
440
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L210)
441
+ * with an invalid client_id in the message
442
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L216)
443
+ * with an empty client_id in the message
444
+ * [succeeds and publishes with an implicit client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L222)
445
+ * when anonymous and no client_id
446
+ * with a client_id in the message
447
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L238)
448
+ * with a wildcard client_id in the message
449
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L244)
450
+ * with an empty client_id in the message
451
+ * [succeeds and publishes with an implicit client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L250)
452
+ * #history
453
+ * [returns a PaginatedResult model](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L278)
454
+ * [returns the current message history for the channel](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L282)
455
+ * [returns paged history using the PaginatedResult model](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L310)
456
+ * message timestamps
457
+ * [are after the messages were published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L295)
458
+ * message IDs
459
+ * [is unique](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L303)
460
+ * direction
461
+ * [returns paged history backwards by default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L331)
462
+ * [returns history forward if specified in the options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L337)
463
+ * limit
464
+ * [defaults to 100](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L349)
465
+ * #history option
466
+ * :start
467
+ * with milliseconds since epoch value
468
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L392)
469
+ * with a Time object value
470
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L402)
471
+ * :end
472
+ * with milliseconds since epoch value
473
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L392)
474
+ * with a Time object value
475
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L402)
476
+ * when argument start is after end
477
+ * [should raise an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L412)
478
+ * #presence
479
+ * [returns a REST Presence object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L422)
480
+ * using MsgPack protocol
163
481
  * #publish
164
482
  * with name and data arguments
165
- * [publishes the message and return true indicating success](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L20)
483
+ * [publishes the message and return true indicating success](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L21)
484
+ * and additional attributes
485
+ * [publishes the message with the attributes and return true indicating success](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L30)
486
+ * with a client_id configured in the ClientOptions
487
+ * [publishes the message without a client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L41)
488
+ * [expects a client_id to be added by the realtime service](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L49)
166
489
  * with an array of Hash objects with :name and :data attributes
167
- * [publishes an array of messages in one HTTP request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L34)
490
+ * [publishes an array of messages in one HTTP request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L62)
168
491
  * with an array of Message objects
169
- * [publishes an array of messages in one HTTP request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L49)
492
+ * [publishes an array of messages in one HTTP request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L77)
170
493
  * without adequate permissions on the channel
171
- * [raises a permission error when publishing](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L61)
494
+ * [raises a permission error when publishing](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L89)
172
495
  * null attributes
173
496
  * when name is null
174
- * [publishes the message without a name attribute in the payload](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L70)
497
+ * [publishes the message without a name attribute in the payload](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L98)
175
498
  * when data is null
176
- * [publishes the message without a data attribute in the payload](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L81)
499
+ * [publishes the message without a data attribute in the payload](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L109)
177
500
  * with neither name or data attributes
178
- * [publishes the message without any attributes in the payload](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L92)
501
+ * [publishes the message without any attributes in the payload](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L120)
502
+ * identified clients
503
+ * when authenticated with a wildcard client_id
504
+ * with a valid client_id in the message
505
+ * [succeeds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L137)
506
+ * with a wildcard client_id in the message
507
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L146)
508
+ * with an empty client_id in the message
509
+ * [succeeds and publishes without a client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L152)
510
+ * when authenticated with a Token string with an implicit client_id
511
+ * without having a confirmed identity
512
+ * with a valid client_id in the message
513
+ * [succeeds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L169)
514
+ * with an invalid client_id in the message
515
+ * [succeeds in the client library but then fails when published to Ably](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L178)
516
+ * with an empty client_id in the message
517
+ * [succeeds and publishes with an implicit client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L184)
518
+ * when authenticated with TokenDetails with a valid client_id
519
+ * with a valid client_id in the message
520
+ * [succeeds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L201)
521
+ * with a wildcard client_id in the message
522
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L210)
523
+ * with an invalid client_id in the message
524
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L216)
525
+ * with an empty client_id in the message
526
+ * [succeeds and publishes with an implicit client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L222)
527
+ * when anonymous and no client_id
528
+ * with a client_id in the message
529
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L238)
530
+ * with a wildcard client_id in the message
531
+ * [throws an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L244)
532
+ * with an empty client_id in the message
533
+ * [succeeds and publishes with an implicit client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L250)
179
534
  * #history
180
- * [returns a PaginatedResult model](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L119)
181
- * [returns the current message history for the channel](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L123)
182
- * [returns paged history using the PaginatedResult model](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L151)
535
+ * [returns a PaginatedResult model](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L278)
536
+ * [returns the current message history for the channel](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L282)
537
+ * [returns paged history using the PaginatedResult model](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L310)
183
538
  * message timestamps
184
- * [are after the messages were published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L136)
539
+ * [are after the messages were published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L295)
185
540
  * message IDs
186
- * [is unique](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L144)
541
+ * [is unique](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L303)
187
542
  * direction
188
- * [returns paged history backwards by default](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L172)
189
- * [returns history forward if specified in the options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L178)
543
+ * [returns paged history backwards by default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L331)
544
+ * [returns history forward if specified in the options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L337)
190
545
  * limit
191
- * [defaults to 100](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L190)
546
+ * [defaults to 100](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L349)
192
547
  * #history option
193
548
  * :start
194
549
  * with milliseconds since epoch value
195
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L233)
550
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L392)
196
551
  * with a Time object value
197
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L243)
552
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L402)
198
553
  * :end
199
554
  * with milliseconds since epoch value
200
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L233)
555
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L392)
201
556
  * with a Time object value
202
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L243)
557
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L402)
203
558
  * when argument start is after end
204
- * [should raise an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L253)
559
+ * [should raise an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L412)
205
560
  * #presence
206
- * [returns a REST Presence object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channel_spec.rb#L263)
561
+ * [returns a REST Presence object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channel_spec.rb#L422)
207
562
 
208
563
  ### Ably::Rest::Channels
209
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb))_
210
- * using JSON and MsgPack protocol
564
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb))_
565
+ * using JSON protocol
211
566
  * using shortcut method #channel on the client object
212
567
  * behaves like a channel
213
- * [returns a channel object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L6)
214
- * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L11)
568
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L6)
569
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L11)
215
570
  * using #get method on client#channels
216
571
  * behaves like a channel
217
- * [returns a channel object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L6)
218
- * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L11)
572
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L6)
573
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L11)
219
574
  * accessing an existing channel object with different options
220
- * [overrides the existing channel options and returns the channel object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L39)
575
+ * [overrides the existing channel options and returns the channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L39)
221
576
  * accessing an existing channel object without specifying any channel options
222
- * [returns the existing channel without modifying the channel options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L50)
577
+ * [returns the existing channel without modifying the channel options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L50)
223
578
  * using undocumented array accessor [] method on client#channels
224
579
  * behaves like a channel
225
- * [returns a channel object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L6)
226
- * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/channels_spec.rb#L11)
580
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L6)
581
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L11)
582
+ * using MsgPack protocol
583
+ * using shortcut method #channel on the client object
584
+ * behaves like a channel
585
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L6)
586
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L11)
587
+ * using #get method on client#channels
588
+ * behaves like a channel
589
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L6)
590
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L11)
591
+ * accessing an existing channel object with different options
592
+ * [overrides the existing channel options and returns the channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L39)
593
+ * accessing an existing channel object without specifying any channel options
594
+ * [returns the existing channel without modifying the channel options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L50)
595
+ * using undocumented array accessor [] method on client#channels
596
+ * behaves like a channel
597
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L6)
598
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/channels_spec.rb#L11)
227
599
 
228
600
  ### Ably::Rest::Client
229
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb))_
230
- * using JSON and MsgPack protocol
601
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb))_
602
+ * using JSON protocol
603
+ * #initialize
604
+ * with only an API key
605
+ * [uses basic authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L24)
606
+ * with an explicit string :token
607
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L32)
608
+ * with :use_token_auth set to true
609
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L40)
610
+ * with a :client_id configured
611
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L48)
612
+ * with an invalid wildcard "*" :client_id
613
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L54)
614
+ * with an :auth_callback Proc
615
+ * [calls the auth Proc to get a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L62)
616
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L67)
617
+ * with an :auth_callback Proc (clientId provided in library options instead of as a token_request param)
618
+ * [correctly sets the clientId on the token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L76)
619
+ * with an auth URL
620
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L86)
621
+ * before any REST request
622
+ * [sends an HTTP request to the provided auth URL to get a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L97)
623
+ * auth headers
624
+ * with basic auth
625
+ * [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)](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L117)
626
+ * with token auth
627
+ * without specifying protocol
628
+ * [sends the token string over HTTPS in the Authorization Bearer header with Base64 encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L136)
629
+ * when setting constructor ClientOption :tls to false
630
+ * [sends the token string over HTTP in the Authorization Bearer header with Base64 encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L146)
631
+ * using tokens
632
+ * when expired
633
+ * [creates a new token automatically when the old token expires](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L179)
634
+ * with a different client_id in the subsequent token
635
+ * [fails to authenticate and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L192)
636
+ * when token has not expired
637
+ * [reuses the existing token for every request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L203)
638
+ * connection transport
639
+ * defaults
640
+ * for default host
641
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L220)
642
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L224)
643
+ * for the fallback hosts
644
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L230)
645
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L234)
646
+ * with custom http_open_timeout and http_request_timeout options
647
+ * for default host
648
+ * [is configured to use custom open timeout](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L246)
649
+ * [is configured to use custom request timeout](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L250)
650
+ * for the fallback hosts
651
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L256)
652
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L260)
653
+ * fallback hosts
654
+ * configured
655
+ * [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](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L274)
656
+ * when environment is NOT production
657
+ * [does not retry failed requests with fallback hosts when there is a connection error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L291)
658
+ * when environment is production
659
+ * and connection times out
660
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L329)
661
+ * and the total request time exeeds 10 seconds
662
+ * [makes no further attempts to any fallback hosts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L344)
663
+ * and connection fails
664
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L360)
665
+ * and basic authentication fails
666
+ * [does not attempt the fallback hosts as this is an authentication failure](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L384)
667
+ * and server returns a 50x error
668
+ * [attempts the fallback hosts as this is an authentication failure](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L406)
669
+ * with a custom host
670
+ * that does not exist
671
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L422)
672
+ * fallback hosts
673
+ * [are never used](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L443)
674
+ * that times out
675
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L458)
676
+ * fallback hosts
677
+ * [are never used](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L471)
678
+ * HTTP configuration options
679
+ * [is frozen](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L528)
680
+ * defaults
681
+ * [#http_open_timeout is 4s](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L483)
682
+ * [#http_request_timeout is 15s](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L487)
683
+ * [#http_max_retry_count is 3](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L491)
684
+ * [#http_max_retry_duration is 10s](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L495)
685
+ * configured
686
+ * [#http_open_timeout uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L511)
687
+ * [#http_request_timeout uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L515)
688
+ * [#http_max_retry_count uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L519)
689
+ * [#http_max_retry_duration uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L523)
690
+ * #auth
691
+ * [is provides access to the Auth object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L539)
692
+ * [configures the Auth object with all ClientOptions passed to client in the initializer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L543)
693
+ * using MsgPack protocol
231
694
  * #initialize
232
695
  * with only an API key
233
- * [uses basic authentication](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L24)
696
+ * [uses basic authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L24)
234
697
  * with an explicit string :token
235
- * [uses token authentication](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L32)
698
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L32)
236
699
  * with :use_token_auth set to true
237
- * [uses token authentication](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L40)
700
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L40)
238
701
  * with a :client_id configured
239
- * [uses token authentication](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L48)
702
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L48)
703
+ * with an invalid wildcard "*" :client_id
704
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L54)
240
705
  * with an :auth_callback Proc
241
- * [calls the auth Proc to get a new token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L56)
242
- * [uses token authentication](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L61)
706
+ * [calls the auth Proc to get a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L62)
707
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L67)
708
+ * with an :auth_callback Proc (clientId provided in library options instead of as a token_request param)
709
+ * [correctly sets the clientId on the token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L76)
243
710
  * with an auth URL
244
- * [uses token authentication](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L70)
711
+ * [uses token authentication](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L86)
245
712
  * before any REST request
246
- * [sends an HTTP request to the provided auth URL to get a new token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L81)
713
+ * [sends an HTTP request to the provided auth URL to get a new token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L97)
247
714
  * auth headers
248
715
  * with basic auth
249
- * [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)](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L101)
716
+ * [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)](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L117)
250
717
  * with token auth
251
718
  * without specifying protocol
252
- * [sends the token string over HTTPS in the Authorization Bearer header with Base64 encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L120)
719
+ * [sends the token string over HTTPS in the Authorization Bearer header with Base64 encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L136)
253
720
  * when setting constructor ClientOption :tls to false
254
- * [sends the token string over HTTP in the Authorization Bearer header with Base64 encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L130)
721
+ * [sends the token string over HTTP in the Authorization Bearer header with Base64 encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L146)
255
722
  * using tokens
256
723
  * when expired
257
- * [creates a new token automatically when the old token expires](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L161)
724
+ * [creates a new token automatically when the old token expires](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L179)
725
+ * with a different client_id in the subsequent token
726
+ * [fails to authenticate and raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L192)
258
727
  * when token has not expired
259
- * [reuses the existing token for every request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L175)
728
+ * [reuses the existing token for every request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L203)
260
729
  * connection transport
261
- * for default host
262
- * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L191)
263
- * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L195)
264
- * for the fallback hosts
265
- * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L201)
266
- * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L205)
730
+ * defaults
731
+ * for default host
732
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L220)
733
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L224)
734
+ * for the fallback hosts
735
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L230)
736
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L234)
737
+ * with custom http_open_timeout and http_request_timeout options
738
+ * for default host
739
+ * [is configured to use custom open timeout](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L246)
740
+ * [is configured to use custom request timeout](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L250)
741
+ * for the fallback hosts
742
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L256)
743
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L260)
267
744
  * fallback hosts
268
745
  * configured
269
- * [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](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L218)
746
+ * [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](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L274)
270
747
  * when environment is NOT production
271
- * [does not retry failed requests with fallback hosts when there is a connection error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L235)
748
+ * [does not retry failed requests with fallback hosts when there is a connection error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L291)
272
749
  * when environment is production
273
750
  * and connection times out
274
- * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L272)
751
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L329)
275
752
  * and the total request time exeeds 10 seconds
276
- * [makes no further attempts to any fallback hosts](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L287)
753
+ * [makes no further attempts to any fallback hosts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L344)
277
754
  * and connection fails
278
- * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L303)
755
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L360)
279
756
  * and basic authentication fails
280
- * [does not attempt the fallback hosts as this is an authentication failure](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L327)
757
+ * [does not attempt the fallback hosts as this is an authentication failure](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L384)
281
758
  * and server returns a 50x error
282
- * [attempts the fallback hosts as this is an authentication failure](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L349)
759
+ * [attempts the fallback hosts as this is an authentication failure](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L406)
283
760
  * with a custom host
284
761
  * that does not exist
285
- * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L365)
762
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L422)
286
763
  * fallback hosts
287
- * [are never used](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L386)
764
+ * [are never used](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L443)
288
765
  * that times out
289
- * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L401)
766
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L458)
290
767
  * fallback hosts
291
- * [are never used](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L414)
768
+ * [are never used](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L471)
769
+ * HTTP configuration options
770
+ * [is frozen](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L528)
771
+ * defaults
772
+ * [#http_open_timeout is 4s](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L483)
773
+ * [#http_request_timeout is 15s](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L487)
774
+ * [#http_max_retry_count is 3](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L491)
775
+ * [#http_max_retry_duration is 10s](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L495)
776
+ * configured
777
+ * [#http_open_timeout uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L511)
778
+ * [#http_request_timeout uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L515)
779
+ * [#http_max_retry_count uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L519)
780
+ * [#http_max_retry_duration uses provided value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L523)
292
781
  * #auth
293
- * [is provides access to the Auth object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L428)
294
- * [configures the Auth object with all ClientOptions passed to client in the initializer](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/client_spec.rb#L432)
782
+ * [is provides access to the Auth object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L539)
783
+ * [configures the Auth object with all ClientOptions passed to client in the initializer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/client_spec.rb#L543)
295
784
 
296
785
  ### Ably::Models::MessageEncoders
297
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb))_
786
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb))_
298
787
  * with binary transport protocol
299
788
  * without encryption
300
789
  * with UTF-8 data
301
- * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L41)
790
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L41)
302
791
  * with binary data
303
- * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L52)
792
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L52)
304
793
  * with JSON data
305
- * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L63)
794
+ * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L63)
306
795
  * with encryption
307
796
  * with UTF-8 data
308
- * [applies utf-8 and cipher encoding and sets the encoding attribute to "utf-8/cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L78)
797
+ * [applies utf-8 and cipher encoding and sets the encoding attribute to "utf-8/cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L78)
309
798
  * with binary data
310
- * [applies cipher encoding and sets the encoding attribute to "cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L89)
799
+ * [applies cipher encoding and sets the encoding attribute to "cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L89)
311
800
  * with JSON data
312
- * [applies json, utf-8 and cipher encoding and sets the encoding attribute to "json/utf-8/cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L100)
801
+ * [applies json, utf-8 and cipher encoding and sets the encoding attribute to "json/utf-8/cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L100)
313
802
  * with text transport protocol
314
803
  * without encryption
315
804
  * with UTF-8 data
316
- * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L117)
805
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L117)
317
806
  * with binary data
318
- * [applies a base64 encoding and sets the encoding attribute to "base64"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L128)
807
+ * [applies a base64 encoding and sets the encoding attribute to "base64"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L128)
319
808
  * with JSON data
320
- * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L139)
809
+ * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L139)
321
810
  * with encryption
322
811
  * with UTF-8 data
323
- * [applies utf-8, cipher and base64 encodings and sets the encoding attribute to "utf-8/cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L154)
812
+ * [applies utf-8, cipher and base64 encodings and sets the encoding attribute to "utf-8/cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L154)
324
813
  * with binary data
325
- * [applies cipher and base64 encoding and sets the encoding attribute to "cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L165)
814
+ * [applies cipher and base64 encoding and sets the encoding attribute to "cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L165)
326
815
  * with JSON data
327
- * [applies json, utf-8, cipher and base64 encoding and sets the encoding attribute to "json/utf-8/cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/encoders_spec.rb#L176)
816
+ * [applies json, utf-8, cipher and base64 encoding and sets the encoding attribute to "json/utf-8/cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/encoders_spec.rb#L176)
328
817
 
329
818
  ### Ably::Rest::Channel messages
330
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb))_
331
- * using JSON and MsgPack protocol
819
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb))_
820
+ * using JSON protocol
821
+ * publishing with an ASCII_8BIT message name
822
+ * [is converted into UTF_8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L18)
823
+ * with supported data payload content type
824
+ * JSON Object (Hash)
825
+ * [is encoded and decoded to the same hash](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L30)
826
+ * JSON Array
827
+ * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L39)
828
+ * String
829
+ * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L48)
830
+ * Binary
831
+ * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L57)
832
+ * with unsupported data payload content type
833
+ * Integer
834
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L68)
835
+ * Float
836
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L76)
837
+ * Boolean
838
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L84)
839
+ * False
840
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L92)
841
+ * encryption and encoding
842
+ * with #publish and #history
843
+ * with AES-128-CBC using crypto-data-128.json fixtures
844
+ * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
845
+ * behaves like an Ably encrypter and decrypter
846
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
847
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
848
+ * item 1 with encrypted encoding cipher+aes-128-cbc/base64
849
+ * behaves like an Ably encrypter and decrypter
850
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
851
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
852
+ * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
853
+ * behaves like an Ably encrypter and decrypter
854
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
855
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
856
+ * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
857
+ * behaves like an Ably encrypter and decrypter
858
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
859
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
860
+ * with AES-256-CBC using crypto-data-256.json fixtures
861
+ * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
862
+ * behaves like an Ably encrypter and decrypter
863
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
864
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
865
+ * item 1 with encrypted encoding cipher+aes-256-cbc/base64
866
+ * behaves like an Ably encrypter and decrypter
867
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
868
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
869
+ * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
870
+ * behaves like an Ably encrypter and decrypter
871
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
872
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
873
+ * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
874
+ * behaves like an Ably encrypter and decrypter
875
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
876
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
877
+ * when publishing lots of messages
878
+ * [encrypts on #publish and decrypts on #history](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L185)
879
+ * when retrieving #history with a different protocol
880
+ * [delivers a String ASCII-8BIT payload to the receiver](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L212)
881
+ * [delivers a String UTF-8 payload to the receiver](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L212)
882
+ * [delivers a Hash payload to the receiver](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L212)
883
+ * when publishing on an unencrypted channel and retrieving with #history on an encrypted channel
884
+ * [does not attempt to decrypt the message](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L228)
885
+ * when publishing on an encrypted channel and retrieving with #history on an unencrypted channel
886
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L249)
887
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L255)
888
+ * publishing on an encrypted channel and retrieving #history with a different algorithm on another client
889
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L276)
890
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L282)
891
+ * publishing on an encrypted channel and subscribing with a different key on another client
892
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L303)
893
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L309)
894
+ * using MsgPack protocol
332
895
  * publishing with an ASCII_8BIT message name
333
- * [is converted into UTF_8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L18)
896
+ * [is converted into UTF_8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L18)
334
897
  * with supported data payload content type
335
898
  * JSON Object (Hash)
336
- * [is encoded and decoded to the same hash](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L30)
899
+ * [is encoded and decoded to the same hash](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L30)
337
900
  * JSON Array
338
- * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L39)
901
+ * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L39)
339
902
  * String
340
- * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L48)
903
+ * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L48)
341
904
  * Binary
342
- * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L57)
905
+ * [is encoded and decoded to the same Array](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L57)
343
906
  * with unsupported data payload content type
344
907
  * Integer
345
- * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L68)
908
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L68)
346
909
  * Float
347
- * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L76)
910
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L76)
348
911
  * Boolean
349
- * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L84)
912
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L84)
350
913
  * False
351
- * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L92)
914
+ * [is raises an UnsupportedDataType 40011 exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L92)
352
915
  * encryption and encoding
353
916
  * with #publish and #history
354
917
  * with AES-128-CBC using crypto-data-128.json fixtures
355
918
  * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
356
919
  * behaves like an Ably encrypter and decrypter
357
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
358
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
920
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
921
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
359
922
  * item 1 with encrypted encoding cipher+aes-128-cbc/base64
360
923
  * behaves like an Ably encrypter and decrypter
361
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
362
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
924
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
925
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
363
926
  * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
364
927
  * behaves like an Ably encrypter and decrypter
365
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
366
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
928
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
929
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
367
930
  * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
368
931
  * behaves like an Ably encrypter and decrypter
369
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
370
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
932
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
933
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
371
934
  * with AES-256-CBC using crypto-data-256.json fixtures
372
935
  * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
373
936
  * behaves like an Ably encrypter and decrypter
374
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
375
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
937
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
938
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
376
939
  * item 1 with encrypted encoding cipher+aes-256-cbc/base64
377
940
  * behaves like an Ably encrypter and decrypter
378
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
379
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
941
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
942
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
380
943
  * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
381
944
  * behaves like an Ably encrypter and decrypter
382
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
383
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
945
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
946
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
384
947
  * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
385
948
  * behaves like an Ably encrypter and decrypter
386
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L137)
387
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L152)
949
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L137)
950
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L152)
388
951
  * when publishing lots of messages
389
- * [encrypts on #publish and decrypts on #history](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L185)
952
+ * [encrypts on #publish and decrypts on #history](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L185)
390
953
  * when retrieving #history with a different protocol
391
- * [delivers a String ASCII-8BIT payload to the receiver](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L212)
392
- * [delivers a String UTF-8 payload to the receiver](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L212)
393
- * [delivers a Hash payload to the receiver](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L212)
954
+ * [delivers a String ASCII-8BIT payload to the receiver](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L212)
955
+ * [delivers a String UTF-8 payload to the receiver](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L212)
956
+ * [delivers a Hash payload to the receiver](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L212)
394
957
  * when publishing on an unencrypted channel and retrieving with #history on an encrypted channel
395
- * [does not attempt to decrypt the message](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L228)
958
+ * [does not attempt to decrypt the message](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L228)
396
959
  * when publishing on an encrypted channel and retrieving with #history on an unencrypted channel
397
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L249)
398
- * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L255)
960
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L249)
961
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L255)
399
962
  * publishing on an encrypted channel and retrieving #history with a different algorithm on another client
400
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L276)
401
- * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L282)
963
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L276)
964
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L282)
402
965
  * publishing on an encrypted channel and subscribing with a different key on another client
403
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L303)
404
- * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/message_spec.rb#L309)
966
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L303)
967
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/message_spec.rb#L309)
405
968
 
406
969
  ### Ably::Rest::Presence
407
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb))_
408
- * using JSON and MsgPack protocol
970
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb))_
971
+ * using JSON protocol
409
972
  * tested against presence fixture data set up in test app
410
973
  * #get
411
- * [returns current members on the channel with their action set to :present](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L41)
974
+ * [returns current members on the channel with their action set to :present](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L41)
412
975
  * with :limit option
413
- * [returns a paged response limiting number of members per page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L57)
976
+ * [returns a paged response limiting number of members per page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L57)
414
977
  * default :limit
415
- * [defaults to a limit of 100](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L89)
978
+ * [defaults to a limit of 100](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L89)
416
979
  * with :client_id option
417
- * PENDING: *[returns a list members filtered by the provided client ID](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L98)*
980
+ * [returns a list members filtered by the provided client ID](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L98)
418
981
  * with :connection_id option
419
- * PENDING: *[returns a list members filtered by the provided connection ID](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L109)*
982
+ * [returns a list members filtered by the provided connection ID](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L109)
983
+ * [returns a list members filtered by the provided connection ID](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L113)
420
984
  * #history
421
- * [returns recent presence activity](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L120)
985
+ * [returns recent presence activity](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L122)
422
986
  * default behaviour
423
- * [uses backwards direction](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L135)
987
+ * [uses backwards direction](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L137)
424
988
  * with options
425
989
  * direction: :forwards
426
- * [returns recent presence activity forwards with most recent history last](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L147)
990
+ * [returns recent presence activity forwards with most recent history last](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L149)
427
991
  * direction: :backwards
428
- * [returns recent presence activity backwards with most recent history first](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L162)
992
+ * [returns recent presence activity backwards with most recent history first](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L164)
429
993
  * #history
430
994
  * with options
431
995
  * limit options
432
996
  * default
433
- * [is set to 100](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L210)
997
+ * [is set to 100](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L212)
434
998
  * set to 1000
435
- * [is passes the limit query param value 1000](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L223)
999
+ * [is passes the limit query param value 1000](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L225)
436
1000
  * with time range options
437
1001
  * :start
438
1002
  * with milliseconds since epoch value
439
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L253)
1003
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L255)
440
1004
  * with Time object value
441
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L263)
1005
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L265)
442
1006
  * :end
443
1007
  * with milliseconds since epoch value
444
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L253)
1008
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L255)
445
1009
  * with Time object value
446
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L263)
1010
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L265)
447
1011
  * when argument start is after end
448
- * [should raise an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L274)
1012
+ * [should raise an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L276)
449
1013
  * decoding
450
1014
  * with encoded fixture data
451
1015
  * #history
452
- * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L293)
1016
+ * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L295)
453
1017
  * #get
454
- * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L300)
1018
+ * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L302)
455
1019
  * decoding permutations using mocked #history
456
1020
  * valid decodeable content
457
1021
  * #get
458
- * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L356)
1022
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L358)
459
1023
  * #history
460
- * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L373)
1024
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L375)
461
1025
  * invalid data
462
1026
  * #get
463
- * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L404)
464
- * [logs a cipher error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L408)
1027
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L406)
1028
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L410)
465
1029
  * #history
466
- * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L428)
467
- * [logs a cipher error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/presence_spec.rb#L432)
1030
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L430)
1031
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L434)
1032
+ * using MsgPack protocol
1033
+ * tested against presence fixture data set up in test app
1034
+ * #get
1035
+ * [returns current members on the channel with their action set to :present](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L41)
1036
+ * with :limit option
1037
+ * [returns a paged response limiting number of members per page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L57)
1038
+ * default :limit
1039
+ * [defaults to a limit of 100](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L89)
1040
+ * with :client_id option
1041
+ * [returns a list members filtered by the provided client ID](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L98)
1042
+ * with :connection_id option
1043
+ * [returns a list members filtered by the provided connection ID](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L109)
1044
+ * [returns a list members filtered by the provided connection ID](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L113)
1045
+ * #history
1046
+ * [returns recent presence activity](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L122)
1047
+ * default behaviour
1048
+ * [uses backwards direction](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L137)
1049
+ * with options
1050
+ * direction: :forwards
1051
+ * [returns recent presence activity forwards with most recent history last](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L149)
1052
+ * direction: :backwards
1053
+ * [returns recent presence activity backwards with most recent history first](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L164)
1054
+ * #history
1055
+ * with options
1056
+ * limit options
1057
+ * default
1058
+ * [is set to 100](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L212)
1059
+ * set to 1000
1060
+ * [is passes the limit query param value 1000](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L225)
1061
+ * with time range options
1062
+ * :start
1063
+ * with milliseconds since epoch value
1064
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L255)
1065
+ * with Time object value
1066
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L265)
1067
+ * :end
1068
+ * with milliseconds since epoch value
1069
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L255)
1070
+ * with Time object value
1071
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L265)
1072
+ * when argument start is after end
1073
+ * [should raise an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L276)
1074
+ * decoding
1075
+ * with encoded fixture data
1076
+ * #history
1077
+ * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L295)
1078
+ * #get
1079
+ * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L302)
1080
+ * decoding permutations using mocked #history
1081
+ * valid decodeable content
1082
+ * #get
1083
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L358)
1084
+ * #history
1085
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L375)
1086
+ * invalid data
1087
+ * #get
1088
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L406)
1089
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L410)
1090
+ * #history
1091
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L430)
1092
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/presence_spec.rb#L434)
468
1093
 
469
1094
  ### Ably::Rest::Client#stats
470
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb))_
471
- * using JSON and MsgPack protocol
1095
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb))_
1096
+ * using JSON protocol
472
1097
  * fetching application stats
473
- * [returns a PaginatedResult object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L54)
1098
+ * [returns a PaginatedResult object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L54)
474
1099
  * by minute
475
1100
  * with no options
476
- * [uses the minute interval by default](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L66)
1101
+ * [uses the minute interval by default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L66)
477
1102
  * with :from set to last interval and :limit set to 1
478
- * [retrieves only one stat](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L75)
479
- * [returns zero value for any missing metrics](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L79)
480
- * [returns all aggregated message data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L84)
481
- * [returns inbound realtime all data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L89)
482
- * [returns inbound realtime message data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L94)
483
- * [returns outbound realtime all data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L99)
484
- * [returns persisted presence all data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L104)
485
- * [returns connections all data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L109)
486
- * [returns channels all data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L114)
487
- * [returns api_requests data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L119)
488
- * [returns token_requests data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L124)
489
- * [returns stat objects with #interval_granularity equal to :minute](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L129)
490
- * [returns stat objects with #interval_id matching :start](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L133)
491
- * [returns stat objects with #interval_time matching :start Time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L137)
1103
+ * [retrieves only one stat](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L75)
1104
+ * [returns zero value for any missing metrics](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L79)
1105
+ * [returns all aggregated message data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L84)
1106
+ * [returns inbound realtime all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L89)
1107
+ * [returns inbound realtime message data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L94)
1108
+ * [returns outbound realtime all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L99)
1109
+ * [returns persisted presence all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L104)
1110
+ * [returns connections all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L109)
1111
+ * [returns channels all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L114)
1112
+ * [returns api_requests data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L119)
1113
+ * [returns token_requests data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L124)
1114
+ * [returns stat objects with #interval_granularity equal to :minute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L129)
1115
+ * [returns stat objects with #interval_id matching :start](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L133)
1116
+ * [returns stat objects with #interval_time matching :start Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L137)
492
1117
  * with :start set to first interval, :limit set to 1 and direction :forwards
493
- * [returns the first interval stats as stats are provided forwards from :start](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L147)
494
- * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L151)
1118
+ * [returns the first interval stats as stats are provided forwards from :start](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L147)
1119
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L151)
495
1120
  * with :end set to last interval, :limit set to 1 and direction :backwards
496
- * [returns the 3rd interval stats first as stats are provided backwards from :end](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L163)
497
- * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L167)
1121
+ * [returns the 3rd interval stats first as stats are provided backwards from :end](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L163)
1122
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L167)
498
1123
  * with :end set to last interval and :limit set to 3 to ensure only last years stats are included
499
1124
  * the REST API
500
- * [defaults to direction :backwards](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L179)
1125
+ * [defaults to direction :backwards](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L179)
501
1126
  * with :end set to previous year interval
502
1127
  * the REST API
503
- * [defaults to 100 items for pagination](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L191)
1128
+ * [defaults to 100 items for pagination](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L191)
504
1129
  * by hour
505
- * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L215)
1130
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L215)
506
1131
  * by day
507
- * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L215)
1132
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L215)
508
1133
  * by month
509
- * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L215)
1134
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L215)
510
1135
  * when argument start is after end
511
- * [should raise an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/stats_spec.rb#L227)
1136
+ * [should raise an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L227)
1137
+ * using MsgPack protocol
1138
+ * fetching application stats
1139
+ * [returns a PaginatedResult object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L54)
1140
+ * by minute
1141
+ * with no options
1142
+ * [uses the minute interval by default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L66)
1143
+ * with :from set to last interval and :limit set to 1
1144
+ * [retrieves only one stat](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L75)
1145
+ * [returns zero value for any missing metrics](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L79)
1146
+ * [returns all aggregated message data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L84)
1147
+ * [returns inbound realtime all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L89)
1148
+ * [returns inbound realtime message data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L94)
1149
+ * [returns outbound realtime all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L99)
1150
+ * [returns persisted presence all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L104)
1151
+ * [returns connections all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L109)
1152
+ * [returns channels all data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L114)
1153
+ * [returns api_requests data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L119)
1154
+ * [returns token_requests data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L124)
1155
+ * [returns stat objects with #interval_granularity equal to :minute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L129)
1156
+ * [returns stat objects with #interval_id matching :start](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L133)
1157
+ * [returns stat objects with #interval_time matching :start Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L137)
1158
+ * with :start set to first interval, :limit set to 1 and direction :forwards
1159
+ * [returns the first interval stats as stats are provided forwards from :start](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L147)
1160
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L151)
1161
+ * with :end set to last interval, :limit set to 1 and direction :backwards
1162
+ * [returns the 3rd interval stats first as stats are provided backwards from :end](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L163)
1163
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L167)
1164
+ * with :end set to last interval and :limit set to 3 to ensure only last years stats are included
1165
+ * the REST API
1166
+ * [defaults to direction :backwards](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L179)
1167
+ * with :end set to previous year interval
1168
+ * the REST API
1169
+ * [defaults to 100 items for pagination](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L191)
1170
+ * by hour
1171
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L215)
1172
+ * by day
1173
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L215)
1174
+ * by month
1175
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L215)
1176
+ * when argument start is after end
1177
+ * [should raise an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/stats_spec.rb#L227)
512
1178
 
513
1179
  ### Ably::Rest::Client#time
514
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/time_spec.rb))_
515
- * using JSON and MsgPack protocol
1180
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/time_spec.rb))_
1181
+ * using JSON protocol
1182
+ * fetching the service time
1183
+ * [should return the service time as a Time object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/time_spec.rb#L10)
1184
+ * with reconfigured HTTP timeout
1185
+ * [should raise a timeout exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/time_spec.rb#L19)
1186
+ * using MsgPack protocol
516
1187
  * fetching the service time
517
- * [should return the service time as a Time object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/acceptance/rest/time_spec.rb#L10)
1188
+ * [should return the service time as a Time object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/time_spec.rb#L10)
1189
+ * with reconfigured HTTP timeout
1190
+ * [should raise a timeout exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/acceptance/rest/time_spec.rb#L19)
518
1191
 
519
1192
  ### Ably::Auth
520
- _(see [lib/submodules/ably-ruby/spec/unit/auth_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb))_
1193
+ _(see [lib/submodules/ably-ruby/spec/unit/auth_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb))_
521
1194
  * client_id option
522
1195
  * with nil value
523
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L20)
1196
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L20)
524
1197
  * as UTF_8 string
525
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L28)
526
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L32)
1198
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L28)
1199
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L32)
527
1200
  * as SHIFT_JIS string
528
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L40)
529
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L44)
1201
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L40)
1202
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L44)
530
1203
  * as ASCII_8BIT string
531
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L52)
532
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L56)
1204
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L52)
1205
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L56)
533
1206
  * as Integer
534
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L64)
1207
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L64)
535
1208
  * defaults
536
- * [should default TTL to 1 hour](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L74)
537
- * [should default capability to all](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L78)
538
- * [should have defaults for :ttl and :capability](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/auth_spec.rb#L82)
1209
+ * [should default TTL to 1 hour](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L74)
1210
+ * [should default capability to all](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L78)
1211
+ * [should have defaults for :ttl and :capability](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/auth_spec.rb#L82)
539
1212
 
540
1213
  ### Ably::Logger
541
- _(see [lib/submodules/ably-ruby/spec/unit/logger_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/logger_spec.rb))_
542
- * [uses the language provided Logger by default](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/logger_spec.rb#L15)
1214
+ _(see [lib/submodules/ably-ruby/spec/unit/logger_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/logger_spec.rb))_
1215
+ * [uses the language provided Logger by default](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/logger_spec.rb#L15)
543
1216
  * with a custom Logger
544
1217
  * with an invalid interface
545
- * [raises an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/logger_spec.rb#L116)
1218
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/logger_spec.rb#L116)
546
1219
  * with a valid interface
547
- * [is used](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/logger_spec.rb#L135)
1220
+ * [is used](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/logger_spec.rb#L135)
1221
+
1222
+ ### Ably::Models::ChannelStateChange
1223
+ _(see [lib/submodules/ably-ruby/spec/unit/models/channel_state_change_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb))_
1224
+ * #current
1225
+ * [is required](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb#L10)
1226
+ * [is an attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb#L14)
1227
+ * #previous
1228
+ * [is required](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb#L20)
1229
+ * [is an attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb#L24)
1230
+ * #reason
1231
+ * [is not required](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb#L30)
1232
+ * [is an attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb#L34)
1233
+ * invalid attributes
1234
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/channel_state_change_spec.rb#L40)
1235
+
1236
+ ### Ably::Models::ConnectionDetails
1237
+ _(see [lib/submodules/ably-ruby/spec/unit/models/connection_details_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_details_spec.rb))_
1238
+ * behaves like a model
1239
+ * attributes
1240
+ * #client_id
1241
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1242
+ * #connection_key
1243
+ * [retrieves attribute :connection_key](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1244
+ * #max_message_size
1245
+ * [retrieves attribute :max_message_size](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1246
+ * #max_frame_size
1247
+ * [retrieves attribute :max_frame_size](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1248
+ * #max_inbound_rate
1249
+ * [retrieves attribute :max_inbound_rate](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1250
+ * #==
1251
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L41)
1252
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L46)
1253
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L50)
1254
+ * is immutable
1255
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L76)
1256
+ * [dups options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L80)
1257
+ * attributes
1258
+ * #connection_state_ttl
1259
+ * [retrieves attribute :connection_state_ttl and converts it from ms to s](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_details_spec.rb#L19)
1260
+ * ==
1261
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_details_spec.rb#L28)
1262
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_details_spec.rb#L33)
1263
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_details_spec.rb#L37)
1264
+
1265
+ ### Ably::Models::ConnectionStateChange
1266
+ _(see [lib/submodules/ably-ruby/spec/unit/models/connection_state_change_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb))_
1267
+ * #current
1268
+ * [is required](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L10)
1269
+ * [is an attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L14)
1270
+ * #previous
1271
+ * [is required](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L20)
1272
+ * [is an attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L24)
1273
+ * #retry_in
1274
+ * [is not required](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L30)
1275
+ * [is an attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L34)
1276
+ * #reason
1277
+ * [is not required](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L40)
1278
+ * [is an attribute](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L44)
1279
+ * invalid attributes
1280
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/connection_state_change_spec.rb#L50)
548
1281
 
549
1282
  ### Ably::Models::ErrorInfo
550
- _(see [lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/error_info_spec.rb))_
1283
+ _(see [lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/error_info_spec.rb))_
551
1284
  * behaves like a model
552
1285
  * attributes
553
1286
  * #code
554
- * [retrieves attribute :code](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1287
+ * [retrieves attribute :code](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
555
1288
  * #status_code
556
- * [retrieves attribute :status_code](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1289
+ * [retrieves attribute :status_code](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
557
1290
  * #message
558
- * [retrieves attribute :message](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1291
+ * [retrieves attribute :message](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
559
1292
  * #==
560
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L41)
561
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L46)
562
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L50)
1293
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L41)
1294
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L46)
1295
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L50)
563
1296
  * is immutable
564
- * [prevents changes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L76)
565
- * [dups options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L80)
1297
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L76)
1298
+ * [dups options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L80)
566
1299
  * #status
567
- * [is an alias for #status_code](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/error_info_spec.rb#L13)
1300
+ * [is an alias for #status_code](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/error_info_spec.rb#L13)
568
1301
 
569
1302
  ### Ably::Models::Message
570
- _(see [lib/submodules/ably-ruby/spec/unit/models/message_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb))_
1303
+ _(see [lib/submodules/ably-ruby/spec/unit/models/message_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb))_
571
1304
  * behaves like a model
572
1305
  * attributes
573
1306
  * #id
574
- * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1307
+ * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
575
1308
  * #name
576
- * [retrieves attribute :name](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1309
+ * [retrieves attribute :name](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
577
1310
  * #client_id
578
- * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1311
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
579
1312
  * #data
580
- * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1313
+ * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
581
1314
  * #encoding
582
- * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1315
+ * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
583
1316
  * #==
584
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L41)
585
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L46)
586
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L50)
1317
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L41)
1318
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L46)
1319
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L50)
587
1320
  * is immutable
588
- * [prevents changes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L76)
589
- * [dups options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L80)
1321
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L76)
1322
+ * [dups options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L80)
590
1323
  * #timestamp
591
- * [retrieves attribute :timestamp as Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L22)
1324
+ * [retrieves attribute :timestamp as Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L22)
592
1325
  * #connection_id attribute
593
1326
  * when this model has a connectionId attribute
594
1327
  * but no protocol message
595
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L37)
1328
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L37)
596
1329
  * with a protocol message with a different connectionId
597
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L45)
1330
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L45)
598
1331
  * when this model has no connectionId attribute
599
1332
  * and no protocol message
600
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L55)
1333
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L55)
601
1334
  * with a protocol message with a connectionId
602
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L63)
1335
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L63)
603
1336
  * initialized with
604
1337
  * :name
605
1338
  * as UTF_8 string
606
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L90)
607
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L94)
1339
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L90)
1340
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L94)
608
1341
  * as SHIFT_JIS string
609
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L102)
610
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L106)
1342
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L102)
1343
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L106)
611
1344
  * as ASCII_8BIT string
612
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L114)
613
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L118)
1345
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L114)
1346
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L118)
614
1347
  * as Integer
615
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L126)
1348
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L126)
616
1349
  * as Nil
617
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L134)
1350
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L134)
618
1351
  * :client_id
619
1352
  * as UTF_8 string
620
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L90)
621
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L94)
1353
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L90)
1354
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L94)
622
1355
  * as SHIFT_JIS string
623
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L102)
624
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L106)
1356
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L102)
1357
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L106)
625
1358
  * as ASCII_8BIT string
626
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L114)
627
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L118)
1359
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L114)
1360
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L118)
628
1361
  * as Integer
629
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L126)
1362
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L126)
630
1363
  * as Nil
631
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L134)
1364
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L134)
632
1365
  * :encoding
633
1366
  * as UTF_8 string
634
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L90)
635
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L94)
1367
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L90)
1368
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L94)
636
1369
  * as SHIFT_JIS string
637
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L102)
638
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L106)
1370
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L102)
1371
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L106)
639
1372
  * as ASCII_8BIT string
640
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L114)
641
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L118)
1373
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L114)
1374
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L118)
642
1375
  * as Integer
643
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L126)
1376
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L126)
644
1377
  * as Nil
645
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/message_spec.rb#L134)
1378
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/message_spec.rb#L134)
646
1379
 
647
1380
  ### Ably::Models::PaginatedResult
648
- _(see [lib/submodules/ably-ruby/spec/unit/models/paginated_result_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb))_
1381
+ _(see [lib/submodules/ably-ruby/spec/unit/models/paginated_result_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb))_
649
1382
  * #items
650
- * [returns correct length from body](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L31)
651
- * [is Enumerable](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L35)
652
- * [is iterable](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L39)
653
- * [provides [] accessor method](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L57)
654
- * [#first gets the first item in page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L63)
655
- * [#last gets the last item in page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L67)
1383
+ * [returns correct length from body](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L31)
1384
+ * [is Enumerable](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L35)
1385
+ * [is iterable](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L39)
1386
+ * [provides [] accessor method](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L57)
1387
+ * [#first gets the first item in page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L63)
1388
+ * [#last gets the last item in page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L67)
656
1389
  * #each
657
- * [returns an enumerator](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L44)
658
- * [yields each item](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L48)
1390
+ * [returns an enumerator](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L44)
1391
+ * [yields each item](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L48)
659
1392
  * with non paged http response
660
- * [is the last page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L172)
661
- * [does not have next page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L176)
662
- * [does not support pagination](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L180)
663
- * [returns nil when accessing next page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L184)
664
- * [returns nil when accessing first page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L188)
1393
+ * [is the last page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L172)
1394
+ * [does not have next page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L176)
1395
+ * [does not support pagination](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L180)
1396
+ * [returns nil when accessing next page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L184)
1397
+ * [returns nil when accessing first page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L188)
665
1398
  * with paged http response
666
- * [has next page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L206)
667
- * [is not the last page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L210)
668
- * [supports pagination](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L214)
1399
+ * [has next page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L206)
1400
+ * [is not the last page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L210)
1401
+ * [supports pagination](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L214)
669
1402
  * accessing next page
670
- * [returns another PaginatedResult](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L242)
671
- * [retrieves the next page of results](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L246)
672
- * [does not have a next page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L251)
673
- * [is the last page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L255)
674
- * [returns nil when trying to access the last page when it is the last page](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L259)
1403
+ * [returns another PaginatedResult](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L242)
1404
+ * [retrieves the next page of results](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L246)
1405
+ * [does not have a next page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L251)
1406
+ * [is the last page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L255)
1407
+ * [returns nil when trying to access the last page when it is the last page](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L259)
675
1408
  * and then first page
676
- * [returns a PaginatedResult](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L270)
677
- * [retrieves the first page of results](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/paginated_result_spec.rb#L274)
1409
+ * [returns a PaginatedResult](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L270)
1410
+ * [retrieves the first page of results](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/paginated_result_spec.rb#L274)
678
1411
 
679
1412
  ### Ably::Models::PresenceMessage
680
- _(see [lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb))_
1413
+ _(see [lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb))_
681
1414
  * behaves like a model
682
1415
  * attributes
683
1416
  * #id
684
- * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1417
+ * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
685
1418
  * #client_id
686
- * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1419
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
687
1420
  * #data
688
- * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1421
+ * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
689
1422
  * #encoding
690
- * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1423
+ * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
691
1424
  * #==
692
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L41)
693
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L46)
694
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L50)
1425
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L41)
1426
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L46)
1427
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L50)
695
1428
  * is immutable
696
- * [prevents changes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L76)
697
- * [dups options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L80)
1429
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L76)
1430
+ * [dups options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L80)
698
1431
  * #connection_id attribute
699
1432
  * when this model has a connectionId attribute
700
1433
  * but no protocol message
701
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L25)
1434
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L25)
702
1435
  * with a protocol message with a different connectionId
703
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L33)
1436
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L33)
704
1437
  * when this model has no connectionId attribute
705
1438
  * and no protocol message
706
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L43)
1439
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L43)
707
1440
  * with a protocol message with a connectionId
708
- * [uses the model value](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L51)
1441
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L51)
709
1442
  * #member_key attribute
710
- * [is string in format connection_id:client_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L61)
1443
+ * [is string in format connection_id:client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L61)
711
1444
  * with the same client id across multiple connections
712
- * [is unique](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L69)
1445
+ * [is unique](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L69)
713
1446
  * with a single connection and different client_ids
714
- * [is unique](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L78)
1447
+ * [is unique](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L78)
715
1448
  * #timestamp
716
- * [retrieves attribute :timestamp as a Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L86)
1449
+ * [retrieves attribute :timestamp as a Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L86)
717
1450
  * initialized with
718
1451
  * :client_id
719
1452
  * as UTF_8 string
720
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L138)
721
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L142)
1453
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L138)
1454
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L142)
722
1455
  * as SHIFT_JIS string
723
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L150)
724
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L154)
1456
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L150)
1457
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L154)
725
1458
  * as ASCII_8BIT string
726
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L162)
727
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L166)
1459
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L162)
1460
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L166)
728
1461
  * as Integer
729
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L174)
1462
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L174)
730
1463
  * as Nil
731
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L182)
1464
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L182)
732
1465
  * :connection_id
733
1466
  * as UTF_8 string
734
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L138)
735
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L142)
1467
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L138)
1468
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L142)
736
1469
  * as SHIFT_JIS string
737
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L150)
738
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L154)
1470
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L150)
1471
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L154)
739
1472
  * as ASCII_8BIT string
740
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L162)
741
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L166)
1473
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L162)
1474
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L166)
742
1475
  * as Integer
743
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L174)
1476
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L174)
744
1477
  * as Nil
745
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L182)
1478
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L182)
746
1479
  * :encoding
747
1480
  * as UTF_8 string
748
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L138)
749
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L142)
1481
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L138)
1482
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L142)
750
1483
  * as SHIFT_JIS string
751
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L150)
752
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L154)
1484
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L150)
1485
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L154)
753
1486
  * as ASCII_8BIT string
754
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L162)
755
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L166)
1487
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L162)
1488
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L166)
756
1489
  * as Integer
757
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L174)
1490
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L174)
758
1491
  * as Nil
759
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/presence_message_spec.rb#L182)
1492
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/presence_message_spec.rb#L182)
760
1493
 
761
1494
  ### Ably::Models::ProtocolMessage
762
- _(see [lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb))_
1495
+ _(see [lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb))_
763
1496
  * behaves like a model
764
1497
  * attributes
765
1498
  * #id
766
- * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1499
+ * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
767
1500
  * #channel
768
- * [retrieves attribute :channel](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1501
+ * [retrieves attribute :channel](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
769
1502
  * #channel_serial
770
- * [retrieves attribute :channel_serial](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1503
+ * [retrieves attribute :channel_serial](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
771
1504
  * #connection_id
772
- * [retrieves attribute :connection_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1505
+ * [retrieves attribute :connection_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
773
1506
  * #connection_key
774
- * [retrieves attribute :connection_key](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1507
+ * [retrieves attribute :connection_key](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
775
1508
  * #==
776
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L41)
777
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L46)
778
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L50)
1509
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L41)
1510
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L46)
1511
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L50)
779
1512
  * is immutable
780
- * [prevents changes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L76)
781
- * [dups options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L80)
1513
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L76)
1514
+ * [dups options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L80)
782
1515
  * attributes
783
1516
  * #timestamp
784
- * [retrieves attribute :timestamp as Time object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L74)
1517
+ * [retrieves attribute :timestamp as Time object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L74)
785
1518
  * #count
786
1519
  * when missing
787
- * [is 1](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L83)
1520
+ * [is 1](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L83)
788
1521
  * when non numeric
789
- * [is 1](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L90)
1522
+ * [is 1](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L90)
790
1523
  * when greater than 1
791
- * [is the value of count](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L97)
1524
+ * [is the value of count](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L97)
792
1525
  * #message_serial
793
- * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L105)
1526
+ * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L105)
794
1527
  * #has_message_serial?
795
1528
  * without msg_serial
796
- * [returns false](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L115)
1529
+ * [returns false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L115)
797
1530
  * with msg_serial
798
- * [returns true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L123)
1531
+ * [returns true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L123)
799
1532
  * #connection_serial
800
- * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L131)
1533
+ * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L131)
801
1534
  * #flags
802
1535
  * when nil
803
- * [is zero](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L141)
1536
+ * [is zero](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L141)
804
1537
  * when numeric
805
- * [is an Integer](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L149)
1538
+ * [is an Integer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L149)
806
1539
  * when has_presence
807
- * [#has_presence_flag? is true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L157)
1540
+ * [#has_presence_flag? is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L157)
808
1541
  * when has another future flag
809
- * [#has_presence_flag? is false](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L165)
1542
+ * [#has_presence_flag? is false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L165)
810
1543
  * #has_connection_serial?
811
1544
  * without connection_serial
812
- * [returns false](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L175)
1545
+ * [returns false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L175)
813
1546
  * with connection_serial
814
- * [returns true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L183)
1547
+ * [returns true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L183)
815
1548
  * #serial
816
1549
  * with underlying msg_serial
817
- * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L192)
1550
+ * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L192)
818
1551
  * with underlying connection_serial
819
- * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L200)
1552
+ * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L200)
820
1553
  * with underlying connection_serial and msg_serial
821
- * [prefers connection_serial and converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L208)
1554
+ * [prefers connection_serial and converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L208)
822
1555
  * #has_serial?
823
1556
  * without msg_serial or connection_serial
824
- * [returns false](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L219)
1557
+ * [returns false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L219)
825
1558
  * with msg_serial
826
- * [returns true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L227)
1559
+ * [returns true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L227)
827
1560
  * with connection_serial
828
- * [returns true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L235)
1561
+ * [returns true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L235)
829
1562
  * #error
830
1563
  * with no error attribute
831
- * [returns nil](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L245)
1564
+ * [returns nil](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L245)
832
1565
  * with nil error
833
- * [returns nil](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L253)
1566
+ * [returns nil](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L253)
834
1567
  * with error
835
- * [returns a valid ErrorInfo object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L261)
1568
+ * [returns a valid ErrorInfo object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L261)
836
1569
  * #messages
837
- * [contains Message objects](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L271)
1570
+ * [contains Message objects](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L271)
838
1571
  * #presence
839
- * [contains PresenceMessage objects](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/protocol_message_spec.rb#L281)
1572
+ * [contains PresenceMessage objects](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L281)
1573
+ * #connection_details
1574
+ * with a JSON value
1575
+ * [contains a ConnectionDetails object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L294)
1576
+ * [contains the attributes from the JSON connectionDetails](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L298)
1577
+ * without a JSON value
1578
+ * [contains an empty ConnectionDetails object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L307)
1579
+ * #connection_key
1580
+ * existing only in #connection_details.connection_key
1581
+ * [is returned](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L319)
1582
+ * existing in both #connection_key and #connection_details.connection_key
1583
+ * [returns #connection_details.connection_key as #connection_key will be deprecated > 0.8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/protocol_message_spec.rb#L327)
840
1584
 
841
1585
  ### Ably::Models::Stats
842
- _(see [lib/submodules/ably-ruby/spec/unit/models/stats_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb))_
1586
+ _(see [lib/submodules/ably-ruby/spec/unit/models/stats_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb))_
843
1587
  * #all stats
844
- * [returns a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L17)
845
- * [returns value for message counts](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L21)
846
- * [returns value for all data transferred](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L25)
847
- * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L29)
848
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L33)
1588
+ * [returns a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L17)
1589
+ * [returns value for message counts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L21)
1590
+ * [returns value for all data transferred](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L25)
1591
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L29)
1592
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L33)
849
1593
  * #all
850
- * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L39)
1594
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L39)
851
1595
  * #presence
852
- * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L39)
1596
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L39)
853
1597
  * #messages
854
- * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L39)
1598
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L39)
855
1599
  * #persisted stats
856
- * [returns a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L17)
857
- * [returns value for message counts](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L21)
858
- * [returns value for all data transferred](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L25)
859
- * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L29)
860
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L33)
1600
+ * [returns a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L17)
1601
+ * [returns value for message counts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L21)
1602
+ * [returns value for all data transferred](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L25)
1603
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L29)
1604
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L33)
861
1605
  * #all
862
- * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L39)
1606
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L39)
863
1607
  * #presence
864
- * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L39)
1608
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L39)
865
1609
  * #messages
866
- * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L39)
1610
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L39)
867
1611
  * #inbound stats
868
- * [returns a MessageTraffic object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L59)
869
- * [returns value for realtime message counts](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L63)
870
- * [returns value for all presence data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L67)
871
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L71)
1612
+ * [returns a MessageTraffic object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L59)
1613
+ * [returns value for realtime message counts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L63)
1614
+ * [returns value for all presence data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L67)
1615
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L71)
872
1616
  * #realtime
873
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1617
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
874
1618
  * #rest
875
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1619
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
876
1620
  * #webhook
877
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1621
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
878
1622
  * #all
879
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1623
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
880
1624
  * #outbound stats
881
- * [returns a MessageTraffic object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L59)
882
- * [returns value for realtime message counts](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L63)
883
- * [returns value for all presence data](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L67)
884
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L71)
1625
+ * [returns a MessageTraffic object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L59)
1626
+ * [returns value for realtime message counts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L63)
1627
+ * [returns value for all presence data](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L67)
1628
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L71)
885
1629
  * #realtime
886
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1630
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
887
1631
  * #rest
888
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1632
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
889
1633
  * #webhook
890
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1634
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
891
1635
  * #all
892
- * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L77)
1636
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L77)
893
1637
  * #connections stats
894
- * [returns a ConnectionTypes object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L91)
895
- * [returns value for tls opened counts](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L95)
896
- * [returns value for all peak connections](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L99)
897
- * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L103)
898
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L107)
1638
+ * [returns a ConnectionTypes object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L91)
1639
+ * [returns value for tls opened counts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L95)
1640
+ * [returns value for all peak connections](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L99)
1641
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L103)
1642
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L107)
899
1643
  * #tls
900
- * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L113)
1644
+ * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L113)
901
1645
  * #plain
902
- * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L113)
1646
+ * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L113)
903
1647
  * #all
904
- * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L113)
1648
+ * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L113)
905
1649
  * #channels stats
906
- * [returns a ResourceCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L126)
907
- * [returns value for opened counts](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L130)
908
- * [returns value for peak channels](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L134)
909
- * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L138)
910
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L142)
1650
+ * [returns a ResourceCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L126)
1651
+ * [returns value for opened counts](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L130)
1652
+ * [returns value for peak channels](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L134)
1653
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L138)
1654
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L142)
911
1655
  * #opened
912
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L148)
1656
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L148)
913
1657
  * #peak
914
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L148)
1658
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L148)
915
1659
  * #mean
916
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L148)
1660
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L148)
917
1661
  * #min
918
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L148)
1662
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L148)
919
1663
  * #refused
920
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L148)
1664
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L148)
921
1665
  * #api_requests stats
922
- * [returns a RequestCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L164)
923
- * [returns value for succeeded](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L168)
924
- * [returns value for failed](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L172)
925
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L176)
1666
+ * [returns a RequestCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L164)
1667
+ * [returns value for succeeded](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L168)
1668
+ * [returns value for failed](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L172)
1669
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L176)
926
1670
  * #succeeded
927
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L182)
1671
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L182)
928
1672
  * #failed
929
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L182)
1673
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L182)
930
1674
  * #refused
931
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L182)
1675
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L182)
932
1676
  * #token_requests stats
933
- * [returns a RequestCount object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L164)
934
- * [returns value for succeeded](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L168)
935
- * [returns value for failed](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L172)
936
- * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L176)
1677
+ * [returns a RequestCount object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L164)
1678
+ * [returns value for succeeded](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L168)
1679
+ * [returns value for failed](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L172)
1680
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L176)
937
1681
  * #succeeded
938
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L182)
1682
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L182)
939
1683
  * #failed
940
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L182)
1684
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L182)
941
1685
  * #refused
942
- * [is a Integer object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L182)
1686
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L182)
943
1687
  * #interval_granularity
944
- * [returns the granularity of the interval_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L193)
1688
+ * [returns the granularity of the interval_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L193)
945
1689
  * #interval_time
946
- * [returns a Time object representing the start of the interval](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L201)
1690
+ * [returns a Time object representing the start of the interval](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L201)
947
1691
  * class methods
948
1692
  * #to_interval_id
949
1693
  * when time zone of time argument is UTC
950
- * [converts time 2014-02-03:05:06 with granularity :month into 2014-02](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L209)
951
- * [converts time 2014-02-03:05:06 with granularity :day into 2014-02-03](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L213)
952
- * [converts time 2014-02-03:05:06 with granularity :hour into 2014-02-03:05](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L217)
953
- * [converts time 2014-02-03:05:06 with granularity :minute into 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L221)
954
- * [fails with invalid granularity](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L225)
955
- * [fails with invalid time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L229)
1694
+ * [converts time 2014-02-03:05:06 with granularity :month into 2014-02](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L209)
1695
+ * [converts time 2014-02-03:05:06 with granularity :day into 2014-02-03](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L213)
1696
+ * [converts time 2014-02-03:05:06 with granularity :hour into 2014-02-03:05](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L217)
1697
+ * [converts time 2014-02-03:05:06 with granularity :minute into 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L221)
1698
+ * [fails with invalid granularity](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L225)
1699
+ * [fails with invalid time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L229)
956
1700
  * when time zone of time argument is +02:00
957
- * [converts time 2014-02-03:06 with granularity :hour into 2014-02-03:04 at UTC +00:00](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L235)
1701
+ * [converts time 2014-02-03:06 with granularity :hour into 2014-02-03:04 at UTC +00:00](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L235)
958
1702
  * #from_interval_id
959
- * [converts a month interval_id 2014-02 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L242)
960
- * [converts a day interval_id 2014-02-03 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L247)
961
- * [converts an hour interval_id 2014-02-03:05 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L252)
962
- * [converts a minute interval_id 2014-02-03:05:06 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L257)
963
- * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L262)
1703
+ * [converts a month interval_id 2014-02 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L242)
1704
+ * [converts a day interval_id 2014-02-03 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L247)
1705
+ * [converts an hour interval_id 2014-02-03:05 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L252)
1706
+ * [converts a minute interval_id 2014-02-03:05:06 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L257)
1707
+ * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L262)
964
1708
  * #granularity_from_interval_id
965
- * [returns a :month interval_id for 2014-02](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L268)
966
- * [returns a :day interval_id for 2014-02-03](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L272)
967
- * [returns a :hour interval_id for 2014-02-03:05](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L276)
968
- * [returns a :minute interval_id for 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L280)
969
- * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/stats_spec.rb#L284)
1709
+ * [returns a :month interval_id for 2014-02](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L268)
1710
+ * [returns a :day interval_id for 2014-02-03](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L272)
1711
+ * [returns a :hour interval_id for 2014-02-03:05](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L276)
1712
+ * [returns a :minute interval_id for 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L280)
1713
+ * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/stats_spec.rb#L284)
970
1714
 
971
1715
  ### Ably::Models::TokenDetails
972
- _(see [lib/submodules/ably-ruby/spec/unit/models/token_details_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb))_
1716
+ _(see [lib/submodules/ably-ruby/spec/unit/models/token_details_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb))_
973
1717
  * behaves like a model
974
1718
  * attributes
975
1719
  * #token
976
- * [retrieves attribute :token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1720
+ * [retrieves attribute :token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
977
1721
  * #key_name
978
- * [retrieves attribute :key_name](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1722
+ * [retrieves attribute :key_name](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
979
1723
  * #client_id
980
- * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1724
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
981
1725
  * #==
982
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L41)
983
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L46)
984
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L50)
1726
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L41)
1727
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L46)
1728
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L50)
985
1729
  * is immutable
986
- * [prevents changes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L76)
987
- * [dups options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L80)
1730
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L76)
1731
+ * [dups options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L80)
988
1732
  * attributes
989
1733
  * #capability
990
- * [retrieves attribute :capability as parsed JSON](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L21)
1734
+ * [retrieves attribute :capability as parsed JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L21)
991
1735
  * #issued with :issued option as milliseconds in constructor
992
- * [retrieves attribute :issued as Time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L31)
1736
+ * [retrieves attribute :issued as Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L31)
993
1737
  * #issued with :issued option as a Time in constructor
994
- * [retrieves attribute :issued as Time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L40)
1738
+ * [retrieves attribute :issued as Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L40)
995
1739
  * #issued when converted to JSON
996
- * [is in milliseconds](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L49)
1740
+ * [is in milliseconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L49)
997
1741
  * #expires with :expires option as milliseconds in constructor
998
- * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L31)
1742
+ * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L31)
999
1743
  * #expires with :expires option as a Time in constructor
1000
- * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L40)
1744
+ * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L40)
1001
1745
  * #expires when converted to JSON
1002
- * [is in milliseconds](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L49)
1746
+ * [is in milliseconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L49)
1003
1747
  * #expired?
1004
1748
  * once grace period buffer has passed
1005
- * [is true](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L61)
1749
+ * [is true](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L61)
1006
1750
  * within grace period buffer
1007
- * [is false](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L69)
1751
+ * [is false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L69)
1752
+ * when expires is not available (i.e. string tokens)
1753
+ * [is always false](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L77)
1008
1754
  * ==
1009
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L79)
1010
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L84)
1011
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_details_spec.rb#L88)
1755
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L87)
1756
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L92)
1757
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_details_spec.rb#L96)
1012
1758
 
1013
1759
  ### Ably::Models::TokenRequest
1014
- _(see [lib/submodules/ably-ruby/spec/unit/models/token_request_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb))_
1760
+ _(see [lib/submodules/ably-ruby/spec/unit/models/token_request_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb))_
1015
1761
  * behaves like a model
1016
1762
  * attributes
1017
1763
  * #key_name
1018
- * [retrieves attribute :key_name](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1764
+ * [retrieves attribute :key_name](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1019
1765
  * #client_id
1020
- * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1766
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1021
1767
  * #nonce
1022
- * [retrieves attribute :nonce](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1768
+ * [retrieves attribute :nonce](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1023
1769
  * #mac
1024
- * [retrieves attribute :mac](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L15)
1770
+ * [retrieves attribute :mac](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L15)
1025
1771
  * #==
1026
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L41)
1027
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L46)
1028
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L50)
1772
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L41)
1773
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L46)
1774
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L50)
1029
1775
  * is immutable
1030
- * [prevents changes](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L76)
1031
- * [dups options](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/model_behaviour.rb#L80)
1776
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L76)
1777
+ * [dups options](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/model_behaviour.rb#L80)
1032
1778
  * attributes
1033
1779
  * #capability
1034
- * [retrieves attribute :capability as parsed JSON](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L18)
1780
+ * [retrieves attribute :capability as parsed JSON](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L18)
1035
1781
  * #timestamp
1036
1782
  * with :timestamp option as milliseconds in constructor
1037
- * [retrieves attribute :timestamp as Time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L29)
1783
+ * [retrieves attribute :timestamp as Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L29)
1038
1784
  * with :timestamp option as Time in constructor
1039
- * [retrieves attribute :timestamp as Time](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L38)
1785
+ * [retrieves attribute :timestamp as Time](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L38)
1040
1786
  * when converted to JSON
1041
- * [is in milliseconds since epoch](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L47)
1787
+ * [is in milliseconds since epoch](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L47)
1042
1788
  * #ttl
1043
1789
  * with :ttl option as milliseconds in constructor
1044
- * [retrieves attribute :ttl as seconds](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L59)
1790
+ * [retrieves attribute :ttl as seconds](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L59)
1045
1791
  * when converted to JSON
1046
- * [is in milliseconds since epoch](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L68)
1792
+ * [is in milliseconds since epoch](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L68)
1047
1793
  * ==
1048
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L78)
1049
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L83)
1050
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/models/token_request_spec.rb#L87)
1794
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L78)
1795
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L83)
1796
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/models/token_request_spec.rb#L87)
1051
1797
 
1052
1798
  ### Ably::Rest::Channel
1053
- _(see [lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb))_
1799
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb))_
1054
1800
  * #initializer
1055
1801
  * as UTF_8 string
1056
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L16)
1057
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L20)
1802
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L16)
1803
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L20)
1058
1804
  * as SHIFT_JIS string
1059
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L28)
1060
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L32)
1805
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L28)
1806
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L32)
1061
1807
  * as ASCII_8BIT string
1062
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L40)
1063
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L44)
1808
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L40)
1809
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L44)
1064
1810
  * as Integer
1065
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L52)
1811
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L52)
1066
1812
  * as Nil
1067
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L60)
1813
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L60)
1068
1814
  * #publish name argument
1069
1815
  * as UTF_8 string
1070
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L72)
1816
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L72)
1071
1817
  * as SHIFT_JIS string
1072
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L80)
1818
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L80)
1073
1819
  * as ASCII_8BIT string
1074
- * [is permitted](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L88)
1820
+ * [is permitted](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L88)
1075
1821
  * as Integer
1076
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channel_spec.rb#L96)
1822
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channel_spec.rb#L96)
1077
1823
 
1078
1824
  ### Ably::Rest::Channels
1079
- _(see [lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb))_
1825
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb))_
1080
1826
  * creating channels
1081
- * [#get creates a channel](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L12)
1082
- * [#get will reuse the channel object](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L17)
1083
- * [[] creates a channel](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L23)
1827
+ * [#get creates a channel](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L12)
1828
+ * [#get will reuse the channel object](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L17)
1829
+ * [[] creates a channel](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L23)
1084
1830
  * #fetch
1085
- * [retrieves a channel if it exists](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L30)
1086
- * [calls the block if channel is missing](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L35)
1831
+ * [retrieves a channel if it exists](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L30)
1832
+ * [calls the block if channel is missing](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L35)
1087
1833
  * destroying channels
1088
- * [#release releases the channel resoures](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L43)
1834
+ * [#release releases the channel resoures](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L43)
1089
1835
  * is Enumerable
1090
- * [allows enumeration](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L59)
1091
- * [provides #length](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L75)
1836
+ * [allows enumeration](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L59)
1837
+ * [provides #length](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L75)
1092
1838
  * #each
1093
- * [returns an enumerator](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L64)
1094
- * [yields each channel](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/channels_spec.rb#L68)
1839
+ * [returns an enumerator](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L64)
1840
+ * [yields each channel](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/channels_spec.rb#L68)
1095
1841
 
1096
1842
  ### Ably::Rest::Client
1097
- _(see [lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/client_spec.rb))_
1843
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/client_spec.rb))_
1098
1844
  * behaves like a client initializer
1099
1845
  * with invalid arguments
1100
1846
  * empty hash
1101
- * [raises an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L28)
1847
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L28)
1102
1848
  * nil
1103
- * [raises an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L36)
1849
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L36)
1104
1850
  * key: "invalid"
1105
- * [raises an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L44)
1851
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L44)
1106
1852
  * key: "invalid:asdad"
1107
- * [raises an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L52)
1853
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L52)
1108
1854
  * key and key_name
1109
- * [raises an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L60)
1855
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L60)
1110
1856
  * key and key_secret
1111
- * [raises an exception](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L68)
1857
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L68)
1112
1858
  * client_id as only option
1113
- * [requires a valid key](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L76)
1859
+ * [requires a valid key](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L76)
1114
1860
  * with valid arguments
1115
1861
  * key only
1116
- * [connects to the Ably service](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L87)
1117
- * [uses basic auth](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L91)
1862
+ * [connects to the Ably service](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L87)
1863
+ * [uses basic auth](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L91)
1118
1864
  * with a string key instead of options hash
1119
- * [sets the key](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L107)
1120
- * [sets the key_name](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L111)
1121
- * [sets the key_secret](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L115)
1122
- * [uses basic auth](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L119)
1865
+ * [sets the key](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L111)
1866
+ * [sets the key_name](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L115)
1867
+ * [sets the key_secret](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L119)
1868
+ * [uses basic auth](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L123)
1123
1869
  * with a string token key instead of options hash
1124
- * [sets the token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L127)
1870
+ * [sets the token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L135)
1125
1871
  * with token
1126
- * [sets the token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L135)
1872
+ * [sets the token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L143)
1127
1873
  * with token_details
1128
- * [sets the token](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L143)
1874
+ * [sets the token](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L151)
1129
1875
  * with token_params
1130
- * [configures the default token_params](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L151)
1876
+ * [configures the default token_params](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L159)
1131
1877
  * endpoint
1132
- * [defaults to production](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L158)
1878
+ * [defaults to production](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L170)
1133
1879
  * with environment option
1134
- * [uses an alternate endpoint](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L165)
1880
+ * [uses an alternate endpoint](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L177)
1135
1881
  * with rest_host option
1136
- * [uses an alternate endpoint for REST clients](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L173)
1882
+ * [uses an alternate endpoint for REST clients](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L185)
1137
1883
  * with realtime_host option
1138
- * PENDING: *[uses an alternate endpoint for Realtime clients](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L182)*
1884
+ * PENDING: *[uses an alternate endpoint for Realtime clients](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L194)*
1139
1885
  * with port option and non-TLS connections
1140
- * [uses the custom port for non-TLS requests](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L191)
1886
+ * [uses the custom port for non-TLS requests](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L203)
1141
1887
  * with tls_port option and a TLS connection
1142
- * [uses the custom port for TLS requests](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L199)
1888
+ * [uses the custom port for TLS requests](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L211)
1143
1889
  * tls
1144
- * [defaults to TLS](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L218)
1890
+ * [defaults to TLS](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L234)
1145
1891
  * set to false
1146
- * [uses plain text](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L209)
1147
- * [uses HTTP](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L213)
1892
+ * [uses plain text](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L225)
1893
+ * [uses HTTP](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L229)
1148
1894
  * logger
1149
1895
  * default
1150
- * [uses Ruby Logger](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L225)
1151
- * [specifies Logger::WARN log level](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L229)
1896
+ * [uses Ruby Logger](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L245)
1897
+ * [specifies Logger::WARN log level](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L249)
1152
1898
  * with log_level :none
1153
- * [silences all logging with a NilLogger](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L237)
1899
+ * [silences all logging with a NilLogger](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L257)
1154
1900
  * with custom logger and log_level
1155
- * [uses the custom logger](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L255)
1156
- * [sets the custom log level](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L259)
1901
+ * [uses the custom logger](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L275)
1902
+ * [sets the custom log level](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L279)
1157
1903
  * delegators
1158
- * [delegates :client_id to .auth](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L269)
1159
- * [delegates :auth_options to .auth](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/shared/client_initializer_behaviour.rb#L274)
1904
+ * [delegates :client_id to .auth](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L293)
1905
+ * [delegates :auth_options to .auth](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/shared/client_initializer_behaviour.rb#L298)
1160
1906
  * initializer options
1161
1907
  * TLS
1162
1908
  * disabled
1163
- * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/client_spec.rb#L17)
1909
+ * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/client_spec.rb#L17)
1164
1910
  * :use_token_auth
1165
1911
  * set to false
1166
1912
  * with a key and :tls => false
1167
- * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/client_spec.rb#L28)
1913
+ * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/client_spec.rb#L28)
1168
1914
  * without a key
1169
- * [fails as a key is required if not using token auth](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/client_spec.rb#L36)
1915
+ * [fails as a key is required if not using token auth](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/client_spec.rb#L36)
1170
1916
  * set to true
1171
1917
  * without a key or token
1172
- * [fails as a key is required to issue tokens](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/client_spec.rb#L46)
1918
+ * [fails as a key is required to issue tokens](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/client_spec.rb#L46)
1173
1919
 
1174
1920
  ### Ably::Rest
1175
- _(see [lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/rest_spec.rb))_
1176
- * [constructor returns an Ably::Rest::Client](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/rest/rest_spec.rb#L7)
1921
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/rest_spec.rb))_
1922
+ * [constructor returns an Ably::Rest::Client](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/rest/rest_spec.rb#L7)
1177
1923
 
1178
1924
  ### Ably::Util::Crypto
1179
- _(see [lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb))_
1925
+ _(see [lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb))_
1180
1926
  * defaults
1181
- * [match other client libraries](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L18)
1927
+ * [match other client libraries](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L18)
1928
+ * get_default_params
1929
+ * [uses the defaults and generates a key if not provided](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L25)
1930
+ * [uses the defaults and sets the key size when key is provided](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L32)
1182
1931
  * encrypts & decrypt
1183
- * [#encrypt encrypts a string](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L28)
1184
- * [#decrypt decrypts a string](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L33)
1932
+ * [#encrypt encrypts a string](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L46)
1933
+ * [#decrypt decrypts a string](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L51)
1185
1934
  * encrypting an empty string
1186
- * [raises an ArgumentError](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L42)
1935
+ * [raises an ArgumentError](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L60)
1187
1936
  * using shared client lib fixture data
1188
1937
  * with AES-128-CBC
1189
1938
  * behaves like an Ably encrypter and decrypter
1190
1939
  * text payload
1191
- * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L65)
1192
- * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L69)
1940
+ * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L83)
1941
+ * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L87)
1193
1942
  * with AES-256-CBC
1194
1943
  * behaves like an Ably encrypter and decrypter
1195
1944
  * text payload
1196
- * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L65)
1197
- * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/f836b900f67860297d36c417c7d1a4be1cccff4b/spec/unit/util/crypto_spec.rb#L69)
1945
+ * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L83)
1946
+ * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/944fa258ca2cd24a0f5e6d1c04189b8ea12399c8/spec/unit/util/crypto_spec.rb#L87)
1198
1947
 
1199
1948
  -------
1200
1949
 
1201
1950
  ## Test summary
1202
1951
 
1203
- * Passing tests: 587
1204
- * Pending tests: 3
1952
+ * Passing tests: 964
1953
+ * Pending tests: 1
1205
1954
  * Failing tests: 0