ably-rest 0.7.5 → 0.8.1

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 (76) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +2 -0
  3. data/README.md +41 -15
  4. data/SPEC.md +654 -518
  5. data/lib/submodules/ably-ruby/.gitignore +1 -0
  6. data/lib/submodules/ably-ruby/.gitmodules +3 -0
  7. data/lib/submodules/ably-ruby/README.md +54 -26
  8. data/lib/submodules/ably-ruby/SPEC.md +468 -322
  9. data/lib/submodules/ably-ruby/ably.gemspec +4 -2
  10. data/lib/submodules/ably-ruby/lib/ably/auth.rb +185 -131
  11. data/lib/submodules/ably-ruby/lib/ably/models/message.rb +1 -1
  12. data/lib/submodules/ably-ruby/lib/ably/models/paginated_resource.rb +31 -44
  13. data/lib/submodules/ably-ruby/lib/ably/models/presence_message.rb +2 -2
  14. data/lib/submodules/ably-ruby/lib/ably/models/protocol_message.rb +1 -2
  15. data/lib/submodules/ably-ruby/lib/ably/models/stat.rb +67 -24
  16. data/lib/submodules/ably-ruby/lib/ably/models/stats_types.rb +131 -0
  17. data/lib/submodules/ably-ruby/lib/ably/models/token_details.rb +101 -0
  18. data/lib/submodules/ably-ruby/lib/ably/models/token_request.rb +108 -0
  19. data/lib/submodules/ably-ruby/lib/ably/modules/async_wrapper.rb +3 -2
  20. data/lib/submodules/ably-ruby/lib/ably/modules/http_helpers.rb +1 -1
  21. data/lib/submodules/ably-ruby/lib/ably/modules/message_emitter.rb +2 -2
  22. data/lib/submodules/ably-ruby/lib/ably/realtime.rb +3 -7
  23. data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +32 -5
  24. data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +1 -0
  25. data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +4 -8
  26. data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +5 -3
  27. data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +12 -1
  28. data/lib/submodules/ably-ruby/lib/ably/rest.rb +3 -7
  29. data/lib/submodules/ably-ruby/lib/ably/rest/channel.rb +13 -10
  30. data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +19 -20
  31. data/lib/submodules/ably-ruby/lib/ably/rest/presence.rb +14 -12
  32. data/lib/submodules/ably-ruby/lib/ably/version.rb +1 -1
  33. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb +74 -23
  34. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +3 -3
  35. data/lib/submodules/ably-ruby/spec/acceptance/realtime/client_spec.rb +18 -18
  36. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_failures_spec.rb +5 -5
  37. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +12 -12
  38. data/lib/submodules/ably-ruby/spec/acceptance/realtime/message_spec.rb +5 -5
  39. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_history_spec.rb +56 -13
  40. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +8 -8
  41. data/lib/submodules/ably-ruby/spec/acceptance/realtime/stats_spec.rb +1 -1
  42. data/lib/submodules/ably-ruby/spec/acceptance/realtime/time_spec.rb +1 -1
  43. data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +262 -158
  44. data/lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb +11 -9
  45. data/lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb +28 -21
  46. data/lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb +1 -1
  47. data/lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb +30 -27
  48. data/lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb +1 -1
  49. data/lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb +10 -10
  50. data/lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb +93 -56
  51. data/lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb +50 -45
  52. data/lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb +1 -1
  53. data/lib/submodules/ably-ruby/spec/rspec_config.rb +3 -2
  54. data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +36 -28
  55. data/lib/submodules/ably-ruby/spec/spec_helper.rb +3 -0
  56. data/lib/submodules/ably-ruby/spec/support/api_helper.rb +3 -3
  57. data/lib/submodules/ably-ruby/spec/support/markdown_spec_formatter.rb +1 -1
  58. data/lib/submodules/ably-ruby/spec/support/test_app.rb +20 -33
  59. data/lib/submodules/ably-ruby/spec/unit/auth_spec.rb +18 -1
  60. data/lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb +81 -72
  61. data/lib/submodules/ably-ruby/spec/unit/models/stats_spec.rb +289 -0
  62. data/lib/submodules/ably-ruby/spec/unit/models/token_details_spec.rb +111 -0
  63. data/lib/submodules/ably-ruby/spec/unit/models/token_request_spec.rb +110 -0
  64. data/lib/submodules/ably-ruby/spec/unit/modules/async_wrapper_spec.rb +1 -1
  65. data/lib/submodules/ably-ruby/spec/unit/realtime/client_spec.rb +1 -1
  66. data/lib/submodules/ably-ruby/spec/unit/realtime/realtime_spec.rb +1 -1
  67. data/lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb +1 -1
  68. data/lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb +8 -8
  69. data/lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb +1 -1
  70. data/lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb +1 -1
  71. metadata +9 -7
  72. data/lib/submodules/ably-ruby/lib/ably/models/token.rb +0 -74
  73. data/lib/submodules/ably-ruby/spec/resources/crypto-data-128.json +0 -56
  74. data/lib/submodules/ably-ruby/spec/resources/crypto-data-256.json +0 -56
  75. data/lib/submodules/ably-ruby/spec/unit/models/stat_spec.rb +0 -113
  76. data/lib/submodules/ably-ruby/spec/unit/models/token_spec.rb +0 -86
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzJmOTJkOTc1OWMyMWNlM2U3NjIzMmNiNWY5ZTI3MGI0YTFlNzZhZA==
4
+ MDNkYTBjM2I5MTE0YWViNzdlYTM1NzJiZjM2YzBkYzBjOWRkMjFiNg==
5
5
  data.tar.gz: !binary |-
6
- ZTUyMTI1MGJjNTRkMjQ0NGI0OTg0MDJiZGJiNTYyZGEyZjZjZTc3MA==
6
+ M2Y1NTIxMzM1NmQ2NzllNjE5ZmJiOTMyMGQxYzA5MzBhYzEyZmEwNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OWZkNjgwYTBkNTIwODA3OTQyN2Q0ODU5YTFhOGY3MDUzNmRjYmZhYjhlYTk4
10
- NDFiMTkwMDljNzBiZWM1ZTQ1MmYyMTM4NTZhZDYzZTJmNGNkOGM4OWNlNjNk
11
- ZjQ0ZjYxYWI3OTM5ODFhYjU2M2YxNDViMTJmY2RkMTZhZTZmMGI=
9
+ ZTc0ZjFlNGUzMmY4ZTAzOGE2MWY2N2EzMDMzYzVjMTUyMWFjZjUwYjE0ZTgx
10
+ YzJhMjIwY2UyZmU5ZGI1MmM1ZTBhMDMzNjI4OGY2OGQyOGNjOTU3YmI5NTk1
11
+ MzhmZTJiYTcyNjI3ZGJlYzk1ZWUyNjBkNTVlM2M4M2QwZGI0OGE=
12
12
  data.tar.gz: !binary |-
13
- NTk4NmZjM2VkYWNlZmZjYWU2MDMwMjNiNGJmMzY3YzJmY2E0MDQwNjU1NDhh
14
- ZDE3YTMyODg1ZDEwZGUzNGExYmUyMjQ2MjFhNTlhODU5ODViNzA2MDFlNmFh
15
- MWRiNDMzYjkwYWUyZTY1MDM1NTk3ZGJkY2QyYTdjMzNjNzI4MjY=
13
+ MjVkZmM1YmExMjVmOTNmZmVlZjhkYTlmMDgwMjdjYTZhOGE2ZmE4OWQwMzhi
14
+ YzZmZmVjNTJkYzBmOGYyYjYzM2ZjNTYwZDkwNDRmOTJiZjU4NDJiOTUzM2Y3
15
+ YzEyNjcxOWIyYjRiNTM4MDUyODM0ZjExZGRlOGVhODNkNWQ4Njc=
data/.travis.yml CHANGED
@@ -4,6 +4,8 @@ rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
6
  - 2.2.0
7
+ before_install:
8
+ - git submodule update --init --recursive
7
9
  script: bundle exec rspec
8
10
  notifications:
9
11
  slack:
data/README.md CHANGED
@@ -26,42 +26,68 @@ Or install it yourself as:
26
26
 
27
27
  ## Using the REST API
28
28
 
29
+ All examples assume a client and/or channel has been created as follows:
30
+
31
+ ```ruby
32
+ client = Ably::Rest.new(api_key: 'xxxxx')
33
+ channel = client.channel('test')
34
+ ```
35
+
29
36
  ### Publishing a message to a channel
30
37
 
31
38
  ```ruby
32
- client = Ably::Rest.new(api_key: "xxxxx")
33
- channel = client.channel("test")
34
- channel.publish("myEvent", "Hello!") #=> true
39
+ channel.publish('myEvent', 'Hello!') #=> true
40
+ ```
41
+
42
+ ### Querying the History
43
+
44
+ ```ruby
45
+ mesage_history = channel.history #=> #<Ably::Models::PaginatedResource ...>
46
+ message_history.first # => #<Ably::Models::Message ...>
47
+ ```
48
+
49
+ ### Presence on a channel
50
+
51
+ ```ruby
52
+ members = channel.presence.get # => #<Ably::Models::PaginatedResource ...>
53
+ members.first # => #<Ably::Models::PresenceMessage ...>
35
54
  ```
36
55
 
37
- ### Fetching a channel's history
56
+ ### Querying the Presence History
38
57
 
39
58
  ```ruby
40
- client = Ably::Rest.new(api_key: "xxxxx")
41
- channel = client.channel("test")
42
- channel.history #=> [{:name=>"test", :data=>"payload"}]
59
+ presence_history = channel.presence.history # => #<Ably::Models::PaginatedResource ...>
60
+ presence_history.first # => #<Ably::Models::PresenceMessage ...>
43
61
  ```
44
62
 
45
- ### Authentication with a token
63
+ ### Generate Token and Token Request
46
64
 
47
65
  ```ruby
48
- client = Ably::Rest.new(api_key: "xxxxx")
49
- client.auth.authorise # creates a token and will use token authentication moving forwards
50
- client.auth.current_token #=> #<Ably::Models::Token>
51
- channel.publish("myEvent", "Hello!") #=> true, sent using token authentication
66
+ client.auth.request_token
67
+ # => #<Ably::Models::Token ...>
68
+
69
+ token = client.auth.create_token_request
70
+ # => {"id"=>...,
71
+ # "clientId"=>nil,
72
+ # "ttl"=>3600,
73
+ # "timestamp"=>...,
74
+ # "capability"=>"{\"*\":[\"*\"]}",
75
+ # "nonce"=>...,
76
+ # "mac"=>...}
77
+
78
+ client = Ably::Rest.new(token_id: token.id)
52
79
  ```
53
80
 
54
81
  ### Fetching your application's stats
55
82
 
56
83
  ```ruby
57
- client = Ably::Rest.new(api_key: "xxxxx")
58
- client.stats #=> [{:channels=>..., :apiRequests=>..., ...}]
84
+ stats = client.stats #=> #<Ably::Models::PaginatedResource ...>
85
+ stats.first = #<Ably::Models::Stat ...>
59
86
  ```
60
87
 
61
88
  ### Fetching the Ably service time
62
89
 
63
90
  ```ruby
64
- client = Ably::Rest.new(api_key: "xxxxx")
65
91
  client.time #=> 2013-12-12 14:23:34 +0000
66
92
  ```
67
93
 
data/SPEC.md CHANGED
@@ -1,942 +1,1078 @@
1
- # Ably REST Client Library 0.7.4 Specification
1
+ # Ably REST Client Library 0.8.1 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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb))_
4
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb))_
5
5
  * using JSON and MsgPack protocol
6
- * [has immutable options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L54)
6
+ * [has immutable options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L54)
7
7
  * #request_token
8
- * [returns a valid requested token in the expected format with valid issued_at and expires_at attributes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L69)
8
+ * [returns a valid requested token in the expected format with valid issued and expires attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L69)
9
9
  * with option :client_id
10
- * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L95)
10
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L101)
11
11
  * with option :capability
12
- * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L95)
12
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L101)
13
13
  * with option :nonce
14
- * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L95)
14
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L101)
15
15
  * with option :timestamp
16
- * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L95)
16
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L101)
17
17
  * with option :ttl
18
- * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L95)
19
- * with :key_id & :key_secret options
20
- * [key_id is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L124)
18
+ * [overrides default and uses camelCase notation for attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L101)
19
+ * with :key option
20
+ * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L130)
21
+ * with :key_name & :key_secret options
22
+ * [key_name is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L159)
21
23
  * with :query_time option
22
- * [queries the server for the time](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L132)
24
+ * [queries the server for the time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L167)
23
25
  * without :query_time option
24
- * [does not query the server for the time](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L141)
26
+ * [does not query the server for the time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L176)
25
27
  * with :auth_url option
26
28
  * when response from :auth_url is a valid token request
27
- * [requests a token from :auth_url using an HTTP GET request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L188)
28
- * [returns a valid token generated from the token request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L193)
29
+ * [requests a token from :auth_url using an HTTP GET request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L224)
30
+ * [returns a valid token generated from the token request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L229)
29
31
  * with :query_params
30
- * [requests a token from :auth_url with the :query_params](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L200)
32
+ * [requests a token from :auth_url with the :query_params](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L236)
31
33
  * with :headers
32
- * [requests a token from :auth_url with the HTTP headers set](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L208)
34
+ * [requests a token from :auth_url with the HTTP headers set](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L244)
33
35
  * with POST
34
- * [requests a token from :auth_url using an HTTP POST instead of the default GET](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L216)
35
- * when response from :auth_url is a token
36
- * [returns a Token created from the token JSON](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L240)
36
+ * [requests a token from :auth_url using an HTTP POST instead of the default GET](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L252)
37
+ * when response from :auth_url is a token details object
38
+ * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L277)
39
+ * when response from :auth_url is text/plain content type and a token string
40
+ * [returns TokenDetails created from the token JSON](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L294)
37
41
  * when response is invalid
38
42
  * 500
39
- * [raises ServerError](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L255)
43
+ * [raises ServerError](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L307)
40
44
  * XML
41
- * [raises InvalidResponseBody](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L266)
42
- * with token_request_block that returns a token request
43
- * [calls the block when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L284)
44
- * [uses the token request from the block when requesting a new token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L289)
45
- * with token_request_block that returns a token
46
- * [calls the block when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L317)
47
- * [uses the token request from the block when requesting a new token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L322)
45
+ * [raises InvalidResponseBody](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L318)
46
+ * with a Proc for the :auth_callback option
47
+ * that returns a TokenRequest
48
+ * [calls the Proc when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L337)
49
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L342)
50
+ * that returns a TokenDetails JSON object
51
+ * [calls the Proc when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L371)
52
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L376)
53
+ * that returns a TokenDetails object
54
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L397)
55
+ * that returns a Token string
56
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L413)
57
+ * with client_id
58
+ * [returns a token with the client_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L445)
48
59
  * before #authorise has been called
49
- * [has no current_token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L334)
60
+ * [has no current_token_details](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L452)
50
61
  * #authorise
51
- * [updates the persisted auth options thare are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L381)
62
+ * [updates the persisted auth options that are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L499)
52
63
  * when called for the first time since the client has been instantiated
53
- * [passes all options to #request_token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L345)
54
- * [returns a valid token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L350)
55
- * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L354)
64
+ * [passes all options to #request_token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L463)
65
+ * [returns a valid token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L468)
66
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L472)
56
67
  * with previous authorisation
57
- * [does not request a token if current_token has not expired](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L365)
58
- * [requests a new token if token is expired](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L370)
59
- * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L376)
60
- * with token_request_block
61
- * [calls the block](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L397)
62
- * [uses the token request returned from the block when requesting a new token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L401)
68
+ * [does not request a token if current_token_details has not expired](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L483)
69
+ * [requests a new token if token is expired](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L488)
70
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L494)
71
+ * with a Proc for the :auth_callback option
72
+ * [calls the Proc](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L515)
73
+ * [uses the token request returned from the callback when requesting a new token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L519)
63
74
  * for every subsequent #request_token
64
- * without a provided block
65
- * [calls the originally provided block](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L407)
75
+ * without a :auth_callback Proc
76
+ * [calls the originally provided block](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L525)
66
77
  * with a provided block
67
- * [does not call the originally provided block and calls the new #request_token block](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L414)
78
+ * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L532)
68
79
  * #create_token_request
69
- * [uses the key ID from the client](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L430)
70
- * [uses the default TTL](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L434)
71
- * [uses the default capability](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L438)
80
+ * [uses the key name from the client](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L548)
81
+ * [uses the default TTL](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L552)
82
+ * [uses the default capability](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L556)
72
83
  * the nonce
73
- * [is unique for every request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L443)
74
- * [is at least 16 characters](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L448)
84
+ * [is unique for every request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L561)
85
+ * [is at least 16 characters](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L566)
75
86
  * with option :ttl
76
- * [overrides default](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L459)
77
- * with option :capability
78
- * [overrides default](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L459)
87
+ * [overrides default](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L577)
79
88
  * with option :nonce
80
- * [overrides default](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L459)
81
- * with option :timestamp
82
- * [overrides default](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L459)
89
+ * [overrides default](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L577)
83
90
  * with option :client_id
84
- * [overrides default](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L459)
91
+ * [overrides default](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L577)
85
92
  * with additional invalid attributes
86
- * [are ignored](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L467)
93
+ * [are ignored](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L585)
87
94
  * when required fields are missing
88
- * [should raise an exception if key secret is missing](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L478)
89
- * [should raise an exception if key id is missing](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L482)
95
+ * [should raise an exception if key secret is missing](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L596)
96
+ * [should raise an exception if key name is missing](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L600)
90
97
  * with :query_time option
91
- * [queries the server for the timestamp](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L491)
98
+ * [queries the server for the timestamp](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L609)
92
99
  * with :timestamp option
93
- * [uses the provided timestamp in the token request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L501)
100
+ * [uses the provided timestamp in the token request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L619)
94
101
  * signing
95
- * [generates a valid HMAC](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L518)
102
+ * [generates a valid HMAC](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L641)
96
103
  * using token authentication
97
- * with :token_id option
98
- * [authenticates successfully using the provided :token_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L541)
99
- * [disallows publishing on unspecified capability channels](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L545)
100
- * [fails if timestamp is invalid](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L553)
101
- * [cannot be renewed automatically](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L561)
104
+ * with :token option
105
+ * [authenticates successfully using the provided :token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L664)
106
+ * [disallows publishing on unspecified capability channels](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L668)
107
+ * [fails if timestamp is invalid](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L676)
108
+ * [cannot be renewed automatically](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L684)
102
109
  * when implicit as a result of using :client id
103
110
  * and requests to the Ably server are mocked
104
- * [will send a token request to the server](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L591)
111
+ * [will send a token request to the server](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L712)
105
112
  * a token is created
106
- * [before a request is made](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L600)
107
- * [when a message is published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L604)
108
- * [with capability and TTL defaults](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L608)
109
- * when using an :api_key and basic auth
110
- * [#using_token_auth? is false](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L623)
111
- * [#using_basic_auth? is true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/auth_spec.rb#L627)
113
+ * [before a request is made](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L721)
114
+ * [when a message is published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L725)
115
+ * [with capability and TTL defaults](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L729)
116
+ * when using an :key and basic auth
117
+ * [#using_token_auth? is false](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L744)
118
+ * [#key attribute contains the key string](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L748)
119
+ * [#using_basic_auth? is true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/auth_spec.rb#L752)
112
120
 
113
121
  ### Ably::Rest
114
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb))_
122
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb))_
115
123
  * transport protocol
116
124
  * when protocol is not defined it defaults to :msgpack
117
- * [uses MsgPack](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L27)
125
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L27)
118
126
  * when option {:protocol=>:json} is used
119
- * [uses JSON](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L43)
127
+ * [uses JSON](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L43)
120
128
  * when option {:use_binary_protocol=>false} is used
121
- * [uses JSON](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L43)
129
+ * [uses JSON](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L43)
122
130
  * when option {:protocol=>:msgpack} is used
123
- * [uses MsgPack](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L60)
131
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L60)
124
132
  * when option {:use_binary_protocol=>true} is used
125
- * [uses MsgPack](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L60)
133
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L60)
126
134
  * using JSON and MsgPack protocol
127
135
  * failed requests
128
136
  * due to invalid Auth
129
- * [should raise an InvalidRequest exception with a valid error message and code](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L75)
137
+ * [should raise an InvalidRequest exception with a valid error message and code](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L75)
130
138
  * server error with JSON error response body
131
- * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L94)
139
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L94)
132
140
  * 500 server error without a valid JSON response body
133
- * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L105)
141
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L105)
134
142
  * token authentication failures
135
143
  * when auth#token_renewable?
136
- * [should automatically reissue a token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L143)
144
+ * [should automatically reissue a token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L143)
137
145
  * when NOT auth#token_renewable?
138
- * [should raise an InvalidToken exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/base_spec.rb#L156)
146
+ * [should raise an InvalidToken exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/base_spec.rb#L158)
139
147
 
140
148
  ### Ably::Rest::Channel
141
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb))_
149
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb))_
142
150
  * using JSON and MsgPack protocol
143
151
  * #publish
144
- * [should publish the message adn return true indicating success](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L17)
152
+ * [should publish the message and return true indicating success](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L17)
145
153
  * #history
146
- * [should return the current message history for the channel](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L39)
147
- * [should return paged history using the PaginatedResource model](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L67)
154
+ * [should return the current message history for the channel](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L39)
155
+ * [should return paged history using the PaginatedResource model](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L67)
148
156
  * message timestamps
149
- * [should all be after the messages were published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L52)
157
+ * [should all be after the messages were published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L52)
150
158
  * message IDs
151
- * [should be unique](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L60)
159
+ * [should be unique](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L60)
152
160
  * #history option
153
161
  * :start
154
162
  * with milliseconds since epoch value
155
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L116)
163
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L123)
156
164
  * with a Time object value
157
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L126)
165
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L133)
158
166
  * :end
159
167
  * with milliseconds since epoch value
160
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L116)
168
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L123)
161
169
  * with a Time object value
162
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channel_spec.rb#L126)
170
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channel_spec.rb#L133)
163
171
 
164
172
  ### Ably::Rest::Channels
165
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channels_spec.rb))_
173
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channels_spec.rb))_
166
174
  * using JSON and MsgPack protocol
167
175
  * using shortcut method #channel on the client object
168
176
  * behaves like a channel
169
- * [returns a channel object](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channels_spec.rb#L6)
170
- * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channels_spec.rb#L11)
177
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channels_spec.rb#L6)
178
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channels_spec.rb#L11)
171
179
  * using #get method on client#channels
172
180
  * behaves like a channel
173
- * [returns a channel object](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channels_spec.rb#L6)
174
- * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channels_spec.rb#L11)
181
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channels_spec.rb#L6)
182
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channels_spec.rb#L11)
175
183
  * using undocumented array accessor [] method on client#channels
176
184
  * behaves like a channel
177
- * [returns a channel object](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channels_spec.rb#L6)
178
- * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/channels_spec.rb#L11)
185
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channels_spec.rb#L6)
186
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/channels_spec.rb#L11)
179
187
 
180
188
  ### Ably::Rest::Client
181
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb))_
189
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb))_
182
190
  * using JSON and MsgPack protocol
183
191
  * #initialize
184
- * with an auth block
185
- * [calls the block to get a new token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L20)
192
+ * with a :auth_callback Proc
193
+ * [calls the auth Proc to get a new token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L20)
186
194
  * with an auth URL
187
- * [sends an HTTP request to the provided URL to get a new token](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L34)
195
+ * [sends an HTTP request to the provided URL to get a new token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L34)
188
196
  * using tokens
189
197
  * when expired
190
- * [creates a new token automatically when the old token expires](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L55)
198
+ * [creates a new token automatically when the old token expires](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L58)
191
199
  * when token has not expired
192
- * [reuses the existing token for every request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L69)
200
+ * [reuses the existing token for every request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L72)
193
201
  * connection transport
194
202
  * for default host
195
- * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L85)
196
- * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L89)
203
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L88)
204
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L92)
197
205
  * for the fallback hosts
198
- * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L95)
199
- * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L99)
206
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L98)
207
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L102)
200
208
  * fallback hosts
201
209
  * configured
202
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L112)
210
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L115)
203
211
  * when environment is NOT production
204
- * [does not retry failed requests with fallback hosts when there is a connection error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L129)
212
+ * [does not retry failed requests with fallback hosts when there is a connection error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L132)
205
213
  * when environment is production
206
214
  * and connection times out
207
- * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L169)
215
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L172)
208
216
  * and the total request time exeeds 10 seconds
209
- * [makes no further attempts to any fallback hosts](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L184)
217
+ * [makes no further attempts to any fallback hosts](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L187)
210
218
  * and connection fails
211
- * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L200)
219
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L203)
212
220
  * with a custom host
213
221
  * that does not exist
214
- * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L216)
222
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L219)
215
223
  * fallback hosts
216
- * [are never used](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L237)
224
+ * [are never used](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L240)
217
225
  * that times out
218
- * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L252)
226
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L255)
219
227
  * fallback hosts
220
- * [are never used](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/client_spec.rb#L265)
228
+ * [are never used](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/client_spec.rb#L268)
221
229
 
222
230
  ### Ably::Models::MessageEncoders
223
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb))_
231
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb))_
224
232
  * with binary transport protocol
225
233
  * without encryption
226
234
  * with UTF-8 data
227
- * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L41)
235
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L41)
228
236
  * with binary data
229
- * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L52)
237
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L52)
230
238
  * with JSON data
231
- * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L63)
239
+ * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L63)
232
240
  * with encryption
233
241
  * with UTF-8 data
234
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L78)
242
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L78)
235
243
  * with binary data
236
- * [applies cipher encoding and sets the encoding attribute to "cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L89)
244
+ * [applies cipher encoding and sets the encoding attribute to "cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L89)
237
245
  * with JSON data
238
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L100)
246
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L100)
239
247
  * with text transport protocol
240
248
  * without encryption
241
249
  * with UTF-8 data
242
- * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L117)
250
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L117)
243
251
  * with binary data
244
- * [applies a base64 encoding and sets the encoding attribute to "base64"](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L128)
252
+ * [applies a base64 encoding and sets the encoding attribute to "base64"](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L128)
245
253
  * with JSON data
246
- * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L139)
254
+ * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L139)
247
255
  * with encryption
248
256
  * with UTF-8 data
249
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L154)
257
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L154)
250
258
  * with binary data
251
- * [applies cipher and base64 encoding and sets the encoding attribute to "utf-8/cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L165)
259
+ * [applies cipher and base64 encoding and sets the encoding attribute to "utf-8/cipher+aes-128-cbc/base64"](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L165)
252
260
  * with JSON data
253
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/encoders_spec.rb#L176)
261
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/encoders_spec.rb#L176)
254
262
 
255
263
  ### Ably::Rest::Channel messages
256
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb))_
264
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb))_
257
265
  * using JSON and MsgPack protocol
258
266
  * publishing with an ASCII_8BIT message name
259
- * [is converted into UTF_8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L18)
267
+ * [is converted into UTF_8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L18)
260
268
  * encryption and encoding
261
269
  * with #publish and #history
262
270
  * with AES-128-CBC using crypto-data-128.json fixtures
263
271
  * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
264
272
  * behaves like an Ably encrypter and decrypter
265
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
266
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
273
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
274
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
267
275
  * item 1 with encrypted encoding cipher+aes-128-cbc/base64
268
276
  * behaves like an Ably encrypter and decrypter
269
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
270
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
277
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
278
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
271
279
  * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
272
280
  * behaves like an Ably encrypter and decrypter
273
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
274
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
281
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
282
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
275
283
  * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
276
284
  * behaves like an Ably encrypter and decrypter
277
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
278
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
285
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
286
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
279
287
  * with AES-256-CBC using crypto-data-256.json fixtures
280
288
  * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
281
289
  * behaves like an Ably encrypter and decrypter
282
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
283
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
290
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
291
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
284
292
  * item 1 with encrypted encoding cipher+aes-256-cbc/base64
285
293
  * behaves like an Ably encrypter and decrypter
286
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
287
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
294
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
295
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
288
296
  * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
289
297
  * behaves like an Ably encrypter and decrypter
290
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
291
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
298
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
299
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
292
300
  * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
293
301
  * behaves like an Ably encrypter and decrypter
294
- * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L65)
295
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L80)
302
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L65)
303
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L80)
296
304
  * when publishing lots of messages
297
- * [encrypts on #publish and decrypts on #history](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L113)
305
+ * [encrypts on #publish and decrypts on #history](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L113)
298
306
  * when retrieving #history with a different protocol
299
- * [delivers a String ASCII-8BIT payload to the receiver](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L140)
300
- * [delivers a String UTF-8 payload to the receiver](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L140)
301
- * [delivers a Hash payload to the receiver](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L140)
307
+ * [delivers a String ASCII-8BIT payload to the receiver](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L140)
308
+ * [delivers a String UTF-8 payload to the receiver](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L140)
309
+ * [delivers a Hash payload to the receiver](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L140)
302
310
  * when publishing on an unencrypted channel and retrieving with #history on an encrypted channel
303
- * [does not attempt to decrypt the message](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L156)
311
+ * [does not attempt to decrypt the message](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L156)
304
312
  * when publishing on an encrypted channel and retrieving with #history on an unencrypted channel
305
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L177)
306
- * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L183)
313
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L177)
314
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L183)
307
315
  * publishing on an encrypted channel and retrieving #history with a different algorithm on another client
308
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L204)
309
- * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L210)
316
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L204)
317
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L210)
310
318
  * publishing on an encrypted channel and subscribing with a different key on another client
311
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L231)
312
- * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/message_spec.rb#L237)
319
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L231)
320
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/message_spec.rb#L237)
313
321
 
314
322
  ### Ably::Rest::Presence
315
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb))_
323
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb))_
316
324
  * using JSON and MsgPack protocol
317
325
  * tested against presence fixture data set up in test app
318
326
  * #get
319
- * [returns current members on the channel with their action set to :present](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L30)
327
+ * [returns current members on the channel with their action set to :present](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L41)
320
328
  * with :limit option
321
- * [returns a paged response limiting number of members per page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L44)
329
+ * [returns a paged response limiting number of members per page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L55)
322
330
  * #history
323
- * [returns recent presence activity](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L62)
331
+ * [returns recent presence activity](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L67)
324
332
  * with options
325
333
  * direction: :forwards
326
- * [returns recent presence activity forwards with most recent history last](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L78)
334
+ * [returns recent presence activity forwards with most recent history last](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L83)
327
335
  * direction: :backwards
328
- * [returns recent presence activity backwards with most recent history first](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L93)
336
+ * [returns recent presence activity backwards with most recent history first](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L98)
329
337
  * #history
330
338
  * with time range options
331
339
  * :start
332
340
  * with milliseconds since epoch value
333
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L138)
341
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L150)
334
342
  * with Time object value
335
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L148)
343
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L160)
336
344
  * :end
337
345
  * with milliseconds since epoch value
338
- * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L138)
346
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L150)
339
347
  * with Time object value
340
- * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L148)
348
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L160)
341
349
  * decoding
350
+ * with encoded fixture data
351
+ * #history
352
+ * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L180)
353
+ * #get
354
+ * [decodes encoded and encryped presence fixture data automatically](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L187)
355
+ * decoding permutations using mocked #history
342
356
  * valid decodeable content
343
357
  * #get
344
- * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L206)
358
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L243)
345
359
  * #history
346
- * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L223)
360
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L260)
347
361
  * invalid data
348
362
  * #get
349
- * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L254)
350
- * [logs a cipher error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L258)
363
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L291)
364
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L295)
351
365
  * #history
352
- * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L278)
353
- * [logs a cipher error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/presence_spec.rb#L282)
366
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L315)
367
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/presence_spec.rb#L319)
354
368
 
355
369
  ### Ably::Rest::Client#stats
356
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb))_
370
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb))_
357
371
  * using JSON and MsgPack protocol
358
372
  * fetching application stats
359
373
  * by minute
360
374
  * with :from set to last interval and :limit set to 1
361
- * [retrieves only one stat](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L50)
362
- * [returns all aggregated message data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L54)
363
- * [returns inbound realtime all data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L59)
364
- * [returns inbound realtime message data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L64)
365
- * [returns outbound realtime all data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L69)
366
- * [returns persisted presence all data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L74)
367
- * [returns connections all data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L79)
368
- * [returns channels all data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L84)
369
- * [returns api_requests data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L89)
370
- * [returns token_requests data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L94)
371
- * [returns stat objects with #interval_granularity equal to :minute](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L99)
372
- * [returns stat objects with #interval_id matching :start](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L103)
373
- * [returns stat objects with #interval_time matching :start Time](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L107)
375
+ * [retrieves only one stat](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L50)
376
+ * [returns zero value for any missing metrics](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L54)
377
+ * [returns all aggregated message data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L59)
378
+ * [returns inbound realtime all data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L64)
379
+ * [returns inbound realtime message data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L69)
380
+ * [returns outbound realtime all data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L74)
381
+ * [returns persisted presence all data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L79)
382
+ * [returns connections all data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L84)
383
+ * [returns channels all data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L89)
384
+ * [returns api_requests data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L94)
385
+ * [returns token_requests data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L99)
386
+ * [returns stat objects with #interval_granularity equal to :minute](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L104)
387
+ * [returns stat objects with #interval_id matching :start](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L108)
388
+ * [returns stat objects with #interval_time matching :start Time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L112)
374
389
  * with :start set to first interval, :limit set to 1 and direction :forwards
375
- * [returns the first interval stats as stats are provided forwards from :start](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L117)
376
- * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L121)
390
+ * [returns the first interval stats as stats are provided forwards from :start](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L122)
391
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L126)
377
392
  * with :end set to last interval, :limit set to 1 and direction :backwards
378
- * [returns the 3rd interval stats first as stats are provided backwards from :end](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L134)
379
- * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L138)
393
+ * [returns the 3rd interval stats first as stats are provided backwards from :end](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L139)
394
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L143)
380
395
  * by hour
381
- * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L162)
396
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L167)
382
397
  * by day
383
- * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L162)
398
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L167)
384
399
  * by month
385
- * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/stats_spec.rb#L162)
400
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/stats_spec.rb#L167)
386
401
 
387
402
  ### Ably::Rest::Client#time
388
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/time_spec.rb))_
403
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/time_spec.rb))_
389
404
  * using JSON and MsgPack protocol
390
405
  * fetching the service time
391
- * [should return the service time as a Time object](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/acceptance/rest/time_spec.rb#L10)
406
+ * [should return the service time as a Time object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/acceptance/rest/time_spec.rb#L10)
392
407
 
393
408
  ### Ably::Auth
394
- _(see [lib/submodules/ably-ruby/spec/unit/auth_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb))_
409
+ _(see [lib/submodules/ably-ruby/spec/unit/auth_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb))_
395
410
  * client_id option
396
411
  * with nil value
397
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L19)
412
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L19)
398
413
  * as UTF_8 string
399
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L27)
400
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L31)
414
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L27)
415
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L31)
401
416
  * as SHIFT_JIS string
402
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L39)
403
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L43)
417
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L39)
418
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L43)
404
419
  * as ASCII_8BIT string
405
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L51)
406
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L55)
420
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L51)
421
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L55)
407
422
  * as Integer
408
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/auth_spec.rb#L63)
423
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L63)
424
+ * defaults
425
+ * [should default TTL to 1 hour](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L73)
426
+ * [should default capability to all](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L77)
427
+ * [should only have defaults for :ttl and :capability](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/auth_spec.rb#L81)
409
428
 
410
429
  ### Ably::Logger
411
- _(see [lib/submodules/ably-ruby/spec/unit/logger_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/logger_spec.rb))_
412
- * [uses the language provided Logger by default](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/logger_spec.rb#L15)
430
+ _(see [lib/submodules/ably-ruby/spec/unit/logger_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/logger_spec.rb))_
431
+ * [uses the language provided Logger by default](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/logger_spec.rb#L15)
413
432
  * with a custom Logger
414
433
  * with an invalid interface
415
- * [raises an exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/logger_spec.rb#L116)
434
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/logger_spec.rb#L116)
416
435
  * with a valid interface
417
- * [is used](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/logger_spec.rb#L135)
436
+ * [is used](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/logger_spec.rb#L135)
418
437
 
419
438
  ### Ably::Models::ErrorInfo
420
- _(see [lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/error_info_spec.rb))_
439
+ _(see [lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/error_info_spec.rb))_
421
440
  * behaves like a model
422
441
  * attributes
423
442
  * #code
424
- * [retrieves attribute :code](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
443
+ * [retrieves attribute :code](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
425
444
  * #status_code
426
- * [retrieves attribute :status_code](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
445
+ * [retrieves attribute :status_code](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
427
446
  * #message
428
- * [retrieves attribute :message](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
447
+ * [retrieves attribute :message](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
429
448
  * #==
430
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L41)
431
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L46)
432
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L50)
449
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L41)
450
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L46)
451
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L50)
433
452
  * is immutable
434
- * [prevents changes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L76)
435
- * [dups options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L80)
453
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L76)
454
+ * [dups options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L80)
436
455
  * #status
437
- * [is an alias for #status_code](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/error_info_spec.rb#L13)
456
+ * [is an alias for #status_code](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/error_info_spec.rb#L13)
438
457
 
439
458
  ### Ably::Models::Message
440
- _(see [lib/submodules/ably-ruby/spec/unit/models/message_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb))_
459
+ _(see [lib/submodules/ably-ruby/spec/unit/models/message_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb))_
441
460
  * behaves like a model
442
461
  * attributes
443
462
  * #name
444
- * [retrieves attribute :name](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
463
+ * [retrieves attribute :name](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
445
464
  * #client_id
446
- * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
465
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
447
466
  * #data
448
- * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
467
+ * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
449
468
  * #encoding
450
- * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
469
+ * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
451
470
  * #==
452
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L41)
453
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L46)
454
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L50)
471
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L41)
472
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L46)
473
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L50)
455
474
  * is immutable
456
- * [prevents changes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L76)
457
- * [dups options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L80)
475
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L76)
476
+ * [dups options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L80)
458
477
  * #timestamp
459
- * [retrieves attribute :timestamp as Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L22)
478
+ * [retrieves attribute :timestamp as Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L22)
460
479
  * #connection_id attribute
461
480
  * when this model has a connectionId attribute
462
481
  * but no protocol message
463
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L37)
482
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L37)
464
483
  * with a protocol message with a different connectionId
465
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L45)
484
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L45)
466
485
  * when this model has no connectionId attribute
467
486
  * and no protocol message
468
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L55)
487
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L55)
469
488
  * with a protocol message with a connectionId
470
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L63)
489
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L63)
471
490
  * initialized with
472
491
  * :name
473
492
  * as UTF_8 string
474
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L90)
475
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L94)
493
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L90)
494
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L94)
476
495
  * as SHIFT_JIS string
477
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L102)
478
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L106)
496
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L102)
497
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L106)
479
498
  * as ASCII_8BIT string
480
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L114)
481
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L118)
499
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L114)
500
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L118)
482
501
  * as Integer
483
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L126)
502
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L126)
484
503
  * as Nil
485
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L134)
504
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L134)
486
505
  * :client_id
487
506
  * as UTF_8 string
488
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L90)
489
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L94)
507
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L90)
508
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L94)
490
509
  * as SHIFT_JIS string
491
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L102)
492
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L106)
510
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L102)
511
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L106)
493
512
  * as ASCII_8BIT string
494
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L114)
495
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L118)
513
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L114)
514
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L118)
496
515
  * as Integer
497
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L126)
516
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L126)
498
517
  * as Nil
499
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L134)
518
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L134)
500
519
  * :encoding
501
520
  * as UTF_8 string
502
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L90)
503
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L94)
521
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L90)
522
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L94)
504
523
  * as SHIFT_JIS string
505
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L102)
506
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L106)
524
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L102)
525
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L106)
507
526
  * as ASCII_8BIT string
508
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L114)
509
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L118)
527
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L114)
528
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L118)
510
529
  * as Integer
511
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L126)
530
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L126)
512
531
  * as Nil
513
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/message_spec.rb#L134)
532
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/message_spec.rb#L134)
514
533
 
515
534
  ### Ably::Models::PaginatedResource
516
- _(see [lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb))_
517
- * [returns correct length from body](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L30)
518
- * [supports alias methods for length](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L34)
519
- * [is Enumerable](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L39)
520
- * [is iterable](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L43)
521
- * [provides [] accessor method](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L61)
522
- * [#first gets the first item in page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L67)
523
- * [#last gets the last item in page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L71)
524
- * #each
525
- * [returns an enumerator](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L48)
526
- * [yields each item](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L52)
535
+ _(see [lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb))_
536
+ * #items
537
+ * [returns correct length from body](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L31)
538
+ * [is Enumerable](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L35)
539
+ * [is iterable](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L39)
540
+ * [provides [] accessor method](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L57)
541
+ * [#first gets the first item in page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L63)
542
+ * [#last gets the last item in page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L67)
543
+ * #each
544
+ * [returns an enumerator](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L44)
545
+ * [yields each item](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L48)
527
546
  * with non paged http response
528
- * [is the first page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L175)
529
- * [is the last page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L179)
530
- * [does not support pagination](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L183)
531
- * [raises an exception when accessing next page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L187)
532
- * [raises an exception when accessing first page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L191)
547
+ * [is the first page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L172)
548
+ * [is the last page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L176)
549
+ * [does not have next page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L180)
550
+ * [does not support pagination](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L184)
551
+ * [returns nil when accessing next page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L188)
552
+ * [returns nil when accessing first page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L192)
533
553
  * with paged http response
534
- * [is the first page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L209)
535
- * [is not the last page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L213)
536
- * [supports pagination](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L217)
554
+ * [is the first page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L210)
555
+ * [has next page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L214)
556
+ * [is not the last page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L218)
557
+ * [supports pagination](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L222)
537
558
  * accessing next page
538
- * [returns another PaginatedResource](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L245)
539
- * [retrieves the next page of results](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L249)
540
- * [is not the first page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L254)
541
- * [is the last page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L258)
542
- * [raises an exception if trying to access the last page when it is the last page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L262)
559
+ * [returns another PaginatedResource](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L250)
560
+ * [retrieves the next page of results](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L254)
561
+ * [is not the first page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L259)
562
+ * [does not have a next page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L263)
563
+ * [is the last page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L267)
564
+ * [returns nil when trying to access the last page when it is the last page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L271)
543
565
  * and then first page
544
- * [returns a PaginatedResource](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L273)
545
- * [retrieves the first page of results](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L277)
546
- * [is the first page](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/paginated_resource_spec.rb#L281)
566
+ * [returns a PaginatedResource](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L282)
567
+ * [retrieves the first page of results](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L286)
568
+ * [is the first page](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/paginated_resource_spec.rb#L290)
547
569
 
548
570
  ### Ably::Models::PresenceMessage
549
- _(see [lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb))_
571
+ _(see [lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb))_
550
572
  * behaves like a model
551
573
  * attributes
552
574
  * #client_id
553
- * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
575
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
554
576
  * #data
555
- * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
577
+ * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
556
578
  * #encoding
557
- * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
579
+ * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
558
580
  * #==
559
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L41)
560
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L46)
561
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L50)
581
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L41)
582
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L46)
583
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L50)
562
584
  * is immutable
563
- * [prevents changes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L76)
564
- * [dups options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L80)
585
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L76)
586
+ * [dups options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L80)
565
587
  * #connection_id attribute
566
588
  * when this model has a connectionId attribute
567
589
  * but no protocol message
568
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L25)
590
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L25)
569
591
  * with a protocol message with a different connectionId
570
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L33)
592
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L33)
571
593
  * when this model has no connectionId attribute
572
594
  * and no protocol message
573
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L43)
595
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L43)
574
596
  * with a protocol message with a connectionId
575
- * [uses the model value](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L51)
597
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L51)
576
598
  * #member_key attribute
577
- * [is string in format connection_id:client_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L61)
599
+ * [is string in format connection_id:client_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L61)
578
600
  * with the same client id across multiple connections
579
- * [is unique](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L69)
601
+ * [is unique](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L69)
580
602
  * with a single connection and different client_ids
581
- * [is unique](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L78)
603
+ * [is unique](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L78)
582
604
  * #timestamp
583
- * [retrieves attribute :timestamp as a Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L86)
605
+ * [retrieves attribute :timestamp as a Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L86)
584
606
  * initialized with
585
607
  * :client_id
586
608
  * as UTF_8 string
587
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L138)
588
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L142)
609
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L138)
610
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L142)
589
611
  * as SHIFT_JIS string
590
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L150)
591
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L154)
612
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L150)
613
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L154)
592
614
  * as ASCII_8BIT string
593
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L162)
594
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L166)
615
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L162)
616
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L166)
595
617
  * as Integer
596
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L174)
618
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L174)
597
619
  * as Nil
598
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L182)
620
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L182)
599
621
  * :connection_id
600
622
  * as UTF_8 string
601
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L138)
602
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L142)
623
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L138)
624
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L142)
603
625
  * as SHIFT_JIS string
604
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L150)
605
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L154)
626
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L150)
627
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L154)
606
628
  * as ASCII_8BIT string
607
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L162)
608
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L166)
629
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L162)
630
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L166)
609
631
  * as Integer
610
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L174)
632
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L174)
611
633
  * as Nil
612
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L182)
634
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L182)
613
635
  * :encoding
614
636
  * as UTF_8 string
615
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L138)
616
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L142)
637
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L138)
638
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L142)
617
639
  * as SHIFT_JIS string
618
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L150)
619
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L154)
640
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L150)
641
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L154)
620
642
  * as ASCII_8BIT string
621
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L162)
622
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L166)
643
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L162)
644
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L166)
623
645
  * as Integer
624
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L174)
646
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L174)
625
647
  * as Nil
626
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/presence_message_spec.rb#L182)
648
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/presence_message_spec.rb#L182)
627
649
 
628
650
  ### Ably::Models::ProtocolMessage
629
- _(see [lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb))_
651
+ _(see [lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb))_
630
652
  * behaves like a model
631
653
  * attributes
632
654
  * #id
633
- * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
655
+ * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
634
656
  * #channel
635
- * [retrieves attribute :channel](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
657
+ * [retrieves attribute :channel](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
636
658
  * #channel_serial
637
- * [retrieves attribute :channel_serial](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
659
+ * [retrieves attribute :channel_serial](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
638
660
  * #connection_id
639
- * [retrieves attribute :connection_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
661
+ * [retrieves attribute :connection_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
640
662
  * #==
641
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L41)
642
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L46)
643
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L50)
663
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L41)
664
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L46)
665
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L50)
644
666
  * is immutable
645
- * [prevents changes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L76)
646
- * [dups options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L80)
667
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L76)
668
+ * [dups options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L80)
647
669
  * attributes
648
670
  * #timestamp
649
- * [retrieves attribute :timestamp as Time object](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L74)
671
+ * [retrieves attribute :timestamp as Time object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L74)
650
672
  * #count
651
673
  * when missing
652
- * [is 1](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L83)
674
+ * [is 1](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L83)
653
675
  * when non numeric
654
- * [is 1](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L90)
676
+ * [is 1](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L90)
655
677
  * when greater than 1
656
- * [is the value of count](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L97)
678
+ * [is the value of count](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L97)
657
679
  * #message_serial
658
- * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L105)
680
+ * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L105)
659
681
  * #has_message_serial?
660
682
  * without msg_serial
661
- * [returns false](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L115)
683
+ * [returns false](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L115)
662
684
  * with msg_serial
663
- * [returns true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L123)
685
+ * [returns true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L123)
664
686
  * #connection_serial
665
- * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L131)
687
+ * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L131)
666
688
  * #flags
667
689
  * when nil
668
- * [is zero](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L141)
690
+ * [is zero](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L141)
669
691
  * when numeric
670
- * [is an Integer](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L149)
692
+ * [is an Integer](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L149)
671
693
  * when has_presence
672
- * [#has_presence_flag? is true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L157)
694
+ * [#has_presence_flag? is true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L157)
673
695
  * when has another future flag
674
- * [#has_presence_flag? is false](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L165)
696
+ * [#has_presence_flag? is false](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L165)
675
697
  * #has_connection_serial?
676
698
  * without connection_serial
677
- * [returns false](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L175)
699
+ * [returns false](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L175)
678
700
  * with connection_serial
679
- * [returns true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L183)
701
+ * [returns true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L183)
680
702
  * #serial
681
703
  * with underlying msg_serial
682
- * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L192)
704
+ * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L192)
683
705
  * with underlying connection_serial
684
- * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L200)
706
+ * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L200)
685
707
  * with underlying connection_serial and msg_serial
686
- * [prefers connection_serial and converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L208)
708
+ * [prefers connection_serial and converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L208)
687
709
  * #has_serial?
688
710
  * without msg_serial or connection_serial
689
- * [returns false](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L219)
711
+ * [returns false](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L219)
690
712
  * with msg_serial
691
- * [returns true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L227)
713
+ * [returns true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L227)
692
714
  * with connection_serial
693
- * [returns true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L235)
715
+ * [returns true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L235)
694
716
  * #error
695
717
  * with no error attribute
696
- * [returns nil](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L245)
718
+ * [returns nil](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L245)
697
719
  * with nil error
698
- * [returns nil](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L253)
720
+ * [returns nil](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L253)
699
721
  * with error
700
- * [returns a valid ErrorInfo object](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/protocol_message_spec.rb#L261)
722
+ * [returns a valid ErrorInfo object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/protocol_message_spec.rb#L261)
701
723
 
702
- ### Ably::Models::Stat
703
- _(see [lib/submodules/ably-ruby/spec/unit/models/stat_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb))_
704
- * behaves like a model
705
- * attributes
706
- * #interval_id
707
- * [retrieves attribute :interval_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
708
- * #all
709
- * [retrieves attribute :all](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
710
- * #inbound
711
- * [retrieves attribute :inbound](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
712
- * #outbound
713
- * [retrieves attribute :outbound](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
714
- * #persisted
715
- * [retrieves attribute :persisted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
716
- * #connections
717
- * [retrieves attribute :connections](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
718
- * #channels
719
- * [retrieves attribute :channels](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
720
- * #api_requests
721
- * [retrieves attribute :api_requests](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
722
- * #token_requests
723
- * [retrieves attribute :token_requests](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
724
- * #==
725
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L41)
726
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L46)
727
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L50)
728
- * is immutable
729
- * [prevents changes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L76)
730
- * [dups options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L80)
724
+ ### Ably::Models::Stats
725
+ _(see [lib/submodules/ably-ruby/spec/unit/models/stats_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb))_
726
+ * #all stats
727
+ * [returns a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L17)
728
+ * [returns value for message counts](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L21)
729
+ * [returns value for all data transferred](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L25)
730
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L29)
731
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L33)
732
+ * #all
733
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L39)
734
+ * #presence
735
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L39)
736
+ * #messages
737
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L39)
738
+ * #persisted stats
739
+ * [returns a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L17)
740
+ * [returns value for message counts](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L21)
741
+ * [returns value for all data transferred](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L25)
742
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L29)
743
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L33)
744
+ * #all
745
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L39)
746
+ * #presence
747
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L39)
748
+ * #messages
749
+ * [is a MessageCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L39)
750
+ * #inbound stats
751
+ * [returns a MessageTraffic object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L59)
752
+ * [returns value for realtime message counts](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L63)
753
+ * [returns value for all presence data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L67)
754
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L71)
755
+ * #realtime
756
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
757
+ * #rest
758
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
759
+ * #webhook
760
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
761
+ * #all
762
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
763
+ * #outbound stats
764
+ * [returns a MessageTraffic object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L59)
765
+ * [returns value for realtime message counts](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L63)
766
+ * [returns value for all presence data](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L67)
767
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L71)
768
+ * #realtime
769
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
770
+ * #rest
771
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
772
+ * #webhook
773
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
774
+ * #all
775
+ * [is a MessageTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L77)
776
+ * #connections stats
777
+ * [returns a ConnectionTypes object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L91)
778
+ * [returns value for tls opened counts](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L95)
779
+ * [returns value for all peak connections](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L99)
780
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L103)
781
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L107)
782
+ * #tls
783
+ * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L113)
784
+ * #plain
785
+ * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L113)
786
+ * #all
787
+ * [is a ResourceCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L113)
788
+ * #channels stats
789
+ * [returns a ResourceCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L126)
790
+ * [returns value for opened counts](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L130)
791
+ * [returns value for peak channels](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L134)
792
+ * [returns zero for empty values](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L138)
793
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L142)
794
+ * #opened
795
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L148)
796
+ * #peak
797
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L148)
798
+ * #mean
799
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L148)
800
+ * #min
801
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L148)
802
+ * #refused
803
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L148)
804
+ * #api_requests stats
805
+ * [returns a RequestCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L164)
806
+ * [returns value for succeeded](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L168)
807
+ * [returns value for failed](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L172)
808
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L176)
809
+ * #succeeded
810
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L182)
811
+ * #failed
812
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L182)
813
+ * #refused
814
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L182)
815
+ * #token_requests stats
816
+ * [returns a RequestCount object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L164)
817
+ * [returns value for succeeded](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L168)
818
+ * [returns value for failed](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L172)
819
+ * [raises an exception for unknown attributes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L176)
820
+ * #succeeded
821
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L182)
822
+ * #failed
823
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L182)
824
+ * #refused
825
+ * [is a Integer object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L182)
731
826
  * #interval_granularity
732
- * [returns the granularity of the interval_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L17)
827
+ * [returns the granularity of the interval_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L193)
733
828
  * #interval_time
734
- * [returns a Time object representing the start of the interval](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L25)
829
+ * [returns a Time object representing the start of the interval](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L201)
735
830
  * class methods
736
831
  * #to_interval_id
737
832
  * when time zone of time argument is UTC
738
- * [converts time 2014-02-03:05:06 with granularity :month into 2014-02](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L33)
739
- * [converts time 2014-02-03:05:06 with granularity :day into 2014-02-03](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L37)
740
- * [converts time 2014-02-03:05:06 with granularity :hour into 2014-02-03:05](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L41)
741
- * [converts time 2014-02-03:05:06 with granularity :minute into 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L45)
742
- * [fails with invalid granularity](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L49)
743
- * [fails with invalid time](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L53)
833
+ * [converts time 2014-02-03:05:06 with granularity :month into 2014-02](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L209)
834
+ * [converts time 2014-02-03:05:06 with granularity :day into 2014-02-03](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L213)
835
+ * [converts time 2014-02-03:05:06 with granularity :hour into 2014-02-03:05](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L217)
836
+ * [converts time 2014-02-03:05:06 with granularity :minute into 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L221)
837
+ * [fails with invalid granularity](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L225)
838
+ * [fails with invalid time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L229)
744
839
  * when time zone of time argument is +02:00
745
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L59)
840
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L235)
746
841
  * #from_interval_id
747
- * [converts a month interval_id 2014-02 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L66)
748
- * [converts a day interval_id 2014-02-03 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L71)
749
- * [converts an hour interval_id 2014-02-03:05 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L76)
750
- * [converts a minute interval_id 2014-02-03:05:06 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L81)
751
- * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L86)
842
+ * [converts a month interval_id 2014-02 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L242)
843
+ * [converts a day interval_id 2014-02-03 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L247)
844
+ * [converts an hour interval_id 2014-02-03:05 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L252)
845
+ * [converts a minute interval_id 2014-02-03:05:06 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L257)
846
+ * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L262)
752
847
  * #granularity_from_interval_id
753
- * [returns a :month interval_id for 2014-02](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L92)
754
- * [returns a :day interval_id for 2014-02-03](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L96)
755
- * [returns a :hour interval_id for 2014-02-03:05](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L100)
756
- * [returns a :minute interval_id for 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L104)
757
- * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/stat_spec.rb#L108)
848
+ * [returns a :month interval_id for 2014-02](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L268)
849
+ * [returns a :day interval_id for 2014-02-03](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L272)
850
+ * [returns a :hour interval_id for 2014-02-03:05](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L276)
851
+ * [returns a :minute interval_id for 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L280)
852
+ * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/stats_spec.rb#L284)
758
853
 
759
- ### Ably::Models::Token
760
- _(see [lib/submodules/ably-ruby/spec/unit/models/token_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb))_
854
+ ### Ably::Models::TokenDetails
855
+ _(see [lib/submodules/ably-ruby/spec/unit/models/token_details_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb))_
761
856
  * behaves like a model
762
857
  * attributes
763
- * #id
764
- * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
765
- * #capability
766
- * [retrieves attribute :capability](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
858
+ * #token
859
+ * [retrieves attribute :token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
860
+ * #key_name
861
+ * [retrieves attribute :key_name](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
767
862
  * #client_id
768
- * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
769
- * #nonce
770
- * [retrieves attribute :nonce](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L15)
863
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
771
864
  * #==
772
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L41)
773
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L46)
774
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L50)
865
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L41)
866
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L46)
867
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L50)
775
868
  * is immutable
776
- * [prevents changes](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L76)
777
- * [dups options](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/model_behaviour.rb#L80)
778
- * defaults
779
- * [should default TTL to 1 hour](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L14)
780
- * [should default capability to all](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L18)
781
- * [should only have defaults for :ttl and :capability](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L22)
869
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L76)
870
+ * [dups options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L80)
782
871
  * attributes
783
- * #key_id
784
- * [retrieves attribute :key](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L32)
785
- * #issued_at
786
- * [retrieves attribute :issued_at as Time](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L42)
787
- * #expires_at
788
- * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L42)
872
+ * #capability
873
+ * [retrieves attribute :capability as parsed JSON](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L21)
874
+ * #issued with :issued option as milliseconds in constructor
875
+ * [retrieves attribute :issued as Time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L31)
876
+ * #issued with :issued option as a Time in constructor
877
+ * [retrieves attribute :issued as Time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L40)
878
+ * #issued when converted to JSON
879
+ * [is in milliseconds](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L49)
880
+ * #expires with :expires option as milliseconds in constructor
881
+ * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L31)
882
+ * #expires with :expires option as a Time in constructor
883
+ * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L40)
884
+ * #expires when converted to JSON
885
+ * [is in milliseconds](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L49)
789
886
  * #expired?
790
887
  * once grace period buffer has passed
791
- * [is true](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L55)
888
+ * [is true](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L61)
792
889
  * within grace period buffer
793
- * [is false](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L63)
890
+ * [is false](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L69)
794
891
  * ==
795
- * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L73)
796
- * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L78)
797
- * [is false when class type differs](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/models/token_spec.rb#L82)
892
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L79)
893
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L84)
894
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_details_spec.rb#L88)
798
895
 
799
- ### Ably::Rest::Channels
800
- _(see [lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb))_
896
+ ### Ably::Models::TokenRequest
897
+ _(see [lib/submodules/ably-ruby/spec/unit/models/token_request_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb))_
898
+ * behaves like a model
899
+ * attributes
900
+ * #key_name
901
+ * [retrieves attribute :key_name](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
902
+ * #client_id
903
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
904
+ * #nonce
905
+ * [retrieves attribute :nonce](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
906
+ * #mac
907
+ * [retrieves attribute :mac](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L15)
908
+ * #==
909
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L41)
910
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L46)
911
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L50)
912
+ * is immutable
913
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L76)
914
+ * [dups options](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/model_behaviour.rb#L80)
915
+ * attributes
916
+ * #capability
917
+ * [retrieves attribute :capability as parsed JSON](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L18)
918
+ * #timestamp
919
+ * with :timestamp option as milliseconds in constructor
920
+ * [retrieves attribute :timestamp as Time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L29)
921
+ * with :timestamp option as Time in constructor
922
+ * [retrieves attribute :timestamp as Time](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L38)
923
+ * when converted to JSON
924
+ * [is in milliseconds since epoch](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L47)
925
+ * #ttl
926
+ * with :ttl option as milliseconds in constructor
927
+ * [retrieves attribute :ttl as seconds](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L59)
928
+ * when converted to JSON
929
+ * [is in milliseconds since epoch](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L68)
930
+ * ==
931
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L78)
932
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L83)
933
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/models/token_request_spec.rb#L87)
934
+
935
+ ### Ably::Rest::Channel
936
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb))_
801
937
  * #initializer
802
938
  * as UTF_8 string
803
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L16)
804
- * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L20)
939
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L16)
940
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L20)
805
941
  * as SHIFT_JIS string
806
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L28)
807
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L32)
942
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L28)
943
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L32)
808
944
  * as ASCII_8BIT string
809
- * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L40)
810
- * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L44)
945
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L40)
946
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L44)
811
947
  * as Integer
812
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L52)
948
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L52)
813
949
  * as Nil
814
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L60)
950
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L60)
815
951
  * #publish name argument
816
952
  * as UTF_8 string
817
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L72)
953
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L72)
818
954
  * as SHIFT_JIS string
819
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L80)
955
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L80)
820
956
  * as ASCII_8BIT string
821
- * [is permitted](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L88)
957
+ * [is permitted](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L88)
822
958
  * as Integer
823
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L96)
959
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L96)
824
960
  * as Nil
825
- * [raises an argument error](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channel_spec.rb#L104)
961
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channel_spec.rb#L104)
826
962
 
827
963
  ### Ably::Rest::Channels
828
- _(see [lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb))_
964
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb))_
829
965
  * creating channels
830
- * [#get creates a channel](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L12)
831
- * [#get will reuse the channel object](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L17)
832
- * [[] creates a channel](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L23)
966
+ * [#get creates a channel](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L12)
967
+ * [#get will reuse the channel object](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L17)
968
+ * [[] creates a channel](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L23)
833
969
  * #fetch
834
- * [retrieves a channel if it exists](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L30)
835
- * [calls the block if channel is missing](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L35)
970
+ * [retrieves a channel if it exists](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L30)
971
+ * [calls the block if channel is missing](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L35)
836
972
  * destroying channels
837
- * [#release releases the channel resoures](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L43)
973
+ * [#release releases the channel resoures](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L43)
838
974
  * is Enumerable
839
- * [allows enumeration](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L59)
840
- * [provides #length](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L75)
975
+ * [allows enumeration](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L59)
976
+ * [provides #length](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L75)
841
977
  * #each
842
- * [returns an enumerator](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L64)
843
- * [yields each channel](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/channels_spec.rb#L68)
978
+ * [returns an enumerator](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L64)
979
+ * [yields each channel](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/channels_spec.rb#L68)
844
980
 
845
981
  ### Ably::Rest::Client
846
- _(see [lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/client_spec.rb))_
982
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/client_spec.rb))_
847
983
  * behaves like a client initializer
848
984
  * with invalid arguments
849
985
  * empty hash
850
- * [raises an exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L28)
986
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L28)
851
987
  * nil
852
- * [raises an exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L36)
853
- * api_key: "invalid"
854
- * [raises an exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L44)
855
- * api_key: "invalid:asdad"
856
- * [raises an exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L52)
857
- * api_key and key_id
858
- * [raises an exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L60)
859
- * api_key and key_secret
860
- * [raises an exception](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L68)
988
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L36)
989
+ * key: "invalid"
990
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L44)
991
+ * key: "invalid:asdad"
992
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L52)
993
+ * key and key_name
994
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L60)
995
+ * key and key_secret
996
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L68)
861
997
  * client_id as only option
862
- * [requires a valid key](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L76)
998
+ * [requires a valid key](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L76)
863
999
  * with valid arguments
864
- * api_key only
865
- * [connects to the Ably service](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L87)
866
- * key_id and key_secret
867
- * [constructs an api_key](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L95)
1000
+ * key only
1001
+ * [connects to the Ably service](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L87)
868
1002
  * with a string key instead of options hash
869
- * [sets the api_key](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L103)
870
- * [sets the key_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L107)
871
- * [sets the key_secret](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L111)
1003
+ * [sets the key](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L103)
1004
+ * [sets the key_name](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L107)
1005
+ * [sets the key_secret](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L111)
872
1006
  * with a string token key instead of options hash
873
- * [sets the token_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L119)
1007
+ * [sets the token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L119)
874
1008
  * with token
875
- * [sets the token_id](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L127)
1009
+ * [sets the token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L127)
1010
+ * with token_details
1011
+ * [sets the token](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L135)
876
1012
  * endpoint
877
- * [defaults to production](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L133)
1013
+ * [defaults to production](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L141)
878
1014
  * with environment option
879
- * [uses an alternate endpoint](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L140)
1015
+ * [uses an alternate endpoint](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L148)
880
1016
  * tls
881
- * [defaults to TLS](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L159)
1017
+ * [defaults to TLS](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L167)
882
1018
  * set to false
883
- * [uses plain text](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L150)
884
- * [uses HTTP](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L154)
1019
+ * [uses plain text](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L158)
1020
+ * [uses HTTP](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L162)
885
1021
  * logger
886
1022
  * default
887
- * [uses Ruby Logger](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L166)
888
- * [specifies Logger::ERROR log level](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L170)
1023
+ * [uses Ruby Logger](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L174)
1024
+ * [specifies Logger::ERROR log level](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L178)
889
1025
  * with log_level :none
890
- * [silences all logging with a NilLogger](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L178)
1026
+ * [silences all logging with a NilLogger](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L186)
891
1027
  * with custom logger and log_level
892
- * [uses the custom logger](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L196)
893
- * [sets the custom log level](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L200)
1028
+ * [uses the custom logger](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L204)
1029
+ * [sets the custom log level](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L208)
894
1030
  * delegators
895
- * [delegates :client_id to .auth](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L210)
896
- * [delegates :auth_options to .auth](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/shared/client_initializer_behaviour.rb#L215)
1031
+ * [delegates :client_id to .auth](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L218)
1032
+ * [delegates :auth_options to .auth](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/shared/client_initializer_behaviour.rb#L223)
897
1033
  * initializer options
898
1034
  * TLS
899
1035
  * disabled
900
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/client_spec.rb#L17)
1036
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/client_spec.rb#L17)
901
1037
  * :use_token_auth
902
1038
  * set to false
903
- * with an api_key with :tls => false
904
- * [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/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/client_spec.rb#L28)
905
- * without an api_key
906
- * [fails as an api_key is required if not using token auth](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/client_spec.rb#L36)
1039
+ * with an key with :tls => false
1040
+ * [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/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/client_spec.rb#L28)
1041
+ * without an key
1042
+ * [fails as an key is required if not using token auth](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/client_spec.rb#L36)
907
1043
  * set to true
908
- * without an api_key or token_id
909
- * [fails as an api_key is required to issue tokens](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/client_spec.rb#L46)
1044
+ * without an key or token
1045
+ * [fails as an key is required to issue tokens](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/client_spec.rb#L46)
910
1046
 
911
1047
  ### Ably::Rest
912
- _(see [lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/rest_spec.rb))_
913
- * [constructor returns an Ably::Rest::Client](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/rest/rest_spec.rb#L7)
1048
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/rest_spec.rb))_
1049
+ * [constructor returns an Ably::Rest::Client](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/rest/rest_spec.rb#L7)
914
1050
 
915
1051
  ### Ably::Util::Crypto
916
- _(see [lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb))_
1052
+ _(see [lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb))_
917
1053
  * defaults
918
- * [match other client libraries](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L18)
1054
+ * [match other client libraries](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L18)
919
1055
  * encrypts & decrypt
920
- * [#encrypt encrypts a string](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L28)
921
- * [#decrypt decrypts a string](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L33)
1056
+ * [#encrypt encrypts a string](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L28)
1057
+ * [#decrypt decrypts a string](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L33)
922
1058
  * encrypting an empty string
923
- * [raises an ArgumentError](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L42)
1059
+ * [raises an ArgumentError](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L42)
924
1060
  * using shared client lib fixture data
925
1061
  * with AES-128-CBC
926
1062
  * behaves like an Ably encrypter and decrypter
927
1063
  * text payload
928
- * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L65)
929
- * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L69)
1064
+ * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L65)
1065
+ * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L69)
930
1066
  * with AES-256-CBC
931
1067
  * behaves like an Ably encrypter and decrypter
932
1068
  * text payload
933
- * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L65)
934
- * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/da0271f013cdb065e3bd4a68e4753d8435c28457/spec/unit/util/crypto_spec.rb#L69)
1069
+ * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L65)
1070
+ * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/c18ace85cb292a991d41de5770eaad23d60b4c69/spec/unit/util/crypto_spec.rb#L69)
935
1071
 
936
1072
  -------
937
1073
 
938
1074
  ## Test summary
939
1075
 
940
- * Passing tests: 448
1076
+ * Passing tests: 528
941
1077
  * Pending tests: 0
942
1078
  * Failing tests: 0