ably-rest 0.7.1 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
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