ably-rest 0.7.1 → 0.7.3

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 (148) hide show
  1. checksums.yaml +13 -5
  2. data/.gitmodules +1 -1
  3. data/.rspec +1 -0
  4. data/.travis.yml +7 -3
  5. data/SPEC.md +495 -419
  6. data/ably-rest.gemspec +19 -5
  7. data/lib/ably-rest.rb +9 -1
  8. data/lib/submodules/ably-ruby/.gitignore +6 -0
  9. data/lib/submodules/ably-ruby/.rspec +1 -0
  10. data/lib/submodules/ably-ruby/.ruby-version.old +1 -0
  11. data/lib/submodules/ably-ruby/.travis.yml +10 -0
  12. data/lib/submodules/ably-ruby/Gemfile +4 -0
  13. data/lib/submodules/ably-ruby/LICENSE.txt +22 -0
  14. data/lib/submodules/ably-ruby/README.md +122 -0
  15. data/lib/submodules/ably-ruby/Rakefile +34 -0
  16. data/lib/submodules/ably-ruby/SPEC.md +1794 -0
  17. data/lib/submodules/ably-ruby/ably.gemspec +36 -0
  18. data/lib/submodules/ably-ruby/lib/ably.rb +12 -0
  19. data/lib/submodules/ably-ruby/lib/ably/auth.rb +438 -0
  20. data/lib/submodules/ably-ruby/lib/ably/exceptions.rb +69 -0
  21. data/lib/submodules/ably-ruby/lib/ably/logger.rb +102 -0
  22. data/lib/submodules/ably-ruby/lib/ably/models/error_info.rb +37 -0
  23. data/lib/submodules/ably-ruby/lib/ably/models/idiomatic_ruby_wrapper.rb +223 -0
  24. data/lib/submodules/ably-ruby/lib/ably/models/message.rb +132 -0
  25. data/lib/submodules/ably-ruby/lib/ably/models/message_encoders/base.rb +108 -0
  26. data/lib/submodules/ably-ruby/lib/ably/models/message_encoders/base64.rb +40 -0
  27. data/lib/submodules/ably-ruby/lib/ably/models/message_encoders/cipher.rb +83 -0
  28. data/lib/submodules/ably-ruby/lib/ably/models/message_encoders/json.rb +34 -0
  29. data/lib/submodules/ably-ruby/lib/ably/models/message_encoders/utf8.rb +26 -0
  30. data/lib/submodules/ably-ruby/lib/ably/models/nil_logger.rb +20 -0
  31. data/lib/submodules/ably-ruby/lib/ably/models/paginated_resource.rb +173 -0
  32. data/lib/submodules/ably-ruby/lib/ably/models/presence_message.rb +147 -0
  33. data/lib/submodules/ably-ruby/lib/ably/models/protocol_message.rb +210 -0
  34. data/lib/submodules/ably-ruby/lib/ably/models/stat.rb +161 -0
  35. data/lib/submodules/ably-ruby/lib/ably/models/token.rb +74 -0
  36. data/lib/submodules/ably-ruby/lib/ably/modules/ably.rb +15 -0
  37. data/lib/submodules/ably-ruby/lib/ably/modules/async_wrapper.rb +62 -0
  38. data/lib/submodules/ably-ruby/lib/ably/modules/channels_collection.rb +69 -0
  39. data/lib/submodules/ably-ruby/lib/ably/modules/conversions.rb +100 -0
  40. data/lib/submodules/ably-ruby/lib/ably/modules/encodeable.rb +69 -0
  41. data/lib/submodules/ably-ruby/lib/ably/modules/enum.rb +202 -0
  42. data/lib/submodules/ably-ruby/lib/ably/modules/event_emitter.rb +128 -0
  43. data/lib/submodules/ably-ruby/lib/ably/modules/event_machine_helpers.rb +26 -0
  44. data/lib/submodules/ably-ruby/lib/ably/modules/http_helpers.rb +41 -0
  45. data/lib/submodules/ably-ruby/lib/ably/modules/message_pack.rb +14 -0
  46. data/lib/submodules/ably-ruby/lib/ably/modules/model_common.rb +41 -0
  47. data/lib/submodules/ably-ruby/lib/ably/modules/state_emitter.rb +153 -0
  48. data/lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb +57 -0
  49. data/lib/submodules/ably-ruby/lib/ably/modules/statesman_monkey_patch.rb +33 -0
  50. data/lib/submodules/ably-ruby/lib/ably/modules/uses_state_machine.rb +74 -0
  51. data/lib/submodules/ably-ruby/lib/ably/realtime.rb +64 -0
  52. data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +298 -0
  53. data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +92 -0
  54. data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_state_machine.rb +69 -0
  55. data/lib/submodules/ably-ruby/lib/ably/realtime/channels.rb +50 -0
  56. data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +184 -0
  57. data/lib/submodules/ably-ruby/lib/ably/realtime/client/incoming_message_dispatcher.rb +184 -0
  58. data/lib/submodules/ably-ruby/lib/ably/realtime/client/outgoing_message_dispatcher.rb +70 -0
  59. data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +445 -0
  60. data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_manager.rb +368 -0
  61. data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_state_machine.rb +91 -0
  62. data/lib/submodules/ably-ruby/lib/ably/realtime/connection/websocket_transport.rb +188 -0
  63. data/lib/submodules/ably-ruby/lib/ably/realtime/models/nil_channel.rb +30 -0
  64. data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +564 -0
  65. data/lib/submodules/ably-ruby/lib/ably/rest.rb +43 -0
  66. data/lib/submodules/ably-ruby/lib/ably/rest/channel.rb +104 -0
  67. data/lib/submodules/ably-ruby/lib/ably/rest/channels.rb +44 -0
  68. data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +396 -0
  69. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/encoder.rb +49 -0
  70. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/exceptions.rb +41 -0
  71. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/external_exceptions.rb +24 -0
  72. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/fail_if_unsupported_mime_type.rb +17 -0
  73. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/logger.rb +58 -0
  74. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_json.rb +27 -0
  75. data/lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb +27 -0
  76. data/lib/submodules/ably-ruby/lib/ably/rest/presence.rb +92 -0
  77. data/lib/submodules/ably-ruby/lib/ably/util/crypto.rb +105 -0
  78. data/lib/submodules/ably-ruby/lib/ably/util/pub_sub.rb +43 -0
  79. data/lib/submodules/ably-ruby/lib/ably/version.rb +3 -0
  80. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb +154 -0
  81. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +558 -0
  82. data/lib/submodules/ably-ruby/spec/acceptance/realtime/client_spec.rb +119 -0
  83. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_failures_spec.rb +575 -0
  84. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +785 -0
  85. data/lib/submodules/ably-ruby/spec/acceptance/realtime/message_spec.rb +457 -0
  86. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_history_spec.rb +55 -0
  87. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +1001 -0
  88. data/lib/submodules/ably-ruby/spec/acceptance/realtime/stats_spec.rb +23 -0
  89. data/lib/submodules/ably-ruby/spec/acceptance/realtime/time_spec.rb +27 -0
  90. data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +564 -0
  91. data/lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb +165 -0
  92. data/lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb +134 -0
  93. data/lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb +41 -0
  94. data/lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb +273 -0
  95. data/lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb +185 -0
  96. data/lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb +247 -0
  97. data/lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb +292 -0
  98. data/lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb +172 -0
  99. data/lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb +15 -0
  100. data/lib/submodules/ably-ruby/spec/resources/crypto-data-128.json +56 -0
  101. data/lib/submodules/ably-ruby/spec/resources/crypto-data-256.json +56 -0
  102. data/lib/submodules/ably-ruby/spec/rspec_config.rb +57 -0
  103. data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +212 -0
  104. data/lib/submodules/ably-ruby/spec/shared/model_behaviour.rb +86 -0
  105. data/lib/submodules/ably-ruby/spec/shared/protocol_msgbus_behaviour.rb +36 -0
  106. data/lib/submodules/ably-ruby/spec/spec_helper.rb +20 -0
  107. data/lib/submodules/ably-ruby/spec/support/api_helper.rb +60 -0
  108. data/lib/submodules/ably-ruby/spec/support/event_machine_helper.rb +104 -0
  109. data/lib/submodules/ably-ruby/spec/support/markdown_spec_formatter.rb +118 -0
  110. data/lib/submodules/ably-ruby/spec/support/private_api_formatter.rb +36 -0
  111. data/lib/submodules/ably-ruby/spec/support/protocol_helper.rb +32 -0
  112. data/lib/submodules/ably-ruby/spec/support/random_helper.rb +15 -0
  113. data/lib/submodules/ably-ruby/spec/support/rest_testapp_before_retry.rb +15 -0
  114. data/lib/submodules/ably-ruby/spec/support/test_app.rb +113 -0
  115. data/lib/submodules/ably-ruby/spec/unit/auth_spec.rb +68 -0
  116. data/lib/submodules/ably-ruby/spec/unit/logger_spec.rb +146 -0
  117. data/lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb +18 -0
  118. data/lib/submodules/ably-ruby/spec/unit/models/idiomatic_ruby_wrapper_spec.rb +349 -0
  119. data/lib/submodules/ably-ruby/spec/unit/models/message_encoders/base64_spec.rb +181 -0
  120. data/lib/submodules/ably-ruby/spec/unit/models/message_encoders/cipher_spec.rb +260 -0
  121. data/lib/submodules/ably-ruby/spec/unit/models/message_encoders/json_spec.rb +135 -0
  122. data/lib/submodules/ably-ruby/spec/unit/models/message_encoders/utf8_spec.rb +56 -0
  123. data/lib/submodules/ably-ruby/spec/unit/models/message_spec.rb +389 -0
  124. data/lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb +288 -0
  125. data/lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb +386 -0
  126. data/lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb +315 -0
  127. data/lib/submodules/ably-ruby/spec/unit/models/stat_spec.rb +113 -0
  128. data/lib/submodules/ably-ruby/spec/unit/models/token_spec.rb +86 -0
  129. data/lib/submodules/ably-ruby/spec/unit/modules/async_wrapper_spec.rb +124 -0
  130. data/lib/submodules/ably-ruby/spec/unit/modules/conversions_spec.rb +72 -0
  131. data/lib/submodules/ably-ruby/spec/unit/modules/enum_spec.rb +272 -0
  132. data/lib/submodules/ably-ruby/spec/unit/modules/event_emitter_spec.rb +184 -0
  133. data/lib/submodules/ably-ruby/spec/unit/modules/state_emitter_spec.rb +283 -0
  134. data/lib/submodules/ably-ruby/spec/unit/realtime/channel_spec.rb +206 -0
  135. data/lib/submodules/ably-ruby/spec/unit/realtime/channels_spec.rb +81 -0
  136. data/lib/submodules/ably-ruby/spec/unit/realtime/client_spec.rb +30 -0
  137. data/lib/submodules/ably-ruby/spec/unit/realtime/connection_spec.rb +33 -0
  138. data/lib/submodules/ably-ruby/spec/unit/realtime/incoming_message_dispatcher_spec.rb +36 -0
  139. data/lib/submodules/ably-ruby/spec/unit/realtime/presence_spec.rb +111 -0
  140. data/lib/submodules/ably-ruby/spec/unit/realtime/realtime_spec.rb +9 -0
  141. data/lib/submodules/ably-ruby/spec/unit/realtime/websocket_transport_spec.rb +25 -0
  142. data/lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb +109 -0
  143. data/lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb +79 -0
  144. data/lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb +53 -0
  145. data/lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb +10 -0
  146. data/lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb +87 -0
  147. data/lib/submodules/ably-ruby/spec/unit/util/pub_sub_spec.rb +86 -0
  148. metadata +182 -27
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 85a727f923a067f8d9391c50c1dde992fc866162
4
- data.tar.gz: 9886c7bba136da444d531e11bc23b33e99d83e0d
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZmFlZmVjODUzYjUxMzVjNmM3OWRlN2Y5YzAzY2ExNGZlZjFkNDYzYQ==
5
+ data.tar.gz: !binary |-
6
+ MDllZThmYmRkYjE3MmQ4NzNlYjE0YjZhNWQ4ZWVkZWRiMTkzNmQ3Nw==
5
7
  SHA512:
6
- metadata.gz: 4cd6a4f599a2def5ec886cf679bb01d8cc0357ee0ae4bd28369456a3c77497f4ad1b6b988e9b558c130b0a8f5ee1a61f28826f276f1450d52b151753633d01ed
7
- data.tar.gz: 0a51a727f2533c3f2c11ce8e0c60c47e0e31ad344e510e7f0caac03e92733d199337b207d400398c06d55ebda1ce875f4ad5024f6d7a5a38ab5d667b4a675290
8
+ metadata.gz: !binary |-
9
+ YmRkMTMxNjZlYThhYmY1YzAyNzc5ZjRlNDE3MDk3ZmEzMjI3MmQzMTJlMWM2
10
+ YzdmOWE0MzY2YWZjY2ZiZDMzNDQxMDQ3M2VlNTJjMWJjOGZhNWEyNGYwNTdj
11
+ YjEyNWEwNWFmZWUyMDU3ZTcwZDE0MGYzYTNkNGY4MTg1Y2ViMzA=
12
+ data.tar.gz: !binary |-
13
+ ZDk1ZWFhMTFiNTE4MzE5ZjAyYzllOGE3MDUwOGRhNGEyNDBmYzA2OTgyODY2
14
+ YmU4ZjM0Y2MzOWMyZmVmMjlkNWJkNGVjNGQ1OGQ0Y2ViNDRkZDEzYzhlY2I3
15
+ MWJkN2M5NGM2YjQ4N2I1NDg3YmZhOGFkYzUxYzQ1YjcwYWFiMjc=
data/.gitmodules CHANGED
@@ -1,3 +1,3 @@
1
1
  [submodule "lib/submodules/ably-ruby"]
2
2
  path = lib/submodules/ably-ruby
3
- url = git@github.com:ably/ably-ruby.git
3
+ url = https://github.com/ably/ably-ruby.git
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
data/.travis.yml CHANGED
@@ -1,5 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.2.0
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.2.0
6
+ script: bundle exec rspec
7
+ notifications:
8
+ slack:
9
+ secure: wIcB0kscOcVO41zOkOBLHDphzq/Lowrn40MI2mqQtcWcFkvHzcn3fIPoEH0YR8eul7bZ6ZHOLlJw3Qs8gE6VfrqLFVzZuAAv2vtzh26xkZCuQwmCn0o576mTWMSB6H8q71+t7GHZUL/ctMKtJNzwRBilppSaLjktEynS7UdiVO8=
data/SPEC.md CHANGED
@@ -1,858 +1,934 @@
1
1
  # Ably REST Client Library 0.7.1 Specification
2
2
 
3
3
  ### Ably::Auth
4
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb](./lib/submodules/ably-ruby/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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb))_
5
5
  * using JSON and MsgPack protocol
6
- * [has immutable options](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L54)
6
+ * [has immutable options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L54)
7
7
  * #request_token
8
- * [returns the requested token](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L62)
8
+ * [returns the requested token](https://github.com/ably/ably-ruby/tree/fa00e7d8516d7da32ca44f46a0bde21057ea422a/spec/acceptance/rest/auth_spec.rb#L62)
9
9
  * with option :client_id
10
- * [overrides default and uses camelCase notation for all attributes](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L93)
10
+ * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L95)
11
11
  * with option :capability
12
- * [overrides default and uses camelCase notation for all attributes](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L93)
12
+ * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L95)
13
13
  * with option :nonce
14
- * [overrides default and uses camelCase notation for all attributes](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L93)
14
+ * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L95)
15
15
  * with option :timestamp
16
- * [overrides default and uses camelCase notation for all attributes](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L93)
16
+ * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L95)
17
17
  * with option :ttl
18
- * [overrides default and uses camelCase notation for all attributes](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L93)
18
+ * [overrides default and uses camelCase notation for all attributes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L95)
19
19
  * with :key_id & :key_secret options
20
- * [key_id is used in request and signing uses key_secret](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L122)
20
+ * [key_id is used in request and signing uses key_secret](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L124)
21
21
  * with :query_time option
22
- * [queries the server for the time](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L130)
22
+ * [queries the server for the time](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L132)
23
23
  * without :query_time option
24
- * [does not query the server for the time](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L139)
24
+ * [does not query the server for the time](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L141)
25
25
  * with :auth_url option
26
26
  * when response is valid
27
- * [requests a token from :auth_url using an HTTP GET request](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L186)
27
+ * [requests a token from :auth_url using an HTTP GET request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L188)
28
28
  * with :query_params
29
- * [requests a token from :auth_url with the :query_params](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L194)
29
+ * [requests a token from :auth_url with the :query_params](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L196)
30
30
  * with :headers
31
- * [requests a token from :auth_url with the HTTP headers set](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L202)
31
+ * [requests a token from :auth_url with the HTTP headers set](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L204)
32
32
  * with POST
33
- * [requests a token from :auth_url using an HTTP POST instead of the default GET](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L210)
33
+ * [requests a token from :auth_url using an HTTP POST instead of the default GET](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L212)
34
34
  * when response is invalid
35
35
  * 500
36
- * [raises ServerError](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L223)
36
+ * [raises ServerError](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L225)
37
37
  * XML
38
- * [raises InvalidResponseBody](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L234)
38
+ * [raises InvalidResponseBody](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L236)
39
39
  * with token_request_block
40
- * [calls the block when authenticating to obtain the request token](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L252)
41
- * [uses the token request from the block when requesting a new token](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L257)
40
+ * [calls the block when authenticating to obtain the request token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L254)
41
+ * [uses the token request from the block when requesting a new token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L259)
42
42
  * before #authorise has been called
43
- * [has no current_token](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L264)
43
+ * [has no current_token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L266)
44
44
  * #authorise
45
- * [updates the persisted auth options thare are then used for subsequent authorise requests](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L311)
45
+ * [updates the persisted auth options thare are then used for subsequent authorise requests](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L313)
46
46
  * when called for the first time since the client has been instantiated
47
- * [passes all options to #request_token](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L275)
48
- * [returns a valid token](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L280)
49
- * [issues a new token if option :force => true](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L284)
47
+ * [passes all options to #request_token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L277)
48
+ * [returns a valid token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L282)
49
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L286)
50
50
  * with previous authorisation
51
- * [does not request a token if current_token has not expired](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L295)
52
- * [requests a new token if token is expired](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L300)
53
- * [issues a new token if option :force => true](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L306)
51
+ * [does not request a token if current_token has not expired](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L297)
52
+ * [requests a new token if token is expired](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L302)
53
+ * [issues a new token if option :force => true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L308)
54
54
  * with token_request_block
55
- * [calls the block](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L327)
56
- * [uses the token request returned from the block when requesting a new token](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L331)
55
+ * [calls the block](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L329)
56
+ * [uses the token request returned from the block when requesting a new token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L333)
57
57
  * for every subsequent #request_token
58
58
  * without a provided block
59
- * [calls the originally provided block](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L337)
59
+ * [calls the originally provided block](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L339)
60
60
  * with a provided block
61
- * [does not call the originally provided block and calls the new #request_token block](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L344)
61
+ * [does not call the originally provided block and calls the new #request_token block](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L346)
62
62
  * #create_token_request
63
- * [uses the key ID from the client](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L360)
64
- * [uses the default TTL](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L364)
65
- * [uses the default capability](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L368)
63
+ * [uses the key ID from the client](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L362)
64
+ * [uses the default TTL](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L366)
65
+ * [uses the default capability](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L370)
66
66
  * the nonce
67
- * [is unique for every request](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L373)
68
- * [is at least 16 characters](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L378)
67
+ * [is unique for every request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L375)
68
+ * [is at least 16 characters](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L380)
69
69
  * with option :ttl
70
- * [overrides default](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L389)
70
+ * [overrides default](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L391)
71
71
  * with option :capability
72
- * [overrides default](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L389)
72
+ * [overrides default](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L391)
73
73
  * with option :nonce
74
- * [overrides default](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L389)
74
+ * [overrides default](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L391)
75
75
  * with option :timestamp
76
- * [overrides default](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L389)
76
+ * [overrides default](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L391)
77
77
  * with option :client_id
78
- * [overrides default](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L389)
78
+ * [overrides default](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L391)
79
79
  * with additional invalid attributes
80
- * [are ignored](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L397)
80
+ * [are ignored](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L399)
81
81
  * when required fields are missing
82
- * [should raise an exception if key secret is missing](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L408)
83
- * [should raise an exception if key id is missing](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L412)
82
+ * [should raise an exception if key secret is missing](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L410)
83
+ * [should raise an exception if key id is missing](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L414)
84
84
  * with :query_time option
85
- * [queries the server for the timestamp](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L421)
85
+ * [queries the server for the timestamp](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L423)
86
86
  * with :timestamp option
87
- * [uses the provided timestamp in the token request](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L431)
87
+ * [uses the provided timestamp in the token request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L433)
88
88
  * signing
89
- * [generates a valid HMAC](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L448)
89
+ * [generates a valid HMAC](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L450)
90
90
  * using token authentication
91
91
  * with :token_id option
92
- * [authenticates successfully using the provided :token_id](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L471)
93
- * [disallows publishing on unspecified capability channels](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L475)
94
- * [fails if timestamp is invalid](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L483)
95
- * [cannot be renewed automatically](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L491)
92
+ * [authenticates successfully using the provided :token_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L473)
93
+ * [disallows publishing on unspecified capability channels](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L477)
94
+ * [fails if timestamp is invalid](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L485)
95
+ * [cannot be renewed automatically](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L493)
96
96
  * when implicit as a result of using :client id
97
97
  * and requests to the Ably server are mocked
98
- * [will send a token request to the server](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L521)
98
+ * [will send a token request to the server](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L523)
99
99
  * a token is created
100
- * [before a request is made](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L530)
101
- * [when a message is published](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L534)
102
- * [with capability and TTL defaults](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L538)
100
+ * [before a request is made](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L532)
101
+ * [when a message is published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L536)
102
+ * [with capability and TTL defaults](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L540)
103
103
  * when using an :api_key and basic auth
104
- * [#using_token_auth? is false](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L553)
105
- * [#using_basic_auth? is true](./lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb#L557)
104
+ * [#using_token_auth? is false](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L555)
105
+ * [#using_basic_auth? is true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/auth_spec.rb#L559)
106
106
 
107
107
  ### Ably::Rest
108
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb))_
108
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb))_
109
109
  * transport protocol
110
110
  * when protocol is not defined it defaults to :msgpack
111
- * [uses MsgPack](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L27)
111
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L27)
112
112
  * when option {:protocol=>:json} is used
113
- * [uses JSON](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L43)
113
+ * [uses JSON](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L43)
114
114
  * when option {:use_binary_protocol=>false} is used
115
- * [uses JSON](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L43)
115
+ * [uses JSON](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L43)
116
116
  * when option {:protocol=>:msgpack} is used
117
- * [uses MsgPack](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L60)
117
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L60)
118
118
  * when option {:use_binary_protocol=>true} is used
119
- * [uses MsgPack](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L60)
119
+ * [uses MsgPack](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L60)
120
120
  * using JSON and MsgPack protocol
121
121
  * failed requests
122
122
  * due to invalid Auth
123
- * [should raise an InvalidRequest exception with a valid error message and code](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L75)
123
+ * [should raise an InvalidRequest exception with a valid error message and code](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L75)
124
124
  * server error with JSON error response body
125
- * [should raise a ServerError exception](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L94)
125
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L94)
126
126
  * 500 server error without a valid JSON response body
127
- * [should raise a ServerError exception](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L105)
127
+ * [should raise a ServerError exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L105)
128
128
  * token authentication failures
129
129
  * when auth#token_renewable?
130
- * [should automatically reissue a token](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L143)
130
+ * [should automatically reissue a token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L143)
131
131
  * when NOT auth#token_renewable?
132
- * [should raise an InvalidToken exception](./lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb#L156)
132
+ * [should raise an InvalidToken exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/base_spec.rb#L156)
133
133
 
134
134
  ### Ably::Rest::Channel
135
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb))_
135
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb))_
136
136
  * using JSON and MsgPack protocol
137
137
  * #publish
138
- * [should publish the message adn return true indicating success](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L17)
138
+ * [should publish the message adn return true indicating success](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L17)
139
139
  * #history
140
- * [should return the current message history for the channel](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L39)
141
- * [should return paged history using the PaginatedResource model](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L67)
140
+ * [should return the current message history for the channel](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L39)
141
+ * [should return paged history using the PaginatedResource model](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L67)
142
142
  * message timestamps
143
- * [should all be after the messages were published](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L52)
143
+ * [should all be after the messages were published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L52)
144
144
  * message IDs
145
- * [should be unique](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L60)
145
+ * [should be unique](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L60)
146
146
  * #history option
147
147
  * :start
148
148
  * with milliseconds since epoch value
149
- * [uses this value in the history request](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L116)
149
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L116)
150
150
  * with a Time object value
151
- * [converts the value to milliseconds since epoch in the hisotry request](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L126)
151
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L126)
152
152
  * :end
153
153
  * with milliseconds since epoch value
154
- * [uses this value in the history request](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L116)
154
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L116)
155
155
  * with a Time object value
156
- * [converts the value to milliseconds since epoch in the hisotry request](./lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb#L126)
156
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channel_spec.rb#L126)
157
157
 
158
158
  ### Ably::Rest::Channels
159
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb))_
159
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channels_spec.rb))_
160
160
  * using JSON and MsgPack protocol
161
161
  * using shortcut method #channel on the client object
162
162
  * behaves like a channel
163
- * [returns a channel object](./lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb#L6)
164
- * [returns channel object and passes the provided options](./lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb#L11)
163
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channels_spec.rb#L6)
164
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channels_spec.rb#L11)
165
165
  * using #get method on client#channels
166
166
  * behaves like a channel
167
- * [returns a channel object](./lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb#L6)
168
- * [returns channel object and passes the provided options](./lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb#L11)
167
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channels_spec.rb#L6)
168
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channels_spec.rb#L11)
169
169
  * using undocumented array accessor [] method on client#channels
170
170
  * behaves like a channel
171
- * [returns a channel object](./lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb#L6)
172
- * [returns channel object and passes the provided options](./lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb#L11)
171
+ * [returns a channel object](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channels_spec.rb#L6)
172
+ * [returns channel object and passes the provided options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/channels_spec.rb#L11)
173
173
 
174
174
  ### Ably::Rest::Client
175
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb))_
175
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb))_
176
176
  * using JSON and MsgPack protocol
177
177
  * #initialize
178
178
  * with an auth block
179
- * [calls the block to get a new token](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L20)
179
+ * [calls the block to get a new token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L20)
180
180
  * with an auth URL
181
- * [sends an HTTP request to the provided URL to get a new token](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L34)
181
+ * [sends an HTTP request to the provided URL to get a new token](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L34)
182
182
  * using tokens
183
183
  * when expired
184
- * [creates a new token automatically when the old token expires](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L55)
184
+ * [creates a new token automatically when the old token expires](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L55)
185
185
  * when token has not expired
186
- * [reuses the existing token for every request](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L69)
186
+ * [reuses the existing token for every request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L69)
187
187
  * connection transport
188
188
  * for default host
189
- * [is configured to timeout connection opening in 4 seconds](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L85)
190
- * [is configured to timeout connection requests in 15 seconds](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L89)
189
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L85)
190
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L89)
191
191
  * for the fallback hosts
192
- * [is configured to timeout connection opening in 4 seconds](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L95)
193
- * [is configured to timeout connection requests in 15 seconds](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L99)
192
+ * [is configured to timeout connection opening in 4 seconds](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L95)
193
+ * [is configured to timeout connection requests in 15 seconds](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L99)
194
194
  * fallback hosts
195
195
  * configured
196
- * [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](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L112)
196
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L112)
197
197
  * when environment is NOT production
198
- * [does not retry failed requests with fallback hosts when there is a connection error](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L129)
198
+ * [does not retry failed requests with fallback hosts when there is a connection error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L129)
199
199
  * when environment is production
200
200
  * and connection times out
201
- * [tries fallback hosts 3 times](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L169)
201
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L169)
202
202
  * and the total request time exeeds 10 seconds
203
- * [makes no further attempts to any fallback hosts](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L184)
203
+ * [makes no further attempts to any fallback hosts](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L184)
204
204
  * and connection fails
205
- * [tries fallback hosts 3 times](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L200)
205
+ * [tries fallback hosts 3 times](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L200)
206
206
  * with a custom host
207
207
  * that does not exist
208
- * [fails immediately and raises a Faraday Error](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L216)
208
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L216)
209
209
  * fallback hosts
210
- * [are never used](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L237)
210
+ * [are never used](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L237)
211
211
  * that times out
212
- * [fails immediately and raises a Faraday Error](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L252)
212
+ * [fails immediately and raises a Faraday Error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L252)
213
213
  * fallback hosts
214
- * [are never used](./lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb#L265)
214
+ * [are never used](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/client_spec.rb#L265)
215
215
 
216
216
  ### Ably::Models::MessageEncoders
217
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb))_
217
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb))_
218
218
  * with binary transport protocol
219
219
  * without encryption
220
220
  * with UTF-8 data
221
- * [does not apply any encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L41)
221
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L41)
222
222
  * with binary data
223
- * [does not apply any encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L52)
223
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L52)
224
224
  * with JSON data
225
- * [stringifies the JSON and sets the json encoding type](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L63)
225
+ * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L63)
226
226
  * with encryption
227
227
  * with UTF-8 data
228
- * [applies utf-8 and cipher encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L78)
228
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L78)
229
229
  * with binary data
230
- * [applies cipher encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L89)
230
+ * [applies cipher encoding and sets the encoding attribute to "cipher+aes-128-cbc"](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L89)
231
231
  * with JSON data
232
- * [applies json, utf-8 and cipher encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L100)
232
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L100)
233
233
  * with text transport protocol
234
234
  * without encryption
235
235
  * with UTF-8 data
236
- * [does not apply any encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L117)
236
+ * [does not apply any encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L117)
237
237
  * with binary data
238
- * [applies a base64 encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L128)
238
+ * [applies a base64 encoding and sets the encoding attribute to "base64"](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L128)
239
239
  * with JSON data
240
- * [stringifies the JSON and sets the json encoding type](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L139)
240
+ * [stringifies the JSON and sets the encoding attribute to "json"](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L139)
241
241
  * with encryption
242
242
  * with UTF-8 data
243
- * [applies utf-8, cipher and base64 encodings](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L154)
243
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L154)
244
244
  * with binary data
245
- * [applies cipher and base64 encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L165)
245
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L165)
246
246
  * with JSON data
247
- * [applies json, utf-8, cipher and base64 encoding](./lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb#L176)
247
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/encoders_spec.rb#L176)
248
248
 
249
249
  ### Ably::Rest::Channel messages
250
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb))_
250
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb))_
251
251
  * using JSON and MsgPack protocol
252
252
  * publishing with an ASCII_8BIT message name
253
- * [is converted into UTF_8](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L18)
253
+ * [is converted into UTF_8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L18)
254
254
  * encryption and encoding
255
255
  * with #publish and #history
256
256
  * with AES-128-CBC using crypto-data-128.json fixtures
257
257
  * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
258
258
  * behaves like an Ably encrypter and decrypter
259
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
260
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
259
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
260
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
261
261
  * item 1 with encrypted encoding cipher+aes-128-cbc/base64
262
262
  * behaves like an Ably encrypter and decrypter
263
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
264
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
263
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
264
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
265
265
  * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
266
266
  * behaves like an Ably encrypter and decrypter
267
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
268
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
267
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
268
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
269
269
  * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
270
270
  * behaves like an Ably encrypter and decrypter
271
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
272
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
271
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
272
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
273
273
  * with AES-256-CBC using crypto-data-256.json fixtures
274
274
  * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
275
275
  * behaves like an Ably encrypter and decrypter
276
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
277
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
276
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
277
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
278
278
  * item 1 with encrypted encoding cipher+aes-256-cbc/base64
279
279
  * behaves like an Ably encrypter and decrypter
280
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
281
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
280
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
281
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
282
282
  * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
283
283
  * behaves like an Ably encrypter and decrypter
284
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
285
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
284
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
285
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
286
286
  * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
287
287
  * behaves like an Ably encrypter and decrypter
288
- * [encrypts message automatically when published](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L65)
289
- * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L80)
288
+ * [encrypts message automatically when published](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L65)
289
+ * [sends and retrieves messages that are encrypted & decrypted by the Ably library](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L80)
290
290
  * when publishing lots of messages
291
- * [encrypts on #publish and decrypts on #history](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L113)
291
+ * [encrypts on #publish and decrypts on #history](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L113)
292
292
  * when retrieving #history with a different protocol
293
- * [delivers a String ASCII-8BIT payload to the receiver](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L140)
294
- * [delivers a String UTF-8 payload to the receiver](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L140)
295
- * [delivers a Hash payload to the receiver](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L140)
293
+ * [delivers a String ASCII-8BIT payload to the receiver](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L140)
294
+ * [delivers a String UTF-8 payload to the receiver](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L140)
295
+ * [delivers a Hash payload to the receiver](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L140)
296
296
  * when publishing on an unencrypted channel and retrieving with #history on an encrypted channel
297
- * [does not attempt to decrypt the message](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L156)
297
+ * [does not attempt to decrypt the message](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L156)
298
298
  * when publishing on an encrypted channel and retrieving with #history on an unencrypted channel
299
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L177)
300
- * [logs a Cipher exception](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L183)
299
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L177)
300
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L183)
301
301
  * publishing on an encrypted channel and retrieving #history with a different algorithm on another client
302
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L204)
303
- * [logs a Cipher exception](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L210)
302
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L204)
303
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L210)
304
304
  * publishing on an encrypted channel and subscribing with a different key on another client
305
- * [retrieves the message that remains encrypted with an encrypted encoding attribute](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L231)
306
- * [logs a Cipher exception](./lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb#L237)
305
+ * [retrieves the message that remains encrypted with an encrypted encoding attribute](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L231)
306
+ * [logs a Cipher exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/message_spec.rb#L237)
307
307
 
308
308
  ### Ably::Rest::Presence
309
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb))_
309
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb))_
310
310
  * using JSON and MsgPack protocol
311
311
  * tested against presence fixture data set up in test app
312
312
  * #get
313
- * [returns current members on the channel with their action set to :present](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L31)
313
+ * [returns current members on the channel with their action set to :present](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L30)
314
314
  * with :limit option
315
- * [returns a paged response limiting number of members per page](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L45)
315
+ * [returns a paged response limiting number of members per page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L44)
316
316
  * #history
317
- * [returns recent presence activity](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L58)
317
+ * [returns recent presence activity](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L62)
318
318
  * with options
319
319
  * direction: :forwards
320
- * [returns recent presence activity forwards with most recent history last](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L74)
320
+ * [returns recent presence activity forwards with most recent history last](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L78)
321
321
  * direction: :backwards
322
- * [returns recent presence activity backwards with most recent history first](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L89)
322
+ * [returns recent presence activity backwards with most recent history first](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L93)
323
323
  * #history
324
324
  * with time range options
325
325
  * :start
326
326
  * with milliseconds since epoch value
327
- * [uses this value in the history request](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L134)
327
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L138)
328
328
  * with Time object value
329
- * [converts the value to milliseconds since epoch in the hisotry request](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L144)
329
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L148)
330
330
  * :end
331
331
  * with milliseconds since epoch value
332
- * [uses this value in the history request](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L134)
332
+ * [uses this value in the history request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L138)
333
333
  * with Time object value
334
- * [converts the value to milliseconds since epoch in the hisotry request](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L144)
334
+ * [converts the value to milliseconds since epoch in the hisotry request](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L148)
335
335
  * decoding
336
336
  * valid decodeable content
337
337
  * #get
338
- * [automaticaly decodes presence messages](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L202)
338
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L206)
339
339
  * #history
340
- * [automaticaly decodes presence messages](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L219)
340
+ * [automaticaly decodes presence messages](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L223)
341
341
  * invalid data
342
342
  * #get
343
- * [returns the messages still encoded](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L250)
344
- * [logs a cipher error](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L254)
343
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L254)
344
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L258)
345
345
  * #history
346
- * [returns the messages still encoded](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L274)
347
- * [logs a cipher error](./lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb#L278)
346
+ * [returns the messages still encoded](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L278)
347
+ * [logs a cipher error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/presence_spec.rb#L282)
348
348
 
349
349
  ### Ably::Rest::Client#stats
350
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb))_
350
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb))_
351
351
  * using JSON and MsgPack protocol
352
352
  * fetching application stats
353
353
  * by minute
354
- * [should return all the stats for the application](./lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb#L49)
354
+ * with :from set to last interval and :limit set to 1
355
+ * [retrieves only one stat](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L50)
356
+ * [returns all aggregated message data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L54)
357
+ * [returns inbound realtime all data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L59)
358
+ * [returns inbound realtime message data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L64)
359
+ * [returns outbound realtime all data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L69)
360
+ * [returns persisted presence all data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L74)
361
+ * [returns connections all data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L79)
362
+ * [returns channels all data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L84)
363
+ * [returns api_requests data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L89)
364
+ * [returns token_requests data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L94)
365
+ * [returns stat objects with #interval_granularity equal to :minute](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L99)
366
+ * [returns stat objects with #interval_id matching :start](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L103)
367
+ * [returns stat objects with #interval_time matching :start Time](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L107)
368
+ * with :start set to first interval, :limit set to 1 and direction :forwards
369
+ * [returns the first interval stats as stats are provided forwards from :start](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L117)
370
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L121)
371
+ * with :end set to last interval, :limit set to 1 and direction :backwards
372
+ * [returns the 3rd interval stats first as stats are provided backwards from :end](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L134)
373
+ * [returns 3 pages of stats](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L138)
355
374
  * by hour
356
- * [should return all the stats for the application](./lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb#L49)
375
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L162)
357
376
  * by day
358
- * [should return all the stats for the application](./lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb#L49)
377
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L162)
359
378
  * by month
360
- * [should return all the stats for the application](./lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb#L49)
379
+ * [should aggregate the stats for that period](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/stats_spec.rb#L162)
361
380
 
362
381
  ### Ably::Rest::Client#time
363
- _(see [lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb](./lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb))_
382
+ _(see [lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/time_spec.rb))_
364
383
  * using JSON and MsgPack protocol
365
384
  * fetching the service time
366
- * [should return the service time as a Time object](./lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb#L10)
385
+ * [should return the service time as a Time object](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/acceptance/rest/time_spec.rb#L10)
367
386
 
368
387
  ### Ably::Auth
369
- _(see [lib/submodules/ably-ruby/spec/unit/auth_spec.rb](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb))_
388
+ _(see [lib/submodules/ably-ruby/spec/unit/auth_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb))_
370
389
  * client_id option
371
390
  * with nil value
372
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L19)
391
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L19)
373
392
  * as UTF_8 string
374
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L27)
375
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L31)
393
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L27)
394
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L31)
376
395
  * as SHIFT_JIS string
377
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L39)
378
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L43)
396
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L39)
397
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L43)
379
398
  * as ASCII_8BIT string
380
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L51)
381
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L55)
399
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L51)
400
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L55)
382
401
  * as Integer
383
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/auth_spec.rb#L63)
402
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/auth_spec.rb#L63)
384
403
 
385
404
  ### Ably::Logger
386
- _(see [lib/submodules/ably-ruby/spec/unit/logger_spec.rb](./lib/submodules/ably-ruby/spec/unit/logger_spec.rb))_
387
- * [uses the language provided Logger by default](./lib/submodules/ably-ruby/spec/unit/logger_spec.rb#L15)
405
+ _(see [lib/submodules/ably-ruby/spec/unit/logger_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/logger_spec.rb))_
406
+ * [uses the language provided Logger by default](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/logger_spec.rb#L15)
388
407
  * with a custom Logger
389
408
  * with an invalid interface
390
- * [raises an exception](./lib/submodules/ably-ruby/spec/unit/logger_spec.rb#L116)
409
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/logger_spec.rb#L116)
391
410
  * with a valid interface
392
- * [is used](./lib/submodules/ably-ruby/spec/unit/logger_spec.rb#L135)
411
+ * [is used](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/logger_spec.rb#L135)
393
412
 
394
413
  ### Ably::Models::ErrorInfo
395
- _(see [lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb](./lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb))_
414
+ _(see [lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/error_info_spec.rb))_
396
415
  * behaves like a model
397
416
  * attributes
398
417
  * #code
399
- * [retrieves attribute :code](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
418
+ * [retrieves attribute :code](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
400
419
  * #status_code
401
- * [retrieves attribute :status_code](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
420
+ * [retrieves attribute :status_code](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
402
421
  * #message
403
- * [retrieves attribute :message](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
422
+ * [retrieves attribute :message](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
404
423
  * #==
405
- * [is true when attributes are the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L41)
406
- * [is false when attributes are not the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L46)
407
- * [is false when class type differs](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L50)
424
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L41)
425
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L46)
426
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L50)
408
427
  * is immutable
409
- * [prevents changes](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L76)
410
- * [dups options](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L80)
428
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L76)
429
+ * [dups options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L80)
411
430
  * #status
412
- * [is an alias for #status_code](./lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb#L13)
431
+ * [is an alias for #status_code](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/error_info_spec.rb#L13)
413
432
 
414
433
  ### Ably::Models::Message
415
- _(see [lib/submodules/ably-ruby/spec/unit/models/message_spec.rb](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb))_
434
+ _(see [lib/submodules/ably-ruby/spec/unit/models/message_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb))_
416
435
  * behaves like a model
417
436
  * attributes
418
437
  * #name
419
- * [retrieves attribute :name](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
438
+ * [retrieves attribute :name](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
420
439
  * #client_id
421
- * [retrieves attribute :client_id](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
440
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
422
441
  * #data
423
- * [retrieves attribute :data](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
442
+ * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
424
443
  * #encoding
425
- * [retrieves attribute :encoding](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
444
+ * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
426
445
  * #==
427
- * [is true when attributes are the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L41)
428
- * [is false when attributes are not the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L46)
429
- * [is false when class type differs](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L50)
446
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L41)
447
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L46)
448
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L50)
430
449
  * is immutable
431
- * [prevents changes](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L76)
432
- * [dups options](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L80)
450
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L76)
451
+ * [dups options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L80)
433
452
  * #timestamp
434
- * [retrieves attribute :timestamp as Time object from ProtocolMessage](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L21)
453
+ * [retrieves attribute :timestamp as Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L21)
435
454
  * #connection_id attribute
436
455
  * when this model has a connectionId attribute
437
456
  * but no protocol message
438
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L36)
457
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L36)
439
458
  * with a protocol message with a different connectionId
440
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L44)
459
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L44)
441
460
  * when this model has no connectionId attribute
442
461
  * and no protocol message
443
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L54)
462
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L54)
444
463
  * with a protocol message with a connectionId
445
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L62)
464
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L62)
446
465
  * initialized with
447
466
  * :name
448
467
  * as UTF_8 string
449
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L89)
450
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L93)
468
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L89)
469
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L93)
451
470
  * as SHIFT_JIS string
452
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L101)
453
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L105)
471
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L101)
472
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L105)
454
473
  * as ASCII_8BIT string
455
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L113)
456
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L117)
474
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L113)
475
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L117)
457
476
  * as Integer
458
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L125)
477
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L125)
459
478
  * as Nil
460
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L133)
479
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L133)
461
480
  * :client_id
462
481
  * as UTF_8 string
463
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L89)
464
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L93)
482
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L89)
483
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L93)
465
484
  * as SHIFT_JIS string
466
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L101)
467
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L105)
485
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L101)
486
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L105)
468
487
  * as ASCII_8BIT string
469
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L113)
470
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L117)
488
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L113)
489
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L117)
471
490
  * as Integer
472
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L125)
491
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L125)
473
492
  * as Nil
474
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L133)
493
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L133)
475
494
  * :encoding
476
495
  * as UTF_8 string
477
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L89)
478
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L93)
496
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L89)
497
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L93)
479
498
  * as SHIFT_JIS string
480
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L101)
481
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L105)
499
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L101)
500
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L105)
482
501
  * as ASCII_8BIT string
483
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L113)
484
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L117)
502
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L113)
503
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L117)
485
504
  * as Integer
486
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L125)
505
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L125)
487
506
  * as Nil
488
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/message_spec.rb#L133)
507
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/message_spec.rb#L133)
489
508
 
490
509
  ### Ably::Models::PaginatedResource
491
- _(see [lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb))_
492
- * [returns correct length from body](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L30)
493
- * [supports alias methods for length](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L34)
494
- * [is Enumerable](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L39)
495
- * [is iterable](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L43)
496
- * [provides [] accessor method](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L61)
497
- * [#first gets the first item in page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L67)
498
- * [#last gets the last item in page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L71)
510
+ _(see [lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb))_
511
+ * [returns correct length from body](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L30)
512
+ * [supports alias methods for length](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L34)
513
+ * [is Enumerable](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L39)
514
+ * [is iterable](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L43)
515
+ * [provides [] accessor method](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L61)
516
+ * [#first gets the first item in page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L67)
517
+ * [#last gets the last item in page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L71)
499
518
  * #each
500
- * [returns an enumerator](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L48)
501
- * [yields each item](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L52)
519
+ * [returns an enumerator](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L48)
520
+ * [yields each item](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L52)
502
521
  * with non paged http response
503
- * [is the first page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L175)
504
- * [is the last page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L179)
505
- * [does not support pagination](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L183)
506
- * [raises an exception when accessing next page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L187)
507
- * [raises an exception when accessing first page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L191)
522
+ * [is the first page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L175)
523
+ * [is the last page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L179)
524
+ * [does not support pagination](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L183)
525
+ * [raises an exception when accessing next page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L187)
526
+ * [raises an exception when accessing first page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L191)
508
527
  * with paged http response
509
- * [is the first page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L209)
510
- * [is not the last page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L213)
511
- * [supports pagination](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L217)
528
+ * [is the first page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L209)
529
+ * [is not the last page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L213)
530
+ * [supports pagination](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L217)
512
531
  * accessing next page
513
- * [returns another PaginatedResource](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L245)
514
- * [retrieves the next page of results](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L249)
515
- * [is not the first page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L254)
516
- * [is the last page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L258)
517
- * [raises an exception if trying to access the last page when it is the last page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L262)
532
+ * [returns another PaginatedResource](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L245)
533
+ * [retrieves the next page of results](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L249)
534
+ * [is not the first page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L254)
535
+ * [is the last page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L258)
536
+ * [raises an exception if trying to access the last page when it is the last page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L262)
518
537
  * and then first page
519
- * [returns a PaginatedResource](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L273)
520
- * [retrieves the first page of results](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L277)
521
- * [is the first page](./lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb#L281)
538
+ * [returns a PaginatedResource](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L273)
539
+ * [retrieves the first page of results](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L277)
540
+ * [is the first page](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/paginated_resource_spec.rb#L281)
522
541
 
523
542
  ### Ably::Models::PresenceMessage
524
- _(see [lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb))_
543
+ _(see [lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb))_
525
544
  * behaves like a model
526
545
  * attributes
527
546
  * #client_id
528
- * [retrieves attribute :client_id](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
547
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
529
548
  * #data
530
- * [retrieves attribute :data](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
549
+ * [retrieves attribute :data](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
531
550
  * #encoding
532
- * [retrieves attribute :encoding](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
551
+ * [retrieves attribute :encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
533
552
  * #==
534
- * [is true when attributes are the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L41)
535
- * [is false when attributes are not the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L46)
536
- * [is false when class type differs](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L50)
553
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L41)
554
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L46)
555
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L50)
537
556
  * is immutable
538
- * [prevents changes](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L76)
539
- * [dups options](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L80)
557
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L76)
558
+ * [dups options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L80)
540
559
  * #connection_id attribute
541
560
  * when this model has a connectionId attribute
542
561
  * but no protocol message
543
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L25)
562
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L25)
544
563
  * with a protocol message with a different connectionId
545
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L33)
564
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L33)
546
565
  * when this model has no connectionId attribute
547
566
  * and no protocol message
548
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L43)
567
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L43)
549
568
  * with a protocol message with a connectionId
550
- * [uses the model value](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L51)
569
+ * [uses the model value](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L51)
551
570
  * #member_key attribute
552
- * [is string in format connection_id:client_id](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L61)
571
+ * [is string in format connection_id:client_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L61)
553
572
  * with the same client id across multiple connections
554
- * [is unique](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L69)
573
+ * [is unique](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L69)
555
574
  * with a single connection and different client_ids
556
- * [is unique](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L78)
575
+ * [is unique](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L78)
557
576
  * #timestamp
558
- * [retrieves attribute :timestamp as a Time object from ProtocolMessage](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L86)
577
+ * [retrieves attribute :timestamp as a Time object from ProtocolMessage](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L86)
559
578
  * initialized with
560
579
  * :client_id
561
580
  * as UTF_8 string
562
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L138)
563
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L142)
581
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L138)
582
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L142)
564
583
  * as SHIFT_JIS string
565
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L150)
566
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L154)
584
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L150)
585
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L154)
567
586
  * as ASCII_8BIT string
568
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L162)
569
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L166)
587
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L162)
588
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L166)
570
589
  * as Integer
571
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L174)
590
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L174)
572
591
  * as Nil
573
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L182)
592
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L182)
574
593
  * :connection_id
575
594
  * as UTF_8 string
576
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L138)
577
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L142)
595
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L138)
596
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L142)
578
597
  * as SHIFT_JIS string
579
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L150)
580
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L154)
598
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L150)
599
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L154)
581
600
  * as ASCII_8BIT string
582
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L162)
583
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L166)
601
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L162)
602
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L166)
584
603
  * as Integer
585
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L174)
604
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L174)
586
605
  * as Nil
587
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L182)
606
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L182)
588
607
  * :encoding
589
608
  * as UTF_8 string
590
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L138)
591
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L142)
609
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L138)
610
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L142)
592
611
  * as SHIFT_JIS string
593
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L150)
594
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L154)
612
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L150)
613
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L154)
595
614
  * as ASCII_8BIT string
596
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L162)
597
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L166)
615
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L162)
616
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L166)
598
617
  * as Integer
599
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L174)
618
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L174)
600
619
  * as Nil
601
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb#L182)
620
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/presence_message_spec.rb#L182)
602
621
 
603
622
  ### Ably::Models::ProtocolMessage
604
- _(see [lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb))_
623
+ _(see [lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb))_
605
624
  * behaves like a model
606
625
  * attributes
607
626
  * #id
608
- * [retrieves attribute :id](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
627
+ * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
609
628
  * #channel
610
- * [retrieves attribute :channel](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
629
+ * [retrieves attribute :channel](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
611
630
  * #channel_serial
612
- * [retrieves attribute :channel_serial](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
631
+ * [retrieves attribute :channel_serial](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
613
632
  * #connection_id
614
- * [retrieves attribute :connection_id](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
633
+ * [retrieves attribute :connection_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
615
634
  * #==
616
- * [is true when attributes are the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L41)
617
- * [is false when attributes are not the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L46)
618
- * [is false when class type differs](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L50)
635
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L41)
636
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L46)
637
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L50)
619
638
  * is immutable
620
- * [prevents changes](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L76)
621
- * [dups options](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L80)
639
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L76)
640
+ * [dups options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L80)
622
641
  * attributes
623
642
  * #timestamp
624
- * [retrieves attribute :timestamp as Time object](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L74)
643
+ * [retrieves attribute :timestamp as Time object](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L74)
625
644
  * #count
626
645
  * when missing
627
- * [is 1](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L83)
646
+ * [is 1](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L83)
628
647
  * when non numeric
629
- * [is 1](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L90)
648
+ * [is 1](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L90)
630
649
  * when greater than 1
631
- * [is the value of count](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L97)
650
+ * [is the value of count](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L97)
632
651
  * #message_serial
633
- * [converts :msg_serial to an Integer](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L105)
652
+ * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L105)
634
653
  * #has_message_serial?
635
654
  * without msg_serial
636
- * [returns false](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L115)
655
+ * [returns false](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L115)
637
656
  * with msg_serial
638
- * [returns true](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L123)
657
+ * [returns true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L123)
639
658
  * #connection_serial
640
- * [converts :connection_serial to an Integer](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L131)
659
+ * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L131)
641
660
  * #flags
642
661
  * when nil
643
- * [is zero](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L141)
662
+ * [is zero](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L141)
644
663
  * when numeric
645
- * [is an Integer](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L149)
664
+ * [is an Integer](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L149)
646
665
  * when has_presence
647
- * [#has_presence_flag? is true](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L157)
666
+ * [#has_presence_flag? is true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L157)
648
667
  * when has another future flag
649
- * [#has_presence_flag? is false](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L165)
668
+ * [#has_presence_flag? is false](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L165)
650
669
  * #has_connection_serial?
651
670
  * without connection_serial
652
- * [returns false](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L175)
671
+ * [returns false](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L175)
653
672
  * with connection_serial
654
- * [returns true](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L183)
673
+ * [returns true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L183)
655
674
  * #serial
656
675
  * with underlying msg_serial
657
- * [converts :msg_serial to an Integer](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L192)
676
+ * [converts :msg_serial to an Integer](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L192)
658
677
  * with underlying connection_serial
659
- * [converts :connection_serial to an Integer](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L200)
678
+ * [converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L200)
660
679
  * with underlying connection_serial and msg_serial
661
- * [prefers connection_serial and converts :connection_serial to an Integer](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L208)
680
+ * [prefers connection_serial and converts :connection_serial to an Integer](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L208)
662
681
  * #has_serial?
663
682
  * without msg_serial or connection_serial
664
- * [returns false](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L219)
683
+ * [returns false](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L219)
665
684
  * with msg_serial
666
- * [returns true](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L227)
685
+ * [returns true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L227)
667
686
  * with connection_serial
668
- * [returns true](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L235)
687
+ * [returns true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L235)
669
688
  * #error
670
689
  * with no error attribute
671
- * [returns nil](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L245)
690
+ * [returns nil](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L245)
672
691
  * with nil error
673
- * [returns nil](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L253)
692
+ * [returns nil](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L253)
674
693
  * with error
675
- * [returns a valid ErrorInfo object](./lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb#L261)
694
+ * [returns a valid ErrorInfo object](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/protocol_message_spec.rb#L261)
695
+
696
+ ### Ably::Models::Stat
697
+ _(see [lib/submodules/ably-ruby/spec/unit/models/stat_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb))_
698
+ * behaves like a model
699
+ * attributes
700
+ * #interval_id
701
+ * [retrieves attribute :interval_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
702
+ * #all
703
+ * [retrieves attribute :all](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
704
+ * #inbound
705
+ * [retrieves attribute :inbound](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
706
+ * #outbound
707
+ * [retrieves attribute :outbound](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
708
+ * #persisted
709
+ * [retrieves attribute :persisted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
710
+ * #connections
711
+ * [retrieves attribute :connections](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
712
+ * #channels
713
+ * [retrieves attribute :channels](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
714
+ * #api_requests
715
+ * [retrieves attribute :api_requests](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
716
+ * #token_requests
717
+ * [retrieves attribute :token_requests](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
718
+ * #==
719
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L41)
720
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L46)
721
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L50)
722
+ * is immutable
723
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L76)
724
+ * [dups options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L80)
725
+ * #interval_granularity
726
+ * [returns the granularity of the interval_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L17)
727
+ * #interval_time
728
+ * [returns a Time object representing the start of the interval](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L25)
729
+ * class methods
730
+ * #to_interval_id
731
+ * when time zone of time argument is UTC
732
+ * [converts time 2014-02-03:05:06 with granularity :month into 2014-02](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L33)
733
+ * [converts time 2014-02-03:05:06 with granularity :day into 2014-02-03](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L37)
734
+ * [converts time 2014-02-03:05:06 with granularity :hour into 2014-02-03:05](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L41)
735
+ * [converts time 2014-02-03:05:06 with granularity :minute into 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L45)
736
+ * [fails with invalid granularity](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L49)
737
+ * [fails with invalid time](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L53)
738
+ * when time zone of time argument is +02:00
739
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L59)
740
+ * #from_interval_id
741
+ * [converts a month interval_id 2014-02 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L66)
742
+ * [converts a day interval_id 2014-02-03 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L71)
743
+ * [converts an hour interval_id 2014-02-03:05 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L76)
744
+ * [converts a minute interval_id 2014-02-03:05:06 into a Time object in UTC 0](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L81)
745
+ * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L86)
746
+ * #granularity_from_interval_id
747
+ * [returns a :month interval_id for 2014-02](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L92)
748
+ * [returns a :day interval_id for 2014-02-03](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L96)
749
+ * [returns a :hour interval_id for 2014-02-03:05](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L100)
750
+ * [returns a :minute interval_id for 2014-02-03:05:06](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L104)
751
+ * [fails with an invalid interval_id 14-20](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/stat_spec.rb#L108)
676
752
 
677
753
  ### Ably::Models::Token
678
- _(see [lib/submodules/ably-ruby/spec/unit/models/token_spec.rb](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb))_
754
+ _(see [lib/submodules/ably-ruby/spec/unit/models/token_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb))_
679
755
  * behaves like a model
680
756
  * attributes
681
757
  * #id
682
- * [retrieves attribute :id](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
758
+ * [retrieves attribute :id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
683
759
  * #capability
684
- * [retrieves attribute :capability](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
760
+ * [retrieves attribute :capability](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
685
761
  * #client_id
686
- * [retrieves attribute :client_id](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
762
+ * [retrieves attribute :client_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
687
763
  * #nonce
688
- * [retrieves attribute :nonce](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L15)
764
+ * [retrieves attribute :nonce](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L15)
689
765
  * #==
690
- * [is true when attributes are the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L41)
691
- * [is false when attributes are not the same](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L46)
692
- * [is false when class type differs](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L50)
766
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L41)
767
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L46)
768
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L50)
693
769
  * is immutable
694
- * [prevents changes](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L76)
695
- * [dups options](./lib/submodules/ably-ruby/spec/shared/model_behaviour.rb#L80)
770
+ * [prevents changes](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L76)
771
+ * [dups options](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/model_behaviour.rb#L80)
696
772
  * defaults
697
- * [should default TTL to 1 hour](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L14)
698
- * [should default capability to all](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L18)
699
- * [should only have defaults for :ttl and :capability](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L22)
773
+ * [should default TTL to 1 hour](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L14)
774
+ * [should default capability to all](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L18)
775
+ * [should only have defaults for :ttl and :capability](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L22)
700
776
  * attributes
701
777
  * #key_id
702
- * [retrieves attribute :key](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L32)
778
+ * [retrieves attribute :key](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L32)
703
779
  * #issued_at
704
- * [retrieves attribute :issued_at as Time](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L42)
780
+ * [retrieves attribute :issued_at as Time](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L42)
705
781
  * #expires_at
706
- * [retrieves attribute :expires as Time](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L42)
782
+ * [retrieves attribute :expires as Time](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L42)
707
783
  * #expired?
708
784
  * once grace period buffer has passed
709
- * [is true](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L55)
785
+ * [is true](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L55)
710
786
  * within grace period buffer
711
- * [is false](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L63)
787
+ * [is false](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L63)
712
788
  * ==
713
- * [is true when attributes are the same](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L73)
714
- * [is false when attributes are not the same](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L78)
715
- * [is false when class type differs](./lib/submodules/ably-ruby/spec/unit/models/token_spec.rb#L82)
789
+ * [is true when attributes are the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L73)
790
+ * [is false when attributes are not the same](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L78)
791
+ * [is false when class type differs](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/models/token_spec.rb#L82)
716
792
 
717
793
  ### Ably::Rest::Channels
718
- _(see [lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb))_
794
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb))_
719
795
  * #initializer
720
796
  * as UTF_8 string
721
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L16)
722
- * [remains as UTF-8](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L20)
797
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L16)
798
+ * [remains as UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L20)
723
799
  * as SHIFT_JIS string
724
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L28)
725
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L32)
800
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L28)
801
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L32)
726
802
  * as ASCII_8BIT string
727
- * [gets converted to UTF-8](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L40)
728
- * [is compatible with original encoding](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L44)
803
+ * [gets converted to UTF-8](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L40)
804
+ * [is compatible with original encoding](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L44)
729
805
  * as Integer
730
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L52)
806
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L52)
731
807
  * as Nil
732
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L60)
808
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L60)
733
809
  * #publish name argument
734
810
  * as UTF_8 string
735
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L72)
811
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L72)
736
812
  * as SHIFT_JIS string
737
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L80)
813
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L80)
738
814
  * as ASCII_8BIT string
739
- * [is permitted](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L88)
815
+ * [is permitted](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L88)
740
816
  * as Integer
741
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L96)
817
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L96)
742
818
  * as Nil
743
- * [raises an argument error](./lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb#L104)
819
+ * [raises an argument error](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channel_spec.rb#L104)
744
820
 
745
821
  ### Ably::Rest::Channels
746
- _(see [lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb))_
822
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb))_
747
823
  * creating channels
748
- * [#get creates a channel](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L12)
749
- * [#get will reuse the channel object](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L17)
750
- * [[] creates a channel](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L23)
824
+ * [#get creates a channel](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L12)
825
+ * [#get will reuse the channel object](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L17)
826
+ * [[] creates a channel](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L23)
751
827
  * #fetch
752
- * [retrieves a channel if it exists](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L30)
753
- * [calls the block if channel is missing](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L35)
828
+ * [retrieves a channel if it exists](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L30)
829
+ * [calls the block if channel is missing](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L35)
754
830
  * destroying channels
755
- * [#release releases the channel resoures](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L43)
831
+ * [#release releases the channel resoures](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L43)
756
832
  * is Enumerable
757
- * [allows enumeration](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L59)
758
- * [provides #length](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L75)
833
+ * [allows enumeration](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L59)
834
+ * [provides #length](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L75)
759
835
  * #each
760
- * [returns an enumerator](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L64)
761
- * [yields each channel](./lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb#L68)
836
+ * [returns an enumerator](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L64)
837
+ * [yields each channel](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/channels_spec.rb#L68)
762
838
 
763
839
  ### Ably::Rest::Client
764
- _(see [lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb](./lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb))_
840
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/client_spec.rb))_
765
841
  * behaves like a client initializer
766
842
  * with invalid arguments
767
843
  * empty hash
768
- * [raises an exception](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L28)
844
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L28)
769
845
  * nil
770
- * [raises an exception](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L36)
846
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L36)
771
847
  * api_key: "invalid"
772
- * [raises an exception](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L44)
848
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L44)
773
849
  * api_key: "invalid:asdad"
774
- * [raises an exception](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L52)
850
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L52)
775
851
  * api_key and key_id
776
- * [raises an exception](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L60)
852
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L60)
777
853
  * api_key and key_secret
778
- * [raises an exception](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L68)
854
+ * [raises an exception](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L68)
779
855
  * client_id as only option
780
- * [requires a valid key](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L76)
856
+ * [requires a valid key](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L76)
781
857
  * with valid arguments
782
858
  * api_key only
783
- * [connects to the Ably service](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L87)
859
+ * [connects to the Ably service](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L87)
784
860
  * key_id and key_secret
785
- * [constructs an api_key](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L95)
861
+ * [constructs an api_key](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L95)
786
862
  * with a string key instead of options hash
787
- * [sets the api_key](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L103)
788
- * [sets the key_id](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L107)
789
- * [sets the key_secret](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L111)
863
+ * [sets the api_key](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L103)
864
+ * [sets the key_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L107)
865
+ * [sets the key_secret](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L111)
790
866
  * with token
791
- * [sets the token_id](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L119)
867
+ * [sets the token_id](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L119)
792
868
  * endpoint
793
- * [defaults to production](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L125)
869
+ * [defaults to production](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L125)
794
870
  * with environment option
795
- * [uses an alternate endpoint](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L132)
871
+ * [uses an alternate endpoint](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L132)
796
872
  * tls
797
- * [defaults to TLS](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L151)
873
+ * [defaults to TLS](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L151)
798
874
  * set to false
799
- * [uses plain text](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L142)
800
- * [uses HTTP](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L146)
875
+ * [uses plain text](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L142)
876
+ * [uses HTTP](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L146)
801
877
  * logger
802
878
  * default
803
- * [uses Ruby Logger](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L158)
804
- * [specifies Logger::ERROR log level](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L162)
879
+ * [uses Ruby Logger](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L158)
880
+ * [specifies Logger::ERROR log level](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L162)
805
881
  * with log_level :none
806
- * [silences all logging with a NilLogger](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L170)
882
+ * [silences all logging with a NilLogger](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L170)
807
883
  * with custom logger and log_level
808
- * [uses the custom logger](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L188)
809
- * [sets the custom log level](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L192)
884
+ * [uses the custom logger](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L188)
885
+ * [sets the custom log level](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L192)
810
886
  * delegators
811
- * [delegates :client_id to .auth](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L202)
812
- * [delegates :auth_options to .auth](./lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb#L207)
887
+ * [delegates :client_id to .auth](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L202)
888
+ * [delegates :auth_options to .auth](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/shared/client_initializer_behaviour.rb#L207)
813
889
  * initializer options
814
890
  * TLS
815
891
  * disabled
816
- * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection](./lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb#L17)
892
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/client_spec.rb#L17)
817
893
  * :use_token_auth
818
894
  * set to false
819
895
  * with an api_key with :tls => false
820
- * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection](./lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb#L28)
896
+ * [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/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/client_spec.rb#L28)
821
897
  * without an api_key
822
- * [fails as an api_key is required if not using token auth](./lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb#L36)
898
+ * [fails as an api_key is required if not using token auth](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/client_spec.rb#L36)
823
899
  * set to true
824
900
  * without an api_key or token_id
825
- * [fails as an api_key is required to issue tokens](./lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb#L46)
901
+ * [fails as an api_key is required to issue tokens](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/client_spec.rb#L46)
826
902
 
827
903
  ### Ably::Rest
828
- _(see [lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb](./lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb))_
829
- * [constructor returns an Ably::Rest::Client](./lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb#L7)
904
+ _(see [lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/rest_spec.rb))_
905
+ * [constructor returns an Ably::Rest::Client](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/rest/rest_spec.rb#L7)
830
906
 
831
907
  ### Ably::Util::Crypto
832
- _(see [lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb))_
908
+ _(see [lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb))_
833
909
  * defaults
834
- * [match other client libraries](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L18)
910
+ * [match other client libraries](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L18)
835
911
  * encrypts & decrypt
836
- * [#encrypt encrypts a string](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L28)
837
- * [#decrypt decrypts a string](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L33)
912
+ * [#encrypt encrypts a string](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L28)
913
+ * [#decrypt decrypts a string](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L33)
838
914
  * encrypting an empty string
839
- * [raises an ArgumentError](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L42)
915
+ * [raises an ArgumentError](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L42)
840
916
  * using shared client lib fixture data
841
917
  * with AES-128-CBC
842
918
  * behaves like an Ably encrypter and decrypter
843
919
  * text payload
844
- * [encrypts exactly the same binary data as other client libraries](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L65)
845
- * [decrypts exactly the same binary data as other client libraries](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L69)
920
+ * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L65)
921
+ * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L69)
846
922
  * with AES-256-CBC
847
923
  * behaves like an Ably encrypter and decrypter
848
924
  * text payload
849
- * [encrypts exactly the same binary data as other client libraries](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L65)
850
- * [decrypts exactly the same binary data as other client libraries](./lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb#L69)
925
+ * [encrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L65)
926
+ * [decrypts exactly the same binary data as other client libraries](https://github.com/ably/ably-ruby/tree/ffa3b80642e515c63d5f2ced07c2ae3df2c4fd05/spec/unit/util/crypto_spec.rb#L69)
851
927
 
852
928
  -------
853
929
 
854
930
  ## Test summary
855
931
 
856
- * Passing tests: 394
932
+ * Passing tests: 442
857
933
  * Pending tests: 0
858
- * Failing tests: 0
934
+ * Failing tests: 1