ably 0.8.15 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.travis.yml +6 -4
 - data/CHANGELOG.md +6 -2
 - data/README.md +5 -1
 - data/SPEC.md +1473 -852
 - data/ably.gemspec +11 -8
 - data/lib/ably/auth.rb +90 -53
 - data/lib/ably/exceptions.rb +37 -8
 - data/lib/ably/logger.rb +10 -1
 - data/lib/ably/models/auth_details.rb +42 -0
 - data/lib/ably/models/channel_state_change.rb +18 -4
 - data/lib/ably/models/connection_details.rb +6 -3
 - data/lib/ably/models/connection_state_change.rb +4 -3
 - data/lib/ably/models/error_info.rb +1 -1
 - data/lib/ably/models/message.rb +17 -1
 - data/lib/ably/models/message_encoders/base.rb +103 -82
 - data/lib/ably/models/message_encoders/base64.rb +1 -1
 - data/lib/ably/models/presence_message.rb +16 -1
 - data/lib/ably/models/protocol_message.rb +20 -3
 - data/lib/ably/models/token_details.rb +11 -1
 - data/lib/ably/models/token_request.rb +16 -6
 - data/lib/ably/modules/async_wrapper.rb +7 -3
 - data/lib/ably/modules/encodeable.rb +51 -12
 - data/lib/ably/modules/enum.rb +17 -7
 - data/lib/ably/modules/event_emitter.rb +29 -14
 - data/lib/ably/modules/model_common.rb +13 -21
 - data/lib/ably/modules/state_emitter.rb +7 -4
 - data/lib/ably/modules/state_machine.rb +2 -4
 - data/lib/ably/modules/uses_state_machine.rb +7 -3
 - data/lib/ably/realtime.rb +2 -0
 - data/lib/ably/realtime/auth.rb +102 -42
 - data/lib/ably/realtime/channel.rb +68 -26
 - data/lib/ably/realtime/channel/channel_manager.rb +154 -65
 - data/lib/ably/realtime/channel/channel_state_machine.rb +14 -15
 - data/lib/ably/realtime/client.rb +18 -3
 - data/lib/ably/realtime/client/incoming_message_dispatcher.rb +38 -29
 - data/lib/ably/realtime/client/outgoing_message_dispatcher.rb +6 -1
 - data/lib/ably/realtime/connection.rb +108 -49
 - data/lib/ably/realtime/connection/connection_manager.rb +167 -61
 - data/lib/ably/realtime/connection/connection_state_machine.rb +22 -3
 - data/lib/ably/realtime/connection/websocket_transport.rb +19 -10
 - data/lib/ably/realtime/presence.rb +70 -45
 - data/lib/ably/realtime/presence/members_map.rb +201 -36
 - data/lib/ably/realtime/presence/presence_manager.rb +30 -6
 - data/lib/ably/realtime/presence/presence_state_machine.rb +5 -12
 - data/lib/ably/rest.rb +2 -2
 - data/lib/ably/rest/channel.rb +5 -5
 - data/lib/ably/rest/client.rb +31 -27
 - data/lib/ably/rest/middleware/exceptions.rb +1 -3
 - data/lib/ably/rest/middleware/logger.rb +2 -2
 - data/lib/ably/rest/presence.rb +2 -2
 - data/lib/ably/util/pub_sub.rb +1 -1
 - data/lib/ably/util/safe_deferrable.rb +26 -0
 - data/lib/ably/version.rb +2 -2
 - data/spec/acceptance/realtime/auth_spec.rb +470 -111
 - data/spec/acceptance/realtime/channel_history_spec.rb +5 -3
 - data/spec/acceptance/realtime/channel_spec.rb +1017 -168
 - data/spec/acceptance/realtime/client_spec.rb +6 -6
 - data/spec/acceptance/realtime/connection_failures_spec.rb +458 -27
 - data/spec/acceptance/realtime/connection_spec.rb +424 -105
 - data/spec/acceptance/realtime/message_spec.rb +52 -23
 - data/spec/acceptance/realtime/presence_history_spec.rb +5 -3
 - data/spec/acceptance/realtime/presence_spec.rb +1110 -96
 - data/spec/acceptance/rest/auth_spec.rb +222 -59
 - data/spec/acceptance/rest/base_spec.rb +1 -1
 - data/spec/acceptance/rest/channel_spec.rb +1 -2
 - data/spec/acceptance/rest/client_spec.rb +104 -48
 - data/spec/acceptance/rest/message_spec.rb +42 -15
 - data/spec/acceptance/rest/presence_spec.rb +4 -11
 - data/spec/rspec_config.rb +2 -1
 - data/spec/shared/client_initializer_behaviour.rb +2 -2
 - data/spec/shared/safe_deferrable_behaviour.rb +6 -2
 - data/spec/spec_helper.rb +4 -2
 - data/spec/support/debug_failure_helper.rb +20 -4
 - data/spec/support/event_machine_helper.rb +32 -1
 - data/spec/unit/auth_spec.rb +4 -11
 - data/spec/unit/logger_spec.rb +28 -2
 - data/spec/unit/models/auth_details_spec.rb +49 -0
 - data/spec/unit/models/channel_state_change_spec.rb +23 -3
 - data/spec/unit/models/connection_details_spec.rb +12 -1
 - data/spec/unit/models/connection_state_change_spec.rb +15 -4
 - data/spec/unit/models/message_encoders/base64_spec.rb +2 -1
 - data/spec/unit/models/message_spec.rb +153 -0
 - data/spec/unit/models/presence_message_spec.rb +192 -0
 - data/spec/unit/models/protocol_message_spec.rb +64 -6
 - data/spec/unit/models/token_details_spec.rb +75 -0
 - data/spec/unit/models/token_request_spec.rb +74 -0
 - data/spec/unit/modules/async_wrapper_spec.rb +2 -1
 - data/spec/unit/modules/enum_spec.rb +69 -0
 - data/spec/unit/modules/event_emitter_spec.rb +149 -22
 - data/spec/unit/modules/state_emitter_spec.rb +9 -3
 - data/spec/unit/realtime/client_spec.rb +1 -1
 - data/spec/unit/realtime/connection_spec.rb +8 -5
 - data/spec/unit/realtime/incoming_message_dispatcher_spec.rb +1 -1
 - data/spec/unit/realtime/presence_spec.rb +4 -3
 - data/spec/unit/rest/client_spec.rb +1 -1
 - data/spec/unit/util/crypto_spec.rb +3 -3
 - metadata +22 -19
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6ef659416f63ce4d28201ec7fdcfdabc9d844bf5
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: dab7fd81e1e304e76e375a7ddd5cf5c8fb551746
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1a79248640d75e91cf1c6ac02f396643926df8f32722747103ed45e979e7afa68485d3a47ef7f02d36a09e50fd409d4f073ab92080278156d63a681f81c21082
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 287cb8f210c1e21a26ec14164ef2d88b072333d431a6ef3f9b9c354661b5185e55deb85fd8b4df97ca7b175264551de9f6b2a02c8f5c58712ea4da6cdf0a5528
         
     | 
    
        data/.travis.yml
    CHANGED
    
    | 
         @@ -1,10 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            sudo: false
         
     | 
| 
       2 
     | 
    
         
            -
            env: 
     | 
| 
      
 2 
     | 
    
         
            +
            env:
         
     | 
| 
      
 3 
     | 
    
         
            +
              - RSPEC_RETRY=true PROTOCOL=json
         
     | 
| 
      
 4 
     | 
    
         
            +
              - RSPEC_RETRY=true PROTOCOL=msgpack
         
     | 
| 
       3 
5 
     | 
    
         
             
            language: ruby
         
     | 
| 
       4 
6 
     | 
    
         
             
            rvm:
         
     | 
| 
       5 
     | 
    
         
            -
            - 1.9.3
         
     | 
| 
       6 
     | 
    
         
            -
            - 2.0.0
         
     | 
| 
       7 
     | 
    
         
            -
            - 2.2.0
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 1.9.3
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 2.0.0
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 2.2.0
         
     | 
| 
       8 
10 
     | 
    
         
             
            script: bundle exec rspec
         
     | 
| 
       9 
11 
     | 
    
         
             
            notifications:
         
     | 
| 
       10 
12 
     | 
    
         
             
              slack:
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,8 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Change Log
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            ## [ 
     | 
| 
      
 3 
     | 
    
         
            +
            ## [v1.0.0](https://github.com/ably/ably-ruby/tree/v1.0.0) (2017-03-07)
         
     | 
| 
      
 4 
     | 
    
         
            +
            [Full Changelog](https://github.com/ably/ably-ruby/compare/v0.8.14...v1.0.0)
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            ### v1.0 release and upgrade notes from v0.8
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            - See https://github.com/ably/docs/issues/235
         
     | 
| 
       6 
9 
     | 
    
         | 
| 
       7 
10 
     | 
    
         
             
            **Implemented enhancements:**
         
     | 
| 
       8 
11 
     | 
    
         | 
| 
         @@ -44,6 +47,7 @@ 
     | 
|
| 
       44 
47 
     | 
    
         | 
| 
       45 
48 
     | 
    
         
             
            **Merged pull requests:**
         
     | 
| 
       46 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
            - 1.0 release [\#111](https://github.com/ably/ably-ruby/pull/111) ([mattheworiordan](https://github.com/mattheworiordan))
         
     | 
| 
       47 
51 
     | 
    
         
             
            - From encoded [\#101](https://github.com/ably/ably-ruby/pull/101) ([mattheworiordan](https://github.com/mattheworiordan))
         
     | 
| 
       48 
52 
     | 
    
         | 
| 
       49 
53 
     | 
    
         
             
            ## [v0.8.14](https://github.com/ably/ably-ruby/tree/v0.8.14) (2016-09-30)
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -24,7 +24,7 @@ And then install this Bundler dependency: 
     | 
|
| 
       24 
24 
     | 
    
         
             
            Or install it yourself as:
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                $ gem install ably
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
       28 
28 
     | 
    
         
             
            ### Using with Rails or Sinatra
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
            This `ably` gem provides both a [Realtime](http://www.ably.io/documentation/realtime/usage) and [REST](http://www.ably.io/documentation/rest/usage) version of the Ably library. Realtime depends on EventMachine to provide an asynchronous evented framework to run the library in, whereas the REST library depends only on synchronous libraries such as Faraday.
         
     | 
| 
         @@ -281,6 +281,10 @@ client.time #=> 2013-12-12 14:23:34 +0000 
     | 
|
| 
       281 
281 
     | 
    
         | 
| 
       282 
282 
     | 
    
         
             
            If you only need to use the REST features of this library and do not want EventMachine as a dependency, then you should consider using the [Ably Ruby REST gem](https://rubygems.org/gems/ably-rest).
         
     | 
| 
       283 
283 
     | 
    
         | 
| 
      
 284 
     | 
    
         
            +
            ## Upgrading from an older version
         
     | 
| 
      
 285 
     | 
    
         
            +
             
     | 
| 
      
 286 
     | 
    
         
            +
            - [Release and upgrade notes for v0.8 -> v1.0](https://github.com/ably/docs/issues/235)
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
       284 
288 
     | 
    
         
             
            ## Support, feedback and troubleshooting
         
     | 
| 
       285 
289 
     | 
    
         | 
| 
       286 
290 
     | 
    
         
             
            Please visit http://support.ably.io/ for access to our knowledgebase and to ask for any assistance.
         
     | 
    
        data/SPEC.md
    CHANGED
    
    | 
         @@ -1,107 +1,148 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Ably Realtime & REST Client Library 0. 
     | 
| 
      
 1 
     | 
    
         
            +
            # Ably Realtime & REST Client Library 0.9.0-pre.1 Specification
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ### Ably::Realtime::Auth
         
     | 
| 
       4 
4 
     | 
    
         
             
            _(see [spec/acceptance/realtime/auth_spec.rb](./spec/acceptance/realtime/auth_spec.rb))_
         
     | 
| 
       5 
5 
     | 
    
         
             
              * using JSON protocol
         
     | 
| 
       6 
6 
     | 
    
         
             
                * with basic auth
         
     | 
| 
       7 
7 
     | 
    
         
             
                  * #authentication_security_requirements_met?
         
     | 
| 
       8 
     | 
    
         
            -
                    * [returns true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 8 
     | 
    
         
            +
                    * [returns true](./spec/acceptance/realtime/auth_spec.rb#L28)
         
     | 
| 
       9 
9 
     | 
    
         
             
                  * #key
         
     | 
| 
       10 
     | 
    
         
            -
                    * [contains the API key](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 10 
     | 
    
         
            +
                    * [contains the API key](./spec/acceptance/realtime/auth_spec.rb#L35)
         
     | 
| 
       11 
11 
     | 
    
         
             
                  * #key_name
         
     | 
| 
       12 
     | 
    
         
            -
                    * [contains the API key name](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 12 
     | 
    
         
            +
                    * [contains the API key name](./spec/acceptance/realtime/auth_spec.rb#L42)
         
     | 
| 
       13 
13 
     | 
    
         
             
                  * #key_secret
         
     | 
| 
       14 
     | 
    
         
            -
                    * [contains the API key secret](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 14 
     | 
    
         
            +
                    * [contains the API key secret](./spec/acceptance/realtime/auth_spec.rb#L49)
         
     | 
| 
       15 
15 
     | 
    
         
             
                  * #using_basic_auth?
         
     | 
| 
       16 
     | 
    
         
            -
                    * [is true when using Basic Auth](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 16 
     | 
    
         
            +
                    * [is true when using Basic Auth](./spec/acceptance/realtime/auth_spec.rb#L56)
         
     | 
| 
       17 
17 
     | 
    
         
             
                  * #using_token_auth?
         
     | 
| 
       18 
     | 
    
         
            -
                    * [is false when using Basic Auth](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 18 
     | 
    
         
            +
                    * [is false when using Basic Auth](./spec/acceptance/realtime/auth_spec.rb#L63)
         
     | 
| 
       19 
19 
     | 
    
         
             
                * with token auth
         
     | 
| 
       20 
20 
     | 
    
         
             
                  * #client_id
         
     | 
| 
       21 
     | 
    
         
            -
                    * [contains the ClientOptions client ID](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 21 
     | 
    
         
            +
                    * [contains the ClientOptions client ID](./spec/acceptance/realtime/auth_spec.rb#L75)
         
     | 
| 
       22 
22 
     | 
    
         
             
                  * #current_token_details
         
     | 
| 
       23 
     | 
    
         
            -
                    * [contains the current token after auth](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 23 
     | 
    
         
            +
                    * [contains the current token after auth](./spec/acceptance/realtime/auth_spec.rb#L82)
         
     | 
| 
       24 
24 
     | 
    
         
             
                  * #token_renewable?
         
     | 
| 
       25 
     | 
    
         
            -
                    * [is true when an API key exists](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 25 
     | 
    
         
            +
                    * [is true when an API key exists](./spec/acceptance/realtime/auth_spec.rb#L92)
         
     | 
| 
       26 
26 
     | 
    
         
             
                  * #options (auth_options)
         
     | 
| 
       27 
     | 
    
         
            -
                    * [contains the configured auth options](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 27 
     | 
    
         
            +
                    * [contains the configured auth options](./spec/acceptance/realtime/auth_spec.rb#L104)
         
     | 
| 
       28 
28 
     | 
    
         
             
                  * #token_params
         
     | 
| 
       29 
     | 
    
         
            -
                    * [contains the configured auth options](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 29 
     | 
    
         
            +
                    * [contains the configured auth options](./spec/acceptance/realtime/auth_spec.rb#L115)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  * #using_basic_auth?
         
     | 
| 
       31 
     | 
    
         
            -
                    * [is false when using Token Auth](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 31 
     | 
    
         
            +
                    * [is false when using Token Auth](./spec/acceptance/realtime/auth_spec.rb#L124)
         
     | 
| 
       32 
32 
     | 
    
         
             
                  * #using_token_auth?
         
     | 
| 
       33 
     | 
    
         
            -
                    * [is true when using Token Auth](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
       34 
     | 
    
         
            -
                * 
         
     | 
| 
      
 33 
     | 
    
         
            +
                    * [is true when using Token Auth](./spec/acceptance/realtime/auth_spec.rb#L133)
         
     | 
| 
      
 34 
     | 
    
         
            +
                * methods
         
     | 
| 
       35 
35 
     | 
    
         
             
                  * #create_token_request
         
     | 
| 
       36 
     | 
    
         
            -
                    * [returns a token request asynchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 36 
     | 
    
         
            +
                    * [returns a token request asynchronously](./spec/acceptance/realtime/auth_spec.rb#L147)
         
     | 
| 
       37 
37 
     | 
    
         
             
                  * #create_token_request_async
         
     | 
| 
       38 
     | 
    
         
            -
                    * [returns a token request synchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 38 
     | 
    
         
            +
                    * [returns a token request synchronously](./spec/acceptance/realtime/auth_spec.rb#L157)
         
     | 
| 
       39 
39 
     | 
    
         
             
                  * #request_token
         
     | 
| 
       40 
     | 
    
         
            -
                    * [returns a token asynchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 40 
     | 
    
         
            +
                    * [returns a token asynchronously](./spec/acceptance/realtime/auth_spec.rb#L167)
         
     | 
| 
       41 
41 
     | 
    
         
             
                  * #request_token_async
         
     | 
| 
       42 
     | 
    
         
            -
                    * [returns a token synchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
       43 
     | 
    
         
            -
                  * # 
     | 
| 
       44 
     | 
    
         
            -
                    *  
     | 
| 
      
 42 
     | 
    
         
            +
                    * [returns a token synchronously](./spec/acceptance/realtime/auth_spec.rb#L178)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  * #authorize
         
     | 
| 
      
 44 
     | 
    
         
            +
                    * with token auth
         
     | 
| 
      
 45 
     | 
    
         
            +
                      * [returns a token asynchronously](./spec/acceptance/realtime/auth_spec.rb#L192)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    * with auth_callback blocking
         
     | 
| 
      
 47 
     | 
    
         
            +
                      * with a slow auth callback response
         
     | 
| 
      
 48 
     | 
    
         
            +
                        * [asynchronously authenticates](./spec/acceptance/realtime/auth_spec.rb#L215)
         
     | 
| 
       45 
49 
     | 
    
         
             
                    * when implicitly called, with an explicit ClientOptions client_id
         
     | 
| 
       46 
50 
     | 
    
         
             
                      * and an incompatible client_id in a TokenDetails object passed to the auth callback
         
     | 
| 
       47 
     | 
    
         
            -
                        * [rejects a TokenDetails object with an incompatible client_id and  
     | 
| 
       48 
     | 
    
         
            -
                      * and an incompatible client_id in a TokenRequest object passed to the auth callback and  
     | 
| 
       49 
     | 
    
         
            -
                        * [rejects a TokenRequests object with an incompatible client_id and  
     | 
| 
      
 51 
     | 
    
         
            +
                        * [rejects a TokenDetails object with an incompatible client_id and fails with an exception](./spec/acceptance/realtime/auth_spec.rb#L239)
         
     | 
| 
      
 52 
     | 
    
         
            +
                      * and an incompatible client_id in a TokenRequest object passed to the auth callback and fails with an exception
         
     | 
| 
      
 53 
     | 
    
         
            +
                        * [rejects a TokenRequests object with an incompatible client_id and fails with an exception](./spec/acceptance/realtime/auth_spec.rb#L255)
         
     | 
| 
       50 
54 
     | 
    
         
             
                    * when explicitly called, with an explicit ClientOptions client_id
         
     | 
| 
       51 
55 
     | 
    
         
             
                      * and an incompatible client_id in a TokenDetails object passed to the auth callback
         
     | 
| 
       52 
     | 
    
         
            -
                        * [rejects a TokenDetails object with an incompatible client_id and  
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
                        * [rejects a TokenDetails object with an incompatible client_id and fails with an exception](./spec/acceptance/realtime/auth_spec.rb#L287)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    * when already authenticated with a valid token
         
     | 
| 
      
 58 
     | 
    
         
            +
                      * [ensures message delivery continuity whilst upgrading (#RTC8a1)](./spec/acceptance/realtime/auth_spec.rb#L700)
         
     | 
| 
      
 59 
     | 
    
         
            +
                      * when INITIALIZED
         
     | 
| 
      
 60 
     | 
    
         
            +
                        * [obtains a token and connects to Ably (#RTC8c, #RTC8b1)](./spec/acceptance/realtime/auth_spec.rb#L328)
         
     | 
| 
      
 61 
     | 
    
         
            +
                      * when CONNECTING
         
     | 
| 
      
 62 
     | 
    
         
            +
                        * [aborts the current connection process, obtains a token, and connects to Ably again (#RTC8b)](./spec/acceptance/realtime/auth_spec.rb#L350)
         
     | 
| 
      
 63 
     | 
    
         
            +
                      * when FAILED
         
     | 
| 
      
 64 
     | 
    
         
            +
                        * [obtains a token and connects to Ably (#RTC8c, #RTC8b1)](./spec/acceptance/realtime/auth_spec.rb#L369)
         
     | 
| 
      
 65 
     | 
    
         
            +
                      * when CLOSED
         
     | 
| 
      
 66 
     | 
    
         
            +
                        * [obtains a token and connects to Ably (#RTC8c, #RTC8b1, #RTC8a3)](./spec/acceptance/realtime/auth_spec.rb#L386)
         
     | 
| 
      
 67 
     | 
    
         
            +
                      * when in the CONNECTED state
         
     | 
| 
      
 68 
     | 
    
         
            +
                        * with a valid token in the AUTH ProtocolMessage sent
         
     | 
| 
      
 69 
     | 
    
         
            +
                          * PENDING: *[obtains a new token (that upgrades from anonymous to identified) and upgrades the connection after receiving an updated CONNECTED ProtocolMessage (#RTC8a, #RTC8a3)](./spec/acceptance/realtime/auth_spec.rb#L409)*
         
     | 
| 
      
 70 
     | 
    
         
            +
                          * [obtains a new token (as anonymous user before & after) and upgrades the connection after receiving an updated CONNECTED ProtocolMessage (#RTC8a, #RTC8a3)](./spec/acceptance/realtime/auth_spec.rb#L445)
         
     | 
| 
      
 71 
     | 
    
         
            +
                      * when DISCONNECTED
         
     | 
| 
      
 72 
     | 
    
         
            +
                        * PENDING: *[obtains a token, upgrades from anonymous to identified, and connects to Ably immediately (#RTC8c, #RTC8b1)](./spec/acceptance/realtime/auth_spec.rb#L481)*
         
     | 
| 
      
 73 
     | 
    
         
            +
                        * [obtains a similar anonymous token and connects to Ably immediately (#RTC8c, #RTC8b1)](./spec/acceptance/realtime/auth_spec.rb#L517)
         
     | 
| 
      
 74 
     | 
    
         
            +
                      * when SUSPENDED
         
     | 
| 
      
 75 
     | 
    
         
            +
                        * [obtains a token and connects to Ably immediately (#RTC8c, #RTC8b1)](./spec/acceptance/realtime/auth_spec.rb#L561)
         
     | 
| 
      
 76 
     | 
    
         
            +
                      * when client is identified
         
     | 
| 
      
 77 
     | 
    
         
            +
                        * [transitions the connection state to FAILED if the client_id changes (#RSA15c, #RTC8a2)](./spec/acceptance/realtime/auth_spec.rb#L596)
         
     | 
| 
      
 78 
     | 
    
         
            +
                      * when auth fails
         
     | 
| 
      
 79 
     | 
    
         
            +
                        * [transitions the connection state to the FAILED state (#RSA15c, #RTC8a2, #RTC8a3)](./spec/acceptance/realtime/auth_spec.rb#L611)
         
     | 
| 
      
 80 
     | 
    
         
            +
                      * when the authCallback fails
         
     | 
| 
      
 81 
     | 
    
         
            +
                        * [calls the error callback of authorize and leaves the connection intact (#RSA4c3)](./spec/acceptance/realtime/auth_spec.rb#L639)
         
     | 
| 
      
 82 
     | 
    
         
            +
                      * when upgrading capabilities
         
     | 
| 
      
 83 
     | 
    
         
            +
                        * [is allowed (#RTC8a1)](./spec/acceptance/realtime/auth_spec.rb#L658)
         
     | 
| 
      
 84 
     | 
    
         
            +
                      * when downgrading capabilities (#RTC8a1)
         
     | 
| 
      
 85 
     | 
    
         
            +
                        * [is allowed and channels are detached](./spec/acceptance/realtime/auth_spec.rb#L683)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  * #authorize_async
         
     | 
| 
      
 87 
     | 
    
         
            +
                    * [returns a token synchronously](./spec/acceptance/realtime/auth_spec.rb#L734)
         
     | 
| 
      
 88 
     | 
    
         
            +
                * server initiated AUTH ProtocolMessage
         
     | 
| 
      
 89 
     | 
    
         
            +
                  * when received
         
     | 
| 
      
 90 
     | 
    
         
            +
                    * [should immediately start a new authentication process (#RTN22)](./spec/acceptance/realtime/auth_spec.rb#L758)
         
     | 
| 
      
 91 
     | 
    
         
            +
                  * when not received
         
     | 
| 
      
 92 
     | 
    
         
            +
                    * [should expect the connection to be disconnected by the server but should resume automatically (#RTN22a)](./spec/acceptance/realtime/auth_spec.rb#L781)
         
     | 
| 
       55 
93 
     | 
    
         
             
                * #auth_params
         
     | 
| 
       56 
     | 
    
         
            -
                  * [returns the auth params asynchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 94 
     | 
    
         
            +
                  * [returns the auth params asynchronously](./spec/acceptance/realtime/auth_spec.rb#L807)
         
     | 
| 
       57 
95 
     | 
    
         
             
                * #auth_params_sync
         
     | 
| 
       58 
     | 
    
         
            -
                  * [returns the auth params synchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 96 
     | 
    
         
            +
                  * [returns the auth params synchronously](./spec/acceptance/realtime/auth_spec.rb#L816)
         
     | 
| 
       59 
97 
     | 
    
         
             
                * #auth_header
         
     | 
| 
       60 
     | 
    
         
            -
                  * [returns an auth header asynchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 98 
     | 
    
         
            +
                  * [returns an auth header asynchronously](./spec/acceptance/realtime/auth_spec.rb#L823)
         
     | 
| 
       61 
99 
     | 
    
         
             
                * #auth_header_sync
         
     | 
| 
       62 
     | 
    
         
            -
                  * [returns an auth header synchronously](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 100 
     | 
    
         
            +
                  * [returns an auth header synchronously](./spec/acceptance/realtime/auth_spec.rb#L832)
         
     | 
| 
       63 
101 
     | 
    
         
             
                * #client_id_validated?
         
     | 
| 
       64 
102 
     | 
    
         
             
                  * when using basic auth
         
     | 
| 
       65 
103 
     | 
    
         
             
                    * before connected
         
     | 
| 
       66 
     | 
    
         
            -
                      * [is false as basic auth users do not have an identity](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 104 
     | 
    
         
            +
                      * [is false as basic auth users do not have an identity](./spec/acceptance/realtime/auth_spec.rb#L845)
         
     | 
| 
       67 
105 
     | 
    
         
             
                    * once connected
         
     | 
| 
       68 
     | 
    
         
            -
                      * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
       69 
     | 
    
         
            -
                      * [contains a validated wildcard client_id](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 106 
     | 
    
         
            +
                      * [is true](./spec/acceptance/realtime/auth_spec.rb#L852)
         
     | 
| 
      
 107 
     | 
    
         
            +
                      * [contains a validated wildcard client_id](./spec/acceptance/realtime/auth_spec.rb#L859)
         
     | 
| 
       70 
108 
     | 
    
         
             
                  * when using a token string
         
     | 
| 
       71 
109 
     | 
    
         
             
                    * with a valid client_id
         
     | 
| 
       72 
110 
     | 
    
         
             
                      * before connected
         
     | 
| 
       73 
     | 
    
         
            -
                        * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
       74 
     | 
    
         
            -
                        * [#client_id is nil](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 111 
     | 
    
         
            +
                        * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L873)
         
     | 
| 
      
 112 
     | 
    
         
            +
                        * [#client_id is nil](./spec/acceptance/realtime/auth_spec.rb#L878)
         
     | 
| 
       75 
113 
     | 
    
         
             
                      * once connected
         
     | 
| 
       76 
     | 
    
         
            -
                        * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
       77 
     | 
    
         
            -
                        * [#client_id is populated](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 114 
     | 
    
         
            +
                        * [is true](./spec/acceptance/realtime/auth_spec.rb#L885)
         
     | 
| 
      
 115 
     | 
    
         
            +
                        * [#client_id is populated](./spec/acceptance/realtime/auth_spec.rb#L892)
         
     | 
| 
       78 
116 
     | 
    
         
             
                    * with no client_id (anonymous)
         
     | 
| 
       79 
117 
     | 
    
         
             
                      * before connected
         
     | 
| 
       80 
     | 
    
         
            -
                        * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 118 
     | 
    
         
            +
                        * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L905)
         
     | 
| 
       81 
119 
     | 
    
         
             
                      * once connected
         
     | 
| 
       82 
     | 
    
         
            -
                        * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 120 
     | 
    
         
            +
                        * [is true](./spec/acceptance/realtime/auth_spec.rb#L912)
         
     | 
| 
       83 
121 
     | 
    
         
             
                    * with a wildcard client_id (anonymous)
         
     | 
| 
       84 
122 
     | 
    
         
             
                      * before connected
         
     | 
| 
       85 
     | 
    
         
            -
                        * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 123 
     | 
    
         
            +
                        * [is false as identification is not possible from an opaque token string](./spec/acceptance/realtime/auth_spec.rb#L925)
         
     | 
| 
       86 
124 
     | 
    
         
             
                      * once connected
         
     | 
| 
       87 
     | 
    
         
            -
                        * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 125 
     | 
    
         
            +
                        * [is true](./spec/acceptance/realtime/auth_spec.rb#L932)
         
     | 
| 
       88 
126 
     | 
    
         
             
                  * when using a token
         
     | 
| 
       89 
127 
     | 
    
         
             
                    * with a client_id
         
     | 
| 
       90 
     | 
    
         
            -
                      * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 128 
     | 
    
         
            +
                      * [is true](./spec/acceptance/realtime/auth_spec.rb#L946)
         
     | 
| 
       91 
129 
     | 
    
         
             
                      * once connected
         
     | 
| 
       92 
     | 
    
         
            -
                        * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 130 
     | 
    
         
            +
                        * [is true](./spec/acceptance/realtime/auth_spec.rb#L952)
         
     | 
| 
       93 
131 
     | 
    
         
             
                    * with no client_id (anonymous)
         
     | 
| 
       94 
     | 
    
         
            -
                      * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 132 
     | 
    
         
            +
                      * [is true](./spec/acceptance/realtime/auth_spec.rb#L964)
         
     | 
| 
       95 
133 
     | 
    
         
             
                      * once connected
         
     | 
| 
       96 
     | 
    
         
            -
                        * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 134 
     | 
    
         
            +
                        * [is true](./spec/acceptance/realtime/auth_spec.rb#L970)
         
     | 
| 
       97 
135 
     | 
    
         
             
                    * with a wildcard client_id (anonymous)
         
     | 
| 
       98 
     | 
    
         
            -
                      * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 136 
     | 
    
         
            +
                      * [is true](./spec/acceptance/realtime/auth_spec.rb#L982)
         
     | 
| 
       99 
137 
     | 
    
         
             
                      * once connected
         
     | 
| 
       100 
     | 
    
         
            -
                        * [is true](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 138 
     | 
    
         
            +
                        * [is true](./spec/acceptance/realtime/auth_spec.rb#L988)
         
     | 
| 
       101 
139 
     | 
    
         
             
                  * when using a token request with a client_id
         
     | 
| 
       102 
     | 
    
         
            -
                    * [is not true as identification is not confirmed until authenticated](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 140 
     | 
    
         
            +
                    * [is not true as identification is not confirmed until authenticated](./spec/acceptance/realtime/auth_spec.rb#L1001)
         
     | 
| 
       103 
141 
     | 
    
         
             
                    * once connected
         
     | 
| 
       104 
     | 
    
         
            -
                      * [is true as identification is completed following CONNECTED ProtocolMessage](./spec/acceptance/realtime/auth_spec.rb# 
     | 
| 
      
 142 
     | 
    
         
            +
                      * [is true as identification is completed following CONNECTED ProtocolMessage](./spec/acceptance/realtime/auth_spec.rb#L1007)
         
     | 
| 
      
 143 
     | 
    
         
            +
                * deprecated #authorise
         
     | 
| 
      
 144 
     | 
    
         
            +
                  * [logs a deprecation warning (#RSA10l)](./spec/acceptance/realtime/auth_spec.rb#L1045)
         
     | 
| 
      
 145 
     | 
    
         
            +
                  * [returns a valid token (#RSA10l)](./spec/acceptance/realtime/auth_spec.rb#L1051)
         
     | 
| 
       105 
146 
     | 
    
         | 
| 
       106 
147 
     | 
    
         
             
            ### Ably::Realtime::Channel#history
         
     | 
| 
       107 
148 
     | 
    
         
             
            _(see [spec/acceptance/realtime/channel_history_spec.rb](./spec/acceptance/realtime/channel_history_spec.rb))_
         
     | 
| 
         @@ -122,7 +163,7 @@ _(see [spec/acceptance/realtime/channel_history_spec.rb](./spec/acceptance/realt 
     | 
|
| 
       122 
163 
     | 
    
         
             
                    * [return the same results with unique matching message IDs](./spec/acceptance/realtime/channel_history_spec.rb#L135)
         
     | 
| 
       123 
164 
     | 
    
         
             
                * with option until_attach: true
         
     | 
| 
       124 
165 
     | 
    
         
             
                  * [retrieves all messages before channel was attached](./spec/acceptance/realtime/channel_history_spec.rb#L160)
         
     | 
| 
       125 
     | 
    
         
            -
                  * [ 
     | 
| 
      
 166 
     | 
    
         
            +
                  * [fails the deferrable unless the state is attached](./spec/acceptance/realtime/channel_history_spec.rb#L209)
         
     | 
| 
       126 
167 
     | 
    
         
             
                  * and two pages of messages
         
     | 
| 
       127 
168 
     | 
    
         
             
                    * [retrieves two pages of messages before channel was attached](./spec/acceptance/realtime/channel_history_spec.rb#L175)
         
     | 
| 
       128 
169 
     | 
    
         | 
| 
         @@ -131,185 +172,277 @@ _(see [spec/acceptance/realtime/channel_spec.rb](./spec/acceptance/realtime/chan 
     | 
|
| 
       131 
172 
     | 
    
         
             
              * using JSON protocol
         
     | 
| 
       132 
173 
     | 
    
         
             
                * initialization
         
     | 
| 
       133 
174 
     | 
    
         
             
                  * with :auto_connect option set to false on connection
         
     | 
| 
       134 
     | 
    
         
            -
                    * [remains initialized when accessing a channel](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       135 
     | 
    
         
            -
                    * [opens a connection implicitly on #attach](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 175 
     | 
    
         
            +
                    * [remains initialized when accessing a channel](./spec/acceptance/realtime/channel_spec.rb#L26)
         
     | 
| 
      
 176 
     | 
    
         
            +
                    * [opens a connection implicitly on #attach](./spec/acceptance/realtime/channel_spec.rb#L34)
         
     | 
| 
       136 
177 
     | 
    
         
             
                * #attach
         
     | 
| 
       137 
     | 
    
         
            -
                  * [ 
     | 
| 
       138 
     | 
    
         
            -
                  * [ 
     | 
| 
       139 
     | 
    
         
            -
                  *  
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
      
 178 
     | 
    
         
            +
                  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/channel_spec.rb#L139)
         
     | 
| 
      
 179 
     | 
    
         
            +
                  * [calls the SafeDeferrable callback on success (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L144)
         
     | 
| 
      
 180 
     | 
    
         
            +
                  * when initialized
         
     | 
| 
      
 181 
     | 
    
         
            +
                    * [emits attaching then attached events](./spec/acceptance/realtime/channel_spec.rb#L45)
         
     | 
| 
      
 182 
     | 
    
         
            +
                    * [ignores subsequent #attach calls but calls the success callback if provided](./spec/acceptance/realtime/channel_spec.rb#L55)
         
     | 
| 
      
 183 
     | 
    
         
            +
                    * [attaches to a channel](./spec/acceptance/realtime/channel_spec.rb#L68)
         
     | 
| 
      
 184 
     | 
    
         
            +
                    * [attaches to a channel and calls the provided block (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L76)
         
     | 
| 
      
 185 
     | 
    
         
            +
                    * [sends an ATTACH and waits for an ATTACHED (#RTL4c)](./spec/acceptance/realtime/channel_spec.rb#L83)
         
     | 
| 
      
 186 
     | 
    
         
            +
                    * [implicitly attaches the channel (#RTL7c)](./spec/acceptance/realtime/channel_spec.rb#L107)
         
     | 
| 
      
 187 
     | 
    
         
            +
                    * when the implicit channel attach fails
         
     | 
| 
      
 188 
     | 
    
         
            +
                      * [registers the listener anyway (#RTL7c)](./spec/acceptance/realtime/channel_spec.rb#L124)
         
     | 
| 
      
 189 
     | 
    
         
            +
                  * when an ATTACHED acknowledge is not received on the current connection
         
     | 
| 
      
 190 
     | 
    
         
            +
                    * [sends another ATTACH each time the connection becomes connected](./spec/acceptance/realtime/channel_spec.rb#L155)
         
     | 
| 
      
 191 
     | 
    
         
            +
                  * when state is :attached
         
     | 
| 
      
 192 
     | 
    
         
            +
                    * [does nothing (#RTL4a)](./spec/acceptance/realtime/channel_spec.rb#L193)
         
     | 
| 
       143 
193 
     | 
    
         
             
                  * when state is :failed
         
     | 
| 
       144 
     | 
    
         
            -
                    * [reattaches](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 194 
     | 
    
         
            +
                    * [reattaches and sets the errorReason to nil (#RTL4g)](./spec/acceptance/realtime/channel_spec.rb#L213)
         
     | 
| 
       145 
195 
     | 
    
         
             
                  * when state is :detaching
         
     | 
| 
       146 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 196 
     | 
    
         
            +
                    * [does the attach operation after the completion of the pending request (#RTL4h)](./spec/acceptance/realtime/channel_spec.rb#L228)
         
     | 
| 
       147 
197 
     | 
    
         
             
                  * with many connections and many channels on each simultaneously
         
     | 
| 
       148 
     | 
    
         
            -
                    * [attaches all channels](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 198 
     | 
    
         
            +
                    * [attaches all channels](./spec/acceptance/realtime/channel_spec.rb#L256)
         
     | 
| 
       149 
199 
     | 
    
         
             
                  * failure as a result of insufficient key permissions
         
     | 
| 
       150 
     | 
    
         
            -
                    * [emits failed event](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       151 
     | 
    
         
            -
                    * [calls the errback of the returned Deferrable](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       152 
     | 
    
         
            -
                    * [ 
     | 
| 
       153 
     | 
    
         
            -
                    * [updates the error_reason](./spec/acceptance/realtime/channel_spec.rb#L181)
         
     | 
| 
      
 200 
     | 
    
         
            +
                    * [emits failed event (#RTL4e)](./spec/acceptance/realtime/channel_spec.rb#L288)
         
     | 
| 
      
 201 
     | 
    
         
            +
                    * [calls the errback of the returned Deferrable (#RTL4d)](./spec/acceptance/realtime/channel_spec.rb#L297)
         
     | 
| 
      
 202 
     | 
    
         
            +
                    * [updates the error_reason](./spec/acceptance/realtime/channel_spec.rb#L305)
         
     | 
| 
       154 
203 
     | 
    
         
             
                    * and subsequent authorisation with suitable permissions
         
     | 
| 
       155 
     | 
    
         
            -
                      * [attaches to the channel successfully and resets the channel error_reason](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 204 
     | 
    
         
            +
                      * [attaches to the channel successfully and resets the channel error_reason](./spec/acceptance/realtime/channel_spec.rb#L314)
         
     | 
| 
      
 205 
     | 
    
         
            +
                  * with connection state
         
     | 
| 
      
 206 
     | 
    
         
            +
                    * [is initialized (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L333)
         
     | 
| 
      
 207 
     | 
    
         
            +
                    * [is connecting (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L340)
         
     | 
| 
      
 208 
     | 
    
         
            +
                    * [is disconnected (#RTL4i)](./spec/acceptance/realtime/channel_spec.rb#L348)
         
     | 
| 
       156 
209 
     | 
    
         
             
                * #detach
         
     | 
| 
       157 
     | 
    
         
            -
                  *  
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
      
 210 
     | 
    
         
            +
                  * when state is :attached
         
     | 
| 
      
 211 
     | 
    
         
            +
                    * [it detaches from a channel (#RTL5d)](./spec/acceptance/realtime/channel_spec.rb#L363)
         
     | 
| 
      
 212 
     | 
    
         
            +
                    * [detaches from a channel and calls the provided block (#RTL5d, #RTL5e)](./spec/acceptance/realtime/channel_spec.rb#L373)
         
     | 
| 
      
 213 
     | 
    
         
            +
                    * [emits :detaching then :detached events](./spec/acceptance/realtime/channel_spec.rb#L383)
         
     | 
| 
      
 214 
     | 
    
         
            +
                    * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/channel_spec.rb#L395)
         
     | 
| 
      
 215 
     | 
    
         
            +
                    * [calls the Deferrable callback on success](./spec/acceptance/realtime/channel_spec.rb#L402)
         
     | 
| 
      
 216 
     | 
    
         
            +
                    * and DETACHED message is not received within realtime request timeout
         
     | 
| 
      
 217 
     | 
    
         
            +
                      * [fails the deferrable and returns to the previous state (#RTL5f, #RTL5e)](./spec/acceptance/realtime/channel_spec.rb#L416)
         
     | 
| 
       162 
218 
     | 
    
         
             
                  * when state is :failed
         
     | 
| 
       163 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 219 
     | 
    
         
            +
                    * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L436)
         
     | 
| 
       164 
220 
     | 
    
         
             
                  * when state is :attaching
         
     | 
| 
       165 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 221 
     | 
    
         
            +
                    * [waits for the attach to complete and then moves to detached](./spec/acceptance/realtime/channel_spec.rb#L449)
         
     | 
| 
       166 
222 
     | 
    
         
             
                  * when state is :detaching
         
     | 
| 
       167 
     | 
    
         
            -
                    * [ignores subsequent #detach calls but calls the callback if provided](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 223 
     | 
    
         
            +
                    * [ignores subsequent #detach calls but calls the callback if provided (#RTL5i)](./spec/acceptance/realtime/channel_spec.rb#L466)
         
     | 
| 
      
 224 
     | 
    
         
            +
                  * when state is :suspended
         
     | 
| 
      
 225 
     | 
    
         
            +
                    * [moves the channel state immediately to DETACHED state (#RTL5j)](./spec/acceptance/realtime/channel_spec.rb#L483)
         
     | 
| 
       168 
226 
     | 
    
         
             
                  * when state is :initialized
         
     | 
| 
       169 
     | 
    
         
            -
                    * [does nothing as there is no channel to detach](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       170 
     | 
    
         
            -
                    * [returns a valid deferrable](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                    *  
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
      
 227 
     | 
    
         
            +
                    * [does nothing as there is no channel to detach (#RTL5a)](./spec/acceptance/realtime/channel_spec.rb#L503)
         
     | 
| 
      
 228 
     | 
    
         
            +
                    * [returns a valid deferrable](./spec/acceptance/realtime/channel_spec.rb#L511)
         
     | 
| 
      
 229 
     | 
    
         
            +
                  * when state is :detached
         
     | 
| 
      
 230 
     | 
    
         
            +
                    * [does nothing as the channel is detached (#RTL5a)](./spec/acceptance/realtime/channel_spec.rb#L521)
         
     | 
| 
      
 231 
     | 
    
         
            +
                  * when connection state is
         
     | 
| 
      
 232 
     | 
    
         
            +
                    * closing
         
     | 
| 
      
 233 
     | 
    
         
            +
                      * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L538)
         
     | 
| 
      
 234 
     | 
    
         
            +
                    * failed and channel is failed
         
     | 
| 
      
 235 
     | 
    
         
            +
                      * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L558)
         
     | 
| 
      
 236 
     | 
    
         
            +
                    * failed and channel is detached
         
     | 
| 
      
 237 
     | 
    
         
            +
                      * [fails the deferrable (#RTL5b)](./spec/acceptance/realtime/channel_spec.rb#L580)
         
     | 
| 
      
 238 
     | 
    
         
            +
                    * initialized
         
     | 
| 
      
 239 
     | 
    
         
            +
                      * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L600)
         
     | 
| 
      
 240 
     | 
    
         
            +
                    * connecting
         
     | 
| 
      
 241 
     | 
    
         
            +
                      * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L615)
         
     | 
| 
      
 242 
     | 
    
         
            +
                    * disconnected
         
     | 
| 
      
 243 
     | 
    
         
            +
                      * [does the detach operation once the connection state is connected (#RTL5h)](./spec/acceptance/realtime/channel_spec.rb#L634)
         
     | 
| 
      
 244 
     | 
    
         
            +
                * automatic channel recovery
         
     | 
| 
      
 245 
     | 
    
         
            +
                  * when an ATTACH request times out
         
     | 
| 
      
 246 
     | 
    
         
            +
                    * [moves to the SUSPENDED state (#RTL4f)](./spec/acceptance/realtime/channel_spec.rb#L661)
         
     | 
| 
      
 247 
     | 
    
         
            +
                  * if a subsequent ATTACHED is received on an ATTACHED channel
         
     | 
| 
      
 248 
     | 
    
         
            +
                    * [ignores the additional ATTACHED if resumed is true (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L675)
         
     | 
| 
      
 249 
     | 
    
         
            +
                    * [emits an UPDATE only when resumed is true (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L689)
         
     | 
| 
      
 250 
     | 
    
         
            +
                    * [emits an UPDATE when resumed is true and includes the reason error from the ProtocolMessage (#RTL12)](./spec/acceptance/realtime/channel_spec.rb#L705)
         
     | 
| 
       176 
251 
     | 
    
         
             
                * #publish
         
     | 
| 
       177 
252 
     | 
    
         
             
                  * when attached
         
     | 
| 
       178 
     | 
    
         
            -
                    * [publishes messages](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 253 
     | 
    
         
            +
                    * [publishes messages](./spec/acceptance/realtime/channel_spec.rb#L730)
         
     | 
| 
       179 
254 
     | 
    
         
             
                  * when not yet attached
         
     | 
| 
       180 
     | 
    
         
            -
                    * [publishes queued messages once attached](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       181 
     | 
    
         
            -
                    * [publishes queued messages within a single protocol message](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 255 
     | 
    
         
            +
                    * [publishes queued messages once attached](./spec/acceptance/realtime/channel_spec.rb#L742)
         
     | 
| 
      
 256 
     | 
    
         
            +
                    * [publishes queued messages within a single protocol message](./spec/acceptance/realtime/channel_spec.rb#L750)
         
     | 
| 
       182 
257 
     | 
    
         
             
                    * with :queue_messages client option set to false
         
     | 
| 
       183 
258 
     | 
    
         
             
                      * and connection state initialized
         
     | 
| 
       184 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 259 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L773)
         
     | 
| 
       185 
260 
     | 
    
         
             
                      * and connection state connecting
         
     | 
| 
       186 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 261 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L783)
         
     | 
| 
       187 
262 
     | 
    
         
             
                      * and connection state disconnected
         
     | 
| 
       188 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 263 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L797)
         
     | 
| 
       189 
264 
     | 
    
         
             
                      * and connection state connected
         
     | 
| 
       190 
     | 
    
         
            -
                        * [publishes the message](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 265 
     | 
    
         
            +
                        * [publishes the message](./spec/acceptance/realtime/channel_spec.rb#L812)
         
     | 
| 
       191 
266 
     | 
    
         
             
                  * with name and data arguments
         
     | 
| 
       192 
     | 
    
         
            -
                    * [publishes the message and return true indicating success](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 267 
     | 
    
         
            +
                    * [publishes the message and return true indicating success](./spec/acceptance/realtime/channel_spec.rb#L823)
         
     | 
| 
       193 
268 
     | 
    
         
             
                    * and additional attributes
         
     | 
| 
       194 
     | 
    
         
            -
                      * [publishes the message with the attributes and return true indicating success](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 269 
     | 
    
         
            +
                      * [publishes the message with the attributes and return true indicating success](./spec/acceptance/realtime/channel_spec.rb#L836)
         
     | 
| 
      
 270 
     | 
    
         
            +
                    * and additional invalid attributes
         
     | 
| 
      
 271 
     | 
    
         
            +
                      * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L849)
         
     | 
| 
       195 
272 
     | 
    
         
             
                  * with an array of Hash objects with :name and :data attributes
         
     | 
| 
       196 
     | 
    
         
            -
                    * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 273 
     | 
    
         
            +
                    * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb#L863)
         
     | 
| 
       197 
274 
     | 
    
         
             
                  * with an array of Message objects
         
     | 
| 
       198 
     | 
    
         
            -
                    * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 275 
     | 
    
         
            +
                    * [publishes an array of messages in one ProtocolMessage](./spec/acceptance/realtime/channel_spec.rb#L891)
         
     | 
| 
       199 
276 
     | 
    
         
             
                    * nil attributes
         
     | 
| 
       200 
277 
     | 
    
         
             
                      * when name is nil
         
     | 
| 
       201 
     | 
    
         
            -
                        * [publishes the message without a name attribute in the payload](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 278 
     | 
    
         
            +
                        * [publishes the message without a name attribute in the payload](./spec/acceptance/realtime/channel_spec.rb#L915)
         
     | 
| 
       202 
279 
     | 
    
         
             
                      * when data is nil
         
     | 
| 
       203 
     | 
    
         
            -
                        * [publishes the message without a data attribute in the payload](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 280 
     | 
    
         
            +
                        * [publishes the message without a data attribute in the payload](./spec/acceptance/realtime/channel_spec.rb#L938)
         
     | 
| 
       204 
281 
     | 
    
         
             
                      * with neither name or data attributes
         
     | 
| 
       205 
     | 
    
         
            -
                        * [publishes the message without any attributes in the payload](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 282 
     | 
    
         
            +
                        * [publishes the message without any attributes in the payload](./spec/acceptance/realtime/channel_spec.rb#L961)
         
     | 
| 
       206 
283 
     | 
    
         
             
                    * with two invalid message out of 12
         
     | 
| 
       207 
284 
     | 
    
         
             
                      * before client_id is known (validated)
         
     | 
| 
       208 
     | 
    
         
            -
                        * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 285 
     | 
    
         
            +
                        * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb#L985)
         
     | 
| 
       209 
286 
     | 
    
         
             
                      * when client_id is known (validated)
         
     | 
| 
       210 
     | 
    
         
            -
                        * [raises an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 287 
     | 
    
         
            +
                        * [raises an exception](./spec/acceptance/realtime/channel_spec.rb#L1005)
         
     | 
| 
       211 
288 
     | 
    
         
             
                    * only invalid messages
         
     | 
| 
       212 
289 
     | 
    
         
             
                      * before client_id is known (validated)
         
     | 
| 
       213 
     | 
    
         
            -
                        * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 290 
     | 
    
         
            +
                        * [calls the errback once](./spec/acceptance/realtime/channel_spec.rb#L1024)
         
     | 
| 
       214 
291 
     | 
    
         
             
                      * when client_id is known (validated)
         
     | 
| 
       215 
     | 
    
         
            -
                        * [raises an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 292 
     | 
    
         
            +
                        * [raises an exception](./spec/acceptance/realtime/channel_spec.rb#L1043)
         
     | 
| 
       216 
293 
     | 
    
         
             
                  * with many many messages and many connections simultaneously
         
     | 
| 
       217 
     | 
    
         
            -
                    * [publishes all messages, all success callbacks are called, and a history request confirms all messages were published](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 294 
     | 
    
         
            +
                    * [publishes all messages, all success callbacks are called, and a history request confirms all messages were published](./spec/acceptance/realtime/channel_spec.rb#L1057)
         
     | 
| 
       218 
295 
     | 
    
         
             
                  * identified clients
         
     | 
| 
       219 
296 
     | 
    
         
             
                    * when authenticated with a wildcard client_id
         
     | 
| 
       220 
297 
     | 
    
         
             
                      * with a valid client_id in the message
         
     | 
| 
       221 
     | 
    
         
            -
                        * [succeeds](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 298 
     | 
    
         
            +
                        * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1085)
         
     | 
| 
       222 
299 
     | 
    
         
             
                      * with a wildcard client_id in the message
         
     | 
| 
       223 
     | 
    
         
            -
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 300 
     | 
    
         
            +
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1097)
         
     | 
| 
      
 301 
     | 
    
         
            +
                      * with a non-String client_id in the message
         
     | 
| 
      
 302 
     | 
    
         
            +
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1104)
         
     | 
| 
       224 
303 
     | 
    
         
             
                      * with an empty client_id in the message
         
     | 
| 
       225 
     | 
    
         
            -
                        * [succeeds and publishes without a client_id](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 304 
     | 
    
         
            +
                        * [succeeds and publishes without a client_id](./spec/acceptance/realtime/channel_spec.rb#L1111)
         
     | 
| 
       226 
305 
     | 
    
         
             
                    * when authenticated with a Token string with an implicit client_id
         
     | 
| 
       227 
306 
     | 
    
         
             
                      * before the client is CONNECTED and the client's identity has been obtained
         
     | 
| 
       228 
307 
     | 
    
         
             
                        * with a valid client_id in the message
         
     | 
| 
       229 
     | 
    
         
            -
                          * [succeeds](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 308 
     | 
    
         
            +
                          * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1131)
         
     | 
| 
       230 
309 
     | 
    
         
             
                        * with an invalid client_id in the message
         
     | 
| 
       231 
     | 
    
         
            -
                          * [succeeds in the client library but then fails when delivered to Ably](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 310 
     | 
    
         
            +
                          * [succeeds in the client library but then fails when delivered to Ably](./spec/acceptance/realtime/channel_spec.rb#L1144)
         
     | 
| 
       232 
311 
     | 
    
         
             
                        * with an empty client_id in the message
         
     | 
| 
       233 
     | 
    
         
            -
                          * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 312 
     | 
    
         
            +
                          * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1155)
         
     | 
| 
       234 
313 
     | 
    
         
             
                      * after the client is CONNECTED and the client's identity is known
         
     | 
| 
       235 
314 
     | 
    
         
             
                        * with a valid client_id in the message
         
     | 
| 
       236 
     | 
    
         
            -
                          * [succeeds](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 315 
     | 
    
         
            +
                          * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1169)
         
     | 
| 
       237 
316 
     | 
    
         
             
                        * with an invalid client_id in the message
         
     | 
| 
       238 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 317 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1183)
         
     | 
| 
       239 
318 
     | 
    
         
             
                        * with an empty client_id in the message
         
     | 
| 
       240 
     | 
    
         
            -
                          * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 319 
     | 
    
         
            +
                          * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1192)
         
     | 
| 
       241 
320 
     | 
    
         
             
                    * when authenticated with a valid client_id
         
     | 
| 
       242 
321 
     | 
    
         
             
                      * with a valid client_id
         
     | 
| 
       243 
     | 
    
         
            -
                        * [succeeds](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 322 
     | 
    
         
            +
                        * [succeeds](./spec/acceptance/realtime/channel_spec.rb#L1214)
         
     | 
| 
       244 
323 
     | 
    
         
             
                      * with a wildcard client_id in the message
         
     | 
| 
       245 
     | 
    
         
            -
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 324 
     | 
    
         
            +
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1226)
         
     | 
| 
       246 
325 
     | 
    
         
             
                      * with an invalid client_id in the message
         
     | 
| 
       247 
     | 
    
         
            -
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 326 
     | 
    
         
            +
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1233)
         
     | 
| 
       248 
327 
     | 
    
         
             
                      * with an empty client_id in the message
         
     | 
| 
       249 
     | 
    
         
            -
                        * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 328 
     | 
    
         
            +
                        * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1240)
         
     | 
| 
       250 
329 
     | 
    
         
             
                    * when anonymous and no client_id
         
     | 
| 
       251 
330 
     | 
    
         
             
                      * with a client_id in the message
         
     | 
| 
       252 
     | 
    
         
            -
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 331 
     | 
    
         
            +
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1259)
         
     | 
| 
       253 
332 
     | 
    
         
             
                      * with a wildcard client_id in the message
         
     | 
| 
       254 
     | 
    
         
            -
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 333 
     | 
    
         
            +
                        * [throws an exception](./spec/acceptance/realtime/channel_spec.rb#L1266)
         
     | 
| 
       255 
334 
     | 
    
         
             
                      * with an empty client_id in the message
         
     | 
| 
       256 
     | 
    
         
            -
                        * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 335 
     | 
    
         
            +
                        * [succeeds and publishes with an implicit client_id](./spec/acceptance/realtime/channel_spec.rb#L1273)
         
     | 
| 
       257 
336 
     | 
    
         
             
                * #subscribe
         
     | 
| 
       258 
337 
     | 
    
         
             
                  * with an event argument
         
     | 
| 
       259 
     | 
    
         
            -
                    * [subscribes for a single event](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 338 
     | 
    
         
            +
                    * [subscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1289)
         
     | 
| 
       260 
339 
     | 
    
         
             
                  * before attach
         
     | 
| 
       261 
     | 
    
         
            -
                    * [receives messages as soon as attached](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 340 
     | 
    
         
            +
                    * [receives messages as soon as attached](./spec/acceptance/realtime/channel_spec.rb#L1299)
         
     | 
| 
       262 
341 
     | 
    
         
             
                  * with no event argument
         
     | 
| 
       263 
     | 
    
         
            -
                    * [subscribes for all events](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 342 
     | 
    
         
            +
                    * [subscribes for all events](./spec/acceptance/realtime/channel_spec.rb#L1313)
         
     | 
| 
      
 343 
     | 
    
         
            +
                  * with a callback that raises an exception
         
     | 
| 
      
 344 
     | 
    
         
            +
                    * [logs the error and continues](./spec/acceptance/realtime/channel_spec.rb#L1325)
         
     | 
| 
       264 
345 
     | 
    
         
             
                  * many times with different event names
         
     | 
| 
       265 
     | 
    
         
            -
                    * [filters events accordingly to each callback](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 346 
     | 
    
         
            +
                    * [filters events accordingly to each callback](./spec/acceptance/realtime/channel_spec.rb#L1344)
         
     | 
| 
       266 
347 
     | 
    
         
             
                * #unsubscribe
         
     | 
| 
       267 
348 
     | 
    
         
             
                  * with an event argument
         
     | 
| 
       268 
     | 
    
         
            -
                    * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 349 
     | 
    
         
            +
                    * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1367)
         
     | 
| 
       269 
350 
     | 
    
         
             
                  * with no event argument
         
     | 
| 
       270 
     | 
    
         
            -
                    * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 351 
     | 
    
         
            +
                    * [unsubscribes for a single event](./spec/acceptance/realtime/channel_spec.rb#L1380)
         
     | 
| 
       271 
352 
     | 
    
         
             
                * when connection state changes to
         
     | 
| 
       272 
353 
     | 
    
         
             
                  * :failed
         
     | 
| 
      
 354 
     | 
    
         
            +
                    * an :attaching channel
         
     | 
| 
      
 355 
     | 
    
         
            +
                      * [transitions state to :failed (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1403)
         
     | 
| 
       273 
356 
     | 
    
         
             
                    * an :attached channel
         
     | 
| 
       274 
     | 
    
         
            -
                      * [transitions state to :failed](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       275 
     | 
    
         
            -
                      * [ 
     | 
| 
       276 
     | 
    
         
            -
                      * [updates the channel error_reason](./spec/acceptance/realtime/channel_spec.rb#L994)
         
     | 
| 
      
 357 
     | 
    
         
            +
                      * [transitions state to :failed (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1420)
         
     | 
| 
      
 358 
     | 
    
         
            +
                      * [updates the channel error_reason (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1432)
         
     | 
| 
       277 
359 
     | 
    
         
             
                    * a :detached channel
         
     | 
| 
       278 
     | 
    
         
            -
                      * [remains in the :detached state](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 360 
     | 
    
         
            +
                      * [remains in the :detached state (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1446)
         
     | 
| 
       279 
361 
     | 
    
         
             
                    * a :failed channel
         
     | 
| 
       280 
     | 
    
         
            -
                      * [remains in the :failed state and ignores the failure error](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 362 
     | 
    
         
            +
                      * [remains in the :failed state and ignores the failure error (#RTL3a)](./spec/acceptance/realtime/channel_spec.rb#L1465)
         
     | 
| 
       281 
363 
     | 
    
         
             
                    * a channel ATTACH request
         
     | 
| 
       282 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 364 
     | 
    
         
            +
                      * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1485)
         
     | 
| 
       283 
365 
     | 
    
         
             
                  * :closed
         
     | 
| 
       284 
366 
     | 
    
         
             
                    * an :attached channel
         
     | 
| 
       285 
     | 
    
         
            -
                      * [transitions state to :detached](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 367 
     | 
    
         
            +
                      * [transitions state to :detached (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1501)
         
     | 
| 
      
 368 
     | 
    
         
            +
                    * an :attaching channel (#RTL3b)
         
     | 
| 
      
 369 
     | 
    
         
            +
                      * [transitions state to :detached](./spec/acceptance/realtime/channel_spec.rb#L1512)
         
     | 
| 
       286 
370 
     | 
    
         
             
                    * a :detached channel
         
     | 
| 
       287 
     | 
    
         
            -
                      * [remains in the :detached state](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 371 
     | 
    
         
            +
                      * [remains in the :detached state (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1527)
         
     | 
| 
       288 
372 
     | 
    
         
             
                    * a :failed channel
         
     | 
| 
       289 
     | 
    
         
            -
                      * [remains in the :failed state and retains the error_reason](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 373 
     | 
    
         
            +
                      * [remains in the :failed state and retains the error_reason (#RTL3b)](./spec/acceptance/realtime/channel_spec.rb#L1547)
         
     | 
| 
       290 
374 
     | 
    
         
             
                    * a channel ATTACH request when connection CLOSED
         
     | 
| 
       291 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 375 
     | 
    
         
            +
                      * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1567)
         
     | 
| 
       292 
376 
     | 
    
         
             
                    * a channel ATTACH request when connection CLOSING
         
     | 
| 
       293 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 377 
     | 
    
         
            +
                      * [fails the deferrable (#RTL4b)](./spec/acceptance/realtime/channel_spec.rb#L1581)
         
     | 
| 
       294 
378 
     | 
    
         
             
                  * :suspended
         
     | 
| 
      
 379 
     | 
    
         
            +
                    * an :attaching channel
         
     | 
| 
      
 380 
     | 
    
         
            +
                      * [transitions state to :suspended (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1597)
         
     | 
| 
       295 
381 
     | 
    
         
             
                    * an :attached channel
         
     | 
| 
       296 
     | 
    
         
            -
                      * [transitions state to : 
     | 
| 
      
 382 
     | 
    
         
            +
                      * [transitions state to :suspended (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1611)
         
     | 
| 
      
 383 
     | 
    
         
            +
                      * [transitions state automatically to :attaching once the connection is re-established (#RTN15c3)](./spec/acceptance/realtime/channel_spec.rb#L1620)
         
     | 
| 
       297 
384 
     | 
    
         
             
                    * a :detached channel
         
     | 
| 
       298 
     | 
    
         
            -
                      * [remains in the :detached state](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 385 
     | 
    
         
            +
                      * [remains in the :detached state (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1634)
         
     | 
| 
       299 
386 
     | 
    
         
             
                    * a :failed channel
         
     | 
| 
       300 
     | 
    
         
            -
                      * [remains in the :failed state and retains the error_reason](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       301 
     | 
    
         
            -
                    * a channel ATTACH request when connection SUSPENDED
         
     | 
| 
       302 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 387 
     | 
    
         
            +
                      * [remains in the :failed state and retains the error_reason (#RTL3c)](./spec/acceptance/realtime/channel_spec.rb#L1654)
         
     | 
| 
      
 388 
     | 
    
         
            +
                    * a channel ATTACH request when connection SUSPENDED (#RTL4b)
         
     | 
| 
      
 389 
     | 
    
         
            +
                      * [fails the deferrable](./spec/acceptance/realtime/channel_spec.rb#L1676)
         
     | 
| 
      
 390 
     | 
    
         
            +
                  * :connected
         
     | 
| 
      
 391 
     | 
    
         
            +
                    * a :suspended channel
         
     | 
| 
      
 392 
     | 
    
         
            +
                      * [is automatically reattached (#RTL3d)](./spec/acceptance/realtime/channel_spec.rb#L1692)
         
     | 
| 
      
 393 
     | 
    
         
            +
                      * when re-attach attempt fails
         
     | 
| 
      
 394 
     | 
    
         
            +
                        * [returns to a suspended state (#RTL3d)](./spec/acceptance/realtime/channel_spec.rb#L1709)
         
     | 
| 
      
 395 
     | 
    
         
            +
                  * :disconnected
         
     | 
| 
      
 396 
     | 
    
         
            +
                    * with an initialized channel
         
     | 
| 
      
 397 
     | 
    
         
            +
                      * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1735)
         
     | 
| 
      
 398 
     | 
    
         
            +
                    * with an attaching channel
         
     | 
| 
      
 399 
     | 
    
         
            +
                      * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1748)
         
     | 
| 
      
 400 
     | 
    
         
            +
                    * with an attached channel
         
     | 
| 
      
 401 
     | 
    
         
            +
                      * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1763)
         
     | 
| 
      
 402 
     | 
    
         
            +
                    * with a detached channel
         
     | 
| 
      
 403 
     | 
    
         
            +
                      * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1775)
         
     | 
| 
      
 404 
     | 
    
         
            +
                    * with a failed channel
         
     | 
| 
      
 405 
     | 
    
         
            +
                      * [has no effect on the channel states (#RTL3e)](./spec/acceptance/realtime/channel_spec.rb#L1797)
         
     | 
| 
       303 
406 
     | 
    
         
             
                * #presence
         
     | 
| 
       304 
     | 
    
         
            -
                  * [returns a Ably::Realtime::Presence object](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 407 
     | 
    
         
            +
                  * [returns a Ably::Realtime::Presence object](./spec/acceptance/realtime/channel_spec.rb#L1812)
         
     | 
| 
       305 
408 
     | 
    
         
             
                * channel state change
         
     | 
| 
       306 
     | 
    
         
            -
                  * [emits a ChannelStateChange object](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 409 
     | 
    
         
            +
                  * [emits a ChannelStateChange object](./spec/acceptance/realtime/channel_spec.rb#L1819)
         
     | 
| 
       307 
410 
     | 
    
         
             
                  * ChannelStateChange object
         
     | 
| 
       308 
     | 
    
         
            -
                    * [has current state](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       309 
     | 
    
         
            -
                    * [has a previous state](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
       310 
     | 
    
         
            -
                    * [has  
     | 
| 
      
 411 
     | 
    
         
            +
                    * [has current state](./spec/acceptance/realtime/channel_spec.rb#L1828)
         
     | 
| 
      
 412 
     | 
    
         
            +
                    * [has a previous state](./spec/acceptance/realtime/channel_spec.rb#L1837)
         
     | 
| 
      
 413 
     | 
    
         
            +
                    * [has the event that generated the state change (#TA5)](./spec/acceptance/realtime/channel_spec.rb#L1846)
         
     | 
| 
      
 414 
     | 
    
         
            +
                    * [has an empty reason when there is no error](./spec/acceptance/realtime/channel_spec.rb#L1864)
         
     | 
| 
       311 
415 
     | 
    
         
             
                    * on failure
         
     | 
| 
       312 
     | 
    
         
            -
                      * [has a reason Error object when there is an error on the channel](./spec/acceptance/realtime/channel_spec.rb# 
     | 
| 
      
 416 
     | 
    
         
            +
                      * [has a reason Error object when there is an error on the channel](./spec/acceptance/realtime/channel_spec.rb#L1877)
         
     | 
| 
      
 417 
     | 
    
         
            +
                    * #resume (#RTL2f)
         
     | 
| 
      
 418 
     | 
    
         
            +
                      * [is false when a channel first attaches](./spec/acceptance/realtime/channel_spec.rb#L1890)
         
     | 
| 
      
 419 
     | 
    
         
            +
                      * PENDING: *[is true when a connection is recovered and the channel is attached](./spec/acceptance/realtime/channel_spec.rb#L1898)*
         
     | 
| 
      
 420 
     | 
    
         
            +
                      * [is false when a connection fails to recover and the channel is attached](./spec/acceptance/realtime/channel_spec.rb#L1919)
         
     | 
| 
      
 421 
     | 
    
         
            +
                      * when a resume fails
         
     | 
| 
      
 422 
     | 
    
         
            +
                        * [is false when a resume fails to recover and the channel is automatically re-attached](./spec/acceptance/realtime/channel_spec.rb#L1941)
         
     | 
| 
      
 423 
     | 
    
         
            +
                  * moves to
         
     | 
| 
      
 424 
     | 
    
         
            +
                    * suspended
         
     | 
| 
      
 425 
     | 
    
         
            +
                      * [all queued messages fail with NACK (#RTL11)](./spec/acceptance/realtime/channel_spec.rb#L1960)
         
     | 
| 
      
 426 
     | 
    
         
            +
                      * [all published messages awaiting an ACK do nothing (#RTL11a)](./spec/acceptance/realtime/channel_spec.rb#L1983)
         
     | 
| 
      
 427 
     | 
    
         
            +
                    * detached
         
     | 
| 
      
 428 
     | 
    
         
            +
                      * [all queued messages fail with NACK (#RTL11)](./spec/acceptance/realtime/channel_spec.rb#L1960)
         
     | 
| 
      
 429 
     | 
    
         
            +
                      * [all published messages awaiting an ACK do nothing (#RTL11a)](./spec/acceptance/realtime/channel_spec.rb#L1983)
         
     | 
| 
      
 430 
     | 
    
         
            +
                    * failed
         
     | 
| 
      
 431 
     | 
    
         
            +
                      * [all queued messages fail with NACK (#RTL11)](./spec/acceptance/realtime/channel_spec.rb#L1960)
         
     | 
| 
      
 432 
     | 
    
         
            +
                      * [all published messages awaiting an ACK do nothing (#RTL11a)](./spec/acceptance/realtime/channel_spec.rb#L1983)
         
     | 
| 
      
 433 
     | 
    
         
            +
                * when it receives a server-initiated DETACHED (#RTL13)
         
     | 
| 
      
 434 
     | 
    
         
            +
                  * and channel is initialized (#RTL13)
         
     | 
| 
      
 435 
     | 
    
         
            +
                    * [does nothing](./spec/acceptance/realtime/channel_spec.rb#L2017)
         
     | 
| 
      
 436 
     | 
    
         
            +
                  * and channel is failed
         
     | 
| 
      
 437 
     | 
    
         
            +
                    * [does nothing (#RTL13)](./spec/acceptance/realtime/channel_spec.rb#L2038)
         
     | 
| 
      
 438 
     | 
    
         
            +
                  * and channel is attached
         
     | 
| 
      
 439 
     | 
    
         
            +
                    * [reattaches immediately (#RTL13a)](./spec/acceptance/realtime/channel_spec.rb#L2054)
         
     | 
| 
      
 440 
     | 
    
         
            +
                  * and channel is suspended
         
     | 
| 
      
 441 
     | 
    
         
            +
                    * [reattaches immediately (#RTL13a)](./spec/acceptance/realtime/channel_spec.rb#L2070)
         
     | 
| 
      
 442 
     | 
    
         
            +
                  * and channel is attaching
         
     | 
| 
      
 443 
     | 
    
         
            +
                    * [will move to the SUSPENDED state and then attempt to ATTACH with the ATTACHING state (#RTL13b)](./spec/acceptance/realtime/channel_spec.rb#L2092)
         
     | 
| 
      
 444 
     | 
    
         
            +
                * when it receives an ERROR ProtocolMessage
         
     | 
| 
      
 445 
     | 
    
         
            +
                  * [should transition to the failed state and the error_reason should be set (#RTL14)](./spec/acceptance/realtime/channel_spec.rb#L2140)
         
     | 
| 
       313 
446 
     | 
    
         | 
| 
       314 
447 
     | 
    
         
             
            ### Ably::Realtime::Channels
         
     | 
| 
       315 
448 
     | 
    
         
             
            _(see [spec/acceptance/realtime/channels_spec.rb](./spec/acceptance/realtime/channels_spec.rb))_
         
     | 
| 
         @@ -345,14 +478,14 @@ _(see [spec/acceptance/realtime/client_spec.rb](./spec/acceptance/realtime/clien 
     | 
|
| 
       345 
478 
     | 
    
         
             
                      * and a pre-generated Token provided with the :token option
         
     | 
| 
       346 
479 
     | 
    
         
             
                        * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L52)
         
     | 
| 
       347 
480 
     | 
    
         
             
                      * with valid :key and :use_token_auth option set to true
         
     | 
| 
       348 
     | 
    
         
            -
                        * [automatically  
     | 
| 
      
 481 
     | 
    
         
            +
                        * [automatically authorizes on connect and generates a token](./spec/acceptance/realtime/client_spec.rb#L65)
         
     | 
| 
       349 
482 
     | 
    
         
             
                      * with client_id
         
     | 
| 
       350 
483 
     | 
    
         
             
                        * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L78)
         
     | 
| 
       351 
484 
     | 
    
         
             
                    * with TLS disabled
         
     | 
| 
       352 
485 
     | 
    
         
             
                      * and a pre-generated Token provided with the :token option
         
     | 
| 
       353 
486 
     | 
    
         
             
                        * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L52)
         
     | 
| 
       354 
487 
     | 
    
         
             
                      * with valid :key and :use_token_auth option set to true
         
     | 
| 
       355 
     | 
    
         
            -
                        * [automatically  
     | 
| 
      
 488 
     | 
    
         
            +
                        * [automatically authorizes on connect and generates a token](./spec/acceptance/realtime/client_spec.rb#L65)
         
     | 
| 
       356 
489 
     | 
    
         
             
                      * with client_id
         
     | 
| 
       357 
490 
     | 
    
         
             
                        * [connects using token auth](./spec/acceptance/realtime/client_spec.rb#L78)
         
     | 
| 
       358 
491 
     | 
    
         
             
                    * with a Proc for the :auth_callback option
         
     | 
| 
         @@ -381,6 +514,13 @@ _(see [spec/acceptance/realtime/client_spec.rb](./spec/acceptance/realtime/clien 
     | 
|
| 
       381 
514 
     | 
    
         
             
                  * [provides access to the Channels collection object](./spec/acceptance/realtime/client_spec.rb#L220)
         
     | 
| 
       382 
515 
     | 
    
         
             
                * #auth
         
     | 
| 
       383 
516 
     | 
    
         
             
                  * [provides access to the Realtime::Auth object](./spec/acceptance/realtime/client_spec.rb#L227)
         
     | 
| 
      
 517 
     | 
    
         
            +
                * #request (#RSC19*)
         
     | 
| 
      
 518 
     | 
    
         
            +
                  * get
         
     | 
| 
      
 519 
     | 
    
         
            +
                    * [returns an HttpPaginatedResponse object](./spec/acceptance/realtime/client_spec.rb#L237)
         
     | 
| 
      
 520 
     | 
    
         
            +
                    * 404 request to invalid URL
         
     | 
| 
      
 521 
     | 
    
         
            +
                      * [returns an object with 404 status code and error message](./spec/acceptance/realtime/client_spec.rb#L246)
         
     | 
| 
      
 522 
     | 
    
         
            +
                    * paged results
         
     | 
| 
      
 523 
     | 
    
         
            +
                      * [provides paging](./spec/acceptance/realtime/client_spec.rb#L260)
         
     | 
| 
       384 
524 
     | 
    
         | 
| 
       385 
525 
     | 
    
         
             
            ### Ably::Realtime::Connection failures
         
     | 
| 
       386 
526 
     | 
    
         
             
            _(see [spec/acceptance/realtime/connection_failures_spec.rb](./spec/acceptance/realtime/connection_failures_spec.rb))_
         
     | 
| 
         @@ -388,68 +528,121 @@ _(see [spec/acceptance/realtime/connection_failures_spec.rb](./spec/acceptance/r 
     | 
|
| 
       388 
528 
     | 
    
         
             
                * authentication failure
         
     | 
| 
       389 
529 
     | 
    
         
             
                  * when API key is invalid
         
     | 
| 
       390 
530 
     | 
    
         
             
                    * with invalid app part of the key
         
     | 
| 
       391 
     | 
    
         
            -
                      * [enters the failed state and returns a not found error](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 531 
     | 
    
         
            +
                      * [enters the failed state and returns a not found error](./spec/acceptance/realtime/connection_failures_spec.rb#L29)
         
     | 
| 
       392 
532 
     | 
    
         
             
                    * with invalid key name part of the key
         
     | 
| 
       393 
     | 
    
         
            -
                      * [enters the failed state and returns an authorization error](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 533 
     | 
    
         
            +
                      * [enters the failed state and returns an authorization error](./spec/acceptance/realtime/connection_failures_spec.rb#L44)
         
     | 
| 
      
 534 
     | 
    
         
            +
                  * with auth_url
         
     | 
| 
      
 535 
     | 
    
         
            +
                    * opening a new connection
         
     | 
| 
      
 536 
     | 
    
         
            +
                      * request fails due to network failure
         
     | 
| 
      
 537 
     | 
    
         
            +
                        * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L62)
         
     | 
| 
      
 538 
     | 
    
         
            +
                      * request fails due to invalid content
         
     | 
| 
      
 539 
     | 
    
         
            +
                        * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L92)
         
     | 
| 
      
 540 
     | 
    
         
            +
                    * existing CONNECTED connection
         
     | 
| 
      
 541 
     | 
    
         
            +
                      * authorize request failure leaves connection in existing condition
         
     | 
| 
      
 542 
     | 
    
         
            +
                        * [the connection remains in the CONNECTED state and authorize fails (#RSA4c, #RSA4c1, #RSA4c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L120)
         
     | 
| 
      
 543 
     | 
    
         
            +
                  * with auth_callback
         
     | 
| 
      
 544 
     | 
    
         
            +
                    * opening a new connection
         
     | 
| 
      
 545 
     | 
    
         
            +
                      * when callback fails due to an exception
         
     | 
| 
      
 546 
     | 
    
         
            +
                        * [the connection moves to the disconnected state and tries again, returning again to the disconnected state (#RSA4c, #RSA4c1, #RSA4c2)](./spec/acceptance/realtime/connection_failures_spec.rb#L148)
         
     | 
| 
      
 547 
     | 
    
         
            +
                      * existing CONNECTED connection
         
     | 
| 
      
 548 
     | 
    
         
            +
                        * when callback fails due to the request taking longer than realtime_request_timeout
         
     | 
| 
      
 549 
     | 
    
         
            +
                          * [the authorization request fails as configured in the realtime_request_timeout (#RSA4c, #RSA4c1, #RSA4c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L179)
         
     | 
| 
       394 
550 
     | 
    
         
             
                * automatic connection retry
         
     | 
| 
       395 
551 
     | 
    
         
             
                  * with invalid WebSocket host
         
     | 
| 
       396 
552 
     | 
    
         
             
                    * when disconnected
         
     | 
| 
       397 
     | 
    
         
            -
                      * [enters the suspended state after multiple attempts to connect](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 553 
     | 
    
         
            +
                      * [enters the suspended state after multiple attempts to connect](./spec/acceptance/realtime/connection_failures_spec.rb#L244)
         
     | 
| 
       398 
554 
     | 
    
         
             
                      * for the first time
         
     | 
| 
       399 
     | 
    
         
            -
                        * [reattempts connection immediately and then waits disconnected_retry_timeout for a subsequent attempt](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 555 
     | 
    
         
            +
                        * [reattempts connection immediately and then waits disconnected_retry_timeout for a subsequent attempt](./spec/acceptance/realtime/connection_failures_spec.rb#L265)
         
     | 
| 
       400 
556 
     | 
    
         
             
                      * #close
         
     | 
| 
       401 
     | 
    
         
            -
                        * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 557 
     | 
    
         
            +
                        * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L282)
         
     | 
| 
       402 
558 
     | 
    
         
             
                    * when connection state is :suspended
         
     | 
| 
       403 
     | 
    
         
            -
                      * [stays in the suspended state after any number of reconnection attempts](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 559 
     | 
    
         
            +
                      * [stays in the suspended state after any number of reconnection attempts](./spec/acceptance/realtime/connection_failures_spec.rb#L301)
         
     | 
| 
       404 
560 
     | 
    
         
             
                      * for the first time
         
     | 
| 
       405 
     | 
    
         
            -
                        * [waits suspended_retry_timeout before attempting to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 561 
     | 
    
         
            +
                        * [waits suspended_retry_timeout before attempting to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb#L324)
         
     | 
| 
       406 
562 
     | 
    
         
             
                      * #close
         
     | 
| 
       407 
     | 
    
         
            -
                        * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 563 
     | 
    
         
            +
                        * [transitions connection state to :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L346)
         
     | 
| 
       408 
564 
     | 
    
         
             
                    * when connection state is :failed
         
     | 
| 
       409 
565 
     | 
    
         
             
                      * #close
         
     | 
| 
       410 
     | 
    
         
            -
                        * [will not transition state to :close and  
     | 
| 
      
 566 
     | 
    
         
            +
                        * [will not transition state to :close and fails with an InvalidStateChange exception](./spec/acceptance/realtime/connection_failures_spec.rb#L365)
         
     | 
| 
       411 
567 
     | 
    
         
             
                    * #error_reason
         
     | 
| 
       412 
     | 
    
         
            -
                      * [contains the error when state is disconnected](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
       413 
     | 
    
         
            -
                      * [contains the error when state is suspended](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
       414 
     | 
    
         
            -
                      * [contains the error when state is failed](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
       415 
     | 
    
         
            -
                      * [is reset to nil when :connected](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
       416 
     | 
    
         
            -
                      * [is reset to nil when :closed](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 568 
     | 
    
         
            +
                      * [contains the error when state is disconnected](./spec/acceptance/realtime/connection_failures_spec.rb#L386)
         
     | 
| 
      
 569 
     | 
    
         
            +
                      * [contains the error when state is suspended](./spec/acceptance/realtime/connection_failures_spec.rb#L386)
         
     | 
| 
      
 570 
     | 
    
         
            +
                      * [contains the error when state is failed](./spec/acceptance/realtime/connection_failures_spec.rb#L386)
         
     | 
| 
      
 571 
     | 
    
         
            +
                      * [is reset to nil when :connected](./spec/acceptance/realtime/connection_failures_spec.rb#L400)
         
     | 
| 
      
 572 
     | 
    
         
            +
                      * [is reset to nil when :closed](./spec/acceptance/realtime/connection_failures_spec.rb#L411)
         
     | 
| 
       417 
573 
     | 
    
         
             
                  * #connect
         
     | 
| 
       418 
574 
     | 
    
         
             
                    * connection opening times out
         
     | 
| 
       419 
     | 
    
         
            -
                      * [attempts to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 575 
     | 
    
         
            +
                      * [attempts to reconnect](./spec/acceptance/realtime/connection_failures_spec.rb#L442)
         
     | 
| 
       420 
576 
     | 
    
         
             
                      * when retry intervals are stubbed to attempt reconnection quickly
         
     | 
| 
       421 
     | 
    
         
            -
                        * [never calls the provided success block](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 577 
     | 
    
         
            +
                        * [never calls the provided success block](./spec/acceptance/realtime/connection_failures_spec.rb#L466)
         
     | 
| 
       422 
578 
     | 
    
         
             
                * connection resume
         
     | 
| 
       423 
579 
     | 
    
         
             
                  * when DISCONNECTED ProtocolMessage received from the server
         
     | 
| 
       424 
     | 
    
         
            -
                    * [reconnects automatically and immediately](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 580 
     | 
    
         
            +
                    * [reconnects automatically and immediately](./spec/acceptance/realtime/connection_failures_spec.rb#L497)
         
     | 
| 
       425 
581 
     | 
    
         
             
                    * and subsequently fails to reconnect
         
     | 
| 
       426 
     | 
    
         
            -
                      * [retries every 15 seconds](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
       427 
     | 
    
         
            -
                  * when websocket transport is  
     | 
| 
       428 
     | 
    
         
            -
                    * [reconnects automatically](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 582 
     | 
    
         
            +
                      * [retries every 15 seconds](./spec/acceptance/realtime/connection_failures_spec.rb#L529)
         
     | 
| 
      
 583 
     | 
    
         
            +
                  * when websocket transport is abruptly disconnected
         
     | 
| 
      
 584 
     | 
    
         
            +
                    * [reconnects automatically](./spec/acceptance/realtime/connection_failures_spec.rb#L572)
         
     | 
| 
      
 585 
     | 
    
         
            +
                    * hosts used
         
     | 
| 
      
 586 
     | 
    
         
            +
                      * [reconnects with the default host](./spec/acceptance/realtime/connection_failures_spec.rb#L588)
         
     | 
| 
       429 
587 
     | 
    
         
             
                  * after successfully reconnecting and resuming
         
     | 
| 
       430 
     | 
    
         
            -
                    * [retains connection_id and updates the connection_key](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
       431 
     | 
    
         
            -
                    * [ 
     | 
| 
       432 
     | 
    
         
            -
                    * [retains channel subscription state](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 588 
     | 
    
         
            +
                    * [retains connection_id and updates the connection_key (#RTN15e, #RTN16d)](./spec/acceptance/realtime/connection_failures_spec.rb#L612)
         
     | 
| 
      
 589 
     | 
    
         
            +
                    * [includes the error received in the connection state change from Ably but leaves the channels attached](./spec/acceptance/realtime/connection_failures_spec.rb#L627)
         
     | 
| 
      
 590 
     | 
    
         
            +
                    * [retains channel subscription state](./spec/acceptance/realtime/connection_failures_spec.rb#L653)
         
     | 
| 
      
 591 
     | 
    
         
            +
                    * [retains the client_serial (#RTN15c2, #RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L714)
         
     | 
| 
       433 
592 
     | 
    
         
             
                    * when messages were published whilst the client was disconnected
         
     | 
| 
       434 
     | 
    
         
            -
                      * [receives the messages published whilst offline](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 593 
     | 
    
         
            +
                      * [receives the messages published whilst offline](./spec/acceptance/realtime/connection_failures_spec.rb#L681)
         
     | 
| 
       435 
594 
     | 
    
         
             
                  * when failing to resume
         
     | 
| 
       436 
595 
     | 
    
         
             
                    * because the connection_key is not or no longer valid
         
     | 
| 
       437 
     | 
    
         
            -
                      * [updates the connection_id and connection_key](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
       438 
     | 
    
         
            -
                      * [ 
     | 
| 
       439 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 596 
     | 
    
         
            +
                      * [updates the connection_id and connection_key](./spec/acceptance/realtime/connection_failures_spec.rb#L754)
         
     | 
| 
      
 597 
     | 
    
         
            +
                      * [issue a reattach for all attached channels and fail all message awaiting an ACK (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L769)
         
     | 
| 
      
 598 
     | 
    
         
            +
                      * [issue a reattach for all attaching channels and fail all queued messages (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L807)
         
     | 
| 
      
 599 
     | 
    
         
            +
                      * [issue a attach for all suspended channels (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L843)
         
     | 
| 
      
 600 
     | 
    
         
            +
                      * [sets the error reason on each channel](./spec/acceptance/realtime/connection_failures_spec.rb#L881)
         
     | 
| 
      
 601 
     | 
    
         
            +
                      * [resets the client_serial (#RTN15c3)](./spec/acceptance/realtime/connection_failures_spec.rb#L896)
         
     | 
| 
      
 602 
     | 
    
         
            +
                    * as the DISCONNECTED window to resume has passed
         
     | 
| 
      
 603 
     | 
    
         
            +
                      * [starts a new connection automatically and does not try and resume](./spec/acceptance/realtime/connection_failures_spec.rb#L933)
         
     | 
| 
      
 604 
     | 
    
         
            +
                  * when an ERROR protocol message is received
         
     | 
| 
      
 605 
     | 
    
         
            +
                    * whilst connecting
         
     | 
| 
      
 606 
     | 
    
         
            +
                      * with a token error code in the range 40140 <= code < 40150 (#RTN14b)
         
     | 
| 
      
 607 
     | 
    
         
            +
                        * [triggers a re-authentication](./spec/acceptance/realtime/connection_failures_spec.rb#L960)
         
     | 
| 
      
 608 
     | 
    
         
            +
                      * with an error code indicating an error other than a token failure (#RTN14g, #RTN15i)
         
     | 
| 
      
 609 
     | 
    
         
            +
                        * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L976)
         
     | 
| 
      
 610 
     | 
    
         
            +
                      * with no error code indicating an error other than a token failure (#RTN14g, #RTN15i)
         
     | 
| 
      
 611 
     | 
    
         
            +
                        * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L989)
         
     | 
| 
      
 612 
     | 
    
         
            +
                    * whilst connected
         
     | 
| 
      
 613 
     | 
    
         
            +
                      * with a token error code in the range 40140 <= code < 40150 (#RTN14b)
         
     | 
| 
      
 614 
     | 
    
         
            +
                        * [triggers a re-authentication](./spec/acceptance/realtime/connection_failures_spec.rb#L960)
         
     | 
| 
      
 615 
     | 
    
         
            +
                      * with an error code indicating an error other than a token failure (#RTN14g, #RTN15i)
         
     | 
| 
      
 616 
     | 
    
         
            +
                        * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L976)
         
     | 
| 
      
 617 
     | 
    
         
            +
                      * with no error code indicating an error other than a token failure (#RTN14g, #RTN15i)
         
     | 
| 
      
 618 
     | 
    
         
            +
                        * [causes the connection to fail](./spec/acceptance/realtime/connection_failures_spec.rb#L989)
         
     | 
| 
      
 619 
     | 
    
         
            +
                  * whilst resuming
         
     | 
| 
      
 620 
     | 
    
         
            +
                    * with a token error code in the region 40140 <= code < 40150 (RTN15c5)
         
     | 
| 
      
 621 
     | 
    
         
            +
                      * [triggers a re-authentication and then resumes the connection](./spec/acceptance/realtime/connection_failures_spec.rb#L1033)
         
     | 
| 
      
 622 
     | 
    
         
            +
                  * with any other error (#RTN15c4)
         
     | 
| 
      
 623 
     | 
    
         
            +
                    * [moves the connection to the failed state](./spec/acceptance/realtime/connection_failures_spec.rb#L1065)
         
     | 
| 
       440 
624 
     | 
    
         
             
                * fallback host feature
         
     | 
| 
       441 
625 
     | 
    
         
             
                  * with custom realtime websocket host option
         
     | 
| 
       442 
     | 
    
         
            -
                    * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 626 
     | 
    
         
            +
                    * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1109)
         
     | 
| 
       443 
627 
     | 
    
         
             
                  * with custom realtime websocket port option
         
     | 
| 
       444 
     | 
    
         
            -
                    * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 628 
     | 
    
         
            +
                    * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1127)
         
     | 
| 
       445 
629 
     | 
    
         
             
                  * with non-production environment
         
     | 
| 
       446 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 630 
     | 
    
         
            +
                    * [does not use a fallback host by default](./spec/acceptance/realtime/connection_failures_spec.rb#L1146)
         
     | 
| 
      
 631 
     | 
    
         
            +
                    * :fallback_hosts_use_default is true
         
     | 
| 
      
 632 
     | 
    
         
            +
                      * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k7)](./spec/acceptance/realtime/connection_failures_spec.rb#L1164)
         
     | 
| 
      
 633 
     | 
    
         
            +
                    * :fallback_hosts array is provided
         
     | 
| 
      
 634 
     | 
    
         
            +
                      * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1189)
         
     | 
| 
       447 
635 
     | 
    
         
             
                  * with production environment
         
     | 
| 
       448 
636 
     | 
    
         
             
                    * when the Internet is down
         
     | 
| 
       449 
     | 
    
         
            -
                      * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb# 
     | 
| 
      
 637 
     | 
    
         
            +
                      * [never uses a fallback host](./spec/acceptance/realtime/connection_failures_spec.rb#L1225)
         
     | 
| 
       450 
638 
     | 
    
         
             
                    * when the Internet is up
         
     | 
| 
       451 
     | 
    
         
            -
                      *  
     | 
| 
       452 
     | 
    
         
            -
             
     | 
| 
      
 639 
     | 
    
         
            +
                      * and default options
         
     | 
| 
      
 640 
     | 
    
         
            +
                        * [uses a fallback host + the original host once on every subsequent disconnected attempt until suspended](./spec/acceptance/realtime/connection_failures_spec.rb#L1248)
         
     | 
| 
      
 641 
     | 
    
         
            +
                        * [uses the primary host when suspended, and then every fallback host and the primary host again on every subsequent suspended attempt](./spec/acceptance/realtime/connection_failures_spec.rb#L1267)
         
     | 
| 
      
 642 
     | 
    
         
            +
                      * :fallback_hosts array is provided by an empty array
         
     | 
| 
      
 643 
     | 
    
         
            +
                        * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1297)
         
     | 
| 
      
 644 
     | 
    
         
            +
                      * :fallback_hosts array is provided
         
     | 
| 
      
 645 
     | 
    
         
            +
                        * [uses a fallback host on every subsequent disconnected attempt until suspended (#RTN17b, #TO3k6)](./spec/acceptance/realtime/connection_failures_spec.rb#L1317)
         
     | 
| 
       453 
646 
     | 
    
         | 
| 
       454 
647 
     | 
    
         
             
            ### Ably::Realtime::Connection
         
     | 
| 
       455 
648 
     | 
    
         
             
            _(see [spec/acceptance/realtime/connection_spec.rb](./spec/acceptance/realtime/connection_spec.rb))_
         
     | 
| 
         @@ -462,165 +655,203 @@ _(see [spec/acceptance/realtime/connection_spec.rb](./spec/acceptance/realtime/c 
     | 
|
| 
       462 
655 
     | 
    
         
             
                  * with token auth
         
     | 
| 
       463 
656 
     | 
    
         
             
                    * for renewable tokens
         
     | 
| 
       464 
657 
     | 
    
         
             
                      * that are valid for the duration of the test
         
     | 
| 
       465 
     | 
    
         
            -
                        * with valid pre  
     | 
| 
       466 
     | 
    
         
            -
                          * [uses the existing token created by Auth](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 658 
     | 
    
         
            +
                        * with valid pre authorized token expiring in the future
         
     | 
| 
      
 659 
     | 
    
         
            +
                          * [uses the existing token created by Auth](./spec/acceptance/realtime/connection_spec.rb#L65)
         
     | 
| 
       467 
660 
     | 
    
         
             
                        * with implicit authorisation
         
     | 
| 
       468 
     | 
    
         
            -
                          * [uses the token created by the implicit authorisation](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 661 
     | 
    
         
            +
                          * [uses the token created by the implicit authorisation](./spec/acceptance/realtime/connection_spec.rb#L77)
         
     | 
| 
       469 
662 
     | 
    
         
             
                      * that expire
         
     | 
| 
       470 
663 
     | 
    
         
             
                        * opening a new connection
         
     | 
| 
       471 
664 
     | 
    
         
             
                          * with almost expired tokens
         
     | 
| 
       472 
     | 
    
         
            -
                            * [renews token every time after it expires](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 665 
     | 
    
         
            +
                            * [renews token every time after it expires](./spec/acceptance/realtime/connection_spec.rb#L111)
         
     | 
| 
       473 
666 
     | 
    
         
             
                          * with immediately expired token
         
     | 
| 
       474 
     | 
    
         
            -
                            * [renews the token on connect, and makes one immediate subsequent attempt to obtain a new token](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 667 
     | 
    
         
            +
                            * [renews the token on connect, and makes one immediate subsequent attempt to obtain a new token (#RSA4b)](./spec/acceptance/realtime/connection_spec.rb#L141)
         
     | 
| 
       475 
668 
     | 
    
         
             
                            * when disconnected_retry_timeout is 0.5 seconds
         
     | 
| 
       476 
     | 
    
         
            -
                              * [renews the token on connect, and continues to attempt renew based on the retry schedule](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 669 
     | 
    
         
            +
                              * [renews the token on connect, and continues to attempt renew based on the retry schedule](./spec/acceptance/realtime/connection_spec.rb#L156)
         
     | 
| 
       477 
670 
     | 
    
         
             
                            * using implicit token auth
         
     | 
| 
       478 
     | 
    
         
            -
                              * [uses the primary host for subsequent connection and auth requests](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 671 
     | 
    
         
            +
                              * [uses the primary host for subsequent connection and auth requests](./spec/acceptance/realtime/connection_spec.rb#L186)
         
     | 
| 
       479 
672 
     | 
    
         
             
                        * when connected with a valid non-expired token
         
     | 
| 
       480 
673 
     | 
    
         
             
                          * that then expires following the connection being opened
         
     | 
| 
       481 
674 
     | 
    
         
             
                            * the server
         
     | 
| 
       482 
     | 
    
         
            -
                              * [disconnects the client, and the client automatically renews the token and then reconnects](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 675 
     | 
    
         
            +
                              * [disconnects the client, and the client automatically renews the token and then reconnects](./spec/acceptance/realtime/connection_spec.rb#L213)
         
     | 
| 
       483 
676 
     | 
    
         
             
                            * connection state
         
     | 
| 
       484 
     | 
    
         
            -
                              * [retains messages published when disconnected  
     | 
| 
      
 677 
     | 
    
         
            +
                              * PENDING: *[retains messages published when disconnected three times during authentication](./spec/acceptance/realtime/connection_spec.rb#L273)*
         
     | 
| 
       485 
678 
     | 
    
         
             
                            * and subsequent token is invalid
         
     | 
| 
       486 
     | 
    
         
            -
                              * [transitions the connection to the failed state](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 679 
     | 
    
         
            +
                              * [transitions the connection to the failed state](./spec/acceptance/realtime/connection_spec.rb#L309)
         
     | 
| 
       487 
680 
     | 
    
         
             
                    * for non-renewable tokens
         
     | 
| 
       488 
681 
     | 
    
         
             
                      * that are expired
         
     | 
| 
       489 
682 
     | 
    
         
             
                        * opening a new connection
         
     | 
| 
       490 
     | 
    
         
            -
                          * [transitions state to failed](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 683 
     | 
    
         
            +
                          * [transitions state to failed (#RSA4a)](./spec/acceptance/realtime/connection_spec.rb#L339)
         
     | 
| 
       491 
684 
     | 
    
         
             
                        * when connected
         
     | 
| 
       492 
     | 
    
         
            -
                          *  
     | 
| 
      
 685 
     | 
    
         
            +
                          * [transitions state to failed (#RSA4a)](./spec/acceptance/realtime/connection_spec.rb#L355)
         
     | 
| 
       493 
686 
     | 
    
         
             
                    * with opaque token string that contain an implicit client_id
         
     | 
| 
       494 
687 
     | 
    
         
             
                      * string
         
     | 
| 
       495 
     | 
    
         
            -
                        * [sets the Client#client_id and Auth#client_id once CONNECTED](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 688 
     | 
    
         
            +
                        * [sets the Client#client_id and Auth#client_id once CONNECTED](./spec/acceptance/realtime/connection_spec.rb#L375)
         
     | 
| 
       496 
689 
     | 
    
         
             
                        * that is incompatible with the current client client_id
         
     | 
| 
       497 
     | 
    
         
            -
                          * [fails the connection](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 690 
     | 
    
         
            +
                          * [fails the connection](./spec/acceptance/realtime/connection_spec.rb#L387)
         
     | 
| 
       498 
691 
     | 
    
         
             
                      * wildcard
         
     | 
| 
       499 
     | 
    
         
            -
                        * [configures the Client#client_id and Auth#client_id with a wildcard once CONNECTED](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 692 
     | 
    
         
            +
                        * [configures the Client#client_id and Auth#client_id with a wildcard once CONNECTED](./spec/acceptance/realtime/connection_spec.rb#L401)
         
     | 
| 
       500 
693 
     | 
    
         
             
                * initialization state changes
         
     | 
| 
       501 
694 
     | 
    
         
             
                  * with implicit #connect
         
     | 
| 
       502 
     | 
    
         
            -
                    * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 695 
     | 
    
         
            +
                    * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb#L433)
         
     | 
| 
       503 
696 
     | 
    
         
             
                  * with explicit #connect
         
     | 
| 
       504 
     | 
    
         
            -
                    * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 697 
     | 
    
         
            +
                    * [are emitted in order](./spec/acceptance/realtime/connection_spec.rb#L439)
         
     | 
| 
       505 
698 
     | 
    
         
             
                * #connect
         
     | 
| 
       506 
     | 
    
         
            -
                  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       507 
     | 
    
         
            -
                  * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       508 
     | 
    
         
            -
                  * [calls the provided block on success even if state changes to disconnected first](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 699 
     | 
    
         
            +
                  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb#L447)
         
     | 
| 
      
 700 
     | 
    
         
            +
                  * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb#L452)
         
     | 
| 
      
 701 
     | 
    
         
            +
                  * [calls the provided block on success even if state changes to disconnected first](./spec/acceptance/realtime/connection_spec.rb#L459)
         
     | 
| 
       509 
702 
     | 
    
         
             
                  * with invalid auth details
         
     | 
| 
       510 
     | 
    
         
            -
                    * [calls the Deferrable errback only once on connection failure](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 703 
     | 
    
         
            +
                    * [calls the Deferrable errback only once on connection failure](./spec/acceptance/realtime/connection_spec.rb#L488)
         
     | 
| 
       511 
704 
     | 
    
         
             
                  * when already connected
         
     | 
| 
       512 
     | 
    
         
            -
                    * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 705 
     | 
    
         
            +
                    * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb#L504)
         
     | 
| 
       513 
706 
     | 
    
         
             
                  * connection#id
         
     | 
| 
       514 
     | 
    
         
            -
                    * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 707 
     | 
    
         
            +
                    * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb#L518)
         
     | 
| 
       515 
708 
     | 
    
         
             
                  * connection#key
         
     | 
| 
       516 
     | 
    
         
            -
                    * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 709 
     | 
    
         
            +
                    * [is null before connecting](./spec/acceptance/realtime/connection_spec.rb#L525)
         
     | 
| 
       517 
710 
     | 
    
         
             
                  * once connected
         
     | 
| 
       518 
711 
     | 
    
         
             
                    * connection#id
         
     | 
| 
       519 
     | 
    
         
            -
                      * [is a string](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       520 
     | 
    
         
            -
                      * [is unique from the connection#key](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       521 
     | 
    
         
            -
                      * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 712 
     | 
    
         
            +
                      * [is a string](./spec/acceptance/realtime/connection_spec.rb#L536)
         
     | 
| 
      
 713 
     | 
    
         
            +
                      * [is unique from the connection#key](./spec/acceptance/realtime/connection_spec.rb#L543)
         
     | 
| 
      
 714 
     | 
    
         
            +
                      * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb#L550)
         
     | 
| 
       522 
715 
     | 
    
         
             
                    * connection#key
         
     | 
| 
       523 
     | 
    
         
            -
                      * [is a string](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       524 
     | 
    
         
            -
                      * [is unique from the connection#id](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       525 
     | 
    
         
            -
                      * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 716 
     | 
    
         
            +
                      * [is a string](./spec/acceptance/realtime/connection_spec.rb#L559)
         
     | 
| 
      
 717 
     | 
    
         
            +
                      * [is unique from the connection#id](./spec/acceptance/realtime/connection_spec.rb#L566)
         
     | 
| 
      
 718 
     | 
    
         
            +
                      * [is unique for every connection](./spec/acceptance/realtime/connection_spec.rb#L573)
         
     | 
| 
       526 
719 
     | 
    
         
             
                  * following a previous connection being opened and closed
         
     | 
| 
       527 
     | 
    
         
            -
                    * [reconnects and is provided with a new connection ID and connection key from the server](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 720 
     | 
    
         
            +
                    * [reconnects and is provided with a new connection ID and connection key from the server](./spec/acceptance/realtime/connection_spec.rb#L583)
         
     | 
| 
       528 
721 
     | 
    
         
             
                  * when closing
         
     | 
| 
       529 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 722 
     | 
    
         
            +
                    * [fails the deferrable before the connection is closed](./spec/acceptance/realtime/connection_spec.rb#L600)
         
     | 
| 
       530 
723 
     | 
    
         
             
                * #serial connection serial
         
     | 
| 
       531 
     | 
    
         
            -
                  * [is set to -1 when a new connection is opened](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       532 
     | 
    
         
            -
                  * [is set to 0 when a message sent ACK is received](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       533 
     | 
    
         
            -
                  * [is set to 1 when the second message sent ACK is received](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 724 
     | 
    
         
            +
                  * [is set to -1 when a new connection is opened](./spec/acceptance/realtime/connection_spec.rb#L617)
         
     | 
| 
      
 725 
     | 
    
         
            +
                  * [is set to 0 when a message sent ACK is received](./spec/acceptance/realtime/connection_spec.rb#L640)
         
     | 
| 
      
 726 
     | 
    
         
            +
                  * [is set to 1 when the second message sent ACK is received](./spec/acceptance/realtime/connection_spec.rb#L647)
         
     | 
| 
       534 
727 
     | 
    
         
             
                  * when a message is sent but the ACK has not yet been received
         
     | 
| 
       535 
     | 
    
         
            -
                    * [the sent message msgSerial is 0 but the connection serial remains at -1](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 728 
     | 
    
         
            +
                    * [the sent message msgSerial is 0 but the connection serial remains at -1](./spec/acceptance/realtime/connection_spec.rb#L625)
         
     | 
| 
       536 
729 
     | 
    
         
             
                * #close
         
     | 
| 
       537 
     | 
    
         
            -
                  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       538 
     | 
    
         
            -
                  * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 730 
     | 
    
         
            +
                  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/connection_spec.rb#L658)
         
     | 
| 
      
 731 
     | 
    
         
            +
                  * [calls the Deferrable callback on success](./spec/acceptance/realtime/connection_spec.rb#L665)
         
     | 
| 
       539 
732 
     | 
    
         
             
                  * when already closed
         
     | 
| 
       540 
     | 
    
         
            -
                    * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 733 
     | 
    
         
            +
                    * [does nothing and no further state changes are emitted](./spec/acceptance/realtime/connection_spec.rb#L676)
         
     | 
| 
       541 
734 
     | 
    
         
             
                  * when connection state is
         
     | 
| 
       542 
735 
     | 
    
         
             
                    * :initialized
         
     | 
| 
       543 
     | 
    
         
            -
                      * [changes the connection state to :closing and then immediately :closed without sending a ProtocolMessage CLOSE](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 736 
     | 
    
         
            +
                      * [changes the connection state to :closing and then immediately :closed without sending a ProtocolMessage CLOSE](./spec/acceptance/realtime/connection_spec.rb#L703)
         
     | 
| 
       544 
737 
     | 
    
         
             
                    * :connected
         
     | 
| 
       545 
     | 
    
         
            -
                      * [changes the connection state to :closing and waits for the server to confirm connection is :closed with a ProtocolMessage](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 738 
     | 
    
         
            +
                      * [changes the connection state to :closing and waits for the server to confirm connection is :closed with a ProtocolMessage](./spec/acceptance/realtime/connection_spec.rb#L720)
         
     | 
| 
       546 
739 
     | 
    
         
             
                      * with an unresponsive connection
         
     | 
| 
       547 
     | 
    
         
            -
                        * [force closes the connection when a :closed ProtocolMessage response is not received](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 740 
     | 
    
         
            +
                        * [force closes the connection when a :closed ProtocolMessage response is not received](./spec/acceptance/realtime/connection_spec.rb#L747)
         
     | 
| 
       548 
741 
     | 
    
         
             
                * #ping
         
     | 
| 
       549 
     | 
    
         
            -
                  * [echoes a heart beat](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       550 
     | 
    
         
            -
                  *  
     | 
| 
       551 
     | 
    
         
            -
             
     | 
| 
      
 742 
     | 
    
         
            +
                  * [echoes a heart beat (#RTN13a)](./spec/acceptance/realtime/connection_spec.rb#L769)
         
     | 
| 
      
 743 
     | 
    
         
            +
                  * [sends a unique ID in each protocol message (#RTN13e)](./spec/acceptance/realtime/connection_spec.rb#L779)
         
     | 
| 
      
 744 
     | 
    
         
            +
                  * [waits until the connection becomes CONNECTED when in the CONNETING state](./spec/acceptance/realtime/connection_spec.rb#L803)
         
     | 
| 
      
 745 
     | 
    
         
            +
                  * with incompatible states
         
     | 
| 
      
 746 
     | 
    
         
            +
                    * when not connected
         
     | 
| 
      
 747 
     | 
    
         
            +
                      * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L816)
         
     | 
| 
      
 748 
     | 
    
         
            +
                    * when suspended
         
     | 
| 
      
 749 
     | 
    
         
            +
                      * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L825)
         
     | 
| 
      
 750 
     | 
    
         
            +
                    * when failed
         
     | 
| 
      
 751 
     | 
    
         
            +
                      * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L837)
         
     | 
| 
      
 752 
     | 
    
         
            +
                    * when closed
         
     | 
| 
      
 753 
     | 
    
         
            +
                      * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L849)
         
     | 
| 
      
 754 
     | 
    
         
            +
                    * when it becomes closed
         
     | 
| 
      
 755 
     | 
    
         
            +
                      * [fails the deferrable (#RTN13b)](./spec/acceptance/realtime/connection_spec.rb#L863)
         
     | 
| 
       552 
756 
     | 
    
         
             
                  * with a success block that raises an exception
         
     | 
| 
       553 
     | 
    
         
            -
                    * [catches the exception and logs the error](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 757 
     | 
    
         
            +
                    * [catches the exception and logs the error](./spec/acceptance/realtime/connection_spec.rb#L876)
         
     | 
| 
       554 
758 
     | 
    
         
             
                  * when ping times out
         
     | 
| 
       555 
     | 
    
         
            -
                    * [logs a warning](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       556 
     | 
    
         
            -
                    * [yields to the block with a nil value](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 759 
     | 
    
         
            +
                    * [fails the deferrable logs a warning (#RTN13a, #RTN13c)](./spec/acceptance/realtime/connection_spec.rb#L890)
         
     | 
| 
      
 760 
     | 
    
         
            +
                    * [yields to the block with a nil value](./spec/acceptance/realtime/connection_spec.rb#L909)
         
     | 
| 
      
 761 
     | 
    
         
            +
                * Heartbeats (#RTN23)
         
     | 
| 
      
 762 
     | 
    
         
            +
                  * heartbeat interval
         
     | 
| 
      
 763 
     | 
    
         
            +
                    * when reduced artificially
         
     | 
| 
      
 764 
     | 
    
         
            +
                      * [is the sum of the max_idle_interval and realtime_request_timeout (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L936)
         
     | 
| 
      
 765 
     | 
    
         
            +
                      * [disconnects the transport if no heartbeat received since connected (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L946)
         
     | 
| 
      
 766 
     | 
    
         
            +
                      * [disconnects the transport if no heartbeat received since last event received (#RTN23a)](./spec/acceptance/realtime/connection_spec.rb#L957)
         
     | 
| 
      
 767 
     | 
    
         
            +
                  * transport-level heartbeats are supported in the websocket transport
         
     | 
| 
      
 768 
     | 
    
         
            +
                    * [provides the heartbeats argument in the websocket connection params (#RTN23b)](./spec/acceptance/realtime/connection_spec.rb#L972)
         
     | 
| 
      
 769 
     | 
    
         
            +
                    * PENDING: *[receives websocket heartbeat messages (#RTN23b) [slow test as need to wait for heartbeat]](./spec/acceptance/realtime/connection_spec.rb#L981)*
         
     | 
| 
      
 770 
     | 
    
         
            +
                  * with websocket heartbeats disabled (undocumented)
         
     | 
| 
      
 771 
     | 
    
         
            +
                    * [does not provide the heartbeats argument in the websocket connection params (#RTN23b)](./spec/acceptance/realtime/connection_spec.rb#L1000)
         
     | 
| 
      
 772 
     | 
    
         
            +
                    * [receives websocket protocol messages (#RTN23b) [slow test as need to wait for heartbeat]](./spec/acceptance/realtime/connection_spec.rb#L1009)
         
     | 
| 
       557 
773 
     | 
    
         
             
                * #details
         
     | 
| 
       558 
     | 
    
         
            -
                  * [is nil before connected](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       559 
     | 
    
         
            -
                  * [contains the ConnectionDetails object once connected](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       560 
     | 
    
         
            -
                  * [contains the new ConnectionDetails object once a subsequent connection is created](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 774 
     | 
    
         
            +
                  * [is nil before connected](./spec/acceptance/realtime/connection_spec.rb#L1026)
         
     | 
| 
      
 775 
     | 
    
         
            +
                  * [contains the ConnectionDetails object once connected (#RTN21)](./spec/acceptance/realtime/connection_spec.rb#L1033)
         
     | 
| 
      
 776 
     | 
    
         
            +
                  * [contains the new ConnectionDetails object once a subsequent connection is created (#RTN21)](./spec/acceptance/realtime/connection_spec.rb#L1042)
         
     | 
| 
      
 777 
     | 
    
         
            +
                  * with a different default connection_state_ttl
         
     | 
| 
      
 778 
     | 
    
         
            +
                    * [updates the private Connection#connection_state_ttl when received from Ably in ConnectionDetails](./spec/acceptance/realtime/connection_spec.rb#L1063)
         
     | 
| 
       561 
779 
     | 
    
         
             
                * recovery
         
     | 
| 
       562 
780 
     | 
    
         
             
                  * #recovery_key
         
     | 
| 
       563 
     | 
    
         
            -
                    * [is composed of connection key and serial that is kept up to date with each message ACK received](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       564 
     | 
    
         
            -
                    * [is available when connection is in one of the states: connecting, connected, disconnected 
     | 
| 
       565 
     | 
    
         
            -
                    * [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 781 
     | 
    
         
            +
                    * [is composed of connection key and serial that is kept up to date with each message ACK received](./spec/acceptance/realtime/connection_spec.rb#L1100)
         
     | 
| 
      
 782 
     | 
    
         
            +
                    * [is available when connection is in one of the states: connecting, connected, disconnected](./spec/acceptance/realtime/connection_spec.rb#L1123)
         
     | 
| 
      
 783 
     | 
    
         
            +
                    * [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb#L1152)
         
     | 
| 
       566 
784 
     | 
    
         
             
                  * opening a new connection using a recently disconnected connection's #recovery_key
         
     | 
| 
       567 
785 
     | 
    
         
             
                    * connection#id and connection#key after recovery
         
     | 
| 
       568 
     | 
    
         
            -
                      * [remains the same for id and party for key](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 786 
     | 
    
         
            +
                      * [remains the same for id and party for key](./spec/acceptance/realtime/connection_spec.rb#L1164)
         
     | 
| 
       569 
787 
     | 
    
         
             
                    * when messages have been sent whilst the old connection is disconnected
         
     | 
| 
       570 
788 
     | 
    
         
             
                      * the new connection
         
     | 
| 
       571 
     | 
    
         
            -
                        * [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 789 
     | 
    
         
            +
                        * [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb#L1206)
         
     | 
| 
       572 
790 
     | 
    
         
             
                  * with :recover option
         
     | 
| 
       573 
791 
     | 
    
         
             
                    * with invalid syntax
         
     | 
| 
       574 
     | 
    
         
            -
                      * [raises an exception](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 792 
     | 
    
         
            +
                      * [raises an exception](./spec/acceptance/realtime/connection_spec.rb#L1238)
         
     | 
| 
       575 
793 
     | 
    
         
             
                    * with invalid formatted value sent to server
         
     | 
| 
       576 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 794 
     | 
    
         
            +
                      * [sets the #error_reason and moves the connection to FAILED](./spec/acceptance/realtime/connection_spec.rb#L1247)
         
     | 
| 
       577 
795 
     | 
    
         
             
                    * with expired (missing) value sent to server
         
     | 
| 
       578 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 796 
     | 
    
         
            +
                      * [connects but sets the error reason and includes the reason in the state change](./spec/acceptance/realtime/connection_spec.rb#L1262)
         
     | 
| 
       579 
797 
     | 
    
         
             
                * with many connections simultaneously
         
     | 
| 
       580 
     | 
    
         
            -
                  * [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 798 
     | 
    
         
            +
                  * [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb#L1281)
         
     | 
| 
       581 
799 
     | 
    
         
             
                * when a state transition is unsupported
         
     | 
| 
       582 
     | 
    
         
            -
                  * [ 
     | 
| 
      
 800 
     | 
    
         
            +
                  * [logs the invalid state change as fatal](./spec/acceptance/realtime/connection_spec.rb#L1301)
         
     | 
| 
       583 
801 
     | 
    
         
             
                * protocol failure
         
     | 
| 
       584 
802 
     | 
    
         
             
                  * receiving an invalid ProtocolMessage
         
     | 
| 
       585 
     | 
    
         
            -
                    * [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 803 
     | 
    
         
            +
                    * [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb#L1317)
         
     | 
| 
       586 
804 
     | 
    
         
             
                * undocumented method
         
     | 
| 
       587 
805 
     | 
    
         
             
                  * #internet_up?
         
     | 
| 
       588 
     | 
    
         
            -
                    * [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 806 
     | 
    
         
            +
                    * [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1335)
         
     | 
| 
       589 
807 
     | 
    
         
             
                    * internet up URL protocol
         
     | 
| 
       590 
808 
     | 
    
         
             
                      * when using TLS for the connection
         
     | 
| 
       591 
     | 
    
         
            -
                        * [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 809 
     | 
    
         
            +
                        * [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L1346)
         
     | 
| 
       592 
810 
     | 
    
         
             
                      * when using a non-secured connection
         
     | 
| 
       593 
     | 
    
         
            -
                        * [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 811 
     | 
    
         
            +
                        * [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L1356)
         
     | 
| 
       594 
812 
     | 
    
         
             
                    * when the Internet is up
         
     | 
| 
       595 
     | 
    
         
            -
                      * [calls the block with true](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       596 
     | 
    
         
            -
                      * [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 813 
     | 
    
         
            +
                      * [calls the block with true](./spec/acceptance/realtime/connection_spec.rb#L1387)
         
     | 
| 
      
 814 
     | 
    
         
            +
                      * [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1394)
         
     | 
| 
       597 
815 
     | 
    
         
             
                      * with a TLS connection
         
     | 
| 
       598 
     | 
    
         
            -
                        * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 816 
     | 
    
         
            +
                        * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb#L1370)
         
     | 
| 
       599 
817 
     | 
    
         
             
                      * with a non-TLS connection
         
     | 
| 
       600 
     | 
    
         
            -
                        * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 818 
     | 
    
         
            +
                        * [checks the Internet up URL over TLS](./spec/acceptance/realtime/connection_spec.rb#L1380)
         
     | 
| 
       601 
819 
     | 
    
         
             
                    * when the Internet is down
         
     | 
| 
       602 
     | 
    
         
            -
                      * [calls the block with false](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       603 
     | 
    
         
            -
                      * [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 820 
     | 
    
         
            +
                      * [calls the block with false](./spec/acceptance/realtime/connection_spec.rb#L1409)
         
     | 
| 
      
 821 
     | 
    
         
            +
                      * [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L1416)
         
     | 
| 
       604 
822 
     | 
    
         
             
                * state change side effects
         
     | 
| 
       605 
823 
     | 
    
         
             
                  * when connection enters the :disconnected state
         
     | 
| 
       606 
     | 
    
         
            -
                    * [queues messages to be sent and all channels remain attached](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 824 
     | 
    
         
            +
                    * [queues messages to be sent and all channels remain attached](./spec/acceptance/realtime/connection_spec.rb#L1430)
         
     | 
| 
       607 
825 
     | 
    
         
             
                  * when connection enters the :suspended state
         
     | 
| 
       608 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 826 
     | 
    
         
            +
                    * [moves the channels into the suspended state and prevents publishing of messages on those channels](./spec/acceptance/realtime/connection_spec.rb#L1463)
         
     | 
| 
       609 
827 
     | 
    
         
             
                  * when connection enters the :failed state
         
     | 
| 
       610 
     | 
    
         
            -
                    * [sets all channels to failed and prevents publishing of messages on those channels](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 828 
     | 
    
         
            +
                    * [sets all channels to failed and prevents publishing of messages on those channels](./spec/acceptance/realtime/connection_spec.rb#L1494)
         
     | 
| 
       611 
829 
     | 
    
         
             
                * connection state change
         
     | 
| 
       612 
     | 
    
         
            -
                  * [emits  
     | 
| 
      
 830 
     | 
    
         
            +
                  * [emits event to all and single subscribers](./spec/acceptance/realtime/connection_spec.rb#L1508)
         
     | 
| 
      
 831 
     | 
    
         
            +
                  * [emits a ConnectionStateChange object](./spec/acceptance/realtime/connection_spec.rb#L1523)
         
     | 
| 
       613 
832 
     | 
    
         
             
                  * ConnectionStateChange object
         
     | 
| 
       614 
     | 
    
         
            -
                    * [has current state](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       615 
     | 
    
         
            -
                    * [has a previous state](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       616 
     | 
    
         
            -
                    * [has  
     | 
| 
      
 833 
     | 
    
         
            +
                    * [has current state](./spec/acceptance/realtime/connection_spec.rb#L1531)
         
     | 
| 
      
 834 
     | 
    
         
            +
                    * [has a previous state](./spec/acceptance/realtime/connection_spec.rb#L1539)
         
     | 
| 
      
 835 
     | 
    
         
            +
                    * [has the event that generated the state change (#TH5)](./spec/acceptance/realtime/connection_spec.rb#L1547)
         
     | 
| 
      
 836 
     | 
    
         
            +
                    * [has an empty reason when there is no error](./spec/acceptance/realtime/connection_spec.rb#L1563)
         
     | 
| 
       617 
837 
     | 
    
         
             
                    * on failure
         
     | 
| 
       618 
     | 
    
         
            -
                      * [has a reason Error object when there is an error on the connection](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 838 
     | 
    
         
            +
                      * [has a reason Error object when there is an error on the connection](./spec/acceptance/realtime/connection_spec.rb#L1576)
         
     | 
| 
       619 
839 
     | 
    
         
             
                    * retry_in
         
     | 
| 
       620 
     | 
    
         
            -
                      * [is nil when a retry is not required](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       621 
     | 
    
         
            -
                      * [is 0 when first attempt to connect fails](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       622 
     | 
    
         
            -
                      * [is 0 when an immediate reconnect will occur](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
       623 
     | 
    
         
            -
                      * [contains the next retry period when an immediate reconnect will not occur](./spec/acceptance/realtime/connection_spec.rb# 
     | 
| 
      
 840 
     | 
    
         
            +
                      * [is nil when a retry is not required](./spec/acceptance/realtime/connection_spec.rb#L1591)
         
     | 
| 
      
 841 
     | 
    
         
            +
                      * [is 0 when first attempt to connect fails](./spec/acceptance/realtime/connection_spec.rb#L1598)
         
     | 
| 
      
 842 
     | 
    
         
            +
                      * [is 0 when an immediate reconnect will occur](./spec/acceptance/realtime/connection_spec.rb#L1608)
         
     | 
| 
      
 843 
     | 
    
         
            +
                      * [contains the next retry period when an immediate reconnect will not occur](./spec/acceptance/realtime/connection_spec.rb#L1618)
         
     | 
| 
      
 844 
     | 
    
         
            +
                  * whilst CONNECTED
         
     | 
| 
      
 845 
     | 
    
         
            +
                    * when a CONNECTED message is received (#RTN24)
         
     | 
| 
      
 846 
     | 
    
         
            +
                      * [emits an UPDATE event](./spec/acceptance/realtime/connection_spec.rb#L1653)
         
     | 
| 
      
 847 
     | 
    
         
            +
                      * [updates the ConnectionDetail and Connection attributes (#RTC8a1)](./spec/acceptance/realtime/connection_spec.rb#L1668)
         
     | 
| 
      
 848 
     | 
    
         
            +
                    * when a CONNECTED message with an error is received
         
     | 
| 
      
 849 
     | 
    
         
            +
                      * [emits an UPDATE event](./spec/acceptance/realtime/connection_spec.rb#L1703)
         
     | 
| 
      
 850 
     | 
    
         
            +
                * version params
         
     | 
| 
      
 851 
     | 
    
         
            +
                  * [sends the protocol version param v (#G4, #RTN2f)](./spec/acceptance/realtime/connection_spec.rb#L1724)
         
     | 
| 
      
 852 
     | 
    
         
            +
                  * [sends the lib version param lib (#RTN2g)](./spec/acceptance/realtime/connection_spec.rb#L1733)
         
     | 
| 
      
 853 
     | 
    
         
            +
                  * with variant
         
     | 
| 
      
 854 
     | 
    
         
            +
                    * [sends the lib version param lib with the variant (#RTN2g + #RSC7b)](./spec/acceptance/realtime/connection_spec.rb#L1753)
         
     | 
| 
       624 
855 
     | 
    
         | 
| 
       625 
856 
     | 
    
         
             
            ### Ably::Realtime::Channel Message
         
     | 
| 
       626 
857 
     | 
    
         
             
            _(see [spec/acceptance/realtime/message_spec.rb](./spec/acceptance/realtime/message_spec.rb))_
         
     | 
| 
         @@ -635,106 +866,156 @@ _(see [spec/acceptance/realtime/message_spec.rb](./spec/acceptance/realtime/mess 
     | 
|
| 
       635 
866 
     | 
    
         
             
                    * [is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L64)
         
     | 
| 
       636 
867 
     | 
    
         
             
                  * Binary
         
     | 
| 
       637 
868 
     | 
    
         
             
                    * [is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L72)
         
     | 
| 
      
 869 
     | 
    
         
            +
                * with supported extra payload content type (#RTL6h, #RSL6a2)
         
     | 
| 
      
 870 
     | 
    
         
            +
                  * JSON Object (Hash)
         
     | 
| 
      
 871 
     | 
    
         
            +
                    * PENDING: *[is encoded and decoded to the same hash](./spec/acceptance/realtime/message_spec.rb#L91)*
         
     | 
| 
      
 872 
     | 
    
         
            +
                  * JSON Array
         
     | 
| 
      
 873 
     | 
    
         
            +
                    * PENDING: *[is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L100)*
         
     | 
| 
      
 874 
     | 
    
         
            +
                  * nil
         
     | 
| 
      
 875 
     | 
    
         
            +
                    * [is encoded and decoded to the same Array](./spec/acceptance/realtime/message_spec.rb#L107)
         
     | 
| 
       638 
876 
     | 
    
         
             
                * with unsupported data payload content type
         
     | 
| 
       639 
877 
     | 
    
         
             
                  * Integer
         
     | 
| 
       640 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 878 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb#L118)
         
     | 
| 
       641 
879 
     | 
    
         
             
                  * Float
         
     | 
| 
       642 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 880 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb#L127)
         
     | 
| 
       643 
881 
     | 
    
         
             
                  * Boolean
         
     | 
| 
       644 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 882 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb#L136)
         
     | 
| 
       645 
883 
     | 
    
         
             
                  * False
         
     | 
| 
       646 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 884 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/message_spec.rb#L145)
         
     | 
| 
       647 
885 
     | 
    
         
             
                * with ASCII_8BIT message name
         
     | 
| 
       648 
     | 
    
         
            -
                  * [is converted into UTF_8](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 886 
     | 
    
         
            +
                  * [is converted into UTF_8](./spec/acceptance/realtime/message_spec.rb#L154)
         
     | 
| 
       649 
887 
     | 
    
         
             
                * when the message publisher has a client_id
         
     | 
| 
       650 
     | 
    
         
            -
                  * [contains a #client_id attribute](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 888 
     | 
    
         
            +
                  * [contains a #client_id attribute](./spec/acceptance/realtime/message_spec.rb#L170)
         
     | 
| 
       651 
889 
     | 
    
         
             
                * #connection_id attribute
         
     | 
| 
       652 
890 
     | 
    
         
             
                  * over realtime
         
     | 
| 
       653 
     | 
    
         
            -
                    * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 891 
     | 
    
         
            +
                    * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb#L183)
         
     | 
| 
       654 
892 
     | 
    
         
             
                  * when retrieved over REST
         
     | 
| 
       655 
     | 
    
         
            -
                    * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 893 
     | 
    
         
            +
                    * [matches the sender connection#id](./spec/acceptance/realtime/message_spec.rb#L195)
         
     | 
| 
       656 
894 
     | 
    
         
             
                * local echo when published
         
     | 
| 
       657 
     | 
    
         
            -
                  * [is enabled by default](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 895 
     | 
    
         
            +
                  * [is enabled by default](./spec/acceptance/realtime/message_spec.rb#L207)
         
     | 
| 
       658 
896 
     | 
    
         
             
                  * with :echo_messages option set to false
         
     | 
| 
       659 
     | 
    
         
            -
                    * [will not echo messages to the client but will still broadcast messages to other connected clients](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       660 
     | 
    
         
            -
                    * [will not echo messages to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       661 
     | 
    
         
            -
                    * [will echo messages with a valid connection_id to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 897 
     | 
    
         
            +
                    * [will not echo messages to the client but will still broadcast messages to other connected clients](./spec/acceptance/realtime/message_spec.rb#L227)
         
     | 
| 
      
 898 
     | 
    
         
            +
                    * [will not echo messages to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb#L246)
         
     | 
| 
      
 899 
     | 
    
         
            +
                    * [will echo messages with a valid connection_id to the client from other REST clients publishing using that connection_key](./spec/acceptance/realtime/message_spec.rb#L259)
         
     | 
| 
       662 
900 
     | 
    
         
             
                * publishing lots of messages across two connections
         
     | 
| 
       663 
     | 
    
         
            -
                  * [sends and receives the messages on both opened connections and calls the success callbacks for each message published](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 901 
     | 
    
         
            +
                  * [sends and receives the messages on both opened connections and calls the success callbacks for each message published](./spec/acceptance/realtime/message_spec.rb#L285)
         
     | 
| 
       664 
902 
     | 
    
         
             
                * without suitable publishing permissions
         
     | 
| 
       665 
     | 
    
         
            -
                  * [calls the error callback](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 903 
     | 
    
         
            +
                  * [calls the error callback](./spec/acceptance/realtime/message_spec.rb#L330)
         
     | 
| 
       666 
904 
     | 
    
         
             
                * server incorrectly resends a message that was already received by the client library
         
     | 
| 
       667 
     | 
    
         
            -
                  * [discards the message and logs it as an error to the channel](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 905 
     | 
    
         
            +
                  * [discards the message and logs it as an error to the channel](./spec/acceptance/realtime/message_spec.rb#L349)
         
     | 
| 
       668 
906 
     | 
    
         
             
                * encoding and decoding encrypted messages
         
     | 
| 
       669 
     | 
    
         
            -
                  * with AES-128-CBC using crypto-data-128.json fixtures
         
     | 
| 
      
 907 
     | 
    
         
            +
                  * with AES-128-CBC using crypto-data-128.json fixtures (#RTL7d)
         
     | 
| 
       670 
908 
     | 
    
         
             
                    * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
         
     | 
| 
       671 
909 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       672 
910 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       673 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       674 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 911 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 912 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
       675 
913 
     | 
    
         
             
                    * item 1 with encrypted encoding cipher+aes-128-cbc/base64
         
     | 
| 
       676 
914 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       677 
915 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       678 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       679 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 916 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 917 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
       680 
918 
     | 
    
         
             
                    * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
         
     | 
| 
       681 
919 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       682 
920 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       683 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       684 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 921 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 922 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
       685 
923 
     | 
    
         
             
                    * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
         
     | 
| 
       686 
924 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       687 
925 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       688 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       689 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       690 
     | 
    
         
            -
                  * with AES-256-CBC using crypto-data-256.json fixtures
         
     | 
| 
      
 926 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 927 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
      
 928 
     | 
    
         
            +
                  * with AES-256-CBC using crypto-data-256.json fixtures (#RTL7d)
         
     | 
| 
       691 
929 
     | 
    
         
             
                    * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
         
     | 
| 
       692 
930 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       693 
931 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       694 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       695 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 932 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 933 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
       696 
934 
     | 
    
         
             
                    * item 1 with encrypted encoding cipher+aes-256-cbc/base64
         
     | 
| 
       697 
935 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       698 
936 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       699 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       700 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 937 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 938 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
       701 
939 
     | 
    
         
             
                    * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
         
     | 
| 
       702 
940 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       703 
941 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       704 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       705 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 942 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 943 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
       706 
944 
     | 
    
         
             
                    * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
         
     | 
| 
       707 
945 
     | 
    
         
             
                      * behaves like an Ably encrypter and decrypter
         
     | 
| 
       708 
946 
     | 
    
         
             
                        * with #publish and #subscribe
         
     | 
| 
       709 
     | 
    
         
            -
                          * [encrypts message automatically before they are pushed to the server](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       710 
     | 
    
         
            -
                          * [sends and receives messages that are encrypted & decrypted by the Ably library](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 947 
     | 
    
         
            +
                          * [encrypts message automatically before they are pushed to the server (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L414)
         
     | 
| 
      
 948 
     | 
    
         
            +
                          * [sends and receives messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/realtime/message_spec.rb#L432)
         
     | 
| 
       711 
949 
     | 
    
         
             
                  * with multiple sends from one client to another
         
     | 
| 
       712 
     | 
    
         
            -
                    * [encrypts and decrypts all messages](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       713 
     | 
    
         
            -
                    * [receives raw messages with the correct encoding](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 950 
     | 
    
         
            +
                    * [encrypts and decrypts all messages](./spec/acceptance/realtime/message_spec.rb#L471)
         
     | 
| 
      
 951 
     | 
    
         
            +
                    * [receives raw messages with the correct encoding](./spec/acceptance/realtime/message_spec.rb#L488)
         
     | 
| 
       714 
952 
     | 
    
         
             
                  * subscribing with a different transport protocol
         
     | 
| 
       715 
     | 
    
         
            -
                    * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       716 
     | 
    
         
            -
                    * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       717 
     | 
    
         
            -
                    * [delivers a Hash payload to the receiver](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 953 
     | 
    
         
            +
                    * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L522)
         
     | 
| 
      
 954 
     | 
    
         
            +
                    * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L522)
         
     | 
| 
      
 955 
     | 
    
         
            +
                    * [delivers a Hash payload to the receiver](./spec/acceptance/realtime/message_spec.rb#L522)
         
     | 
| 
       718 
956 
     | 
    
         
             
                  * publishing on an unencrypted channel and subscribing on an encrypted channel with another client
         
     | 
| 
       719 
     | 
    
         
            -
                    * [does not attempt to decrypt the message](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 957 
     | 
    
         
            +
                    * [does not attempt to decrypt the message](./spec/acceptance/realtime/message_spec.rb#L543)
         
     | 
| 
       720 
958 
     | 
    
         
             
                  * publishing on an encrypted channel and subscribing on an unencrypted channel with another client
         
     | 
| 
       721 
     | 
    
         
            -
                    * [delivers the message but still encrypted with a value in the #encoding attribute](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       722 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 959 
     | 
    
         
            +
                    * [delivers the message but still encrypted with a value in the #encoding attribute (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L561)
         
     | 
| 
      
 960 
     | 
    
         
            +
                    * [logs a Cipher error (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L572)
         
     | 
| 
       723 
961 
     | 
    
         
             
                  * publishing on an encrypted channel and subscribing with a different algorithm on another client
         
     | 
| 
       724 
     | 
    
         
            -
                    * [delivers the message but still encrypted with the cipher detials in the #encoding attribute](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       725 
     | 
    
         
            -
                    * [emits a Cipher error on the channel](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 962 
     | 
    
         
            +
                    * [delivers the message but still encrypted with the cipher detials in the #encoding attribute (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L592)
         
     | 
| 
      
 963 
     | 
    
         
            +
                    * [emits a Cipher error on the channel (#RTL7e)](./spec/acceptance/realtime/message_spec.rb#L601)
         
     | 
| 
       726 
964 
     | 
    
         
             
                  * publishing on an encrypted channel and subscribing with a different key on another client
         
     | 
| 
       727 
     | 
    
         
            -
                    * [delivers the message but still encrypted with the cipher details in the #encoding attribute](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
       728 
     | 
    
         
            -
                    * [emits a Cipher error on the channel](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 965 
     | 
    
         
            +
                    * [delivers the message but still encrypted with the cipher details in the #encoding attribute](./spec/acceptance/realtime/message_spec.rb#L621)
         
     | 
| 
      
 966 
     | 
    
         
            +
                    * [emits a Cipher error on the channel](./spec/acceptance/realtime/message_spec.rb#L632)
         
     | 
| 
       729 
967 
     | 
    
         
             
                * when message is published, the connection disconnects before the ACK is received, and the connection is resumed
         
     | 
| 
       730 
     | 
    
         
            -
                  * [publishes the message again, later receives the ACK and only one message is ever received from Ably](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 968 
     | 
    
         
            +
                  * [publishes the message again, later receives the ACK and only one message is ever received from Ably](./spec/acceptance/realtime/message_spec.rb#L651)
         
     | 
| 
       731 
969 
     | 
    
         
             
                * when message is published, the connection disconnects before the ACK is received
         
     | 
| 
       732 
970 
     | 
    
         
             
                  * the connection is not resumed
         
     | 
| 
       733 
     | 
    
         
            -
                    * [calls the errback for all messages](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 971 
     | 
    
         
            +
                    * [calls the errback for all messages](./spec/acceptance/realtime/message_spec.rb#L694)
         
     | 
| 
       734 
972 
     | 
    
         
             
                  * the connection becomes suspended
         
     | 
| 
       735 
     | 
    
         
            -
                    * [calls the errback for all messages](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 973 
     | 
    
         
            +
                    * [calls the errback for all messages](./spec/acceptance/realtime/message_spec.rb#L720)
         
     | 
| 
       736 
974 
     | 
    
         
             
                  * the connection becomes failed
         
     | 
| 
       737 
     | 
    
         
            -
                    * [calls the errback for all messages](./spec/acceptance/realtime/message_spec.rb# 
     | 
| 
      
 975 
     | 
    
         
            +
                    * [calls the errback for all messages](./spec/acceptance/realtime/message_spec.rb#L747)
         
     | 
| 
      
 976 
     | 
    
         
            +
              * message encoding interoperability
         
     | 
| 
      
 977 
     | 
    
         
            +
                * over a JSON transport
         
     | 
| 
      
 978 
     | 
    
         
            +
                  * when decoding string
         
     | 
| 
      
 979 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L788)
         
     | 
| 
      
 980 
     | 
    
         
            +
                  * when encoding string
         
     | 
| 
      
 981 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L806)
         
     | 
| 
      
 982 
     | 
    
         
            +
                  * when decoding string
         
     | 
| 
      
 983 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L788)
         
     | 
| 
      
 984 
     | 
    
         
            +
                  * when encoding string
         
     | 
| 
      
 985 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L806)
         
     | 
| 
      
 986 
     | 
    
         
            +
                  * when decoding jsonObject
         
     | 
| 
      
 987 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L788)
         
     | 
| 
      
 988 
     | 
    
         
            +
                  * when encoding jsonObject
         
     | 
| 
      
 989 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L806)
         
     | 
| 
      
 990 
     | 
    
         
            +
                  * when decoding jsonArray
         
     | 
| 
      
 991 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L788)
         
     | 
| 
      
 992 
     | 
    
         
            +
                  * when encoding jsonArray
         
     | 
| 
      
 993 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L806)
         
     | 
| 
      
 994 
     | 
    
         
            +
                  * when decoding binary
         
     | 
| 
      
 995 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L788)
         
     | 
| 
      
 996 
     | 
    
         
            +
                  * when encoding binary
         
     | 
| 
      
 997 
     | 
    
         
            +
                    * [ensures that client libraries have compatible encoding and decoding using common fixtures](./spec/acceptance/realtime/message_spec.rb#L806)
         
     | 
| 
      
 998 
     | 
    
         
            +
                * over a MsgPack transport
         
     | 
| 
      
 999 
     | 
    
         
            +
                  * when publishing a string using JSON protocol
         
     | 
| 
      
 1000 
     | 
    
         
            +
                    * [receives the message over MsgPack and the data matches](./spec/acceptance/realtime/message_spec.rb#L840)
         
     | 
| 
      
 1001 
     | 
    
         
            +
                  * when retrieving a string using JSON protocol
         
     | 
| 
      
 1002 
     | 
    
         
            +
                    * [is compatible with a publishes using MsgPack](./spec/acceptance/realtime/message_spec.rb#L868)
         
     | 
| 
      
 1003 
     | 
    
         
            +
                  * when publishing a string using JSON protocol
         
     | 
| 
      
 1004 
     | 
    
         
            +
                    * [receives the message over MsgPack and the data matches](./spec/acceptance/realtime/message_spec.rb#L840)
         
     | 
| 
      
 1005 
     | 
    
         
            +
                  * when retrieving a string using JSON protocol
         
     | 
| 
      
 1006 
     | 
    
         
            +
                    * [is compatible with a publishes using MsgPack](./spec/acceptance/realtime/message_spec.rb#L868)
         
     | 
| 
      
 1007 
     | 
    
         
            +
                  * when publishing a jsonObject using JSON protocol
         
     | 
| 
      
 1008 
     | 
    
         
            +
                    * [receives the message over MsgPack and the data matches](./spec/acceptance/realtime/message_spec.rb#L840)
         
     | 
| 
      
 1009 
     | 
    
         
            +
                  * when retrieving a jsonObject using JSON protocol
         
     | 
| 
      
 1010 
     | 
    
         
            +
                    * [is compatible with a publishes using MsgPack](./spec/acceptance/realtime/message_spec.rb#L868)
         
     | 
| 
      
 1011 
     | 
    
         
            +
                  * when publishing a jsonArray using JSON protocol
         
     | 
| 
      
 1012 
     | 
    
         
            +
                    * [receives the message over MsgPack and the data matches](./spec/acceptance/realtime/message_spec.rb#L840)
         
     | 
| 
      
 1013 
     | 
    
         
            +
                  * when retrieving a jsonArray using JSON protocol
         
     | 
| 
      
 1014 
     | 
    
         
            +
                    * [is compatible with a publishes using MsgPack](./spec/acceptance/realtime/message_spec.rb#L868)
         
     | 
| 
      
 1015 
     | 
    
         
            +
                  * when publishing a binary using JSON protocol
         
     | 
| 
      
 1016 
     | 
    
         
            +
                    * [receives the message over MsgPack and the data matches](./spec/acceptance/realtime/message_spec.rb#L840)
         
     | 
| 
      
 1017 
     | 
    
         
            +
                  * when retrieving a binary using JSON protocol
         
     | 
| 
      
 1018 
     | 
    
         
            +
                    * [is compatible with a publishes using MsgPack](./spec/acceptance/realtime/message_spec.rb#L868)
         
     | 
| 
       738 
1019 
     | 
    
         | 
| 
       739 
1020 
     | 
    
         
             
            ### Ably::Realtime::Presence history
         
     | 
| 
       740 
1021 
     | 
    
         
             
            _(see [spec/acceptance/realtime/presence_history_spec.rb](./spec/acceptance/realtime/presence_history_spec.rb))_
         
     | 
| 
         @@ -743,7 +1024,7 @@ _(see [spec/acceptance/realtime/presence_history_spec.rb](./spec/acceptance/real 
     | 
|
| 
       743 
1024 
     | 
    
         
             
                * [ensures REST presence history message IDs match ProtocolMessage wrapped message and connection IDs via Realtime](./spec/acceptance/realtime/presence_history_spec.rb#L42)
         
     | 
| 
       744 
1025 
     | 
    
         
             
                * with option until_attach: true
         
     | 
| 
       745 
1026 
     | 
    
         
             
                  * [retrieves all presence messages before channel was attached](./spec/acceptance/realtime/presence_history_spec.rb#L61)
         
     | 
| 
       746 
     | 
    
         
            -
                  * [ 
     | 
| 
      
 1027 
     | 
    
         
            +
                  * [fails with an exception unless state is attached](./spec/acceptance/realtime/presence_history_spec.rb#L97)
         
     | 
| 
       747 
1028 
     | 
    
         
             
                  * and two pages of messages
         
     | 
| 
       748 
1029 
     | 
    
         
             
                    * [retrieves two pages of messages before channel was attached](./spec/acceptance/realtime/presence_history_spec.rb#L78)
         
     | 
| 
       749 
1030 
     | 
    
         | 
| 
         @@ -751,430 +1032,491 @@ _(see [spec/acceptance/realtime/presence_history_spec.rb](./spec/acceptance/real 
     | 
|
| 
       751 
1032 
     | 
    
         
             
            _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/presence_spec.rb))_
         
     | 
| 
       752 
1033 
     | 
    
         
             
              * using JSON protocol
         
     | 
| 
       753 
1034 
     | 
    
         
             
                * when attached (but not present) on a presence channel with an anonymous client (no client ID)
         
     | 
| 
       754 
     | 
    
         
            -
                  * [maintains state as other clients enter and leave the channel](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       755 
     | 
    
         
            -
                * #sync_complete?
         
     | 
| 
      
 1035 
     | 
    
         
            +
                  * [maintains state as other clients enter and leave the channel (#RTP2e)](./spec/acceptance/realtime/presence_spec.rb#L479)
         
     | 
| 
      
 1036 
     | 
    
         
            +
                * #sync_complete? and SYNC flags (#RTP1)
         
     | 
| 
       756 
1037 
     | 
    
         
             
                  * when attaching to a channel without any members present
         
     | 
| 
       757 
     | 
    
         
            -
                    * [is true and the presence channel is considered synced immediately](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1038 
     | 
    
         
            +
                    * [sync_complete? is true, there is no presence flag, and the presence channel is considered synced immediately (#RTP1)](./spec/acceptance/realtime/presence_spec.rb#L701)
         
     | 
| 
       758 
1039 
     | 
    
         
             
                  * when attaching to a channel with members present
         
     | 
| 
       759 
     | 
    
         
            -
                    * [is false and the presence channel  
     | 
| 
       760 
     | 
    
         
            -
                *  
     | 
| 
       761 
     | 
    
         
            -
                  *  
     | 
| 
      
 1040 
     | 
    
         
            +
                    * [sync_complete? is false, there is a presence flag, and the presence channel is subsequently synced (#RTP1)](./spec/acceptance/realtime/presence_spec.rb#L722)
         
     | 
| 
      
 1041 
     | 
    
         
            +
                * 101 existing (present) members on a channel (2 SYNC pages)
         
     | 
| 
      
 1042 
     | 
    
         
            +
                  * requiring at least 2 SYNC ProtocolMessages
         
     | 
| 
       762 
1043 
     | 
    
         
             
                    * when a client attaches to the presence channel
         
     | 
| 
       763 
     | 
    
         
            -
                      * [emits :present for each member](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1044 
     | 
    
         
            +
                      * [emits :present for each member](./spec/acceptance/realtime/presence_spec.rb#L771)
         
     | 
| 
      
 1045 
     | 
    
         
            +
                      * and a member enters before the SYNC operation is complete
         
     | 
| 
      
 1046 
     | 
    
         
            +
                        * [emits a :enter immediately and the member is :present once the sync is complete (#RTP2g)](./spec/acceptance/realtime/presence_spec.rb#L787)
         
     | 
| 
       764 
1047 
     | 
    
         
             
                      * and a member leaves before the SYNC operation is complete
         
     | 
| 
       765 
     | 
    
         
            -
                        * [emits :leave immediately as the member leaves](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       766 
     | 
    
         
            -
                        * [ignores presence events with timestamps prior to the current :present event in the MembersMap](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       767 
     | 
    
         
            -
                        * [does not emit :present after the :leave event has been emitted, and that member is not included in the list of members via #get  
     | 
| 
      
 1048 
     | 
    
         
            +
                        * [emits :leave immediately as the member leaves and cleans up the ABSENT member after (#RTP2f, #RTP2g)](./spec/acceptance/realtime/presence_spec.rb#L824)
         
     | 
| 
      
 1049 
     | 
    
         
            +
                        * [ignores presence events with timestamps / identifiers prior to the current :present event in the MembersMap (#RTP2c)](./spec/acceptance/realtime/presence_spec.rb#L872)
         
     | 
| 
      
 1050 
     | 
    
         
            +
                        * [does not emit :present after the :leave event has been emitted, and that member is not included in the list of members via #get (#RTP2f)](./spec/acceptance/realtime/presence_spec.rb#L917)
         
     | 
| 
       768 
1051 
     | 
    
         
             
                      * #get
         
     | 
| 
       769 
     | 
    
         
            -
                        * with :wait_for_sync option set to true
         
     | 
| 
       770 
     | 
    
         
            -
                          * [waits until sync is complete](./spec/acceptance/realtime/presence_spec.rb#L680)
         
     | 
| 
       771 
1052 
     | 
    
         
             
                        * by default
         
     | 
| 
       772 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1053 
     | 
    
         
            +
                          * [waits until sync is complete (#RTP11c1)](./spec/acceptance/realtime/presence_spec.rb#L967)
         
     | 
| 
      
 1054 
     | 
    
         
            +
                        * with :wait_for_sync option set to false (#RTP11c1)
         
     | 
| 
      
 1055 
     | 
    
         
            +
                          * [it does not wait for sync](./spec/acceptance/realtime/presence_spec.rb#L986)
         
     | 
| 
       773 
1056 
     | 
    
         
             
                * state
         
     | 
| 
       774 
1057 
     | 
    
         
             
                  * once opened
         
     | 
| 
       775 
     | 
    
         
            -
                    * [once opened, enters the :left state if the channel detaches](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1058 
     | 
    
         
            +
                    * [once opened, enters the :left state if the channel detaches](./spec/acceptance/realtime/presence_spec.rb#L1012)
         
     | 
| 
       776 
1059 
     | 
    
         
             
                * #enter
         
     | 
| 
       777 
1060 
     | 
    
         
             
                  * data attribute
         
     | 
| 
       778 
1061 
     | 
    
         
             
                    * when provided as argument option to #enter
         
     | 
| 
       779 
     | 
    
         
            -
                      * [changes to value provided in #leave](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1062 
     | 
    
         
            +
                      * [changes to value provided in #leave](./spec/acceptance/realtime/presence_spec.rb#L1037)
         
     | 
| 
       780 
1063 
     | 
    
         
             
                  * message #connection_id
         
     | 
| 
       781 
     | 
    
         
            -
                    * [matches the current client connection_id](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1064 
     | 
    
         
            +
                    * [matches the current client connection_id](./spec/acceptance/realtime/presence_spec.rb#L1061)
         
     | 
| 
       782 
1065 
     | 
    
         
             
                  * without necessary capabilities to join presence
         
     | 
| 
       783 
     | 
    
         
            -
                    * [calls the Deferrable errback on capabilities failure](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1066 
     | 
    
         
            +
                    * [calls the Deferrable errback on capabilities failure](./spec/acceptance/realtime/presence_spec.rb#L1080)
         
     | 
| 
       784 
1067 
     | 
    
         
             
                  * it should behave like a public presence method
         
     | 
| 
       785 
     | 
    
         
            -
                    * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       786 
     | 
    
         
            -
                    * [raise an exception if the channel  
     | 
| 
       787 
     | 
    
         
            -
                    * [ 
     | 
| 
       788 
     | 
    
         
            -
                    * [ 
     | 
| 
       789 
     | 
    
         
            -
                    * [ 
     | 
| 
       790 
     | 
    
         
            -
                    * [ 
     | 
| 
       791 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 1068 
     | 
    
         
            +
                    * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
         
     | 
| 
      
 1069 
     | 
    
         
            +
                    * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
         
     | 
| 
      
 1070 
     | 
    
         
            +
                    * [raise an exception if the channel is failed](./spec/acceptance/realtime/presence_spec.rb#L97)
         
     | 
| 
      
 1071 
     | 
    
         
            +
                    * [raise an exception if the channel becomes failed](./spec/acceptance/realtime/presence_spec.rb#L114)
         
     | 
| 
      
 1072 
     | 
    
         
            +
                    * [implicitly attaches the channel](./spec/acceptance/realtime/presence_spec.rb#L130)
         
     | 
| 
      
 1073 
     | 
    
         
            +
                    * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L293)
         
     | 
| 
      
 1074 
     | 
    
         
            +
                    * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb#L300)
         
     | 
| 
      
 1075 
     | 
    
         
            +
                    * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L308)
         
     | 
| 
      
 1076 
     | 
    
         
            +
                    * [catches exceptions in the provided method block and logs them to the logger](./spec/acceptance/realtime/presence_spec.rb#L318)
         
     | 
| 
       792 
1077 
     | 
    
         
             
                    * when :queue_messages client option is false
         
     | 
| 
       793 
1078 
     | 
    
         
             
                      * and connection state initialized
         
     | 
| 
       794 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 1079 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L142)
         
     | 
| 
       795 
1080 
     | 
    
         
             
                      * and connection state connecting
         
     | 
| 
       796 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 1081 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L152)
         
     | 
| 
       797 
1082 
     | 
    
         
             
                      * and connection state disconnected
         
     | 
| 
       798 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 1083 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L167)
         
     | 
| 
       799 
1084 
     | 
    
         
             
                      * and connection state connected
         
     | 
| 
       800 
     | 
    
         
            -
                        * [publishes the message](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1085 
     | 
    
         
            +
                        * [publishes the message](./spec/acceptance/realtime/presence_spec.rb#L182)
         
     | 
| 
       801 
1086 
     | 
    
         
             
                    * with supported data payload content type
         
     | 
| 
       802 
1087 
     | 
    
         
             
                      * JSON Object (Hash)
         
     | 
| 
       803 
     | 
    
         
            -
                        * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1088 
     | 
    
         
            +
                        * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb#L209)
         
     | 
| 
       804 
1089 
     | 
    
         
             
                      * JSON Array
         
     | 
| 
       805 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1090 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L219)
         
     | 
| 
       806 
1091 
     | 
    
         
             
                      * String
         
     | 
| 
       807 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1092 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L229)
         
     | 
| 
       808 
1093 
     | 
    
         
             
                      * Binary
         
     | 
| 
       809 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1094 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L239)
         
     | 
| 
       810 
1095 
     | 
    
         
             
                    * with unsupported data payload content type
         
     | 
| 
       811 
1096 
     | 
    
         
             
                      * Integer
         
     | 
| 
       812 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1097 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L259)
         
     | 
| 
       813 
1098 
     | 
    
         
             
                      * Float
         
     | 
| 
       814 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1099 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L268)
         
     | 
| 
       815 
1100 
     | 
    
         
             
                      * Boolean
         
     | 
| 
       816 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1101 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L277)
         
     | 
| 
       817 
1102 
     | 
    
         
             
                      * False
         
     | 
| 
       818 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1103 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L286)
         
     | 
| 
       819 
1104 
     | 
    
         
             
                    * if connection fails before success
         
     | 
| 
       820 
     | 
    
         
            -
                      * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1105 
     | 
    
         
            +
                      * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
         
     | 
| 
       821 
1106 
     | 
    
         
             
                * #update
         
     | 
| 
       822 
     | 
    
         
            -
                  * [without previous #enter automatically enters](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       823 
     | 
    
         
            -
                  * [updates the data if :data argument provided](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       824 
     | 
    
         
            -
                  * [updates the data to nil if :data argument is not provided (assumes nil value)](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1107 
     | 
    
         
            +
                  * [without previous #enter automatically enters](./spec/acceptance/realtime/presence_spec.rb#L1092)
         
     | 
| 
      
 1108 
     | 
    
         
            +
                  * [updates the data if :data argument provided](./spec/acceptance/realtime/presence_spec.rb#L1117)
         
     | 
| 
      
 1109 
     | 
    
         
            +
                  * [updates the data to nil if :data argument is not provided (assumes nil value)](./spec/acceptance/realtime/presence_spec.rb#L1127)
         
     | 
| 
       825 
1110 
     | 
    
         
             
                  * when ENTERED
         
     | 
| 
       826 
     | 
    
         
            -
                    * [has no effect on the state](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1111 
     | 
    
         
            +
                    * [has no effect on the state](./spec/acceptance/realtime/presence_spec.rb#L1102)
         
     | 
| 
       827 
1112 
     | 
    
         
             
                  * it should behave like a public presence method
         
     | 
| 
       828 
     | 
    
         
            -
                    * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       829 
     | 
    
         
            -
                    * [raise an exception if the channel  
     | 
| 
       830 
     | 
    
         
            -
                    * [ 
     | 
| 
       831 
     | 
    
         
            -
                    * [ 
     | 
| 
       832 
     | 
    
         
            -
                    * [ 
     | 
| 
       833 
     | 
    
         
            -
                    * [ 
     | 
| 
       834 
     | 
    
         
            -
                    * [ 
     | 
| 
      
 1113 
     | 
    
         
            +
                    * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
         
     | 
| 
      
 1114 
     | 
    
         
            +
                    * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
         
     | 
| 
      
 1115 
     | 
    
         
            +
                    * [raise an exception if the channel is failed](./spec/acceptance/realtime/presence_spec.rb#L97)
         
     | 
| 
      
 1116 
     | 
    
         
            +
                    * [raise an exception if the channel becomes failed](./spec/acceptance/realtime/presence_spec.rb#L114)
         
     | 
| 
      
 1117 
     | 
    
         
            +
                    * [implicitly attaches the channel](./spec/acceptance/realtime/presence_spec.rb#L130)
         
     | 
| 
      
 1118 
     | 
    
         
            +
                    * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L293)
         
     | 
| 
      
 1119 
     | 
    
         
            +
                    * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb#L300)
         
     | 
| 
      
 1120 
     | 
    
         
            +
                    * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L308)
         
     | 
| 
      
 1121 
     | 
    
         
            +
                    * [catches exceptions in the provided method block and logs them to the logger](./spec/acceptance/realtime/presence_spec.rb#L318)
         
     | 
| 
       835 
1122 
     | 
    
         
             
                    * when :queue_messages client option is false
         
     | 
| 
       836 
1123 
     | 
    
         
             
                      * and connection state initialized
         
     | 
| 
       837 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 1124 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L142)
         
     | 
| 
       838 
1125 
     | 
    
         
             
                      * and connection state connecting
         
     | 
| 
       839 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 1126 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L152)
         
     | 
| 
       840 
1127 
     | 
    
         
             
                      * and connection state disconnected
         
     | 
| 
       841 
     | 
    
         
            -
                        * [ 
     | 
| 
      
 1128 
     | 
    
         
            +
                        * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L167)
         
     | 
| 
       842 
1129 
     | 
    
         
             
                      * and connection state connected
         
     | 
| 
       843 
     | 
    
         
            -
                        * [publishes the message](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1130 
     | 
    
         
            +
                        * [publishes the message](./spec/acceptance/realtime/presence_spec.rb#L182)
         
     | 
| 
       844 
1131 
     | 
    
         
             
                    * with supported data payload content type
         
     | 
| 
       845 
1132 
     | 
    
         
             
                      * JSON Object (Hash)
         
     | 
| 
       846 
     | 
    
         
            -
                        * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1133 
     | 
    
         
            +
                        * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb#L209)
         
     | 
| 
       847 
1134 
     | 
    
         
             
                      * JSON Array
         
     | 
| 
       848 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1135 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L219)
         
     | 
| 
       849 
1136 
     | 
    
         
             
                      * String
         
     | 
| 
       850 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1137 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L229)
         
     | 
| 
       851 
1138 
     | 
    
         
             
                      * Binary
         
     | 
| 
       852 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1139 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L239)
         
     | 
| 
       853 
1140 
     | 
    
         
             
                    * with unsupported data payload content type
         
     | 
| 
       854 
1141 
     | 
    
         
             
                      * Integer
         
     | 
| 
       855 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1142 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L259)
         
     | 
| 
       856 
1143 
     | 
    
         
             
                      * Float
         
     | 
| 
       857 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1144 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L268)
         
     | 
| 
       858 
1145 
     | 
    
         
             
                      * Boolean
         
     | 
| 
       859 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1146 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L277)
         
     | 
| 
       860 
1147 
     | 
    
         
             
                      * False
         
     | 
| 
       861 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1148 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L286)
         
     | 
| 
       862 
1149 
     | 
    
         
             
                    * if connection fails before success
         
     | 
| 
       863 
     | 
    
         
            -
                      * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1150 
     | 
    
         
            +
                      * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
         
     | 
| 
       864 
1151 
     | 
    
         
             
                * #leave
         
     | 
| 
       865 
     | 
    
         
            -
                  * [raises an exception if not entered](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1152 
     | 
    
         
            +
                  * [raises an exception if not entered](./spec/acceptance/realtime/presence_spec.rb#L1201)
         
     | 
| 
       866 
1153 
     | 
    
         
             
                  * :data option
         
     | 
| 
       867 
1154 
     | 
    
         
             
                    * when set to a string
         
     | 
| 
       868 
     | 
    
         
            -
                      * [emits the new data for the leave event](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1155 
     | 
    
         
            +
                      * [emits the new data for the leave event](./spec/acceptance/realtime/presence_spec.rb#L1146)
         
     | 
| 
       869 
1156 
     | 
    
         
             
                    * when set to nil
         
     | 
| 
       870 
     | 
    
         
            -
                      * [emits the last value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1157 
     | 
    
         
            +
                      * [emits the last value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L1159)
         
     | 
| 
       871 
1158 
     | 
    
         
             
                    * when not passed as an argument (i.e. nil)
         
     | 
| 
       872 
     | 
    
         
            -
                      * [emits the previous value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1159 
     | 
    
         
            +
                      * [emits the previous value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L1172)
         
     | 
| 
       873 
1160 
     | 
    
         
             
                    * and sync is complete
         
     | 
| 
       874 
     | 
    
         
            -
                      * [does not cache members that have left](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1161 
     | 
    
         
            +
                      * [does not cache members that have left](./spec/acceptance/realtime/presence_spec.rb#L1185)
         
     | 
| 
       875 
1162 
     | 
    
         
             
                  * it should behave like a public presence method
         
     | 
| 
       876 
     | 
    
         
            -
                    * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       877 
     | 
    
         
            -
                    * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       878 
     | 
    
         
            -
                    * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       879 
     | 
    
         
            -
                    * [catches exceptions in the provided method block and logs them to the logger](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1163 
     | 
    
         
            +
                    * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L293)
         
     | 
| 
      
 1164 
     | 
    
         
            +
                    * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb#L300)
         
     | 
| 
      
 1165 
     | 
    
         
            +
                    * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L308)
         
     | 
| 
      
 1166 
     | 
    
         
            +
                    * [catches exceptions in the provided method block and logs them to the logger](./spec/acceptance/realtime/presence_spec.rb#L318)
         
     | 
| 
       880 
1167 
     | 
    
         
             
                    * with supported data payload content type
         
     | 
| 
       881 
1168 
     | 
    
         
             
                      * JSON Object (Hash)
         
     | 
| 
       882 
     | 
    
         
            -
                        * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1169 
     | 
    
         
            +
                        * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb#L209)
         
     | 
| 
       883 
1170 
     | 
    
         
             
                      * JSON Array
         
     | 
| 
       884 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1171 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L219)
         
     | 
| 
       885 
1172 
     | 
    
         
             
                      * String
         
     | 
| 
       886 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1173 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L229)
         
     | 
| 
       887 
1174 
     | 
    
         
             
                      * Binary
         
     | 
| 
       888 
     | 
    
         
            -
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1175 
     | 
    
         
            +
                        * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L239)
         
     | 
| 
       889 
1176 
     | 
    
         
             
                    * with unsupported data payload content type
         
     | 
| 
       890 
1177 
     | 
    
         
             
                      * Integer
         
     | 
| 
       891 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1178 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L259)
         
     | 
| 
       892 
1179 
     | 
    
         
             
                      * Float
         
     | 
| 
       893 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1180 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L268)
         
     | 
| 
       894 
1181 
     | 
    
         
             
                      * Boolean
         
     | 
| 
       895 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1182 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L277)
         
     | 
| 
       896 
1183 
     | 
    
         
             
                      * False
         
     | 
| 
       897 
     | 
    
         
            -
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1184 
     | 
    
         
            +
                        * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L286)
         
     | 
| 
       898 
1185 
     | 
    
         
             
                    * if connection fails before success
         
     | 
| 
       899 
     | 
    
         
            -
                      * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1186 
     | 
    
         
            +
                      * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
         
     | 
| 
       900 
1187 
     | 
    
         
             
                * :left event
         
     | 
| 
       901 
     | 
    
         
            -
                  * [emits the data defined in enter](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       902 
     | 
    
         
            -
                  * [emits the data defined in update](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1188 
     | 
    
         
            +
                  * [emits the data defined in enter](./spec/acceptance/realtime/presence_spec.rb#L1210)
         
     | 
| 
      
 1189 
     | 
    
         
            +
                  * [emits the data defined in update](./spec/acceptance/realtime/presence_spec.rb#L1221)
         
     | 
| 
       903 
1190 
     | 
    
         
             
                * entering/updating/leaving presence state on behalf of another client_id
         
     | 
| 
       904 
1191 
     | 
    
         
             
                  * #enter_client
         
     | 
| 
       905 
1192 
     | 
    
         
             
                    * multiple times on the same channel with different client_ids
         
     | 
| 
       906 
     | 
    
         
            -
                      * [has no affect on the client's presence state and only enters on behalf of the provided client_id](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       907 
     | 
    
         
            -
                      * [enters a channel and sets the data based on the provided :data option](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1193 
     | 
    
         
            +
                      * [has no affect on the client's presence state and only enters on behalf of the provided client_id](./spec/acceptance/realtime/presence_spec.rb#L1244)
         
     | 
| 
      
 1194 
     | 
    
         
            +
                      * [enters a channel and sets the data based on the provided :data option](./spec/acceptance/realtime/presence_spec.rb#L1258)
         
     | 
| 
       908 
1195 
     | 
    
         
             
                    * message #connection_id
         
     | 
| 
       909 
     | 
    
         
            -
                      * [matches the current client connection_id](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1196 
     | 
    
         
            +
                      * [matches the current client connection_id](./spec/acceptance/realtime/presence_spec.rb#L1277)
         
     | 
| 
       910 
1197 
     | 
    
         
             
                    * without necessary capabilities to enter on behalf of another client
         
     | 
| 
       911 
     | 
    
         
            -
                      * [calls the Deferrable errback on capabilities failure](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1198 
     | 
    
         
            +
                      * [calls the Deferrable errback on capabilities failure](./spec/acceptance/realtime/presence_spec.rb#L1297)
         
     | 
| 
       912 
1199 
     | 
    
         
             
                    * it should behave like a public presence method
         
     | 
| 
       913 
     | 
    
         
            -
                      * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       914 
     | 
    
         
            -
                      * [raise an exception if the channel  
     | 
| 
       915 
     | 
    
         
            -
                      * [ 
     | 
| 
       916 
     | 
    
         
            -
                      * [ 
     | 
| 
       917 
     | 
    
         
            -
                      * [ 
     | 
| 
       918 
     | 
    
         
            -
                      * [ 
     | 
| 
       919 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 1200 
     | 
    
         
            +
                      * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
         
     | 
| 
      
 1201 
     | 
    
         
            +
                      * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
         
     | 
| 
      
 1202 
     | 
    
         
            +
                      * [raise an exception if the channel is failed](./spec/acceptance/realtime/presence_spec.rb#L97)
         
     | 
| 
      
 1203 
     | 
    
         
            +
                      * [raise an exception if the channel becomes failed](./spec/acceptance/realtime/presence_spec.rb#L114)
         
     | 
| 
      
 1204 
     | 
    
         
            +
                      * [implicitly attaches the channel](./spec/acceptance/realtime/presence_spec.rb#L130)
         
     | 
| 
      
 1205 
     | 
    
         
            +
                      * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L293)
         
     | 
| 
      
 1206 
     | 
    
         
            +
                      * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb#L300)
         
     | 
| 
      
 1207 
     | 
    
         
            +
                      * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L308)
         
     | 
| 
      
 1208 
     | 
    
         
            +
                      * [catches exceptions in the provided method block and logs them to the logger](./spec/acceptance/realtime/presence_spec.rb#L318)
         
     | 
| 
       920 
1209 
     | 
    
         
             
                      * when :queue_messages client option is false
         
     | 
| 
       921 
1210 
     | 
    
         
             
                        * and connection state initialized
         
     | 
| 
       922 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1211 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L142)
         
     | 
| 
       923 
1212 
     | 
    
         
             
                        * and connection state connecting
         
     | 
| 
       924 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1213 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L152)
         
     | 
| 
       925 
1214 
     | 
    
         
             
                        * and connection state disconnected
         
     | 
| 
       926 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1215 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L167)
         
     | 
| 
       927 
1216 
     | 
    
         
             
                        * and connection state connected
         
     | 
| 
       928 
     | 
    
         
            -
                          * [publishes the message](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1217 
     | 
    
         
            +
                          * [publishes the message](./spec/acceptance/realtime/presence_spec.rb#L182)
         
     | 
| 
       929 
1218 
     | 
    
         
             
                      * with supported data payload content type
         
     | 
| 
       930 
1219 
     | 
    
         
             
                        * JSON Object (Hash)
         
     | 
| 
       931 
     | 
    
         
            -
                          * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1220 
     | 
    
         
            +
                          * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb#L209)
         
     | 
| 
       932 
1221 
     | 
    
         
             
                        * JSON Array
         
     | 
| 
       933 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1222 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L219)
         
     | 
| 
       934 
1223 
     | 
    
         
             
                        * String
         
     | 
| 
       935 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1224 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L229)
         
     | 
| 
       936 
1225 
     | 
    
         
             
                        * Binary
         
     | 
| 
       937 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1226 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L239)
         
     | 
| 
       938 
1227 
     | 
    
         
             
                      * with unsupported data payload content type
         
     | 
| 
       939 
1228 
     | 
    
         
             
                        * Integer
         
     | 
| 
       940 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1229 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L259)
         
     | 
| 
       941 
1230 
     | 
    
         
             
                        * Float
         
     | 
| 
       942 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1231 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L268)
         
     | 
| 
       943 
1232 
     | 
    
         
             
                        * Boolean
         
     | 
| 
       944 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1233 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L277)
         
     | 
| 
       945 
1234 
     | 
    
         
             
                        * False
         
     | 
| 
       946 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1235 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L286)
         
     | 
| 
       947 
1236 
     | 
    
         
             
                      * if connection fails before success
         
     | 
| 
       948 
     | 
    
         
            -
                        * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1237 
     | 
    
         
            +
                        * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
         
     | 
| 
       949 
1238 
     | 
    
         
             
                    * it should behave like a presence on behalf of another client method
         
     | 
| 
       950 
1239 
     | 
    
         
             
                      * :enter_client when authenticated with a wildcard client_id
         
     | 
| 
       951 
1240 
     | 
    
         
             
                        * and a valid client_id
         
     | 
| 
       952 
     | 
    
         
            -
                          * [succeeds](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1241 
     | 
    
         
            +
                          * [succeeds](./spec/acceptance/realtime/presence_spec.rb#L362)
         
     | 
| 
       953 
1242 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       954 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1243 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L372)
         
     | 
| 
       955 
1244 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       956 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1245 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L379)
         
     | 
| 
      
 1246 
     | 
    
         
            +
                        * and a client_id that is not a string type
         
     | 
| 
      
 1247 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L386)
         
     | 
| 
       957 
1248 
     | 
    
         
             
                      * :enter_client when authenticated with a valid client_id
         
     | 
| 
       958 
1249 
     | 
    
         
             
                        * and another invalid client_id
         
     | 
| 
       959 
1250 
     | 
    
         
             
                          * before authentication
         
     | 
| 
       960 
     | 
    
         
            -
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1251 
     | 
    
         
            +
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb#L402)
         
     | 
| 
       961 
1252 
     | 
    
         
             
                          * after authentication
         
     | 
| 
       962 
     | 
    
         
            -
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1253 
     | 
    
         
            +
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L411)
         
     | 
| 
       963 
1254 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       964 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1255 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L421)
         
     | 
| 
       965 
1256 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       966 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1257 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L428)
         
     | 
| 
       967 
1258 
     | 
    
         
             
                      * :enter_client when anonymous and no client_id
         
     | 
| 
       968 
1259 
     | 
    
         
             
                        * and another invalid client_id
         
     | 
| 
       969 
1260 
     | 
    
         
             
                          * before authentication
         
     | 
| 
       970 
     | 
    
         
            -
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1261 
     | 
    
         
            +
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb#L444)
         
     | 
| 
       971 
1262 
     | 
    
         
             
                          * after authentication
         
     | 
| 
       972 
     | 
    
         
            -
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1263 
     | 
    
         
            +
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L453)
         
     | 
| 
       973 
1264 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       974 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1265 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L463)
         
     | 
| 
       975 
1266 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       976 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1267 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L470)
         
     | 
| 
       977 
1268 
     | 
    
         
             
                  * #update_client
         
     | 
| 
       978 
1269 
     | 
    
         
             
                    * multiple times on the same channel with different client_ids
         
     | 
| 
       979 
     | 
    
         
            -
                      * [updates the data attribute for the member when :data option provided](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       980 
     | 
    
         
            -
                      * [updates the data attribute to null for the member when :data option is not provided (assumed null)](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       981 
     | 
    
         
            -
                      * [enters if not already entered](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1270 
     | 
    
         
            +
                      * [updates the data attribute for the member when :data option provided](./spec/acceptance/realtime/presence_spec.rb#L1311)
         
     | 
| 
      
 1271 
     | 
    
         
            +
                      * [updates the data attribute to null for the member when :data option is not provided (assumed null)](./spec/acceptance/realtime/presence_spec.rb#L1335)
         
     | 
| 
      
 1272 
     | 
    
         
            +
                      * [enters if not already entered](./spec/acceptance/realtime/presence_spec.rb#L1347)
         
     | 
| 
       982 
1273 
     | 
    
         
             
                    * it should behave like a public presence method
         
     | 
| 
       983 
     | 
    
         
            -
                      * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       984 
     | 
    
         
            -
                      * [raise an exception if the channel  
     | 
| 
       985 
     | 
    
         
            -
                      * [ 
     | 
| 
       986 
     | 
    
         
            -
                      * [ 
     | 
| 
       987 
     | 
    
         
            -
                      * [ 
     | 
| 
       988 
     | 
    
         
            -
                      * [ 
     | 
| 
       989 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 1274 
     | 
    
         
            +
                      * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
         
     | 
| 
      
 1275 
     | 
    
         
            +
                      * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
         
     | 
| 
      
 1276 
     | 
    
         
            +
                      * [raise an exception if the channel is failed](./spec/acceptance/realtime/presence_spec.rb#L97)
         
     | 
| 
      
 1277 
     | 
    
         
            +
                      * [raise an exception if the channel becomes failed](./spec/acceptance/realtime/presence_spec.rb#L114)
         
     | 
| 
      
 1278 
     | 
    
         
            +
                      * [implicitly attaches the channel](./spec/acceptance/realtime/presence_spec.rb#L130)
         
     | 
| 
      
 1279 
     | 
    
         
            +
                      * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L293)
         
     | 
| 
      
 1280 
     | 
    
         
            +
                      * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb#L300)
         
     | 
| 
      
 1281 
     | 
    
         
            +
                      * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L308)
         
     | 
| 
      
 1282 
     | 
    
         
            +
                      * [catches exceptions in the provided method block and logs them to the logger](./spec/acceptance/realtime/presence_spec.rb#L318)
         
     | 
| 
       990 
1283 
     | 
    
         
             
                      * when :queue_messages client option is false
         
     | 
| 
       991 
1284 
     | 
    
         
             
                        * and connection state initialized
         
     | 
| 
       992 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1285 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L142)
         
     | 
| 
       993 
1286 
     | 
    
         
             
                        * and connection state connecting
         
     | 
| 
       994 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1287 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L152)
         
     | 
| 
       995 
1288 
     | 
    
         
             
                        * and connection state disconnected
         
     | 
| 
       996 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1289 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L167)
         
     | 
| 
       997 
1290 
     | 
    
         
             
                        * and connection state connected
         
     | 
| 
       998 
     | 
    
         
            -
                          * [publishes the message](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1291 
     | 
    
         
            +
                          * [publishes the message](./spec/acceptance/realtime/presence_spec.rb#L182)
         
     | 
| 
       999 
1292 
     | 
    
         
             
                      * with supported data payload content type
         
     | 
| 
       1000 
1293 
     | 
    
         
             
                        * JSON Object (Hash)
         
     | 
| 
       1001 
     | 
    
         
            -
                          * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1294 
     | 
    
         
            +
                          * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb#L209)
         
     | 
| 
       1002 
1295 
     | 
    
         
             
                        * JSON Array
         
     | 
| 
       1003 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1296 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L219)
         
     | 
| 
       1004 
1297 
     | 
    
         
             
                        * String
         
     | 
| 
       1005 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1298 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L229)
         
     | 
| 
       1006 
1299 
     | 
    
         
             
                        * Binary
         
     | 
| 
       1007 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1300 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L239)
         
     | 
| 
       1008 
1301 
     | 
    
         
             
                      * with unsupported data payload content type
         
     | 
| 
       1009 
1302 
     | 
    
         
             
                        * Integer
         
     | 
| 
       1010 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1303 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L259)
         
     | 
| 
       1011 
1304 
     | 
    
         
             
                        * Float
         
     | 
| 
       1012 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1305 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L268)
         
     | 
| 
       1013 
1306 
     | 
    
         
             
                        * Boolean
         
     | 
| 
       1014 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1307 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L277)
         
     | 
| 
       1015 
1308 
     | 
    
         
             
                        * False
         
     | 
| 
       1016 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1309 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L286)
         
     | 
| 
       1017 
1310 
     | 
    
         
             
                      * if connection fails before success
         
     | 
| 
       1018 
     | 
    
         
            -
                        * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1311 
     | 
    
         
            +
                        * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
         
     | 
| 
       1019 
1312 
     | 
    
         
             
                    * it should behave like a presence on behalf of another client method
         
     | 
| 
       1020 
1313 
     | 
    
         
             
                      * :update_client when authenticated with a wildcard client_id
         
     | 
| 
       1021 
1314 
     | 
    
         
             
                        * and a valid client_id
         
     | 
| 
       1022 
     | 
    
         
            -
                          * [succeeds](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1315 
     | 
    
         
            +
                          * [succeeds](./spec/acceptance/realtime/presence_spec.rb#L362)
         
     | 
| 
       1023 
1316 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       1024 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1317 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L372)
         
     | 
| 
       1025 
1318 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       1026 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1319 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L379)
         
     | 
| 
      
 1320 
     | 
    
         
            +
                        * and a client_id that is not a string type
         
     | 
| 
      
 1321 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L386)
         
     | 
| 
       1027 
1322 
     | 
    
         
             
                      * :update_client when authenticated with a valid client_id
         
     | 
| 
       1028 
1323 
     | 
    
         
             
                        * and another invalid client_id
         
     | 
| 
       1029 
1324 
     | 
    
         
             
                          * before authentication
         
     | 
| 
       1030 
     | 
    
         
            -
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1325 
     | 
    
         
            +
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb#L402)
         
     | 
| 
       1031 
1326 
     | 
    
         
             
                          * after authentication
         
     | 
| 
       1032 
     | 
    
         
            -
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1327 
     | 
    
         
            +
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L411)
         
     | 
| 
       1033 
1328 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       1034 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1329 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L421)
         
     | 
| 
       1035 
1330 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       1036 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1331 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L428)
         
     | 
| 
       1037 
1332 
     | 
    
         
             
                      * :update_client when anonymous and no client_id
         
     | 
| 
       1038 
1333 
     | 
    
         
             
                        * and another invalid client_id
         
     | 
| 
       1039 
1334 
     | 
    
         
             
                          * before authentication
         
     | 
| 
       1040 
     | 
    
         
            -
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1335 
     | 
    
         
            +
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb#L444)
         
     | 
| 
       1041 
1336 
     | 
    
         
             
                          * after authentication
         
     | 
| 
       1042 
     | 
    
         
            -
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1337 
     | 
    
         
            +
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L453)
         
     | 
| 
       1043 
1338 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       1044 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1339 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L463)
         
     | 
| 
       1045 
1340 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       1046 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1341 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L470)
         
     | 
| 
       1047 
1342 
     | 
    
         
             
                  * #leave_client
         
     | 
| 
       1048 
1343 
     | 
    
         
             
                    * leaves a channel
         
     | 
| 
       1049 
1344 
     | 
    
         
             
                      * multiple times on the same channel with different client_ids
         
     | 
| 
       1050 
     | 
    
         
            -
                        * [emits the :leave event for each client_id](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1051 
     | 
    
         
            -
                        * [succeeds if that client_id has not previously entered the channel](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1345 
     | 
    
         
            +
                        * [emits the :leave event for each client_id](./spec/acceptance/realtime/presence_spec.rb#L1377)
         
     | 
| 
      
 1346 
     | 
    
         
            +
                        * [succeeds if that client_id has not previously entered the channel](./spec/acceptance/realtime/presence_spec.rb#L1401)
         
     | 
| 
       1052 
1347 
     | 
    
         
             
                      * with a new value in :data option
         
     | 
| 
       1053 
     | 
    
         
            -
                        * [emits the leave event with the new data value](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1348 
     | 
    
         
            +
                        * [emits the leave event with the new data value](./spec/acceptance/realtime/presence_spec.rb#L1425)
         
     | 
| 
       1054 
1349 
     | 
    
         
             
                      * with a nil value in :data option
         
     | 
| 
       1055 
     | 
    
         
            -
                        * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1350 
     | 
    
         
            +
                        * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L1438)
         
     | 
| 
       1056 
1351 
     | 
    
         
             
                      * with no :data option
         
     | 
| 
       1057 
     | 
    
         
            -
                        * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1352 
     | 
    
         
            +
                        * [emits the leave event with the previous value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L1451)
         
     | 
| 
       1058 
1353 
     | 
    
         
             
                    * it should behave like a public presence method
         
     | 
| 
       1059 
     | 
    
         
            -
                      * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1060 
     | 
    
         
            -
                      * [raise an exception if the channel  
     | 
| 
       1061 
     | 
    
         
            -
                      * [ 
     | 
| 
       1062 
     | 
    
         
            -
                      * [ 
     | 
| 
       1063 
     | 
    
         
            -
                      * [ 
     | 
| 
       1064 
     | 
    
         
            -
                      * [ 
     | 
| 
       1065 
     | 
    
         
            -
                      * [ 
     | 
| 
      
 1354 
     | 
    
         
            +
                      * [raise an exception if the channel is detached](./spec/acceptance/realtime/presence_spec.rb#L63)
         
     | 
| 
      
 1355 
     | 
    
         
            +
                      * [raise an exception if the channel becomes detached](./spec/acceptance/realtime/presence_spec.rb#L81)
         
     | 
| 
      
 1356 
     | 
    
         
            +
                      * [raise an exception if the channel is failed](./spec/acceptance/realtime/presence_spec.rb#L97)
         
     | 
| 
      
 1357 
     | 
    
         
            +
                      * [raise an exception if the channel becomes failed](./spec/acceptance/realtime/presence_spec.rb#L114)
         
     | 
| 
      
 1358 
     | 
    
         
            +
                      * [implicitly attaches the channel](./spec/acceptance/realtime/presence_spec.rb#L130)
         
     | 
| 
      
 1359 
     | 
    
         
            +
                      * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L293)
         
     | 
| 
      
 1360 
     | 
    
         
            +
                      * [allows a block to be passed in that is executed upon success](./spec/acceptance/realtime/presence_spec.rb#L300)
         
     | 
| 
      
 1361 
     | 
    
         
            +
                      * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L308)
         
     | 
| 
      
 1362 
     | 
    
         
            +
                      * [catches exceptions in the provided method block and logs them to the logger](./spec/acceptance/realtime/presence_spec.rb#L318)
         
     | 
| 
       1066 
1363 
     | 
    
         
             
                      * when :queue_messages client option is false
         
     | 
| 
       1067 
1364 
     | 
    
         
             
                        * and connection state initialized
         
     | 
| 
       1068 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1365 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L142)
         
     | 
| 
       1069 
1366 
     | 
    
         
             
                        * and connection state connecting
         
     | 
| 
       1070 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1367 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L152)
         
     | 
| 
       1071 
1368 
     | 
    
         
             
                        * and connection state disconnected
         
     | 
| 
       1072 
     | 
    
         
            -
                          * [ 
     | 
| 
      
 1369 
     | 
    
         
            +
                          * [fails the deferrable](./spec/acceptance/realtime/presence_spec.rb#L167)
         
     | 
| 
       1073 
1370 
     | 
    
         
             
                        * and connection state connected
         
     | 
| 
       1074 
     | 
    
         
            -
                          * [publishes the message](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1371 
     | 
    
         
            +
                          * [publishes the message](./spec/acceptance/realtime/presence_spec.rb#L182)
         
     | 
| 
       1075 
1372 
     | 
    
         
             
                      * with supported data payload content type
         
     | 
| 
       1076 
1373 
     | 
    
         
             
                        * JSON Object (Hash)
         
     | 
| 
       1077 
     | 
    
         
            -
                          * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1374 
     | 
    
         
            +
                          * [is encoded and decoded to the same hash](./spec/acceptance/realtime/presence_spec.rb#L209)
         
     | 
| 
       1078 
1375 
     | 
    
         
             
                        * JSON Array
         
     | 
| 
       1079 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1376 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L219)
         
     | 
| 
       1080 
1377 
     | 
    
         
             
                        * String
         
     | 
| 
       1081 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1378 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L229)
         
     | 
| 
       1082 
1379 
     | 
    
         
             
                        * Binary
         
     | 
| 
       1083 
     | 
    
         
            -
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1380 
     | 
    
         
            +
                          * [is encoded and decoded to the same Array](./spec/acceptance/realtime/presence_spec.rb#L239)
         
     | 
| 
       1084 
1381 
     | 
    
         
             
                      * with unsupported data payload content type
         
     | 
| 
       1085 
1382 
     | 
    
         
             
                        * Integer
         
     | 
| 
       1086 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1383 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L259)
         
     | 
| 
       1087 
1384 
     | 
    
         
             
                        * Float
         
     | 
| 
       1088 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1385 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L268)
         
     | 
| 
       1089 
1386 
     | 
    
         
             
                        * Boolean
         
     | 
| 
       1090 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1387 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L277)
         
     | 
| 
       1091 
1388 
     | 
    
         
             
                        * False
         
     | 
| 
       1092 
     | 
    
         
            -
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1389 
     | 
    
         
            +
                          * [raises an UnsupportedDataType 40011 exception](./spec/acceptance/realtime/presence_spec.rb#L286)
         
     | 
| 
       1093 
1390 
     | 
    
         
             
                      * if connection fails before success
         
     | 
| 
       1094 
     | 
    
         
            -
                        * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1391 
     | 
    
         
            +
                        * [calls the Deferrable errback if channel is detached](./spec/acceptance/realtime/presence_spec.rb#L331)
         
     | 
| 
       1095 
1392 
     | 
    
         
             
                    * it should behave like a presence on behalf of another client method
         
     | 
| 
       1096 
1393 
     | 
    
         
             
                      * :leave_client when authenticated with a wildcard client_id
         
     | 
| 
       1097 
1394 
     | 
    
         
             
                        * and a valid client_id
         
     | 
| 
       1098 
     | 
    
         
            -
                          * [succeeds](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1395 
     | 
    
         
            +
                          * [succeeds](./spec/acceptance/realtime/presence_spec.rb#L362)
         
     | 
| 
       1099 
1396 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       1100 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1397 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L372)
         
     | 
| 
       1101 
1398 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       1102 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1399 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L379)
         
     | 
| 
      
 1400 
     | 
    
         
            +
                        * and a client_id that is not a string type
         
     | 
| 
      
 1401 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L386)
         
     | 
| 
       1103 
1402 
     | 
    
         
             
                      * :leave_client when authenticated with a valid client_id
         
     | 
| 
       1104 
1403 
     | 
    
         
             
                        * and another invalid client_id
         
     | 
| 
       1105 
1404 
     | 
    
         
             
                          * before authentication
         
     | 
| 
       1106 
     | 
    
         
            -
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1405 
     | 
    
         
            +
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb#L402)
         
     | 
| 
       1107 
1406 
     | 
    
         
             
                          * after authentication
         
     | 
| 
       1108 
     | 
    
         
            -
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1407 
     | 
    
         
            +
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L411)
         
     | 
| 
       1109 
1408 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       1110 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1409 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L421)
         
     | 
| 
       1111 
1410 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       1112 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1411 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L428)
         
     | 
| 
       1113 
1412 
     | 
    
         
             
                      * :leave_client when anonymous and no client_id
         
     | 
| 
       1114 
1413 
     | 
    
         
             
                        * and another invalid client_id
         
     | 
| 
       1115 
1414 
     | 
    
         
             
                          * before authentication
         
     | 
| 
       1116 
     | 
    
         
            -
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1415 
     | 
    
         
            +
                            * [allows the operation and then Ably rejects the operation](./spec/acceptance/realtime/presence_spec.rb#L444)
         
     | 
| 
       1117 
1416 
     | 
    
         
             
                          * after authentication
         
     | 
| 
       1118 
     | 
    
         
            -
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1417 
     | 
    
         
            +
                            * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L453)
         
     | 
| 
       1119 
1418 
     | 
    
         
             
                        * and a wildcard client_id
         
     | 
| 
       1120 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1419 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L463)
         
     | 
| 
       1121 
1420 
     | 
    
         
             
                        * and an empty client_id
         
     | 
| 
       1122 
     | 
    
         
            -
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1421 
     | 
    
         
            +
                          * [throws an exception](./spec/acceptance/realtime/presence_spec.rb#L470)
         
     | 
| 
       1123 
1422 
     | 
    
         
             
                * #get
         
     | 
| 
       1124 
     | 
    
         
            -
                  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1125 
     | 
    
         
            -
                  * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1126 
     | 
    
         
            -
                  * [catches exceptions in the provided method block](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1127 
     | 
    
         
            -
                  * [ 
     | 
| 
       1128 
     | 
    
         
            -
                  * [ 
     | 
| 
       1129 
     | 
    
         
            -
                  * [ 
     | 
| 
       1130 
     | 
    
         
            -
                  * [ 
     | 
| 
       1131 
     | 
    
         
            -
                  * [filters by  
     | 
| 
       1132 
     | 
    
         
            -
                  * [ 
     | 
| 
      
 1423 
     | 
    
         
            +
                  * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L1470)
         
     | 
| 
      
 1424 
     | 
    
         
            +
                  * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L1475)
         
     | 
| 
      
 1425 
     | 
    
         
            +
                  * [catches exceptions in the provided method block](./spec/acceptance/realtime/presence_spec.rb#L1482)
         
     | 
| 
      
 1426 
     | 
    
         
            +
                  * [implicitly attaches the channel (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1490)
         
     | 
| 
      
 1427 
     | 
    
         
            +
                  * [fails if the connection is DETACHED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1524)
         
     | 
| 
      
 1428 
     | 
    
         
            +
                  * [fails if the connection is FAILED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1539)
         
     | 
| 
      
 1429 
     | 
    
         
            +
                  * [returns the current members on the channel (#RTP11a)](./spec/acceptance/realtime/presence_spec.rb#L1623)
         
     | 
| 
      
 1430 
     | 
    
         
            +
                  * [filters by connection_id option if provided (#RTP11c3)](./spec/acceptance/realtime/presence_spec.rb#L1638)
         
     | 
| 
      
 1431 
     | 
    
         
            +
                  * [filters by client_id option if provided (#RTP11c2)](./spec/acceptance/realtime/presence_spec.rb#L1660)
         
     | 
| 
      
 1432 
     | 
    
         
            +
                  * [does not wait for SYNC to complete if :wait_for_sync option is false (#RTP11c1)](./spec/acceptance/realtime/presence_spec.rb#L1684)
         
     | 
| 
      
 1433 
     | 
    
         
            +
                  * [returns the list of members and waits for SYNC to complete by default (#RTP11a)](./spec/acceptance/realtime/presence_spec.rb#L1693)
         
     | 
| 
      
 1434 
     | 
    
         
            +
                  * when the channel is SUSPENDED
         
     | 
| 
      
 1435 
     | 
    
         
            +
                    * with wait_for_sync: true
         
     | 
| 
      
 1436 
     | 
    
         
            +
                      * [returns the current PresenceMap and does not wait for the channel to change to the ATTACHED state (#RTP11d)](./spec/acceptance/realtime/presence_spec.rb#L1500)
         
     | 
| 
      
 1437 
     | 
    
         
            +
                    * with wait_for_sync: false
         
     | 
| 
      
 1438 
     | 
    
         
            +
                      * [returns the current PresenceMap and does not wait for the channel to change to the ATTACHED state (#RTP11d)](./spec/acceptance/realtime/presence_spec.rb#L1512)
         
     | 
| 
       1133 
1439 
     | 
    
         
             
                  * during a sync
         
     | 
| 
       1134 
1440 
     | 
    
         
             
                    * when :wait_for_sync is true
         
     | 
| 
       1135 
     | 
    
         
            -
                      * [fails if the connection  
     | 
| 
       1136 
     | 
    
         
            -
                      * [fails if the channel  
     | 
| 
      
 1441 
     | 
    
         
            +
                      * [fails if the connection becomes FAILED (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1576)
         
     | 
| 
      
 1442 
     | 
    
         
            +
                      * [fails if the channel becomes detached (#RTP11b)](./spec/acceptance/realtime/presence_spec.rb#L1599)
         
     | 
| 
       1137 
1443 
     | 
    
         
             
                  * when a member enters and then leaves
         
     | 
| 
       1138 
     | 
    
         
            -
                    * [has no members](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1444 
     | 
    
         
            +
                    * [has no members](./spec/acceptance/realtime/presence_spec.rb#L1703)
         
     | 
| 
      
 1445 
     | 
    
         
            +
                  * when a member enters and the presence map is updated
         
     | 
| 
      
 1446 
     | 
    
         
            +
                    * [adds the member as being :present (#RTP2d)](./spec/acceptance/realtime/presence_spec.rb#L1716)
         
     | 
| 
       1139 
1447 
     | 
    
         
             
                  * with lots of members on different clients
         
     | 
| 
       1140 
     | 
    
         
            -
                    * [returns a complete list of members on all clients](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1448 
     | 
    
         
            +
                    * [returns a complete list of members on all clients](./spec/acceptance/realtime/presence_spec.rb#L1734)
         
     | 
| 
       1141 
1449 
     | 
    
         
             
                * #subscribe
         
     | 
| 
       1142 
     | 
    
         
            -
                  * [implicitly attaches](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1450 
     | 
    
         
            +
                  * [implicitly attaches](./spec/acceptance/realtime/presence_spec.rb#L1809)
         
     | 
| 
       1143 
1451 
     | 
    
         
             
                  * with no arguments
         
     | 
| 
       1144 
     | 
    
         
            -
                    * [calls the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1452 
     | 
    
         
            +
                    * [calls the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb#L1770)
         
     | 
| 
       1145 
1453 
     | 
    
         
             
                  * with event name
         
     | 
| 
       1146 
     | 
    
         
            -
                    * [calls the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1454 
     | 
    
         
            +
                    * [calls the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb#L1790)
         
     | 
| 
      
 1455 
     | 
    
         
            +
                  * with a callback that raises an exception
         
     | 
| 
      
 1456 
     | 
    
         
            +
                    * [logs the error and continues](./spec/acceptance/realtime/presence_spec.rb#L1822)
         
     | 
| 
       1147 
1457 
     | 
    
         
             
                * #unsubscribe
         
     | 
| 
       1148 
1458 
     | 
    
         
             
                  * with no arguments
         
     | 
| 
       1149 
     | 
    
         
            -
                    * [removes the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1459 
     | 
    
         
            +
                    * [removes the callback for all presence events](./spec/acceptance/realtime/presence_spec.rb#L1843)
         
     | 
| 
       1150 
1460 
     | 
    
         
             
                  * with event name
         
     | 
| 
       1151 
     | 
    
         
            -
                    * [removes the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1461 
     | 
    
         
            +
                    * [removes the callback for specified presence event](./spec/acceptance/realtime/presence_spec.rb#L1861)
         
     | 
| 
       1152 
1462 
     | 
    
         
             
                * REST #get
         
     | 
| 
       1153 
     | 
    
         
            -
                  * [returns current members](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1154 
     | 
    
         
            -
                  * [returns no members once left](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1463 
     | 
    
         
            +
                  * [returns current members](./spec/acceptance/realtime/presence_spec.rb#L1880)
         
     | 
| 
      
 1464 
     | 
    
         
            +
                  * [returns no members once left](./spec/acceptance/realtime/presence_spec.rb#L1893)
         
     | 
| 
       1155 
1465 
     | 
    
         
             
                * client_id with ASCII_8BIT
         
     | 
| 
       1156 
1466 
     | 
    
         
             
                  * in connection set up
         
     | 
| 
       1157 
     | 
    
         
            -
                    * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1467 
     | 
    
         
            +
                    * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb#L1910)
         
     | 
| 
       1158 
1468 
     | 
    
         
             
                  * in channel options
         
     | 
| 
       1159 
     | 
    
         
            -
                    * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1469 
     | 
    
         
            +
                    * [is converted into UTF_8](./spec/acceptance/realtime/presence_spec.rb#L1923)
         
     | 
| 
       1160 
1470 
     | 
    
         
             
                * encoding and decoding of presence message data
         
     | 
| 
       1161 
     | 
    
         
            -
                  * [encrypts presence message data](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1471 
     | 
    
         
            +
                  * [encrypts presence message data](./spec/acceptance/realtime/presence_spec.rb#L1949)
         
     | 
| 
       1162 
1472 
     | 
    
         
             
                  * #subscribe
         
     | 
| 
       1163 
     | 
    
         
            -
                    * [emits decrypted enter events](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1164 
     | 
    
         
            -
                    * [emits decrypted update events](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1165 
     | 
    
         
            -
                    * [emits previously set data for leave events](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1473 
     | 
    
         
            +
                    * [emits decrypted enter events](./spec/acceptance/realtime/presence_spec.rb#L1968)
         
     | 
| 
      
 1474 
     | 
    
         
            +
                    * [emits decrypted update events](./spec/acceptance/realtime/presence_spec.rb#L1980)
         
     | 
| 
      
 1475 
     | 
    
         
            +
                    * [emits previously set data for leave events](./spec/acceptance/realtime/presence_spec.rb#L1994)
         
     | 
| 
       1166 
1476 
     | 
    
         
             
                  * #get
         
     | 
| 
       1167 
     | 
    
         
            -
                    * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1477 
     | 
    
         
            +
                    * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb#L2010)
         
     | 
| 
       1168 
1478 
     | 
    
         
             
                  * REST #get
         
     | 
| 
       1169 
     | 
    
         
            -
                    * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1479 
     | 
    
         
            +
                    * [returns a list of members with decrypted data](./spec/acceptance/realtime/presence_spec.rb#L2023)
         
     | 
| 
       1170 
1480 
     | 
    
         
             
                  * when cipher settings do not match publisher
         
     | 
| 
       1171 
     | 
    
         
            -
                    * [delivers an unencoded presence message left with encoding value](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1172 
     | 
    
         
            -
                    * [emits an error when cipher does not match and presence data cannot be decoded](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1481 
     | 
    
         
            +
                    * [delivers an unencoded presence message left with encoding value](./spec/acceptance/realtime/presence_spec.rb#L2038)
         
     | 
| 
      
 1482 
     | 
    
         
            +
                    * [emits an error when cipher does not match and presence data cannot be decoded](./spec/acceptance/realtime/presence_spec.rb#L2051)
         
     | 
| 
       1173 
1483 
     | 
    
         
             
                * leaving
         
     | 
| 
       1174 
     | 
    
         
            -
                  * [expect :left event once underlying connection is closed](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
       1175 
     | 
    
         
            -
                  * [expect :left event with client data from enter event](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1484 
     | 
    
         
            +
                  * [expect :left event once underlying connection is closed](./spec/acceptance/realtime/presence_spec.rb#L2067)
         
     | 
| 
      
 1485 
     | 
    
         
            +
                  * [expect :left event with client data from enter event](./spec/acceptance/realtime/presence_spec.rb#L2077)
         
     | 
| 
       1176 
1486 
     | 
    
         
             
                * connection failure mid-way through a large member sync
         
     | 
| 
       1177 
     | 
    
         
            -
                  * [resumes the SYNC operation](./spec/acceptance/realtime/presence_spec.rb# 
     | 
| 
      
 1487 
     | 
    
         
            +
                  * [resumes the SYNC operation (#RTP3)](./spec/acceptance/realtime/presence_spec.rb#L2096)
         
     | 
| 
      
 1488 
     | 
    
         
            +
                * server-initiated sync
         
     | 
| 
      
 1489 
     | 
    
         
            +
                  * with multiple SYNC pages
         
     | 
| 
      
 1490 
     | 
    
         
            +
                    * [is initiated with a SYNC message and completed with a later SYNC message with no cursor value part of the channelSerial (#RTP18a, #RTP18b) ](./spec/acceptance/realtime/presence_spec.rb#L2134)
         
     | 
| 
      
 1491 
     | 
    
         
            +
                  * with a single SYNC page
         
     | 
| 
      
 1492 
     | 
    
         
            +
                    * [is initiated and completed with a single SYNC message (and no channelSerial) (#RTP18a, #RTP18c) ](./spec/acceptance/realtime/presence_spec.rb#L2185)
         
     | 
| 
      
 1493 
     | 
    
         
            +
                  * when members exist in the PresenceMap before a SYNC completes
         
     | 
| 
      
 1494 
     | 
    
         
            +
                    * [removes the members that are no longer present (#RTP19)](./spec/acceptance/realtime/presence_spec.rb#L2233)
         
     | 
| 
      
 1495 
     | 
    
         
            +
                * when the client does not have presence subscribe privileges but is present on the channel
         
     | 
| 
      
 1496 
     | 
    
         
            +
                  * PENDING: *[receives presence updates for all presence events generated by the current connection and the presence map is kept up to date (#RTP17a)](./spec/acceptance/realtime/presence_spec.rb#L2291)*
         
     | 
| 
      
 1497 
     | 
    
         
            +
                * local PresenceMap for presence members entered by this client
         
     | 
| 
      
 1498 
     | 
    
         
            +
                  * [maintains a copy of the member map for any member that shares this connection's connection ID (#RTP17)](./spec/acceptance/realtime/presence_spec.rb#L2328)
         
     | 
| 
      
 1499 
     | 
    
         
            +
                  * when a channel becomes attached again
         
     | 
| 
      
 1500 
     | 
    
         
            +
                    * and the resume flag is true
         
     | 
| 
      
 1501 
     | 
    
         
            +
                      * and the presence flag is false
         
     | 
| 
      
 1502 
     | 
    
         
            +
                        * [does not send any presence events as the PresenceMap is in sync (#RTP5c1)](./spec/acceptance/realtime/presence_spec.rb#L2368)
         
     | 
| 
      
 1503 
     | 
    
         
            +
                      * and the presence flag is true
         
     | 
| 
      
 1504 
     | 
    
         
            +
                        * and following the SYNC all local MemberMap members are present in the PresenceMap
         
     | 
| 
      
 1505 
     | 
    
         
            +
                          * [does nothing as MemberMap is in sync (#RTP5c2)](./spec/acceptance/realtime/presence_spec.rb#L2395)
         
     | 
| 
      
 1506 
     | 
    
         
            +
                        * and following the SYNC a local MemberMap member is not present in the PresenceMap
         
     | 
| 
      
 1507 
     | 
    
         
            +
                          * [re-enters the missing members automatically (#RTP5c2)](./spec/acceptance/realtime/presence_spec.rb#L2431)
         
     | 
| 
      
 1508 
     | 
    
         
            +
                    * and the resume flag is false
         
     | 
| 
      
 1509 
     | 
    
         
            +
                      * and the presence flag is false
         
     | 
| 
      
 1510 
     | 
    
         
            +
                        * [immediately resends all local presence members (#RTP5c2, #RTP19a)](./spec/acceptance/realtime/presence_spec.rb#L2511)
         
     | 
| 
      
 1511 
     | 
    
         
            +
                    * when re-entering a client automatically, if the re-enter fails for any reason
         
     | 
| 
      
 1512 
     | 
    
         
            +
                      * [should emit an ErrorInfo with error code 91004 (#RTP5c3)](./spec/acceptance/realtime/presence_spec.rb#L2559)
         
     | 
| 
      
 1513 
     | 
    
         
            +
                * channel state side effects
         
     | 
| 
      
 1514 
     | 
    
         
            +
                  * channel transitions to the FAILED state
         
     | 
| 
      
 1515 
     | 
    
         
            +
                    * [clears the PresenceMap and local member map copy and does not emit any presence events (#RTP5a)](./spec/acceptance/realtime/presence_spec.rb#L2616)
         
     | 
| 
      
 1516 
     | 
    
         
            +
                  * channel transitions to the DETACHED state
         
     | 
| 
      
 1517 
     | 
    
         
            +
                    * [clears the PresenceMap and local member map copy and does not emit any presence events (#RTP5a)](./spec/acceptance/realtime/presence_spec.rb#L2640)
         
     | 
| 
      
 1518 
     | 
    
         
            +
                  * channel transitions to the SUSPENDED state
         
     | 
| 
      
 1519 
     | 
    
         
            +
                    * [maintains the PresenceMap and only publishes presence event changes since the last attached state (#RTP5f)](./spec/acceptance/realtime/presence_spec.rb#L2673)
         
     | 
| 
       1178 
1520 
     | 
    
         | 
| 
       1179 
1521 
     | 
    
         
             
            ### Ably::Realtime::Client#stats
         
     | 
| 
       1180 
1522 
     | 
    
         
             
            _(see [spec/acceptance/realtime/stats_spec.rb](./spec/acceptance/realtime/stats_spec.rb))_
         
     | 
| 
         @@ -1216,7 +1558,7 @@ _(see [spec/acceptance/rest/auth_spec.rb](./spec/acceptance/rest/auth_spec.rb))_ 
     | 
|
| 
       1216 
1558 
     | 
    
         
             
                  * with :key_name & :key_secret options
         
     | 
| 
       1217 
1559 
     | 
    
         
             
                    * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L177)
         
     | 
| 
       1218 
1560 
     | 
    
         
             
                  * with :query_time option
         
     | 
| 
       1219 
     | 
    
         
            -
                    * [queries the server for the time](./spec/acceptance/rest/auth_spec.rb#L185)
         
     | 
| 
      
 1561 
     | 
    
         
            +
                    * [queries the server for the time (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L185)
         
     | 
| 
       1220 
1562 
     | 
    
         
             
                  * without :query_time option
         
     | 
| 
       1221 
1563 
     | 
    
         
             
                    * [does not query the server for the time](./spec/acceptance/rest/auth_spec.rb#L194)
         
     | 
| 
       1222 
1564 
     | 
    
         
             
                  * with :auth_url option merging
         
     | 
| 
         @@ -1254,13 +1596,13 @@ _(see [spec/acceptance/rest/auth_spec.rb](./spec/acceptance/rest/auth_spec.rb))_ 
     | 
|
| 
       1254 
1596 
     | 
    
         
             
                    * that returns a TokenRequest
         
     | 
| 
       1255 
1597 
     | 
    
         
             
                      * [calls the Proc with token_params when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L440)
         
     | 
| 
       1256 
1598 
     | 
    
         
             
                      * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L444)
         
     | 
| 
       1257 
     | 
    
         
            -
                      * when  
     | 
| 
      
 1599 
     | 
    
         
            +
                      * when authorized
         
     | 
| 
       1258 
1600 
     | 
    
         
             
                        * [sets Auth#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L451)
         
     | 
| 
       1259 
1601 
     | 
    
         
             
                        * [sets Client#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L455)
         
     | 
| 
       1260 
1602 
     | 
    
         
             
                    * that returns a TokenDetails JSON object
         
     | 
| 
       1261 
1603 
     | 
    
         
             
                      * [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L489)
         
     | 
| 
       1262 
1604 
     | 
    
         
             
                      * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L494)
         
     | 
| 
       1263 
     | 
    
         
            -
                      * when  
     | 
| 
      
 1605 
     | 
    
         
            +
                      * when authorized
         
     | 
| 
       1264 
1606 
     | 
    
         
             
                        * [sets Auth#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L506)
         
     | 
| 
       1265 
1607 
     | 
    
         
             
                        * [sets Client#client_id to the new token's client_id](./spec/acceptance/rest/auth_spec.rb#L510)
         
     | 
| 
       1266 
1608 
     | 
    
         
             
                    * that returns a TokenDetails object
         
     | 
| 
         @@ -1271,106 +1613,131 @@ _(see [spec/acceptance/rest/auth_spec.rb](./spec/acceptance/rest/auth_spec.rb))_ 
     | 
|
| 
       1271 
1613 
     | 
    
         
             
                    * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L571)
         
     | 
| 
       1272 
1614 
     | 
    
         
             
                  * with token_param :client_id
         
     | 
| 
       1273 
1615 
     | 
    
         
             
                    * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L580)
         
     | 
| 
       1274 
     | 
    
         
            -
                * before # 
     | 
| 
      
 1616 
     | 
    
         
            +
                * before #authorize has been called
         
     | 
| 
       1275 
1617 
     | 
    
         
             
                  * [has no current_token_details](./spec/acceptance/rest/auth_spec.rb#L587)
         
     | 
| 
       1276 
     | 
    
         
            -
                * # 
     | 
| 
       1277 
     | 
    
         
            -
                  * [updates the persisted token params that are then used for subsequent  
     | 
| 
       1278 
     | 
    
         
            -
                  * [updates the persisted  
     | 
| 
      
 1618 
     | 
    
         
            +
                * #authorize (#RSA10, #RSA10j)
         
     | 
| 
      
 1619 
     | 
    
         
            +
                  * [updates the persisted token params that are then used for subsequent authorize requests](./spec/acceptance/rest/auth_spec.rb#L754)
         
     | 
| 
      
 1620 
     | 
    
         
            +
                  * [updates the persisted auth options that are then used for subsequent authorize requests](./spec/acceptance/rest/auth_spec.rb#L760)
         
     | 
| 
       1279 
1621 
     | 
    
         
             
                  * when called for the first time since the client has been instantiated
         
     | 
| 
       1280 
1622 
     | 
    
         
             
                    * [passes all auth_options and token_params to #request_token](./spec/acceptance/rest/auth_spec.rb#L601)
         
     | 
| 
       1281 
1623 
     | 
    
         
             
                    * [returns a valid token](./spec/acceptance/rest/auth_spec.rb#L606)
         
     | 
| 
       1282 
     | 
    
         
            -
                    * [issues a new token  
     | 
| 
      
 1624 
     | 
    
         
            +
                    * [issues a new token every time (#RSA10a)](./spec/acceptance/rest/auth_spec.rb#L610)
         
     | 
| 
      
 1625 
     | 
    
         
            +
                  * query_time: true with authorize
         
     | 
| 
      
 1626 
     | 
    
         
            +
                    * [only queries the server time once and then works out the offset, query_time option is never persisted (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L624)
         
     | 
| 
      
 1627 
     | 
    
         
            +
                  * query_time: true ClientOption when instanced
         
     | 
| 
      
 1628 
     | 
    
         
            +
                    * [only queries the server time once and then works out the offset, query_time option is never persisted (#RSA10k)](./spec/acceptance/rest/auth_spec.rb#L644)
         
     | 
| 
      
 1629 
     | 
    
         
            +
                  * TokenParams argument
         
     | 
| 
      
 1630 
     | 
    
         
            +
                    * [has no effect on the defaults when null and TokenParam defaults remain the same](./spec/acceptance/rest/auth_spec.rb#L661)
         
     | 
| 
      
 1631 
     | 
    
         
            +
                    * [updates defaults when present and all previous configured TokenParams are discarded (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L668)
         
     | 
| 
      
 1632 
     | 
    
         
            +
                    * [updates Auth#token_params attribute with an immutable hash](./spec/acceptance/rest/auth_spec.rb#L676)
         
     | 
| 
      
 1633 
     | 
    
         
            +
                    * [uses TokenParams#timestamp for this request but obtains a new timestamp for subsequence requests (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L681)
         
     | 
| 
      
 1634 
     | 
    
         
            +
                  * AuthOptions argument
         
     | 
| 
      
 1635 
     | 
    
         
            +
                    * [has no effect on the defaults when null and AuthOptions defaults remain the same](./spec/acceptance/rest/auth_spec.rb#L706)
         
     | 
| 
      
 1636 
     | 
    
         
            +
                    * [updates defaults when present and all previous configured AuthOptions are discarded (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L712)
         
     | 
| 
      
 1637 
     | 
    
         
            +
                    * [updates Auth#options attribute with an immutable hash](./spec/acceptance/rest/auth_spec.rb#L719)
         
     | 
| 
      
 1638 
     | 
    
         
            +
                    * [uses AuthOptions#query_time for this request and will not query_time for subsequent requests (#RSA10g)](./spec/acceptance/rest/auth_spec.rb#L724)
         
     | 
| 
      
 1639 
     | 
    
         
            +
                    * [uses AuthOptions#query_time for this request and will query_time again if provided subsequently](./spec/acceptance/rest/auth_spec.rb#L730)
         
     | 
| 
       1283 
1640 
     | 
    
         
             
                  * with previous authorisation
         
     | 
| 
       1284 
     | 
    
         
            -
                    * [ 
     | 
| 
       1285 
     | 
    
         
            -
                    * [ 
     | 
| 
       1286 
     | 
    
         
            -
                    * [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#L632)
         
     | 
| 
      
 1641 
     | 
    
         
            +
                    * [requests a new token if token is expired](./spec/acceptance/rest/auth_spec.rb#L743)
         
     | 
| 
      
 1642 
     | 
    
         
            +
                    * [issues a new token every time #authorize is called](./spec/acceptance/rest/auth_spec.rb#L749)
         
     | 
| 
       1287 
1643 
     | 
    
         
             
                  * with a Proc for the :auth_callback option
         
     | 
| 
       1288 
     | 
    
         
            -
                    * [calls the Proc](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1289 
     | 
    
         
            -
                    * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1644 
     | 
    
         
            +
                    * [calls the Proc](./spec/acceptance/rest/auth_spec.rb#L776)
         
     | 
| 
      
 1645 
     | 
    
         
            +
                    * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L780)
         
     | 
| 
       1290 
1646 
     | 
    
         
             
                    * for every subsequent #request_token
         
     | 
| 
       1291 
1647 
     | 
    
         
             
                      * without a :auth_callback Proc
         
     | 
| 
       1292 
     | 
    
         
            -
                        * [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1648 
     | 
    
         
            +
                        * [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb#L786)
         
     | 
| 
       1293 
1649 
     | 
    
         
             
                      * with a provided block
         
     | 
| 
       1294 
     | 
    
         
            -
                        * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1650 
     | 
    
         
            +
                        * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](./spec/acceptance/rest/auth_spec.rb#L793)
         
     | 
| 
       1295 
1651 
     | 
    
         
             
                  * with an explicit token string that expires
         
     | 
| 
       1296 
1652 
     | 
    
         
             
                    * and a Proc for the :auth_callback option to provide a means to renew the token
         
     | 
| 
       1297 
     | 
    
         
            -
                      * [calls the Proc once the token has expired and the new token is used](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1653 
     | 
    
         
            +
                      * [calls the Proc once the token has expired and the new token is used](./spec/acceptance/rest/auth_spec.rb#L820)
         
     | 
| 
       1298 
1654 
     | 
    
         
             
                  * with an explicit ClientOptions client_id
         
     | 
| 
       1299 
1655 
     | 
    
         
             
                    * and an incompatible client_id in a TokenDetails object passed to the auth callback
         
     | 
| 
       1300 
     | 
    
         
            -
                      * [rejects a TokenDetails object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1656 
     | 
    
         
            +
                      * [rejects a TokenDetails object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L838)
         
     | 
| 
       1301 
1657 
     | 
    
         
             
                    * and an incompatible client_id in a TokenRequest object passed to the auth callback and raises an exception
         
     | 
| 
       1302 
     | 
    
         
            -
                      * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1658 
     | 
    
         
            +
                      * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L846)
         
     | 
| 
       1303 
1659 
     | 
    
         
             
                    * and a token string without any retrievable client_id
         
     | 
| 
       1304 
     | 
    
         
            -
                      * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1660 
     | 
    
         
            +
                      * [rejects a TokenRequests object with an incompatible client_id and raises an exception](./spec/acceptance/rest/auth_spec.rb#L854)
         
     | 
| 
       1305 
1661 
     | 
    
         
             
                * #create_token_request
         
     | 
| 
       1306 
     | 
    
         
            -
                  * [returns a TokenRequest object](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1307 
     | 
    
         
            -
                  * [returns a TokenRequest that can be passed to a client that can use it for authentication without an API key](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1308 
     | 
    
         
            -
                  * [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1309 
     | 
    
         
            -
                  * [uses the default TTL](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1310 
     | 
    
         
            -
                  * [uses the default capability](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1662 
     | 
    
         
            +
                  * [returns a TokenRequest object](./spec/acceptance/rest/auth_spec.rb#L869)
         
     | 
| 
      
 1663 
     | 
    
         
            +
                  * [returns a TokenRequest that can be passed to a client that can use it for authentication without an API key](./spec/acceptance/rest/auth_spec.rb#L873)
         
     | 
| 
      
 1664 
     | 
    
         
            +
                  * [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb#L880)
         
     | 
| 
      
 1665 
     | 
    
         
            +
                  * [uses the default TTL](./spec/acceptance/rest/auth_spec.rb#L884)
         
     | 
| 
      
 1666 
     | 
    
         
            +
                  * [uses the default capability](./spec/acceptance/rest/auth_spec.rb#L897)
         
     | 
| 
       1311 
1667 
     | 
    
         
             
                  * with a :ttl option below the Token expiry buffer that ensures tokens are renewed 15s before they expire as they are considered expired
         
     | 
| 
       1312 
     | 
    
         
            -
                    * [uses the Token expiry buffer default + 10s to allow for a token request in flight](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1668 
     | 
    
         
            +
                    * [uses the Token expiry buffer default + 10s to allow for a token request in flight](./spec/acceptance/rest/auth_spec.rb#L891)
         
     | 
| 
       1313 
1669 
     | 
    
         
             
                  * the nonce
         
     | 
| 
       1314 
     | 
    
         
            -
                    * [is unique for every request](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1315 
     | 
    
         
            -
                    * [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1670 
     | 
    
         
            +
                    * [is unique for every request](./spec/acceptance/rest/auth_spec.rb#L902)
         
     | 
| 
      
 1671 
     | 
    
         
            +
                    * [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb#L907)
         
     | 
| 
       1316 
1672 
     | 
    
         
             
                  * with token param :ttl
         
     | 
| 
       1317 
     | 
    
         
            -
                    * [overrides default](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1673 
     | 
    
         
            +
                    * [overrides default](./spec/acceptance/rest/auth_spec.rb#L918)
         
     | 
| 
       1318 
1674 
     | 
    
         
             
                  * with token param :nonce
         
     | 
| 
       1319 
     | 
    
         
            -
                    * [overrides default](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1675 
     | 
    
         
            +
                    * [overrides default](./spec/acceptance/rest/auth_spec.rb#L918)
         
     | 
| 
       1320 
1676 
     | 
    
         
             
                  * with token param :client_id
         
     | 
| 
       1321 
     | 
    
         
            -
                    * [overrides default](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1677 
     | 
    
         
            +
                    * [overrides default](./spec/acceptance/rest/auth_spec.rb#L918)
         
     | 
| 
       1322 
1678 
     | 
    
         
             
                  * when specifying capability
         
     | 
| 
       1323 
     | 
    
         
            -
                    * [overrides the default](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1324 
     | 
    
         
            -
                    * [uses these capabilities when Ably issues an actual token](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1679 
     | 
    
         
            +
                    * [overrides the default](./spec/acceptance/rest/auth_spec.rb#L929)
         
     | 
| 
      
 1680 
     | 
    
         
            +
                    * [uses these capabilities when Ably issues an actual token](./spec/acceptance/rest/auth_spec.rb#L933)
         
     | 
| 
       1325 
1681 
     | 
    
         
             
                  * with additional invalid attributes
         
     | 
| 
       1326 
     | 
    
         
            -
                    * [are ignored](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1682 
     | 
    
         
            +
                    * [are ignored](./spec/acceptance/rest/auth_spec.rb#L943)
         
     | 
| 
       1327 
1683 
     | 
    
         
             
                  * when required fields are missing
         
     | 
| 
       1328 
     | 
    
         
            -
                    * [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1329 
     | 
    
         
            -
                    * [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1684 
     | 
    
         
            +
                    * [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb#L954)
         
     | 
| 
      
 1685 
     | 
    
         
            +
                    * [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb#L958)
         
     | 
| 
       1330 
1686 
     | 
    
         
             
                  * timestamp attribute
         
     | 
| 
       1331 
     | 
    
         
            -
                    * [is a Time object in Ruby and is set to the local time](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1687 
     | 
    
         
            +
                    * [is a Time object in Ruby and is set to the local time](./spec/acceptance/rest/auth_spec.rb#L985)
         
     | 
| 
       1332 
1688 
     | 
    
         
             
                    * with :query_time auth_option
         
     | 
| 
       1333 
     | 
    
         
            -
                      * [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1689 
     | 
    
         
            +
                      * [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb#L970)
         
     | 
| 
       1334 
1690 
     | 
    
         
             
                    * with :timestamp option
         
     | 
| 
       1335 
     | 
    
         
            -
                      * [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1691 
     | 
    
         
            +
                      * [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb#L980)
         
     | 
| 
       1336 
1692 
     | 
    
         
             
                  * signing
         
     | 
| 
       1337 
     | 
    
         
            -
                    * [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1693 
     | 
    
         
            +
                    * [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb#L1009)
         
     | 
| 
      
 1694 
     | 
    
         
            +
                    * lexicographic ordering of channels and operations
         
     | 
| 
      
 1695 
     | 
    
         
            +
                      * [HMAC is lexicographic ordered and thus the HMAC is identical](./spec/acceptance/rest/auth_spec.rb#L1036)
         
     | 
| 
      
 1696 
     | 
    
         
            +
                      * [is valid when used for authentication](./spec/acceptance/rest/auth_spec.rb#L1042)
         
     | 
| 
       1338 
1697 
     | 
    
         
             
                * using token authentication
         
     | 
| 
       1339 
1698 
     | 
    
         
             
                  * with :token option
         
     | 
| 
       1340 
     | 
    
         
            -
                    * [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1341 
     | 
    
         
            -
                    * [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1342 
     | 
    
         
            -
                    * [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1343 
     | 
    
         
            -
                    * [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1699 
     | 
    
         
            +
                    * [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb#L1069)
         
     | 
| 
      
 1700 
     | 
    
         
            +
                    * [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb#L1073)
         
     | 
| 
      
 1701 
     | 
    
         
            +
                    * [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb#L1081)
         
     | 
| 
      
 1702 
     | 
    
         
            +
                    * [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb#L1089)
         
     | 
| 
      
 1703 
     | 
    
         
            +
                    * and the token expires
         
     | 
| 
      
 1704 
     | 
    
         
            +
                      * [should indicate an error and not retry the request (#RSA4a)](./spec/acceptance/rest/auth_spec.rb#L1123)
         
     | 
| 
       1344 
1705 
     | 
    
         
             
                  * when implicit as a result of using :client_id
         
     | 
| 
       1345 
1706 
     | 
    
         
             
                    * and requests to the Ably server are mocked
         
     | 
| 
       1346 
     | 
    
         
            -
                      * [will send a token request to the server](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1707 
     | 
    
         
            +
                      * [will send a token request to the server](./spec/acceptance/rest/auth_spec.rb#L1153)
         
     | 
| 
       1347 
1708 
     | 
    
         
             
                    * a token is created
         
     | 
| 
       1348 
     | 
    
         
            -
                      * [before a request is made](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1349 
     | 
    
         
            -
                      * [when a message is published](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1350 
     | 
    
         
            -
                      * [with capability and TTL defaults](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1351 
     | 
    
         
            -
                      * [#client_id contains the client_id](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1709 
     | 
    
         
            +
                      * [before a request is made](./spec/acceptance/rest/auth_spec.rb#L1162)
         
     | 
| 
      
 1710 
     | 
    
         
            +
                      * [when a message is published](./spec/acceptance/rest/auth_spec.rb#L1166)
         
     | 
| 
      
 1711 
     | 
    
         
            +
                      * [with capability and TTL defaults](./spec/acceptance/rest/auth_spec.rb#L1170)
         
     | 
| 
      
 1712 
     | 
    
         
            +
                      * [#client_id contains the client_id](./spec/acceptance/rest/auth_spec.rb#L1181)
         
     | 
| 
      
 1713 
     | 
    
         
            +
                  * when token expires
         
     | 
| 
      
 1714 
     | 
    
         
            +
                    * [automatically renews the token (#RSA4b)](./spec/acceptance/rest/auth_spec.rb#L1210)
         
     | 
| 
      
 1715 
     | 
    
         
            +
                    * [fails if the token renewal fails (#RSA4b)](./spec/acceptance/rest/auth_spec.rb#L1220)
         
     | 
| 
       1352 
1716 
     | 
    
         
             
                  * when :client_id is provided in a token
         
     | 
| 
       1353 
     | 
    
         
            -
                    * [#client_id contains the client_id](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1717 
     | 
    
         
            +
                    * [#client_id contains the client_id](./spec/acceptance/rest/auth_spec.rb#L1244)
         
     | 
| 
       1354 
1718 
     | 
    
         
             
                * #client_id_validated?
         
     | 
| 
       1355 
1719 
     | 
    
         
             
                  * when using basic auth
         
     | 
| 
       1356 
     | 
    
         
            -
                    * [is false as basic auth users do not have an identity](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1720 
     | 
    
         
            +
                    * [is false as basic auth users do not have an identity](./spec/acceptance/rest/auth_spec.rb#L1256)
         
     | 
| 
       1357 
1721 
     | 
    
         
             
                  * when using a token auth string for a token with a client_id
         
     | 
| 
       1358 
     | 
    
         
            -
                    * [is false as identification is not possible from an opaque token string](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1722 
     | 
    
         
            +
                    * [is false as identification is not possible from an opaque token string](./spec/acceptance/rest/auth_spec.rb#L1264)
         
     | 
| 
       1359 
1723 
     | 
    
         
             
                  * when using a token
         
     | 
| 
       1360 
1724 
     | 
    
         
             
                    * with a client_id
         
     | 
| 
       1361 
     | 
    
         
            -
                      * [is true](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1725 
     | 
    
         
            +
                      * [is true](./spec/acceptance/rest/auth_spec.rb#L1273)
         
     | 
| 
       1362 
1726 
     | 
    
         
             
                    * with no client_id (anonymous)
         
     | 
| 
       1363 
     | 
    
         
            -
                      * [is true](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1727 
     | 
    
         
            +
                      * [is true](./spec/acceptance/rest/auth_spec.rb#L1281)
         
     | 
| 
       1364 
1728 
     | 
    
         
             
                    * with a wildcard client_id (anonymous)
         
     | 
| 
       1365 
     | 
    
         
            -
                      * [is false](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1729 
     | 
    
         
            +
                      * [is false](./spec/acceptance/rest/auth_spec.rb#L1289)
         
     | 
| 
       1366 
1730 
     | 
    
         
             
                  * when using a token request with a client_id
         
     | 
| 
       1367 
     | 
    
         
            -
                    * [is not true as identification is not confirmed until authenticated](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1731 
     | 
    
         
            +
                    * [is not true as identification is not confirmed until authenticated](./spec/acceptance/rest/auth_spec.rb#L1298)
         
     | 
| 
       1368 
1732 
     | 
    
         
             
                    * after authentication
         
     | 
| 
       1369 
     | 
    
         
            -
                      * [is true as identification is completed during implicit authentication](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1733 
     | 
    
         
            +
                      * [is true as identification is completed during implicit authentication](./spec/acceptance/rest/auth_spec.rb#L1305)
         
     | 
| 
       1370 
1734 
     | 
    
         
             
                * when using a :key and basic auth
         
     | 
| 
       1371 
     | 
    
         
            -
                  * [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1372 
     | 
    
         
            -
                  * [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
       1373 
     | 
    
         
            -
                  * [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb# 
     | 
| 
      
 1735 
     | 
    
         
            +
                  * [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb#L1313)
         
     | 
| 
      
 1736 
     | 
    
         
            +
                  * [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb#L1317)
         
     | 
| 
      
 1737 
     | 
    
         
            +
                  * [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb#L1321)
         
     | 
| 
      
 1738 
     | 
    
         
            +
                * deprecated #authorise
         
     | 
| 
      
 1739 
     | 
    
         
            +
                  * [logs a deprecation warning (#RSA10l)](./spec/acceptance/rest/auth_spec.rb#L1357)
         
     | 
| 
      
 1740 
     | 
    
         
            +
                  * [returns a valid token (#RSA10l)](./spec/acceptance/rest/auth_spec.rb#L1362)
         
     | 
| 
       1374 
1741 
     | 
    
         | 
| 
       1375 
1742 
     | 
    
         
             
            ### Ably::Rest
         
     | 
| 
       1376 
1743 
     | 
    
         
             
            _(see [spec/acceptance/rest/base_spec.rb](./spec/acceptance/rest/base_spec.rb))_
         
     | 
| 
         @@ -1471,18 +1838,18 @@ _(see [spec/acceptance/rest/channel_spec.rb](./spec/acceptance/rest/channel_spec 
     | 
|
| 
       1471 
1838 
     | 
    
         
             
                * #history option
         
     | 
| 
       1472 
1839 
     | 
    
         
             
                  * :start
         
     | 
| 
       1473 
1840 
     | 
    
         
             
                    * with milliseconds since epoch value
         
     | 
| 
       1474 
     | 
    
         
            -
                      * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb# 
     | 
| 
      
 1841 
     | 
    
         
            +
                      * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb#L389)
         
     | 
| 
       1475 
1842 
     | 
    
         
             
                    * with a Time object value
         
     | 
| 
       1476 
     | 
    
         
            -
                      * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb# 
     | 
| 
      
 1843 
     | 
    
         
            +
                      * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb#L399)
         
     | 
| 
       1477 
1844 
     | 
    
         
             
                  * :end
         
     | 
| 
       1478 
1845 
     | 
    
         
             
                    * with milliseconds since epoch value
         
     | 
| 
       1479 
     | 
    
         
            -
                      * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb# 
     | 
| 
      
 1846 
     | 
    
         
            +
                      * [uses this value in the history request](./spec/acceptance/rest/channel_spec.rb#L389)
         
     | 
| 
       1480 
1847 
     | 
    
         
             
                    * with a Time object value
         
     | 
| 
       1481 
     | 
    
         
            -
                      * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb# 
     | 
| 
      
 1848 
     | 
    
         
            +
                      * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/channel_spec.rb#L399)
         
     | 
| 
       1482 
1849 
     | 
    
         
             
                  * when argument start is after end
         
     | 
| 
       1483 
     | 
    
         
            -
                    * [should raise an exception](./spec/acceptance/rest/channel_spec.rb# 
     | 
| 
      
 1850 
     | 
    
         
            +
                    * [should raise an exception](./spec/acceptance/rest/channel_spec.rb#L409)
         
     | 
| 
       1484 
1851 
     | 
    
         
             
                * #presence
         
     | 
| 
       1485 
     | 
    
         
            -
                  * [returns a REST Presence object](./spec/acceptance/rest/channel_spec.rb# 
     | 
| 
      
 1852 
     | 
    
         
            +
                  * [returns a REST Presence object](./spec/acceptance/rest/channel_spec.rb#L419)
         
     | 
| 
       1486 
1853 
     | 
    
         | 
| 
       1487 
1854 
     | 
    
         
             
            ### Ably::Rest::Channels
         
     | 
| 
       1488 
1855 
     | 
    
         
             
            _(see [spec/acceptance/rest/channels_spec.rb](./spec/acceptance/rest/channels_spec.rb))_
         
     | 
| 
         @@ -1509,94 +1876,132 @@ _(see [spec/acceptance/rest/client_spec.rb](./spec/acceptance/rest/client_spec.r 
     | 
|
| 
       1509 
1876 
     | 
    
         
             
              * using JSON protocol
         
     | 
| 
       1510 
1877 
     | 
    
         
             
                * #initialize
         
     | 
| 
       1511 
1878 
     | 
    
         
             
                  * with only an API key
         
     | 
| 
       1512 
     | 
    
         
            -
                    * [uses basic authentication](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1879 
     | 
    
         
            +
                    * [uses basic authentication](./spec/acceptance/rest/client_spec.rb#L25)
         
     | 
| 
       1513 
1880 
     | 
    
         
             
                  * with an explicit string :token
         
     | 
| 
       1514 
     | 
    
         
            -
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1881 
     | 
    
         
            +
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L33)
         
     | 
| 
       1515 
1882 
     | 
    
         
             
                  * with :use_token_auth set to true
         
     | 
| 
       1516 
     | 
    
         
            -
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1883 
     | 
    
         
            +
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L41)
         
     | 
| 
       1517 
1884 
     | 
    
         
             
                  * with a :client_id configured
         
     | 
| 
       1518 
     | 
    
         
            -
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1885 
     | 
    
         
            +
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L49)
         
     | 
| 
      
 1886 
     | 
    
         
            +
                  * with a non string :client_id
         
     | 
| 
      
 1887 
     | 
    
         
            +
                    * [raises an ArgumentError](./spec/acceptance/rest/client_spec.rb#L57)
         
     | 
| 
       1519 
1888 
     | 
    
         
             
                  * with an invalid wildcard "*" :client_id
         
     | 
| 
       1520 
     | 
    
         
            -
                    * [raises an exception](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1889 
     | 
    
         
            +
                    * [raises an exception](./spec/acceptance/rest/client_spec.rb#L63)
         
     | 
| 
       1521 
1890 
     | 
    
         
             
                  * with an :auth_callback Proc
         
     | 
| 
       1522 
     | 
    
         
            -
                    * [calls the auth Proc to get a new token](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1523 
     | 
    
         
            -
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1891 
     | 
    
         
            +
                    * [calls the auth Proc to get a new token](./spec/acceptance/rest/client_spec.rb#L71)
         
     | 
| 
      
 1892 
     | 
    
         
            +
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L76)
         
     | 
| 
      
 1893 
     | 
    
         
            +
                  * with :default_token_params
         
     | 
| 
      
 1894 
     | 
    
         
            +
                    * [overides the default token params (#TO3j11)](./spec/acceptance/rest/client_spec.rb#L90)
         
     | 
| 
       1524 
1895 
     | 
    
         
             
                  * with an :auth_callback Proc (clientId provided in library options instead of as a token_request param)
         
     | 
| 
       1525 
     | 
    
         
            -
                    * [correctly sets the clientId on the token](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1896 
     | 
    
         
            +
                    * [correctly sets the clientId on the token](./spec/acceptance/rest/client_spec.rb#L100)
         
     | 
| 
       1526 
1897 
     | 
    
         
             
                  * with an auth URL
         
     | 
| 
       1527 
     | 
    
         
            -
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1898 
     | 
    
         
            +
                    * [uses token authentication](./spec/acceptance/rest/client_spec.rb#L110)
         
     | 
| 
       1528 
1899 
     | 
    
         
             
                    * before any REST request
         
     | 
| 
       1529 
     | 
    
         
            -
                      * [sends an HTTP request to the provided auth URL to get a new token](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1900 
     | 
    
         
            +
                      * [sends an HTTP request to the provided auth URL to get a new token](./spec/acceptance/rest/client_spec.rb#L121)
         
     | 
| 
       1530 
1901 
     | 
    
         
             
                  * auth headers
         
     | 
| 
       1531 
1902 
     | 
    
         
             
                    * with basic auth
         
     | 
| 
       1532 
     | 
    
         
            -
                      * [sends the API key in authentication part of the secure URL (the Authorization: Basic header is not used with the Faraday HTTP library by default)](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1903 
     | 
    
         
            +
                      * [sends the API key in authentication part of the secure URL (the Authorization: Basic header is not used with the Faraday HTTP library by default)](./spec/acceptance/rest/client_spec.rb#L141)
         
     | 
| 
       1533 
1904 
     | 
    
         
             
                    * with token auth
         
     | 
| 
       1534 
1905 
     | 
    
         
             
                      * without specifying protocol
         
     | 
| 
       1535 
     | 
    
         
            -
                        * [sends the token string over HTTPS in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1906 
     | 
    
         
            +
                        * [sends the token string over HTTPS in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb#L160)
         
     | 
| 
       1536 
1907 
     | 
    
         
             
                      * when setting constructor ClientOption :tls to false
         
     | 
| 
       1537 
     | 
    
         
            -
                        * [sends the token string over HTTP in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1908 
     | 
    
         
            +
                        * [sends the token string over HTTP in the Authorization Bearer header with Base64 encoding](./spec/acceptance/rest/client_spec.rb#L170)
         
     | 
| 
       1538 
1909 
     | 
    
         
             
                * using tokens
         
     | 
| 
       1539 
1910 
     | 
    
         
             
                  * when expired
         
     | 
| 
       1540 
     | 
    
         
            -
                    * [creates a new token automatically when the old token expires](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1911 
     | 
    
         
            +
                    * [creates a new token automatically when the old token expires](./spec/acceptance/rest/client_spec.rb#L203)
         
     | 
| 
       1541 
1912 
     | 
    
         
             
                    * with a different client_id in the subsequent token
         
     | 
| 
       1542 
     | 
    
         
            -
                      * [fails to authenticate and raises an exception](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1913 
     | 
    
         
            +
                      * [fails to authenticate and raises an exception](./spec/acceptance/rest/client_spec.rb#L216)
         
     | 
| 
       1543 
1914 
     | 
    
         
             
                  * when token has not expired
         
     | 
| 
       1544 
     | 
    
         
            -
                    * [reuses the existing token for every request](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1915 
     | 
    
         
            +
                    * [reuses the existing token for every request](./spec/acceptance/rest/client_spec.rb#L227)
         
     | 
| 
       1545 
1916 
     | 
    
         
             
                * connection transport
         
     | 
| 
       1546 
1917 
     | 
    
         
             
                  * defaults
         
     | 
| 
       1547 
1918 
     | 
    
         
             
                    * for default host
         
     | 
| 
       1548 
     | 
    
         
            -
                      * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1549 
     | 
    
         
            -
                      * [is configured to timeout connection requests in 15 seconds](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1919 
     | 
    
         
            +
                      * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L244)
         
     | 
| 
      
 1920 
     | 
    
         
            +
                      * [is configured to timeout connection requests in 15 seconds](./spec/acceptance/rest/client_spec.rb#L248)
         
     | 
| 
       1550 
1921 
     | 
    
         
             
                    * for the fallback hosts
         
     | 
| 
       1551 
     | 
    
         
            -
                      * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1552 
     | 
    
         
            -
                      * [is configured to timeout connection requests in 15 seconds](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1922 
     | 
    
         
            +
                      * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L254)
         
     | 
| 
      
 1923 
     | 
    
         
            +
                      * [is configured to timeout connection requests in 15 seconds](./spec/acceptance/rest/client_spec.rb#L258)
         
     | 
| 
       1553 
1924 
     | 
    
         
             
                  * with custom http_open_timeout and http_request_timeout options
         
     | 
| 
       1554 
1925 
     | 
    
         
             
                    * for default host
         
     | 
| 
       1555 
     | 
    
         
            -
                      * [is configured to use custom open timeout](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1556 
     | 
    
         
            -
                      * [is configured to use custom request timeout](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1926 
     | 
    
         
            +
                      * [is configured to use custom open timeout](./spec/acceptance/rest/client_spec.rb#L270)
         
     | 
| 
      
 1927 
     | 
    
         
            +
                      * [is configured to use custom request timeout](./spec/acceptance/rest/client_spec.rb#L274)
         
     | 
| 
       1557 
1928 
     | 
    
         
             
                    * for the fallback hosts
         
     | 
| 
       1558 
     | 
    
         
            -
                      * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1559 
     | 
    
         
            -
                      * [is configured to timeout connection requests in 15 seconds](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1929 
     | 
    
         
            +
                      * [is configured to timeout connection opening in 4 seconds](./spec/acceptance/rest/client_spec.rb#L280)
         
     | 
| 
      
 1930 
     | 
    
         
            +
                      * [is configured to timeout connection requests in 15 seconds](./spec/acceptance/rest/client_spec.rb#L284)
         
     | 
| 
       1560 
1931 
     | 
    
         
             
                * fallback hosts
         
     | 
| 
       1561 
1932 
     | 
    
         
             
                  * configured
         
     | 
| 
       1562 
     | 
    
         
            -
                    * [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](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1563 
     | 
    
         
            -
                  * when environment is NOT production
         
     | 
| 
       1564 
     | 
    
         
            -
                    * [does not retry failed requests with fallback hosts when there is a connection error](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1933 
     | 
    
         
            +
                    * [should make connection attempts to A.ably-realtime.com, B.ably-realtime.com, C.ably-realtime.com, D.ably-realtime.com, E.ably-realtime.com (#RSC15a)](./spec/acceptance/rest/client_spec.rb#L298)
         
     | 
| 
      
 1934 
     | 
    
         
            +
                  * when environment is NOT production (#RSC15b)
         
     | 
| 
      
 1935 
     | 
    
         
            +
                    * [does not retry failed requests with fallback hosts when there is a connection error](./spec/acceptance/rest/client_spec.rb#L315)
         
     | 
| 
       1565 
1936 
     | 
    
         
             
                  * when environment is production
         
     | 
| 
       1566 
1937 
     | 
    
         
             
                    * and connection times out
         
     | 
| 
       1567 
     | 
    
         
            -
                      * [tries fallback hosts 3 times](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1938 
     | 
    
         
            +
                      * [tries fallback hosts 3 times (#RSC15b, #RSC15b)](./spec/acceptance/rest/client_spec.rb#L354)
         
     | 
| 
       1568 
1939 
     | 
    
         
             
                      * and the total request time exeeds 10 seconds
         
     | 
| 
       1569 
     | 
    
         
            -
                        * [makes no further attempts to any fallback hosts](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1940 
     | 
    
         
            +
                        * [makes no further attempts to any fallback hosts](./spec/acceptance/rest/client_spec.rb#L369)
         
     | 
| 
       1570 
1941 
     | 
    
         
             
                    * and connection fails
         
     | 
| 
       1571 
     | 
    
         
            -
                      * [tries fallback hosts 3 times](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1942 
     | 
    
         
            +
                      * [tries fallback hosts 3 times](./spec/acceptance/rest/client_spec.rb#L385)
         
     | 
| 
      
 1943 
     | 
    
         
            +
                    * and first request to primary endpoint fails
         
     | 
| 
      
 1944 
     | 
    
         
            +
                      * [tries a fallback host, and for the next request tries the primary endpoint again (#RSC15e)](./spec/acceptance/rest/client_spec.rb#L419)
         
     | 
| 
       1572 
1945 
     | 
    
         
             
                    * and basic authentication fails
         
     | 
| 
       1573 
     | 
    
         
            -
                      * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1946 
     | 
    
         
            +
                      * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L446)
         
     | 
| 
       1574 
1947 
     | 
    
         
             
                    * and server returns a 50x error
         
     | 
| 
       1575 
     | 
    
         
            -
                      * [attempts the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1948 
     | 
    
         
            +
                      * [attempts the fallback hosts as this is an authentication failure (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L468)
         
     | 
| 
      
 1949 
     | 
    
         
            +
                  * when environment is production and server returns a 50x error
         
     | 
| 
      
 1950 
     | 
    
         
            +
                    * with custom fallback hosts provided
         
     | 
| 
      
 1951 
     | 
    
         
            +
                      * [attempts the fallback hosts as this is an authentication failure (#RSC15b, #RSC15a, #TO3k6)](./spec/acceptance/rest/client_spec.rb#L517)
         
     | 
| 
      
 1952 
     | 
    
         
            +
                    * with an empty array of fallback hosts provided (#RSC15b, #RSC15a, #TO3k6)
         
     | 
| 
      
 1953 
     | 
    
         
            +
                      * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L530)
         
     | 
| 
      
 1954 
     | 
    
         
            +
                    * using a local web-server
         
     | 
| 
      
 1955 
     | 
    
         
            +
                      * and timing out the primary host
         
     | 
| 
      
 1956 
     | 
    
         
            +
                        * with request timeout less than max_retry_duration
         
     | 
| 
      
 1957 
     | 
    
         
            +
                          * [tries one of the fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L586)
         
     | 
| 
      
 1958 
     | 
    
         
            +
                        * with request timeout less than max_retry_duration
         
     | 
| 
      
 1959 
     | 
    
         
            +
                          * [tries one of the fallback hosts (#RSC15d)](./spec/acceptance/rest/client_spec.rb#L608)
         
     | 
| 
      
 1960 
     | 
    
         
            +
                      * and failing the primary host
         
     | 
| 
      
 1961 
     | 
    
         
            +
                        * [tries one of the fallback hosts](./spec/acceptance/rest/client_spec.rb#L652)
         
     | 
| 
      
 1962 
     | 
    
         
            +
                  * when environment is not production and server returns a 50x error
         
     | 
| 
      
 1963 
     | 
    
         
            +
                    * with custom fallback hosts provided (#RSC15b, #TO3k6)
         
     | 
| 
      
 1964 
     | 
    
         
            +
                      * [attempts the fallback hosts as this is not an authentication failure](./spec/acceptance/rest/client_spec.rb#L702)
         
     | 
| 
      
 1965 
     | 
    
         
            +
                    * with an empty array of fallback hosts provided (#RSC15b, #TO3k6)
         
     | 
| 
      
 1966 
     | 
    
         
            +
                      * [does not attempt the fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L715)
         
     | 
| 
      
 1967 
     | 
    
         
            +
                    * with fallback_hosts_use_default: true (#RSC15b, #TO3k7)
         
     | 
| 
      
 1968 
     | 
    
         
            +
                      * [attempts the default fallback hosts as this is an authentication failure](./spec/acceptance/rest/client_spec.rb#L740)
         
     | 
| 
       1576 
1969 
     | 
    
         
             
                * with a custom host
         
     | 
| 
       1577 
1970 
     | 
    
         
             
                  * that does not exist
         
     | 
| 
       1578 
     | 
    
         
            -
                    * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1971 
     | 
    
         
            +
                    * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb#L756)
         
     | 
| 
       1579 
1972 
     | 
    
         
             
                    * fallback hosts
         
     | 
| 
       1580 
     | 
    
         
            -
                      * [are never used](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1973 
     | 
    
         
            +
                      * [are never used](./spec/acceptance/rest/client_spec.rb#L777)
         
     | 
| 
       1581 
1974 
     | 
    
         
             
                  * that times out
         
     | 
| 
       1582 
     | 
    
         
            -
                    * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1975 
     | 
    
         
            +
                    * [fails immediately and raises a Faraday Error](./spec/acceptance/rest/client_spec.rb#L792)
         
     | 
| 
       1583 
1976 
     | 
    
         
             
                    * fallback hosts
         
     | 
| 
       1584 
     | 
    
         
            -
                      * [are never used](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1977 
     | 
    
         
            +
                      * [are never used](./spec/acceptance/rest/client_spec.rb#L805)
         
     | 
| 
       1585 
1978 
     | 
    
         
             
                * HTTP configuration options
         
     | 
| 
       1586 
     | 
    
         
            -
                  * [is frozen](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1979 
     | 
    
         
            +
                  * [is frozen](./spec/acceptance/rest/client_spec.rb#L862)
         
     | 
| 
       1587 
1980 
     | 
    
         
             
                  * defaults
         
     | 
| 
       1588 
     | 
    
         
            -
                    * [#http_open_timeout is 4s](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1589 
     | 
    
         
            -
                    * [#http_request_timeout is 15s](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1590 
     | 
    
         
            -
                    * [#http_max_retry_count is 3](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1591 
     | 
    
         
            -
                    * [#http_max_retry_duration is 10s](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1981 
     | 
    
         
            +
                    * [#http_open_timeout is 4s](./spec/acceptance/rest/client_spec.rb#L817)
         
     | 
| 
      
 1982 
     | 
    
         
            +
                    * [#http_request_timeout is 15s](./spec/acceptance/rest/client_spec.rb#L821)
         
     | 
| 
      
 1983 
     | 
    
         
            +
                    * [#http_max_retry_count is 3](./spec/acceptance/rest/client_spec.rb#L825)
         
     | 
| 
      
 1984 
     | 
    
         
            +
                    * [#http_max_retry_duration is 10s](./spec/acceptance/rest/client_spec.rb#L829)
         
     | 
| 
       1592 
1985 
     | 
    
         
             
                  * configured
         
     | 
| 
       1593 
     | 
    
         
            -
                    * [#http_open_timeout uses provided value](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1594 
     | 
    
         
            -
                    * [#http_request_timeout uses provided value](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1595 
     | 
    
         
            -
                    * [#http_max_retry_count uses provided value](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1596 
     | 
    
         
            -
                    * [#http_max_retry_duration uses provided value](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1986 
     | 
    
         
            +
                    * [#http_open_timeout uses provided value](./spec/acceptance/rest/client_spec.rb#L845)
         
     | 
| 
      
 1987 
     | 
    
         
            +
                    * [#http_request_timeout uses provided value](./spec/acceptance/rest/client_spec.rb#L849)
         
     | 
| 
      
 1988 
     | 
    
         
            +
                    * [#http_max_retry_count uses provided value](./spec/acceptance/rest/client_spec.rb#L853)
         
     | 
| 
      
 1989 
     | 
    
         
            +
                    * [#http_max_retry_duration uses provided value](./spec/acceptance/rest/client_spec.rb#L857)
         
     | 
| 
       1597 
1990 
     | 
    
         
             
                * #auth
         
     | 
| 
       1598 
     | 
    
         
            -
                  * [is provides access to the Auth object](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
       1599 
     | 
    
         
            -
                  * [configures the Auth object with all ClientOptions passed to client in the initializer](./spec/acceptance/rest/client_spec.rb# 
     | 
| 
      
 1991 
     | 
    
         
            +
                  * [is provides access to the Auth object](./spec/acceptance/rest/client_spec.rb#L873)
         
     | 
| 
      
 1992 
     | 
    
         
            +
                  * [configures the Auth object with all ClientOptions passed to client in the initializer](./spec/acceptance/rest/client_spec.rb#L877)
         
     | 
| 
      
 1993 
     | 
    
         
            +
                * version headers
         
     | 
| 
      
 1994 
     | 
    
         
            +
                  * with variant none
         
     | 
| 
      
 1995 
     | 
    
         
            +
                    * [sends a protocol version and lib version header (#G4, #RSC7a, #RSC7b)](./spec/acceptance/rest/client_spec.rb#L911)
         
     | 
| 
      
 1996 
     | 
    
         
            +
                  * with variant foo
         
     | 
| 
      
 1997 
     | 
    
         
            +
                    * [sends a protocol version and lib version header (#G4, #RSC7a, #RSC7b)](./spec/acceptance/rest/client_spec.rb#L911)
         
     | 
| 
      
 1998 
     | 
    
         
            +
                * #request (#RSC19*)
         
     | 
| 
      
 1999 
     | 
    
         
            +
                  * get
         
     | 
| 
      
 2000 
     | 
    
         
            +
                    * [returns an HttpPaginatedResponse object](./spec/acceptance/rest/client_spec.rb#L924)
         
     | 
| 
      
 2001 
     | 
    
         
            +
                    * 404 request to invalid URL
         
     | 
| 
      
 2002 
     | 
    
         
            +
                      * [returns an object with 404 status code and error message](./spec/acceptance/rest/client_spec.rb#L931)
         
     | 
| 
      
 2003 
     | 
    
         
            +
                    * paged results
         
     | 
| 
      
 2004 
     | 
    
         
            +
                      * [provides paging](./spec/acceptance/rest/client_spec.rb#L943)
         
     | 
| 
       1600 
2005 
     | 
    
         | 
| 
       1601 
2006 
     | 
    
         
             
            ### Ably::Models::MessageEncoders
         
     | 
| 
       1602 
2007 
     | 
    
         
             
            _(see [spec/acceptance/rest/encoders_spec.rb](./spec/acceptance/rest/encoders_spec.rb))_
         
     | 
| 
         @@ -1645,68 +2050,75 @@ _(see [spec/acceptance/rest/message_spec.rb](./spec/acceptance/rest/message_spec 
     | 
|
| 
       1645 
2050 
     | 
    
         
             
                    * [is encoded and decoded to the same Array](./spec/acceptance/rest/message_spec.rb#L48)
         
     | 
| 
       1646 
2051 
     | 
    
         
             
                  * Binary
         
     | 
| 
       1647 
2052 
     | 
    
         
             
                    * [is encoded and decoded to the same Array](./spec/acceptance/rest/message_spec.rb#L57)
         
     | 
| 
      
 2053 
     | 
    
         
            +
                * with supported extra payload content type (#RSL1h, #RSL6a2)
         
     | 
| 
      
 2054 
     | 
    
         
            +
                  * JSON Object (Hash)
         
     | 
| 
      
 2055 
     | 
    
         
            +
                    * PENDING: *[is encoded and decoded to the same hash](./spec/acceptance/rest/message_spec.rb#L68)*
         
     | 
| 
      
 2056 
     | 
    
         
            +
                  * JSON Array
         
     | 
| 
      
 2057 
     | 
    
         
            +
                    * PENDING: *[is encoded and decoded to the same Array](./spec/acceptance/rest/message_spec.rb#L78)*
         
     | 
| 
      
 2058 
     | 
    
         
            +
                  * nil
         
     | 
| 
      
 2059 
     | 
    
         
            +
                    * [is encoded and decoded to the same Array](./spec/acceptance/rest/message_spec.rb#L86)
         
     | 
| 
       1648 
2060 
     | 
    
         
             
                * with unsupported data payload content type
         
     | 
| 
       1649 
2061 
     | 
    
         
             
                  * Integer
         
     | 
| 
       1650 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2062 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb#L97)
         
     | 
| 
       1651 
2063 
     | 
    
         
             
                  * Float
         
     | 
| 
       1652 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2064 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb#L105)
         
     | 
| 
       1653 
2065 
     | 
    
         
             
                  * Boolean
         
     | 
| 
       1654 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2066 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb#L113)
         
     | 
| 
       1655 
2067 
     | 
    
         
             
                  * False
         
     | 
| 
       1656 
     | 
    
         
            -
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2068 
     | 
    
         
            +
                    * [is raises an UnsupportedDataType 40011 exception](./spec/acceptance/rest/message_spec.rb#L121)
         
     | 
| 
       1657 
2069 
     | 
    
         
             
                * encryption and encoding
         
     | 
| 
       1658 
2070 
     | 
    
         
             
                  * with #publish and #history
         
     | 
| 
       1659 
     | 
    
         
            -
                    * with AES-128-CBC using crypto-data-128.json fixtures
         
     | 
| 
      
 2071 
     | 
    
         
            +
                    * with AES-128-CBC using crypto-data-128.json fixtures (#RTL7d)
         
     | 
| 
       1660 
2072 
     | 
    
         
             
                      * item 0 with encrypted encoding utf-8/cipher+aes-128-cbc/base64
         
     | 
| 
       1661 
2073 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1662 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1663 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2074 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2075 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
       1664 
2076 
     | 
    
         
             
                      * item 1 with encrypted encoding cipher+aes-128-cbc/base64
         
     | 
| 
       1665 
2077 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1666 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1667 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2078 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2079 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
       1668 
2080 
     | 
    
         
             
                      * item 2 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
         
     | 
| 
       1669 
2081 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1670 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1671 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2082 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2083 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
       1672 
2084 
     | 
    
         
             
                      * item 3 with encrypted encoding json/utf-8/cipher+aes-128-cbc/base64
         
     | 
| 
       1673 
2085 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1674 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1675 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1676 
     | 
    
         
            -
                    * with AES-256-CBC using crypto-data-256.json fixtures
         
     | 
| 
      
 2086 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2087 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
      
 2088 
     | 
    
         
            +
                    * with AES-256-CBC using crypto-data-256.json fixtures (#RTL7d)
         
     | 
| 
       1677 
2089 
     | 
    
         
             
                      * item 0 with encrypted encoding utf-8/cipher+aes-256-cbc/base64
         
     | 
| 
       1678 
2090 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1679 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1680 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2091 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2092 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
       1681 
2093 
     | 
    
         
             
                      * item 1 with encrypted encoding cipher+aes-256-cbc/base64
         
     | 
| 
       1682 
2094 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1683 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1684 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2095 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2096 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
       1685 
2097 
     | 
    
         
             
                      * item 2 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
         
     | 
| 
       1686 
2098 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1687 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1688 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2099 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2100 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
       1689 
2101 
     | 
    
         
             
                      * item 3 with encrypted encoding json/utf-8/cipher+aes-256-cbc/base64
         
     | 
| 
       1690 
2102 
     | 
    
         
             
                        * behaves like an Ably encrypter and decrypter
         
     | 
| 
       1691 
     | 
    
         
            -
                          * [encrypts message automatically when published](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1692 
     | 
    
         
            -
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2103 
     | 
    
         
            +
                          * [encrypts message automatically when published (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L166)
         
     | 
| 
      
 2104 
     | 
    
         
            +
                          * [sends and retrieves messages that are encrypted & decrypted by the Ably library (#RTL7d)](./spec/acceptance/rest/message_spec.rb#L181)
         
     | 
| 
       1693 
2105 
     | 
    
         
             
                    * when publishing lots of messages
         
     | 
| 
       1694 
     | 
    
         
            -
                      * [encrypts on #publish and decrypts on #history](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2106 
     | 
    
         
            +
                      * [encrypts on #publish and decrypts on #history](./spec/acceptance/rest/message_spec.rb#L214)
         
     | 
| 
       1695 
2107 
     | 
    
         
             
                    * when retrieving #history with a different protocol
         
     | 
| 
       1696 
     | 
    
         
            -
                      * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1697 
     | 
    
         
            -
                      * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1698 
     | 
    
         
            -
                      * [delivers a Hash payload to the receiver](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2108 
     | 
    
         
            +
                      * [delivers a String ASCII-8BIT payload to the receiver](./spec/acceptance/rest/message_spec.rb#L241)
         
     | 
| 
      
 2109 
     | 
    
         
            +
                      * [delivers a String UTF-8 payload to the receiver](./spec/acceptance/rest/message_spec.rb#L241)
         
     | 
| 
      
 2110 
     | 
    
         
            +
                      * [delivers a Hash payload to the receiver](./spec/acceptance/rest/message_spec.rb#L241)
         
     | 
| 
       1699 
2111 
     | 
    
         
             
                    * when publishing on an unencrypted channel and retrieving with #history on an encrypted channel
         
     | 
| 
       1700 
     | 
    
         
            -
                      * [does not attempt to decrypt the message](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2112 
     | 
    
         
            +
                      * [does not attempt to decrypt the message](./spec/acceptance/rest/message_spec.rb#L257)
         
     | 
| 
       1701 
2113 
     | 
    
         
             
                    * when publishing on an encrypted channel and retrieving with #history on an unencrypted channel
         
     | 
| 
       1702 
     | 
    
         
            -
                      * [retrieves the message that remains encrypted with an encrypted encoding attribute](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1703 
     | 
    
         
            -
                      * [logs a Cipher exception](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1704 
     | 
    
         
            -
                    * publishing on an encrypted channel and retrieving #history with a different algorithm on another client
         
     | 
| 
       1705 
     | 
    
         
            -
                      * [retrieves the message that remains encrypted with an encrypted encoding attribute](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1706 
     | 
    
         
            -
                      * [logs a Cipher exception](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2114 
     | 
    
         
            +
                      * [retrieves the message that remains encrypted with an encrypted encoding attribute (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L278)
         
     | 
| 
      
 2115 
     | 
    
         
            +
                      * [logs a Cipher exception (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L284)
         
     | 
| 
      
 2116 
     | 
    
         
            +
                    * publishing on an encrypted channel and retrieving #history with a different algorithm on another client (#RTL7e)
         
     | 
| 
      
 2117 
     | 
    
         
            +
                      * [retrieves the message that remains encrypted with an encrypted encoding attribute (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L305)
         
     | 
| 
      
 2118 
     | 
    
         
            +
                      * [logs a Cipher exception (#RTL7e)](./spec/acceptance/rest/message_spec.rb#L311)
         
     | 
| 
       1707 
2119 
     | 
    
         
             
                    * publishing on an encrypted channel and subscribing with a different key on another client
         
     | 
| 
       1708 
     | 
    
         
            -
                      * [retrieves the message that remains encrypted with an encrypted encoding attribute](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
       1709 
     | 
    
         
            -
                      * [logs a Cipher exception](./spec/acceptance/rest/message_spec.rb# 
     | 
| 
      
 2120 
     | 
    
         
            +
                      * [retrieves the message that remains encrypted with an encrypted encoding attribute](./spec/acceptance/rest/message_spec.rb#L332)
         
     | 
| 
      
 2121 
     | 
    
         
            +
                      * [logs a Cipher exception](./spec/acceptance/rest/message_spec.rb#L338)
         
     | 
| 
       1710 
2122 
     | 
    
         | 
| 
       1711 
2123 
     | 
    
         
             
            ### Ably::Rest::Presence
         
     | 
| 
       1712 
2124 
     | 
    
         
             
            _(see [spec/acceptance/rest/presence_spec.rb](./spec/acceptance/rest/presence_spec.rb))_
         
     | 
| 
         @@ -1717,60 +2129,60 @@ _(see [spec/acceptance/rest/presence_spec.rb](./spec/acceptance/rest/presence_sp 
     | 
|
| 
       1717 
2129 
     | 
    
         
             
                    * with :limit option
         
     | 
| 
       1718 
2130 
     | 
    
         
             
                      * [returns a paged response limiting number of members per page](./spec/acceptance/rest/presence_spec.rb#L57)
         
     | 
| 
       1719 
2131 
     | 
    
         
             
                    * default :limit
         
     | 
| 
       1720 
     | 
    
         
            -
                      * [defaults to a limit of 100](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2132 
     | 
    
         
            +
                      * [defaults to a limit of 100](./spec/acceptance/rest/presence_spec.rb#L86)
         
     | 
| 
       1721 
2133 
     | 
    
         
             
                    * with :client_id option
         
     | 
| 
       1722 
     | 
    
         
            -
                      * [returns a list members filtered by the provided client ID](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2134 
     | 
    
         
            +
                      * [returns a list members filtered by the provided client ID](./spec/acceptance/rest/presence_spec.rb#L95)
         
     | 
| 
       1723 
2135 
     | 
    
         
             
                    * with :connection_id option
         
     | 
| 
       1724 
     | 
    
         
            -
                      * [returns a list members filtered by the provided connection ID](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
       1725 
     | 
    
         
            -
                      * [returns a list members filtered by the provided connection ID](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2136 
     | 
    
         
            +
                      * [returns a list members filtered by the provided connection ID](./spec/acceptance/rest/presence_spec.rb#L106)
         
     | 
| 
      
 2137 
     | 
    
         
            +
                      * [returns a list members filtered by the provided connection ID](./spec/acceptance/rest/presence_spec.rb#L110)
         
     | 
| 
       1726 
2138 
     | 
    
         
             
                  * #history
         
     | 
| 
       1727 
     | 
    
         
            -
                    * [returns recent presence activity](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2139 
     | 
    
         
            +
                    * [returns recent presence activity](./spec/acceptance/rest/presence_spec.rb#L119)
         
     | 
| 
       1728 
2140 
     | 
    
         
             
                    * default behaviour
         
     | 
| 
       1729 
     | 
    
         
            -
                      * [uses backwards direction](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2141 
     | 
    
         
            +
                      * [uses backwards direction](./spec/acceptance/rest/presence_spec.rb#L134)
         
     | 
| 
       1730 
2142 
     | 
    
         
             
                    * with options
         
     | 
| 
       1731 
2143 
     | 
    
         
             
                      * direction: :forwards
         
     | 
| 
       1732 
     | 
    
         
            -
                        * [returns recent presence activity forwards with most recent history last](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2144 
     | 
    
         
            +
                        * [returns recent presence activity forwards with most recent history last](./spec/acceptance/rest/presence_spec.rb#L146)
         
     | 
| 
       1733 
2145 
     | 
    
         
             
                      * direction: :backwards
         
     | 
| 
       1734 
     | 
    
         
            -
                        * [returns recent presence activity backwards with most recent history first](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2146 
     | 
    
         
            +
                        * [returns recent presence activity backwards with most recent history first](./spec/acceptance/rest/presence_spec.rb#L161)
         
     | 
| 
       1735 
2147 
     | 
    
         
             
                * #history
         
     | 
| 
       1736 
2148 
     | 
    
         
             
                  * with options
         
     | 
| 
       1737 
2149 
     | 
    
         
             
                    * limit options
         
     | 
| 
       1738 
2150 
     | 
    
         
             
                      * default
         
     | 
| 
       1739 
     | 
    
         
            -
                        * [is set to 100](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2151 
     | 
    
         
            +
                        * [is set to 100](./spec/acceptance/rest/presence_spec.rb#L206)
         
     | 
| 
       1740 
2152 
     | 
    
         
             
                      * set to 1000
         
     | 
| 
       1741 
     | 
    
         
            -
                        * [is passes the limit query param value 1000](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2153 
     | 
    
         
            +
                        * [is passes the limit query param value 1000](./spec/acceptance/rest/presence_spec.rb#L219)
         
     | 
| 
       1742 
2154 
     | 
    
         
             
                    * with time range options
         
     | 
| 
       1743 
2155 
     | 
    
         
             
                      * :start
         
     | 
| 
       1744 
2156 
     | 
    
         
             
                        * with milliseconds since epoch value
         
     | 
| 
       1745 
     | 
    
         
            -
                          * [uses this value in the history request](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2157 
     | 
    
         
            +
                          * [uses this value in the history request](./spec/acceptance/rest/presence_spec.rb#L249)
         
     | 
| 
       1746 
2158 
     | 
    
         
             
                        * with Time object value
         
     | 
| 
       1747 
     | 
    
         
            -
                          * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2159 
     | 
    
         
            +
                          * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/presence_spec.rb#L259)
         
     | 
| 
       1748 
2160 
     | 
    
         
             
                      * :end
         
     | 
| 
       1749 
2161 
     | 
    
         
             
                        * with milliseconds since epoch value
         
     | 
| 
       1750 
     | 
    
         
            -
                          * [uses this value in the history request](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2162 
     | 
    
         
            +
                          * [uses this value in the history request](./spec/acceptance/rest/presence_spec.rb#L249)
         
     | 
| 
       1751 
2163 
     | 
    
         
             
                        * with Time object value
         
     | 
| 
       1752 
     | 
    
         
            -
                          * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2164 
     | 
    
         
            +
                          * [converts the value to milliseconds since epoch in the hisotry request](./spec/acceptance/rest/presence_spec.rb#L259)
         
     | 
| 
       1753 
2165 
     | 
    
         
             
                      * when argument start is after end
         
     | 
| 
       1754 
     | 
    
         
            -
                        * [should raise an exception](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2166 
     | 
    
         
            +
                        * [should raise an exception](./spec/acceptance/rest/presence_spec.rb#L270)
         
     | 
| 
       1755 
2167 
     | 
    
         
             
                * decoding
         
     | 
| 
       1756 
2168 
     | 
    
         
             
                  * with encoded fixture data
         
     | 
| 
       1757 
2169 
     | 
    
         
             
                    * #history
         
     | 
| 
       1758 
     | 
    
         
            -
                      * [decodes encoded and encryped presence fixture data automatically](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2170 
     | 
    
         
            +
                      * [decodes encoded and encryped presence fixture data automatically](./spec/acceptance/rest/presence_spec.rb#L289)
         
     | 
| 
       1759 
2171 
     | 
    
         
             
                    * #get
         
     | 
| 
       1760 
     | 
    
         
            -
                      * [decodes encoded and encryped presence fixture data automatically](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2172 
     | 
    
         
            +
                      * [decodes encoded and encryped presence fixture data automatically](./spec/acceptance/rest/presence_spec.rb#L296)
         
     | 
| 
       1761 
2173 
     | 
    
         
             
                * decoding permutations using mocked #history
         
     | 
| 
       1762 
2174 
     | 
    
         
             
                  * valid decodeable content
         
     | 
| 
       1763 
2175 
     | 
    
         
             
                    * #get
         
     | 
| 
       1764 
     | 
    
         
            -
                      * [automaticaly decodes presence messages](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2176 
     | 
    
         
            +
                      * [automaticaly decodes presence messages](./spec/acceptance/rest/presence_spec.rb#L349)
         
     | 
| 
       1765 
2177 
     | 
    
         
             
                    * #history
         
     | 
| 
       1766 
     | 
    
         
            -
                      * [automaticaly decodes presence messages](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2178 
     | 
    
         
            +
                      * [automaticaly decodes presence messages](./spec/acceptance/rest/presence_spec.rb#L366)
         
     | 
| 
       1767 
2179 
     | 
    
         
             
                  * invalid data
         
     | 
| 
       1768 
2180 
     | 
    
         
             
                    * #get
         
     | 
| 
       1769 
     | 
    
         
            -
                      * [returns the messages still encoded](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
       1770 
     | 
    
         
            -
                      * [logs a cipher error](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2181 
     | 
    
         
            +
                      * [returns the messages still encoded](./spec/acceptance/rest/presence_spec.rb#L397)
         
     | 
| 
      
 2182 
     | 
    
         
            +
                      * [logs a cipher error](./spec/acceptance/rest/presence_spec.rb#L401)
         
     | 
| 
       1771 
2183 
     | 
    
         
             
                    * #history
         
     | 
| 
       1772 
     | 
    
         
            -
                      * [returns the messages still encoded](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
       1773 
     | 
    
         
            -
                      * [logs a cipher error](./spec/acceptance/rest/presence_spec.rb# 
     | 
| 
      
 2184 
     | 
    
         
            +
                      * [returns the messages still encoded](./spec/acceptance/rest/presence_spec.rb#L421)
         
     | 
| 
      
 2185 
     | 
    
         
            +
                      * [logs a cipher error](./spec/acceptance/rest/presence_spec.rb#L425)
         
     | 
| 
       1774 
2186 
     | 
    
         | 
| 
       1775 
2187 
     | 
    
         
             
            ### Ably::Rest::Client#stats
         
     | 
| 
       1776 
2188 
     | 
    
         
             
            _(see [spec/acceptance/rest/stats_spec.rb](./spec/acceptance/rest/stats_spec.rb))_
         
     | 
| 
         @@ -1850,23 +2262,51 @@ _(see [spec/unit/logger_spec.rb](./spec/unit/logger_spec.rb))_ 
     | 
|
| 
       1850 
2262 
     | 
    
         
             
              * [uses the language provided Logger by default](./spec/unit/logger_spec.rb#L15)
         
     | 
| 
       1851 
2263 
     | 
    
         
             
              * with a custom Logger
         
     | 
| 
       1852 
2264 
     | 
    
         
             
                * with an invalid interface
         
     | 
| 
       1853 
     | 
    
         
            -
                  * [raises an exception](./spec/unit/logger_spec.rb# 
     | 
| 
      
 2265 
     | 
    
         
            +
                  * [raises an exception](./spec/unit/logger_spec.rb#L118)
         
     | 
| 
       1854 
2266 
     | 
    
         
             
                * with a valid interface
         
     | 
| 
       1855 
     | 
    
         
            -
                  * [is used](./spec/unit/logger_spec.rb# 
     | 
| 
      
 2267 
     | 
    
         
            +
                  * [is used](./spec/unit/logger_spec.rb#L137)
         
     | 
| 
      
 2268 
     | 
    
         
            +
              * with blocks
         
     | 
| 
      
 2269 
     | 
    
         
            +
                * [does not call the block unless the log level is met](./spec/unit/logger_spec.rb#L152)
         
     | 
| 
      
 2270 
     | 
    
         
            +
                * with an exception in the logger block
         
     | 
| 
      
 2271 
     | 
    
         
            +
                  * [catches the error and continues](./spec/unit/logger_spec.rb#L167)
         
     | 
| 
      
 2272 
     | 
    
         
            +
             
     | 
| 
      
 2273 
     | 
    
         
            +
            ### Ably::Models::AuthDetails
         
     | 
| 
      
 2274 
     | 
    
         
            +
            _(see [spec/unit/models/auth_details_spec.rb](./spec/unit/models/auth_details_spec.rb))_
         
     | 
| 
      
 2275 
     | 
    
         
            +
              * behaves like a model
         
     | 
| 
      
 2276 
     | 
    
         
            +
                * attributes
         
     | 
| 
      
 2277 
     | 
    
         
            +
                  * #access_token
         
     | 
| 
      
 2278 
     | 
    
         
            +
                    * [retrieves attribute :access_token](./spec/shared/model_behaviour.rb#L15)
         
     | 
| 
      
 2279 
     | 
    
         
            +
                * #==
         
     | 
| 
      
 2280 
     | 
    
         
            +
                  * [is true when attributes are the same](./spec/shared/model_behaviour.rb#L41)
         
     | 
| 
      
 2281 
     | 
    
         
            +
                  * [is false when attributes are not the same](./spec/shared/model_behaviour.rb#L46)
         
     | 
| 
      
 2282 
     | 
    
         
            +
                  * [is false when class type differs](./spec/shared/model_behaviour.rb#L50)
         
     | 
| 
      
 2283 
     | 
    
         
            +
                * is immutable
         
     | 
| 
      
 2284 
     | 
    
         
            +
                  * [prevents changes](./spec/shared/model_behaviour.rb#L76)
         
     | 
| 
      
 2285 
     | 
    
         
            +
                  * [dups options](./spec/shared/model_behaviour.rb#L80)
         
     | 
| 
      
 2286 
     | 
    
         
            +
              * ==
         
     | 
| 
      
 2287 
     | 
    
         
            +
                * [is true when attributes are the same](./spec/unit/models/auth_details_spec.rb#L17)
         
     | 
| 
      
 2288 
     | 
    
         
            +
                * [is false when attributes are not the same](./spec/unit/models/auth_details_spec.rb#L22)
         
     | 
| 
      
 2289 
     | 
    
         
            +
                * [is false when class type differs](./spec/unit/models/auth_details_spec.rb#L26)
         
     | 
| 
       1856 
2290 
     | 
    
         | 
| 
       1857 
2291 
     | 
    
         
             
            ### Ably::Models::ChannelStateChange
         
     | 
| 
       1858 
2292 
     | 
    
         
             
            _(see [spec/unit/models/channel_state_change_spec.rb](./spec/unit/models/channel_state_change_spec.rb))_
         
     | 
| 
       1859 
     | 
    
         
            -
              * #current
         
     | 
| 
      
 2293 
     | 
    
         
            +
              * #current (#TH1)
         
     | 
| 
       1860 
2294 
     | 
    
         
             
                * [is required](./spec/unit/models/channel_state_change_spec.rb#L10)
         
     | 
| 
       1861 
2295 
     | 
    
         
             
                * [is an attribute](./spec/unit/models/channel_state_change_spec.rb#L14)
         
     | 
| 
       1862 
     | 
    
         
            -
              * #previous
         
     | 
| 
      
 2296 
     | 
    
         
            +
              * #previous (#TH2)
         
     | 
| 
       1863 
2297 
     | 
    
         
             
                * [is required](./spec/unit/models/channel_state_change_spec.rb#L20)
         
     | 
| 
       1864 
2298 
     | 
    
         
             
                * [is an attribute](./spec/unit/models/channel_state_change_spec.rb#L24)
         
     | 
| 
       1865 
     | 
    
         
            -
              * # 
     | 
| 
      
 2299 
     | 
    
         
            +
              * #event (#TH5)
         
     | 
| 
       1866 
2300 
     | 
    
         
             
                * [is not required](./spec/unit/models/channel_state_change_spec.rb#L30)
         
     | 
| 
       1867 
2301 
     | 
    
         
             
                * [is an attribute](./spec/unit/models/channel_state_change_spec.rb#L34)
         
     | 
| 
      
 2302 
     | 
    
         
            +
              * #reason (#TH3)
         
     | 
| 
      
 2303 
     | 
    
         
            +
                * [is not required](./spec/unit/models/channel_state_change_spec.rb#L40)
         
     | 
| 
      
 2304 
     | 
    
         
            +
                * [is an attribute](./spec/unit/models/channel_state_change_spec.rb#L44)
         
     | 
| 
      
 2305 
     | 
    
         
            +
              * #resumed (#TH4)
         
     | 
| 
      
 2306 
     | 
    
         
            +
                * [is false when ommitted](./spec/unit/models/channel_state_change_spec.rb#L50)
         
     | 
| 
      
 2307 
     | 
    
         
            +
                * [is true when provided](./spec/unit/models/channel_state_change_spec.rb#L54)
         
     | 
| 
       1868 
2308 
     | 
    
         
             
              * invalid attributes
         
     | 
| 
       1869 
     | 
    
         
            -
                * [raises an argument error](./spec/unit/models/channel_state_change_spec.rb# 
     | 
| 
      
 2309 
     | 
    
         
            +
                * [raises an argument error](./spec/unit/models/channel_state_change_spec.rb#L60)
         
     | 
| 
       1870 
2310 
     | 
    
         | 
| 
       1871 
2311 
     | 
    
         
             
            ### Ably::Models::CipherParams
         
     | 
| 
       1872 
2312 
     | 
    
         
             
            _(see [spec/unit/models/cipher_params_spec.rb](./spec/unit/models/cipher_params_spec.rb))_
         
     | 
| 
         @@ -1929,29 +2369,34 @@ _(see [spec/unit/models/connection_details_spec.rb](./spec/unit/models/connectio 
     | 
|
| 
       1929 
2369 
     | 
    
         
             
                  * [prevents changes](./spec/shared/model_behaviour.rb#L76)
         
     | 
| 
       1930 
2370 
     | 
    
         
             
                  * [dups options](./spec/shared/model_behaviour.rb#L80)
         
     | 
| 
       1931 
2371 
     | 
    
         
             
              * attributes
         
     | 
| 
       1932 
     | 
    
         
            -
                * #connection_state_ttl
         
     | 
| 
       1933 
     | 
    
         
            -
                  * [retrieves attribute :connection_state_ttl and converts it from ms to s](./spec/unit/models/connection_details_spec.rb# 
     | 
| 
      
 2372 
     | 
    
         
            +
                * #connection_state_ttl (#CD2f)
         
     | 
| 
      
 2373 
     | 
    
         
            +
                  * [retrieves attribute :connection_state_ttl and converts it from ms to s](./spec/unit/models/connection_details_spec.rb#L20)
         
     | 
| 
      
 2374 
     | 
    
         
            +
                * #max_idle_interval (#CD2h)
         
     | 
| 
      
 2375 
     | 
    
         
            +
                  * [retrieves attribute :max_idle_interval and converts it from ms to s](./spec/unit/models/connection_details_spec.rb#L30)
         
     | 
| 
       1934 
2376 
     | 
    
         
             
              * ==
         
     | 
| 
       1935 
     | 
    
         
            -
                * [is true when attributes are the same](./spec/unit/models/connection_details_spec.rb# 
     | 
| 
       1936 
     | 
    
         
            -
                * [is false when attributes are not the same](./spec/unit/models/connection_details_spec.rb# 
     | 
| 
       1937 
     | 
    
         
            -
                * [is false when class type differs](./spec/unit/models/connection_details_spec.rb# 
     | 
| 
      
 2377 
     | 
    
         
            +
                * [is true when attributes are the same](./spec/unit/models/connection_details_spec.rb#L39)
         
     | 
| 
      
 2378 
     | 
    
         
            +
                * [is false when attributes are not the same](./spec/unit/models/connection_details_spec.rb#L44)
         
     | 
| 
      
 2379 
     | 
    
         
            +
                * [is false when class type differs](./spec/unit/models/connection_details_spec.rb#L48)
         
     | 
| 
       1938 
2380 
     | 
    
         | 
| 
       1939 
2381 
     | 
    
         
             
            ### Ably::Models::ConnectionStateChange
         
     | 
| 
       1940 
2382 
     | 
    
         
             
            _(see [spec/unit/models/connection_state_change_spec.rb](./spec/unit/models/connection_state_change_spec.rb))_
         
     | 
| 
       1941 
     | 
    
         
            -
              * #current
         
     | 
| 
      
 2383 
     | 
    
         
            +
              * #current (#TA2)
         
     | 
| 
       1942 
2384 
     | 
    
         
             
                * [is required](./spec/unit/models/connection_state_change_spec.rb#L10)
         
     | 
| 
       1943 
2385 
     | 
    
         
             
                * [is an attribute](./spec/unit/models/connection_state_change_spec.rb#L14)
         
     | 
| 
       1944 
     | 
    
         
            -
              * #previous
         
     | 
| 
      
 2386 
     | 
    
         
            +
              * #previous(#TA2)
         
     | 
| 
       1945 
2387 
     | 
    
         
             
                * [is required](./spec/unit/models/connection_state_change_spec.rb#L20)
         
     | 
| 
       1946 
2388 
     | 
    
         
             
                * [is an attribute](./spec/unit/models/connection_state_change_spec.rb#L24)
         
     | 
| 
       1947 
     | 
    
         
            -
              * # 
     | 
| 
      
 2389 
     | 
    
         
            +
              * #event(#TA5)
         
     | 
| 
       1948 
2390 
     | 
    
         
             
                * [is not required](./spec/unit/models/connection_state_change_spec.rb#L30)
         
     | 
| 
       1949 
2391 
     | 
    
         
             
                * [is an attribute](./spec/unit/models/connection_state_change_spec.rb#L34)
         
     | 
| 
       1950 
     | 
    
         
            -
              * # 
     | 
| 
       1951 
     | 
    
         
            -
                * [is not required](./spec/unit/models/connection_state_change_spec.rb# 
     | 
| 
       1952 
     | 
    
         
            -
                * [is an attribute](./spec/unit/models/connection_state_change_spec.rb# 
     | 
| 
      
 2392 
     | 
    
         
            +
              * #retry_in (#TA2)
         
     | 
| 
      
 2393 
     | 
    
         
            +
                * [is not required](./spec/unit/models/connection_state_change_spec.rb#L41)
         
     | 
| 
      
 2394 
     | 
    
         
            +
                * [is an attribute](./spec/unit/models/connection_state_change_spec.rb#L45)
         
     | 
| 
      
 2395 
     | 
    
         
            +
              * #reason (#TA3)
         
     | 
| 
      
 2396 
     | 
    
         
            +
                * [is not required](./spec/unit/models/connection_state_change_spec.rb#L51)
         
     | 
| 
      
 2397 
     | 
    
         
            +
                * [is an attribute](./spec/unit/models/connection_state_change_spec.rb#L55)
         
     | 
| 
       1953 
2398 
     | 
    
         
             
              * invalid attributes
         
     | 
| 
       1954 
     | 
    
         
            -
                * [raises an argument error](./spec/unit/models/connection_state_change_spec.rb# 
     | 
| 
      
 2399 
     | 
    
         
            +
                * [raises an argument error](./spec/unit/models/connection_state_change_spec.rb#L61)
         
     | 
| 
       1955 
2400 
     | 
    
         | 
| 
       1956 
2401 
     | 
    
         
             
            ### Ably::Models::ErrorInfo
         
     | 
| 
       1957 
2402 
     | 
    
         
             
            _(see [spec/unit/models/error_info_spec.rb](./spec/unit/models/error_info_spec.rb))_
         
     | 
| 
         @@ -1973,6 +2418,60 @@ _(see [spec/unit/models/error_info_spec.rb](./spec/unit/models/error_info_spec.r 
     | 
|
| 
       1973 
2418 
     | 
    
         
             
              * #status
         
     | 
| 
       1974 
2419 
     | 
    
         
             
                * [is an alias for #status_code](./spec/unit/models/error_info_spec.rb#L13)
         
     | 
| 
       1975 
2420 
     | 
    
         | 
| 
      
 2421 
     | 
    
         
            +
            ### Ably::Models::HttpPaginatedResponse: #HP1 -> #HP8
         
     | 
| 
      
 2422 
     | 
    
         
            +
            _(see [spec/unit/models/http_paginated_result_spec.rb](./spec/unit/models/http_paginated_result_spec.rb))_
         
     | 
| 
      
 2423 
     | 
    
         
            +
              * #items
         
     | 
| 
      
 2424 
     | 
    
         
            +
                * [returns correct length from body](./spec/unit/models/http_paginated_result_spec.rb#L33)
         
     | 
| 
      
 2425 
     | 
    
         
            +
                * [is Enumerable](./spec/unit/models/http_paginated_result_spec.rb#L37)
         
     | 
| 
      
 2426 
     | 
    
         
            +
                * [is iterable](./spec/unit/models/http_paginated_result_spec.rb#L41)
         
     | 
| 
      
 2427 
     | 
    
         
            +
                * [provides [] accessor method](./spec/unit/models/http_paginated_result_spec.rb#L59)
         
     | 
| 
      
 2428 
     | 
    
         
            +
                * [#first gets the first item in page](./spec/unit/models/http_paginated_result_spec.rb#L65)
         
     | 
| 
      
 2429 
     | 
    
         
            +
                * [#last gets the last item in page](./spec/unit/models/http_paginated_result_spec.rb#L69)
         
     | 
| 
      
 2430 
     | 
    
         
            +
                * #each
         
     | 
| 
      
 2431 
     | 
    
         
            +
                  * [returns an enumerator](./spec/unit/models/http_paginated_result_spec.rb#L46)
         
     | 
| 
      
 2432 
     | 
    
         
            +
                  * [yields each item](./spec/unit/models/http_paginated_result_spec.rb#L50)
         
     | 
| 
      
 2433 
     | 
    
         
            +
              * with non paged http response
         
     | 
| 
      
 2434 
     | 
    
         
            +
                * [is the last page](./spec/unit/models/http_paginated_result_spec.rb#L174)
         
     | 
| 
      
 2435 
     | 
    
         
            +
                * [does not have next page](./spec/unit/models/http_paginated_result_spec.rb#L178)
         
     | 
| 
      
 2436 
     | 
    
         
            +
                * [does not support pagination](./spec/unit/models/http_paginated_result_spec.rb#L182)
         
     | 
| 
      
 2437 
     | 
    
         
            +
                * [returns nil when accessing next page](./spec/unit/models/http_paginated_result_spec.rb#L186)
         
     | 
| 
      
 2438 
     | 
    
         
            +
                * [returns nil when accessing first page](./spec/unit/models/http_paginated_result_spec.rb#L190)
         
     | 
| 
      
 2439 
     | 
    
         
            +
              * with paged http response
         
     | 
| 
      
 2440 
     | 
    
         
            +
                * [has next page](./spec/unit/models/http_paginated_result_spec.rb#L208)
         
     | 
| 
      
 2441 
     | 
    
         
            +
                * [is not the last page](./spec/unit/models/http_paginated_result_spec.rb#L212)
         
     | 
| 
      
 2442 
     | 
    
         
            +
                * [supports pagination](./spec/unit/models/http_paginated_result_spec.rb#L216)
         
     | 
| 
      
 2443 
     | 
    
         
            +
                * accessing next page
         
     | 
| 
      
 2444 
     | 
    
         
            +
                  * [returns another HttpPaginatedResponse](./spec/unit/models/http_paginated_result_spec.rb#L244)
         
     | 
| 
      
 2445 
     | 
    
         
            +
                  * [retrieves the next page of results](./spec/unit/models/http_paginated_result_spec.rb#L248)
         
     | 
| 
      
 2446 
     | 
    
         
            +
                  * [does not have a next page](./spec/unit/models/http_paginated_result_spec.rb#L253)
         
     | 
| 
      
 2447 
     | 
    
         
            +
                  * [is the last page](./spec/unit/models/http_paginated_result_spec.rb#L257)
         
     | 
| 
      
 2448 
     | 
    
         
            +
                  * [returns nil when trying to access the last page when it is the last page](./spec/unit/models/http_paginated_result_spec.rb#L261)
         
     | 
| 
      
 2449 
     | 
    
         
            +
                  * and then first page
         
     | 
| 
      
 2450 
     | 
    
         
            +
                    * [returns a HttpPaginatedResponse](./spec/unit/models/http_paginated_result_spec.rb#L272)
         
     | 
| 
      
 2451 
     | 
    
         
            +
                    * [retrieves the first page of results](./spec/unit/models/http_paginated_result_spec.rb#L276)
         
     | 
| 
      
 2452 
     | 
    
         
            +
              * response metadata
         
     | 
| 
      
 2453 
     | 
    
         
            +
                * successful response
         
     | 
| 
      
 2454 
     | 
    
         
            +
                  * [#success? is true](./spec/unit/models/http_paginated_result_spec.rb#L288)
         
     | 
| 
      
 2455 
     | 
    
         
            +
                  * [#status_code reflects status code](./spec/unit/models/http_paginated_result_spec.rb#L292)
         
     | 
| 
      
 2456 
     | 
    
         
            +
                  * [#error_code to be empty](./spec/unit/models/http_paginated_result_spec.rb#L296)
         
     | 
| 
      
 2457 
     | 
    
         
            +
                  * [#error_message to be empty](./spec/unit/models/http_paginated_result_spec.rb#L300)
         
     | 
| 
      
 2458 
     | 
    
         
            +
                  * [#headers to be a hash](./spec/unit/models/http_paginated_result_spec.rb#L304)
         
     | 
| 
      
 2459 
     | 
    
         
            +
                * failed response
         
     | 
| 
      
 2460 
     | 
    
         
            +
                  * [#success? is false](./spec/unit/models/http_paginated_result_spec.rb#L313)
         
     | 
| 
      
 2461 
     | 
    
         
            +
                  * [#status_code reflects status code](./spec/unit/models/http_paginated_result_spec.rb#L317)
         
     | 
| 
      
 2462 
     | 
    
         
            +
                  * [#error_code to be populated](./spec/unit/models/http_paginated_result_spec.rb#L321)
         
     | 
| 
      
 2463 
     | 
    
         
            +
                  * [#error_message to be populated](./spec/unit/models/http_paginated_result_spec.rb#L325)
         
     | 
| 
      
 2464 
     | 
    
         
            +
                  * [#headers to be present](./spec/unit/models/http_paginated_result_spec.rb#L329)
         
     | 
| 
      
 2465 
     | 
    
         
            +
              * #items Array conversion and nil handling #HP3
         
     | 
| 
      
 2466 
     | 
    
         
            +
                * with Json Array
         
     | 
| 
      
 2467 
     | 
    
         
            +
                  * [is an array](./spec/unit/models/http_paginated_result_spec.rb#L344)
         
     | 
| 
      
 2468 
     | 
    
         
            +
                * with Json Object
         
     | 
| 
      
 2469 
     | 
    
         
            +
                  * [is an array](./spec/unit/models/http_paginated_result_spec.rb#L354)
         
     | 
| 
      
 2470 
     | 
    
         
            +
                * with empty response
         
     | 
| 
      
 2471 
     | 
    
         
            +
                  * [is an array](./spec/unit/models/http_paginated_result_spec.rb#L365)
         
     | 
| 
      
 2472 
     | 
    
         
            +
                * with nil response
         
     | 
| 
      
 2473 
     | 
    
         
            +
                  * [is an array](./spec/unit/models/http_paginated_result_spec.rb#L375)
         
     | 
| 
      
 2474 
     | 
    
         
            +
             
     | 
| 
       1976 
2475 
     | 
    
         
             
            ### Ably::Models::MessageEncoders::Base64
         
     | 
| 
       1977 
2476 
     | 
    
         
             
            _(see [spec/unit/models/message_encoders/base64_spec.rb](./spec/unit/models/message_encoders/base64_spec.rb))_
         
     | 
| 
       1978 
2477 
     | 
    
         
             
              * #decode
         
     | 
| 
         @@ -1988,33 +2487,33 @@ _(see [spec/unit/models/message_encoders/base64_spec.rb](./spec/unit/models/mess 
     | 
|
| 
       1988 
2487 
     | 
    
         
             
              * #encode
         
     | 
| 
       1989 
2488 
     | 
    
         
             
                * over binary transport
         
     | 
| 
       1990 
2489 
     | 
    
         
             
                  * message with binary payload
         
     | 
| 
       1991 
     | 
    
         
            -
                    * [leaves the message data intact as Base64 encoding is not necessary](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       1992 
     | 
    
         
            -
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2490 
     | 
    
         
            +
                    * [leaves the message data intact as Base64 encoding is not necessary](./spec/unit/models/message_encoders/base64_spec.rb#L69)
         
     | 
| 
      
 2491 
     | 
    
         
            +
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb#L73)
         
     | 
| 
       1993 
2492 
     | 
    
         
             
                  * already encoded message with binary payload
         
     | 
| 
       1994 
     | 
    
         
            -
                    * [leaves the message data intact as Base64 encoding is not necessary](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       1995 
     | 
    
         
            -
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2493 
     | 
    
         
            +
                    * [leaves the message data intact as Base64 encoding is not necessary](./spec/unit/models/message_encoders/base64_spec.rb#L81)
         
     | 
| 
      
 2494 
     | 
    
         
            +
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb#L85)
         
     | 
| 
       1996 
2495 
     | 
    
         
             
                  * message with UTF-8 payload
         
     | 
| 
       1997 
     | 
    
         
            -
                    * [leaves the data intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       1998 
     | 
    
         
            -
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2496 
     | 
    
         
            +
                    * [leaves the data intact](./spec/unit/models/message_encoders/base64_spec.rb#L93)
         
     | 
| 
      
 2497 
     | 
    
         
            +
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb#L97)
         
     | 
| 
       1999 
2498 
     | 
    
         
             
                  * message with nil payload
         
     | 
| 
       2000 
     | 
    
         
            -
                    * [leaves the message data intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       2001 
     | 
    
         
            -
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2499 
     | 
    
         
            +
                    * [leaves the message data intact](./spec/unit/models/message_encoders/base64_spec.rb#L105)
         
     | 
| 
      
 2500 
     | 
    
         
            +
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb#L109)
         
     | 
| 
       2002 
2501 
     | 
    
         
             
                  * message with empty binary string payload
         
     | 
| 
       2003 
     | 
    
         
            -
                    * [leaves the message data intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       2004 
     | 
    
         
            -
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2502 
     | 
    
         
            +
                    * [leaves the message data intact](./spec/unit/models/message_encoders/base64_spec.rb#L117)
         
     | 
| 
      
 2503 
     | 
    
         
            +
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb#L121)
         
     | 
| 
       2005 
2504 
     | 
    
         
             
                * over text transport
         
     | 
| 
       2006 
2505 
     | 
    
         
             
                  * message with binary payload
         
     | 
| 
       2007 
     | 
    
         
            -
                    * [encodes binary data as base64](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       2008 
     | 
    
         
            -
                    * [adds the encoding](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2506 
     | 
    
         
            +
                    * [encodes binary data as base64](./spec/unit/models/message_encoders/base64_spec.rb#L136)
         
     | 
| 
      
 2507 
     | 
    
         
            +
                    * [adds the encoding](./spec/unit/models/message_encoders/base64_spec.rb#L140)
         
     | 
| 
       2009 
2508 
     | 
    
         
             
                  * already encoded message with binary payload
         
     | 
| 
       2010 
     | 
    
         
            -
                    * [encodes binary data as base64](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       2011 
     | 
    
         
            -
                    * [adds the encoding](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2509 
     | 
    
         
            +
                    * [encodes binary data as base64](./spec/unit/models/message_encoders/base64_spec.rb#L148)
         
     | 
| 
      
 2510 
     | 
    
         
            +
                    * [adds the encoding](./spec/unit/models/message_encoders/base64_spec.rb#L152)
         
     | 
| 
       2012 
2511 
     | 
    
         
             
                  * message with UTF-8 payload
         
     | 
| 
       2013 
     | 
    
         
            -
                    * [leaves the data intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       2014 
     | 
    
         
            -
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2512 
     | 
    
         
            +
                    * [leaves the data intact](./spec/unit/models/message_encoders/base64_spec.rb#L160)
         
     | 
| 
      
 2513 
     | 
    
         
            +
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb#L164)
         
     | 
| 
       2015 
2514 
     | 
    
         
             
                  * message with nil payload
         
     | 
| 
       2016 
     | 
    
         
            -
                    * [leaves the message data intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
       2017 
     | 
    
         
            -
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb# 
     | 
| 
      
 2515 
     | 
    
         
            +
                    * [leaves the message data intact](./spec/unit/models/message_encoders/base64_spec.rb#L172)
         
     | 
| 
      
 2516 
     | 
    
         
            +
                    * [leaves the encoding intact](./spec/unit/models/message_encoders/base64_spec.rb#L176)
         
     | 
| 
       2018 
2517 
     | 
    
         | 
| 
       2019 
2518 
     | 
    
         
             
            ### Ably::Models::MessageEncoders::Cipher
         
     | 
| 
       2020 
2519 
     | 
    
         
             
            _(see [spec/unit/models/message_encoders/cipher_spec.rb](./spec/unit/models/message_encoders/cipher_spec.rb))_
         
     | 
| 
         @@ -2150,60 +2649,88 @@ _(see [spec/unit/models/message_spec.rb](./spec/unit/models/message_spec.rb))_ 
     | 
|
| 
       2150 
2649 
     | 
    
         
             
                  * [dups options](./spec/shared/model_behaviour.rb#L80)
         
     | 
| 
       2151 
2650 
     | 
    
         
             
              * #timestamp
         
     | 
| 
       2152 
2651 
     | 
    
         
             
                * [retrieves attribute :timestamp as Time object from ProtocolMessage](./spec/unit/models/message_spec.rb#L22)
         
     | 
| 
      
 2652 
     | 
    
         
            +
              * #extras (#TM2i)
         
     | 
| 
      
 2653 
     | 
    
         
            +
                * when missing
         
     | 
| 
      
 2654 
     | 
    
         
            +
                  * [is nil](./spec/unit/models/message_spec.rb#L33)
         
     | 
| 
      
 2655 
     | 
    
         
            +
                * when a string
         
     | 
| 
      
 2656 
     | 
    
         
            +
                  * [raises an exception](./spec/unit/models/message_spec.rb#L40)
         
     | 
| 
      
 2657 
     | 
    
         
            +
                * when a Hash
         
     | 
| 
      
 2658 
     | 
    
         
            +
                  * [contains a Hash Json object](./spec/unit/models/message_spec.rb#L47)
         
     | 
| 
      
 2659 
     | 
    
         
            +
                * when a Json Array
         
     | 
| 
      
 2660 
     | 
    
         
            +
                  * [contains a Json Array object](./spec/unit/models/message_spec.rb#L54)
         
     | 
| 
       2153 
2661 
     | 
    
         
             
              * #connection_id attribute
         
     | 
| 
       2154 
2662 
     | 
    
         
             
                * when this model has a connectionId attribute
         
     | 
| 
       2155 
2663 
     | 
    
         
             
                  * but no protocol message
         
     | 
| 
       2156 
     | 
    
         
            -
                    * [uses the model value](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2664 
     | 
    
         
            +
                    * [uses the model value](./spec/unit/models/message_spec.rb#L69)
         
     | 
| 
       2157 
2665 
     | 
    
         
             
                  * with a protocol message with a different connectionId
         
     | 
| 
       2158 
     | 
    
         
            -
                    * [uses the model value](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2666 
     | 
    
         
            +
                    * [uses the model value](./spec/unit/models/message_spec.rb#L77)
         
     | 
| 
       2159 
2667 
     | 
    
         
             
                * when this model has no connectionId attribute
         
     | 
| 
       2160 
2668 
     | 
    
         
             
                  * and no protocol message
         
     | 
| 
       2161 
     | 
    
         
            -
                    * [uses the model value](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2669 
     | 
    
         
            +
                    * [uses the model value](./spec/unit/models/message_spec.rb#L87)
         
     | 
| 
       2162 
2670 
     | 
    
         
             
                  * with a protocol message with a connectionId
         
     | 
| 
       2163 
     | 
    
         
            -
                    * [uses the model value](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2671 
     | 
    
         
            +
                    * [uses the model value](./spec/unit/models/message_spec.rb#L95)
         
     | 
| 
       2164 
2672 
     | 
    
         
             
              * initialized with
         
     | 
| 
       2165 
2673 
     | 
    
         
             
                * :name
         
     | 
| 
       2166 
2674 
     | 
    
         
             
                  * as UTF_8 string
         
     | 
| 
       2167 
     | 
    
         
            -
                    * [is permitted](./spec/unit/models/message_spec.rb# 
     | 
| 
       2168 
     | 
    
         
            -
                    * [remains as UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2675 
     | 
    
         
            +
                    * [is permitted](./spec/unit/models/message_spec.rb#L122)
         
     | 
| 
      
 2676 
     | 
    
         
            +
                    * [remains as UTF-8](./spec/unit/models/message_spec.rb#L126)
         
     | 
| 
       2169 
2677 
     | 
    
         
             
                  * as SHIFT_JIS string
         
     | 
| 
       2170 
     | 
    
         
            -
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
       2171 
     | 
    
         
            -
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2678 
     | 
    
         
            +
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb#L134)
         
     | 
| 
      
 2679 
     | 
    
         
            +
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb#L138)
         
     | 
| 
       2172 
2680 
     | 
    
         
             
                  * as ASCII_8BIT string
         
     | 
| 
       2173 
     | 
    
         
            -
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
       2174 
     | 
    
         
            -
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2681 
     | 
    
         
            +
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb#L146)
         
     | 
| 
      
 2682 
     | 
    
         
            +
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb#L150)
         
     | 
| 
       2175 
2683 
     | 
    
         
             
                  * as Integer
         
     | 
| 
       2176 
     | 
    
         
            -
                    * [raises an argument error](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2684 
     | 
    
         
            +
                    * [raises an argument error](./spec/unit/models/message_spec.rb#L158)
         
     | 
| 
       2177 
2685 
     | 
    
         
             
                  * as Nil
         
     | 
| 
       2178 
     | 
    
         
            -
                    * [is permitted](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2686 
     | 
    
         
            +
                    * [is permitted](./spec/unit/models/message_spec.rb#L166)
         
     | 
| 
       2179 
2687 
     | 
    
         
             
                * :client_id
         
     | 
| 
       2180 
2688 
     | 
    
         
             
                  * as UTF_8 string
         
     | 
| 
       2181 
     | 
    
         
            -
                    * [is permitted](./spec/unit/models/message_spec.rb# 
     | 
| 
       2182 
     | 
    
         
            -
                    * [remains as UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2689 
     | 
    
         
            +
                    * [is permitted](./spec/unit/models/message_spec.rb#L122)
         
     | 
| 
      
 2690 
     | 
    
         
            +
                    * [remains as UTF-8](./spec/unit/models/message_spec.rb#L126)
         
     | 
| 
       2183 
2691 
     | 
    
         
             
                  * as SHIFT_JIS string
         
     | 
| 
       2184 
     | 
    
         
            -
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
       2185 
     | 
    
         
            -
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2692 
     | 
    
         
            +
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb#L134)
         
     | 
| 
      
 2693 
     | 
    
         
            +
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb#L138)
         
     | 
| 
       2186 
2694 
     | 
    
         
             
                  * as ASCII_8BIT string
         
     | 
| 
       2187 
     | 
    
         
            -
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
       2188 
     | 
    
         
            -
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2695 
     | 
    
         
            +
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb#L146)
         
     | 
| 
      
 2696 
     | 
    
         
            +
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb#L150)
         
     | 
| 
       2189 
2697 
     | 
    
         
             
                  * as Integer
         
     | 
| 
       2190 
     | 
    
         
            -
                    * [raises an argument error](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2698 
     | 
    
         
            +
                    * [raises an argument error](./spec/unit/models/message_spec.rb#L158)
         
     | 
| 
       2191 
2699 
     | 
    
         
             
                  * as Nil
         
     | 
| 
       2192 
     | 
    
         
            -
                    * [is permitted](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2700 
     | 
    
         
            +
                    * [is permitted](./spec/unit/models/message_spec.rb#L166)
         
     | 
| 
       2193 
2701 
     | 
    
         
             
                * :encoding
         
     | 
| 
       2194 
2702 
     | 
    
         
             
                  * as UTF_8 string
         
     | 
| 
       2195 
     | 
    
         
            -
                    * [is permitted](./spec/unit/models/message_spec.rb# 
     | 
| 
       2196 
     | 
    
         
            -
                    * [remains as UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2703 
     | 
    
         
            +
                    * [is permitted](./spec/unit/models/message_spec.rb#L122)
         
     | 
| 
      
 2704 
     | 
    
         
            +
                    * [remains as UTF-8](./spec/unit/models/message_spec.rb#L126)
         
     | 
| 
       2197 
2705 
     | 
    
         
             
                  * as SHIFT_JIS string
         
     | 
| 
       2198 
     | 
    
         
            -
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
       2199 
     | 
    
         
            -
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2706 
     | 
    
         
            +
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb#L134)
         
     | 
| 
      
 2707 
     | 
    
         
            +
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb#L138)
         
     | 
| 
       2200 
2708 
     | 
    
         
             
                  * as ASCII_8BIT string
         
     | 
| 
       2201 
     | 
    
         
            -
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb# 
     | 
| 
       2202 
     | 
    
         
            -
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2709 
     | 
    
         
            +
                    * [gets converted to UTF-8](./spec/unit/models/message_spec.rb#L146)
         
     | 
| 
      
 2710 
     | 
    
         
            +
                    * [is compatible with original encoding](./spec/unit/models/message_spec.rb#L150)
         
     | 
| 
       2203 
2711 
     | 
    
         
             
                  * as Integer
         
     | 
| 
       2204 
     | 
    
         
            -
                    * [raises an argument error](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2712 
     | 
    
         
            +
                    * [raises an argument error](./spec/unit/models/message_spec.rb#L158)
         
     | 
| 
       2205 
2713 
     | 
    
         
             
                  * as Nil
         
     | 
| 
       2206 
     | 
    
         
            -
                    * [is permitted](./spec/unit/models/message_spec.rb# 
     | 
| 
      
 2714 
     | 
    
         
            +
                    * [is permitted](./spec/unit/models/message_spec.rb#L166)
         
     | 
| 
      
 2715 
     | 
    
         
            +
              * #from_encoded (#TM3)
         
     | 
| 
      
 2716 
     | 
    
         
            +
                * with no encoding
         
     | 
| 
      
 2717 
     | 
    
         
            +
                  * [returns a message object](./spec/unit/models/message_spec.rb#L422)
         
     | 
| 
      
 2718 
     | 
    
         
            +
                  * with a block
         
     | 
| 
      
 2719 
     | 
    
         
            +
                    * [does not call the block](./spec/unit/models/message_spec.rb#L430)
         
     | 
| 
      
 2720 
     | 
    
         
            +
                * with an encoding
         
     | 
| 
      
 2721 
     | 
    
         
            +
                  * [returns a message object](./spec/unit/models/message_spec.rb#L447)
         
     | 
| 
      
 2722 
     | 
    
         
            +
                * with a custom encoding
         
     | 
| 
      
 2723 
     | 
    
         
            +
                  * [returns a message object with the residual incompatible transforms left in the encoding property](./spec/unit/models/message_spec.rb#L462)
         
     | 
| 
      
 2724 
     | 
    
         
            +
                * with a Cipher encoding
         
     | 
| 
      
 2725 
     | 
    
         
            +
                  * [returns a message object with the residual incompatible transforms left in the encoding property](./spec/unit/models/message_spec.rb#L481)
         
     | 
| 
      
 2726 
     | 
    
         
            +
                * with invalid Cipher encoding
         
     | 
| 
      
 2727 
     | 
    
         
            +
                  * without a block
         
     | 
| 
      
 2728 
     | 
    
         
            +
                    * [raises an exception](./spec/unit/models/message_spec.rb#L499)
         
     | 
| 
      
 2729 
     | 
    
         
            +
                  * with a block
         
     | 
| 
      
 2730 
     | 
    
         
            +
                    * [calls the block with the exception](./spec/unit/models/message_spec.rb#L505)
         
     | 
| 
      
 2731 
     | 
    
         
            +
              * #from_encoded_array (#TM3)
         
     | 
| 
      
 2732 
     | 
    
         
            +
                * with no encoding
         
     | 
| 
      
 2733 
     | 
    
         
            +
                  * [returns an Array of message objects](./spec/unit/models/message_spec.rb#L524)
         
     | 
| 
       2207 
2734 
     | 
    
         | 
| 
       2208 
2735 
     | 
    
         
             
            ### Ably::Models::PaginatedResult
         
     | 
| 
       2209 
2736 
     | 
    
         
             
            _(see [spec/unit/models/paginated_result_spec.rb](./spec/unit/models/paginated_result_spec.rb))_
         
     | 
| 
         @@ -2318,6 +2845,36 @@ _(see [spec/unit/models/presence_message_spec.rb](./spec/unit/models/presence_me 
     | 
|
| 
       2318 
2845 
     | 
    
         
             
                    * [raises an argument error](./spec/unit/models/presence_message_spec.rb#L174)
         
     | 
| 
       2319 
2846 
     | 
    
         
             
                  * as Nil
         
     | 
| 
       2320 
2847 
     | 
    
         
             
                    * [is permitted](./spec/unit/models/presence_message_spec.rb#L182)
         
     | 
| 
      
 2848 
     | 
    
         
            +
              * #from_encoded (#TP4)
         
     | 
| 
      
 2849 
     | 
    
         
            +
                * with no encoding
         
     | 
| 
      
 2850 
     | 
    
         
            +
                  * [returns a presence message object](./spec/unit/models/presence_message_spec.rb#L395)
         
     | 
| 
      
 2851 
     | 
    
         
            +
                  * with a block
         
     | 
| 
      
 2852 
     | 
    
         
            +
                    * [does not call the block](./spec/unit/models/presence_message_spec.rb#L403)
         
     | 
| 
      
 2853 
     | 
    
         
            +
                * with an encoding
         
     | 
| 
      
 2854 
     | 
    
         
            +
                  * [returns a presence message object](./spec/unit/models/presence_message_spec.rb#L420)
         
     | 
| 
      
 2855 
     | 
    
         
            +
                * with a custom encoding
         
     | 
| 
      
 2856 
     | 
    
         
            +
                  * [returns a presence message object with the residual incompatible transforms left in the encoding property](./spec/unit/models/presence_message_spec.rb#L435)
         
     | 
| 
      
 2857 
     | 
    
         
            +
                * with a Cipher encoding
         
     | 
| 
      
 2858 
     | 
    
         
            +
                  * [returns a presence message object with the residual incompatible transforms left in the encoding property](./spec/unit/models/presence_message_spec.rb#L454)
         
     | 
| 
      
 2859 
     | 
    
         
            +
                * with invalid Cipher encoding
         
     | 
| 
      
 2860 
     | 
    
         
            +
                  * without a block
         
     | 
| 
      
 2861 
     | 
    
         
            +
                    * [raises an exception](./spec/unit/models/presence_message_spec.rb#L471)
         
     | 
| 
      
 2862 
     | 
    
         
            +
                  * with a block
         
     | 
| 
      
 2863 
     | 
    
         
            +
                    * [calls the block with the exception](./spec/unit/models/presence_message_spec.rb#L477)
         
     | 
| 
      
 2864 
     | 
    
         
            +
              * #from_encoded_array (#TP4)
         
     | 
| 
      
 2865 
     | 
    
         
            +
                * with no encoding
         
     | 
| 
      
 2866 
     | 
    
         
            +
                  * [returns an Array of presence message objects](./spec/unit/models/presence_message_spec.rb#L496)
         
     | 
| 
      
 2867 
     | 
    
         
            +
              * #shallow_clone
         
     | 
| 
      
 2868 
     | 
    
         
            +
                * with inherited attributes from ProtocolMessage
         
     | 
| 
      
 2869 
     | 
    
         
            +
                  * [creates a duplicate of the message without any ProtocolMessage dependency](./spec/unit/models/presence_message_spec.rb#L516)
         
     | 
| 
      
 2870 
     | 
    
         
            +
                * with embedded attributes for all fields
         
     | 
| 
      
 2871 
     | 
    
         
            +
                  * [creates a duplicate of the message without any ProtocolMessage dependency](./spec/unit/models/presence_message_spec.rb#L530)
         
     | 
| 
      
 2872 
     | 
    
         
            +
                * with new attributes passed in to the method
         
     | 
| 
      
 2873 
     | 
    
         
            +
                  * [creates a duplicate of the message without any ProtocolMessage dependency](./spec/unit/models/presence_message_spec.rb#L546)
         
     | 
| 
      
 2874 
     | 
    
         
            +
                  * with an invalid ProtocolMessage (missing an ID)
         
     | 
| 
      
 2875 
     | 
    
         
            +
                    * [allows an ID to be passed in to the shallow clone that takes precedence](./spec/unit/models/presence_message_spec.rb#L558)
         
     | 
| 
      
 2876 
     | 
    
         
            +
                  * with mixing of cases
         
     | 
| 
      
 2877 
     | 
    
         
            +
                    * [resolves case issues and can use camelCase or snake_case](./spec/unit/models/presence_message_spec.rb#L565)
         
     | 
| 
       2321 
2878 
     | 
    
         | 
| 
       2322 
2879 
     | 
    
         
             
            ### Ably::Models::ProtocolMessage
         
     | 
| 
       2323 
2880 
     | 
    
         
             
            _(see [spec/unit/models/protocol_message_spec.rb](./spec/unit/models/protocol_message_spec.rb))_
         
     | 
| 
         @@ -2342,73 +2899,87 @@ _(see [spec/unit/models/protocol_message_spec.rb](./spec/unit/models/protocol_me 
     | 
|
| 
       2342 
2899 
     | 
    
         
             
                  * [dups options](./spec/shared/model_behaviour.rb#L80)
         
     | 
| 
       2343 
2900 
     | 
    
         
             
              * attributes
         
     | 
| 
       2344 
2901 
     | 
    
         
             
                * #timestamp
         
     | 
| 
       2345 
     | 
    
         
            -
                  * [retrieves attribute :timestamp as Time object](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2902 
     | 
    
         
            +
                  * [retrieves attribute :timestamp as Time object](./spec/unit/models/protocol_message_spec.rb#L75)
         
     | 
| 
       2346 
2903 
     | 
    
         
             
                * #count
         
     | 
| 
       2347 
2904 
     | 
    
         
             
                  * when missing
         
     | 
| 
       2348 
     | 
    
         
            -
                    * [is 1](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2905 
     | 
    
         
            +
                    * [is 1](./spec/unit/models/protocol_message_spec.rb#L84)
         
     | 
| 
       2349 
2906 
     | 
    
         
             
                  * when non numeric
         
     | 
| 
       2350 
     | 
    
         
            -
                    * [is 1](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2907 
     | 
    
         
            +
                    * [is 1](./spec/unit/models/protocol_message_spec.rb#L91)
         
     | 
| 
       2351 
2908 
     | 
    
         
             
                  * when greater than 1
         
     | 
| 
       2352 
     | 
    
         
            -
                    * [is the value of count](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2909 
     | 
    
         
            +
                    * [is the value of count](./spec/unit/models/protocol_message_spec.rb#L98)
         
     | 
| 
       2353 
2910 
     | 
    
         
             
                * #message_serial
         
     | 
| 
       2354 
     | 
    
         
            -
                  * [converts :msg_serial to an Integer](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2911 
     | 
    
         
            +
                  * [converts :msg_serial to an Integer](./spec/unit/models/protocol_message_spec.rb#L106)
         
     | 
| 
       2355 
2912 
     | 
    
         
             
                * #has_message_serial?
         
     | 
| 
       2356 
2913 
     | 
    
         
             
                  * without msg_serial
         
     | 
| 
       2357 
     | 
    
         
            -
                    * [returns false](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2914 
     | 
    
         
            +
                    * [returns false](./spec/unit/models/protocol_message_spec.rb#L116)
         
     | 
| 
       2358 
2915 
     | 
    
         
             
                  * with msg_serial
         
     | 
| 
       2359 
     | 
    
         
            -
                    * [returns true](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2916 
     | 
    
         
            +
                    * [returns true](./spec/unit/models/protocol_message_spec.rb#L124)
         
     | 
| 
       2360 
2917 
     | 
    
         
             
                * #connection_serial
         
     | 
| 
       2361 
     | 
    
         
            -
                  * [converts :connection_serial to an Integer](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
       2362 
     | 
    
         
            -
                * #flags
         
     | 
| 
      
 2918 
     | 
    
         
            +
                  * [converts :connection_serial to an Integer](./spec/unit/models/protocol_message_spec.rb#L132)
         
     | 
| 
      
 2919 
     | 
    
         
            +
                * #flags (#TR4i)
         
     | 
| 
       2363 
2920 
     | 
    
         
             
                  * when nil
         
     | 
| 
       2364 
     | 
    
         
            -
                    * [is zero](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2921 
     | 
    
         
            +
                    * [is zero](./spec/unit/models/protocol_message_spec.rb#L142)
         
     | 
| 
       2365 
2922 
     | 
    
         
             
                  * when numeric
         
     | 
| 
       2366 
     | 
    
         
            -
                    * [is an Integer](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
       2367 
     | 
    
         
            -
                  * when  
     | 
| 
       2368 
     | 
    
         
            -
                    * [#has_presence_flag? is true](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2923 
     | 
    
         
            +
                    * [is an Integer](./spec/unit/models/protocol_message_spec.rb#L150)
         
     | 
| 
      
 2924 
     | 
    
         
            +
                  * when presence flag present
         
     | 
| 
      
 2925 
     | 
    
         
            +
                    * [#has_presence_flag? is true](./spec/unit/models/protocol_message_spec.rb#L158)
         
     | 
| 
      
 2926 
     | 
    
         
            +
                    * [#has_channel_resumed_flag? is false](./spec/unit/models/protocol_message_spec.rb#L162)
         
     | 
| 
      
 2927 
     | 
    
         
            +
                  * when channel resumed flag present
         
     | 
| 
      
 2928 
     | 
    
         
            +
                    * [#has_channel_resumed_flag? is true](./spec/unit/models/protocol_message_spec.rb#L170)
         
     | 
| 
      
 2929 
     | 
    
         
            +
                    * [#has_presence_flag? is false](./spec/unit/models/protocol_message_spec.rb#L174)
         
     | 
| 
      
 2930 
     | 
    
         
            +
                  * when channel resumed and presence flags present
         
     | 
| 
      
 2931 
     | 
    
         
            +
                    * [#has_channel_resumed_flag? is true](./spec/unit/models/protocol_message_spec.rb#L182)
         
     | 
| 
      
 2932 
     | 
    
         
            +
                    * [#has_presence_flag? is true](./spec/unit/models/protocol_message_spec.rb#L186)
         
     | 
| 
       2369 
2933 
     | 
    
         
             
                  * when has another future flag
         
     | 
| 
       2370 
     | 
    
         
            -
                    * [#has_presence_flag? is false](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2934 
     | 
    
         
            +
                    * [#has_presence_flag? is false](./spec/unit/models/protocol_message_spec.rb#L194)
         
     | 
| 
      
 2935 
     | 
    
         
            +
                    * [#has_backlog_flag? is true](./spec/unit/models/protocol_message_spec.rb#L198)
         
     | 
| 
       2371 
2936 
     | 
    
         
             
                * #has_connection_serial?
         
     | 
| 
       2372 
2937 
     | 
    
         
             
                  * without connection_serial
         
     | 
| 
       2373 
     | 
    
         
            -
                    * [returns false](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2938 
     | 
    
         
            +
                    * [returns false](./spec/unit/models/protocol_message_spec.rb#L208)
         
     | 
| 
       2374 
2939 
     | 
    
         
             
                  * with connection_serial
         
     | 
| 
       2375 
     | 
    
         
            -
                    * [returns true](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2940 
     | 
    
         
            +
                    * [returns true](./spec/unit/models/protocol_message_spec.rb#L216)
         
     | 
| 
       2376 
2941 
     | 
    
         
             
                * #serial
         
     | 
| 
       2377 
2942 
     | 
    
         
             
                  * with underlying msg_serial
         
     | 
| 
       2378 
     | 
    
         
            -
                    * [converts :msg_serial to an Integer](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2943 
     | 
    
         
            +
                    * [converts :msg_serial to an Integer](./spec/unit/models/protocol_message_spec.rb#L225)
         
     | 
| 
       2379 
2944 
     | 
    
         
             
                  * with underlying connection_serial
         
     | 
| 
       2380 
     | 
    
         
            -
                    * [converts :connection_serial to an Integer](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2945 
     | 
    
         
            +
                    * [converts :connection_serial to an Integer](./spec/unit/models/protocol_message_spec.rb#L233)
         
     | 
| 
       2381 
2946 
     | 
    
         
             
                  * with underlying connection_serial and msg_serial
         
     | 
| 
       2382 
     | 
    
         
            -
                    * [prefers connection_serial and converts :connection_serial to an Integer](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2947 
     | 
    
         
            +
                    * [prefers connection_serial and converts :connection_serial to an Integer](./spec/unit/models/protocol_message_spec.rb#L241)
         
     | 
| 
       2383 
2948 
     | 
    
         
             
                * #has_serial?
         
     | 
| 
       2384 
2949 
     | 
    
         
             
                  * without msg_serial or connection_serial
         
     | 
| 
       2385 
     | 
    
         
            -
                    * [returns false](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2950 
     | 
    
         
            +
                    * [returns false](./spec/unit/models/protocol_message_spec.rb#L252)
         
     | 
| 
       2386 
2951 
     | 
    
         
             
                  * with msg_serial
         
     | 
| 
       2387 
     | 
    
         
            -
                    * [returns true](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2952 
     | 
    
         
            +
                    * [returns true](./spec/unit/models/protocol_message_spec.rb#L260)
         
     | 
| 
       2388 
2953 
     | 
    
         
             
                  * with connection_serial
         
     | 
| 
       2389 
     | 
    
         
            -
                    * [returns true](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2954 
     | 
    
         
            +
                    * [returns true](./spec/unit/models/protocol_message_spec.rb#L268)
         
     | 
| 
       2390 
2955 
     | 
    
         
             
                * #error
         
     | 
| 
       2391 
2956 
     | 
    
         
             
                  * with no error attribute
         
     | 
| 
       2392 
     | 
    
         
            -
                    * [returns nil](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2957 
     | 
    
         
            +
                    * [returns nil](./spec/unit/models/protocol_message_spec.rb#L278)
         
     | 
| 
       2393 
2958 
     | 
    
         
             
                  * with nil error
         
     | 
| 
       2394 
     | 
    
         
            -
                    * [returns nil](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2959 
     | 
    
         
            +
                    * [returns nil](./spec/unit/models/protocol_message_spec.rb#L286)
         
     | 
| 
       2395 
2960 
     | 
    
         
             
                  * with error
         
     | 
| 
       2396 
     | 
    
         
            -
                    * [returns a valid ErrorInfo object](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
       2397 
     | 
    
         
            -
                * #messages
         
     | 
| 
       2398 
     | 
    
         
            -
                  * [contains Message objects](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
       2399 
     | 
    
         
            -
                * #presence
         
     | 
| 
       2400 
     | 
    
         
            -
                  * [contains PresenceMessage objects](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
       2401 
     | 
    
         
            -
                * #connection_details
         
     | 
| 
      
 2961 
     | 
    
         
            +
                    * [returns a valid ErrorInfo object](./spec/unit/models/protocol_message_spec.rb#L294)
         
     | 
| 
      
 2962 
     | 
    
         
            +
                * #messages (#TR4k)
         
     | 
| 
      
 2963 
     | 
    
         
            +
                  * [contains Message objects](./spec/unit/models/protocol_message_spec.rb#L304)
         
     | 
| 
      
 2964 
     | 
    
         
            +
                * #presence (#TR4l)
         
     | 
| 
      
 2965 
     | 
    
         
            +
                  * [contains PresenceMessage objects](./spec/unit/models/protocol_message_spec.rb#L314)
         
     | 
| 
      
 2966 
     | 
    
         
            +
                * #connection_details (#TR4o)
         
     | 
| 
      
 2967 
     | 
    
         
            +
                  * with a JSON value
         
     | 
| 
      
 2968 
     | 
    
         
            +
                    * [contains a ConnectionDetails object](./spec/unit/models/protocol_message_spec.rb#L327)
         
     | 
| 
      
 2969 
     | 
    
         
            +
                    * [contains the attributes from the JSON connectionDetails](./spec/unit/models/protocol_message_spec.rb#L331)
         
     | 
| 
      
 2970 
     | 
    
         
            +
                  * without a JSON value
         
     | 
| 
      
 2971 
     | 
    
         
            +
                    * [contains an empty ConnectionDetails object](./spec/unit/models/protocol_message_spec.rb#L340)
         
     | 
| 
      
 2972 
     | 
    
         
            +
                * #auth (#TR4p)
         
     | 
| 
       2402 
2973 
     | 
    
         
             
                  * with a JSON value
         
     | 
| 
       2403 
     | 
    
         
            -
                    * [contains a  
     | 
| 
       2404 
     | 
    
         
            -
                    * [contains the attributes from the JSON  
     | 
| 
      
 2974 
     | 
    
         
            +
                    * [contains a AuthDetails object](./spec/unit/models/protocol_message_spec.rb#L354)
         
     | 
| 
      
 2975 
     | 
    
         
            +
                    * [contains the attributes from the JSON auth details](./spec/unit/models/protocol_message_spec.rb#L358)
         
     | 
| 
       2405 
2976 
     | 
    
         
             
                  * without a JSON value
         
     | 
| 
       2406 
     | 
    
         
            -
                    * [contains an empty  
     | 
| 
       2407 
     | 
    
         
            -
                * #connection_key
         
     | 
| 
      
 2977 
     | 
    
         
            +
                    * [contains an empty AuthDetails object](./spec/unit/models/protocol_message_spec.rb#L366)
         
     | 
| 
      
 2978 
     | 
    
         
            +
                * #connection_key (#TR4e)
         
     | 
| 
       2408 
2979 
     | 
    
         
             
                  * existing only in #connection_details.connection_key
         
     | 
| 
       2409 
     | 
    
         
            -
                    * [is returned](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2980 
     | 
    
         
            +
                    * [is returned](./spec/unit/models/protocol_message_spec.rb#L377)
         
     | 
| 
       2410 
2981 
     | 
    
         
             
                  * existing in both #connection_key and #connection_details.connection_key
         
     | 
| 
       2411 
     | 
    
         
            -
                    * [returns #connection_details.connection_key as #connection_key will be deprecated > 0.8](./spec/unit/models/protocol_message_spec.rb# 
     | 
| 
      
 2982 
     | 
    
         
            +
                    * [returns #connection_details.connection_key as #connection_key will be deprecated > 0.8](./spec/unit/models/protocol_message_spec.rb#L385)
         
     | 
| 
       2412 
2983 
     | 
    
         | 
| 
       2413 
2984 
     | 
    
         
             
            ### Ably::Models::Stats
         
     | 
| 
       2414 
2985 
     | 
    
         
             
            _(see [spec/unit/models/stats_spec.rb](./spec/unit/models/stats_spec.rb))_
         
     | 
| 
         @@ -2584,6 +3155,18 @@ _(see [spec/unit/models/token_details_spec.rb](./spec/unit/models/token_details_ 
     | 
|
| 
       2584 
3155 
     | 
    
         
             
                * [is true when attributes are the same](./spec/unit/models/token_details_spec.rb#L89)
         
     | 
| 
       2585 
3156 
     | 
    
         
             
                * [is false when attributes are not the same](./spec/unit/models/token_details_spec.rb#L94)
         
     | 
| 
       2586 
3157 
     | 
    
         
             
                * [is false when class type differs](./spec/unit/models/token_details_spec.rb#L98)
         
     | 
| 
      
 3158 
     | 
    
         
            +
              * to_json
         
     | 
| 
      
 3159 
     | 
    
         
            +
                * with all attributes and values
         
     | 
| 
      
 3160 
     | 
    
         
            +
                  * [returns all attributes](./spec/unit/models/token_details_spec.rb#L130)
         
     | 
| 
      
 3161 
     | 
    
         
            +
                * with only a token string
         
     | 
| 
      
 3162 
     | 
    
         
            +
                  * [returns populated attributes](./spec/unit/models/token_details_spec.rb#L143)
         
     | 
| 
      
 3163 
     | 
    
         
            +
              * from_json (#TD7)
         
     | 
| 
      
 3164 
     | 
    
         
            +
                * with Ruby idiomatic Hash object
         
     | 
| 
      
 3165 
     | 
    
         
            +
                  * [returns a valid TokenDetails object](./spec/unit/models/token_details_spec.rb#L169)
         
     | 
| 
      
 3166 
     | 
    
         
            +
                * with JSON-like object
         
     | 
| 
      
 3167 
     | 
    
         
            +
                  * [returns a valid TokenDetails object](./spec/unit/models/token_details_spec.rb#L192)
         
     | 
| 
      
 3168 
     | 
    
         
            +
                * with JSON string
         
     | 
| 
      
 3169 
     | 
    
         
            +
                  * [returns a valid TokenDetails object](./spec/unit/models/token_details_spec.rb#L214)
         
     | 
| 
       2587 
3170 
     | 
    
         | 
| 
       2588 
3171 
     | 
    
         
             
            ### Ably::Models::TokenRequest
         
     | 
| 
       2589 
3172 
     | 
    
         
             
            _(see [spec/unit/models/token_request_spec.rb](./spec/unit/models/token_request_spec.rb))_
         
     | 
| 
         @@ -2623,6 +3206,13 @@ _(see [spec/unit/models/token_request_spec.rb](./spec/unit/models/token_request_ 
     | 
|
| 
       2623 
3206 
     | 
    
         
             
                * [is true when attributes are the same](./spec/unit/models/token_request_spec.rb#L78)
         
     | 
| 
       2624 
3207 
     | 
    
         
             
                * [is false when attributes are not the same](./spec/unit/models/token_request_spec.rb#L83)
         
     | 
| 
       2625 
3208 
     | 
    
         
             
                * [is false when class type differs](./spec/unit/models/token_request_spec.rb#L87)
         
     | 
| 
      
 3209 
     | 
    
         
            +
              * from_json (#TE6)
         
     | 
| 
      
 3210 
     | 
    
         
            +
                * with Ruby idiomatic Hash object
         
     | 
| 
      
 3211 
     | 
    
         
            +
                  * [returns a valid TokenRequest object](./spec/unit/models/token_request_spec.rb#L130)
         
     | 
| 
      
 3212 
     | 
    
         
            +
                * with JSON-like object
         
     | 
| 
      
 3213 
     | 
    
         
            +
                  * [returns a valid TokenRequest object](./spec/unit/models/token_request_spec.rb#L152)
         
     | 
| 
      
 3214 
     | 
    
         
            +
                * with JSON string
         
     | 
| 
      
 3215 
     | 
    
         
            +
                  * [returns a valid TokenRequest object](./spec/unit/models/token_request_spec.rb#L174)
         
     | 
| 
       2626 
3216 
     | 
    
         | 
| 
       2627 
3217 
     | 
    
         
             
            ### Ably::Modules::EventEmitter
         
     | 
| 
       2628 
3218 
     | 
    
         
             
            _(see [spec/unit/modules/event_emitter_spec.rb](./spec/unit/modules/event_emitter_spec.rb))_
         
     | 
| 
         @@ -2633,29 +3223,60 @@ _(see [spec/unit/modules/event_emitter_spec.rb](./spec/unit/modules/event_emitte 
     | 
|
| 
       2633 
3223 
     | 
    
         
             
                  * [with the same block](./spec/unit/modules/event_emitter_spec.rb#L62)
         
     | 
| 
       2634 
3224 
     | 
    
         
             
                * event callback changes within the callback block
         
     | 
| 
       2635 
3225 
     | 
    
         
             
                  * when new event callbacks are added
         
     | 
| 
       2636 
     | 
    
         
            -
                    * [is unaffected and processes the prior event callbacks once](./spec/unit/modules/event_emitter_spec.rb#L86)
         
     | 
| 
       2637 
     | 
    
         
            -
                    * [adds them for the next emitted event](./spec/unit/modules/event_emitter_spec.rb#L92)
         
     | 
| 
      
 3226 
     | 
    
         
            +
                    * [is unaffected and processes the prior event callbacks once (#RTE6b)](./spec/unit/modules/event_emitter_spec.rb#L86)
         
     | 
| 
      
 3227 
     | 
    
         
            +
                    * [adds them for the next emitted event (#RTE6b)](./spec/unit/modules/event_emitter_spec.rb#L92)
         
     | 
| 
       2638 
3228 
     | 
    
         
             
                  * when callbacks are removed
         
     | 
| 
       2639 
     | 
    
         
            -
                    * [is unaffected and processes the prior event callbacks once](./spec/unit/modules/event_emitter_spec.rb#L113)
         
     | 
| 
       2640 
     | 
    
         
            -
                    * [removes them for the next emitted event](./spec/unit/modules/event_emitter_spec.rb#L118)
         
     | 
| 
       2641 
     | 
    
         
            -
              * #on
         
     | 
| 
       2642 
     | 
    
         
            -
                *  
     | 
| 
       2643 
     | 
    
         
            -
             
     | 
| 
       2644 
     | 
    
         
            -
             
     | 
| 
       2645 
     | 
    
         
            -
                *  
     | 
| 
       2646 
     | 
    
         
            -
             
     | 
| 
       2647 
     | 
    
         
            -
             
     | 
| 
      
 3229 
     | 
    
         
            +
                    * [is unaffected and processes the prior event callbacks once (#RTE6b)](./spec/unit/modules/event_emitter_spec.rb#L113)
         
     | 
| 
      
 3230 
     | 
    
         
            +
                    * [removes them for the next emitted event (#RTE6b)](./spec/unit/modules/event_emitter_spec.rb#L118)
         
     | 
| 
      
 3231 
     | 
    
         
            +
              * #on (#RTE3)
         
     | 
| 
      
 3232 
     | 
    
         
            +
                * with event specified
         
     | 
| 
      
 3233 
     | 
    
         
            +
                  * [calls the block every time an event is emitted only](./spec/unit/modules/event_emitter_spec.rb#L132)
         
     | 
| 
      
 3234 
     | 
    
         
            +
                  * [catches exceptions in the provided block, logs the error and continues](./spec/unit/modules/event_emitter_spec.rb#L139)
         
     | 
| 
      
 3235 
     | 
    
         
            +
                * with no event specified
         
     | 
| 
      
 3236 
     | 
    
         
            +
                  * [calls the block every time an event is emitted only](./spec/unit/modules/event_emitter_spec.rb#L149)
         
     | 
| 
      
 3237 
     | 
    
         
            +
                  * [catches exceptions in the provided block, logs the error and continues](./spec/unit/modules/event_emitter_spec.rb#L156)
         
     | 
| 
      
 3238 
     | 
    
         
            +
              * #once (#RTE4)
         
     | 
| 
      
 3239 
     | 
    
         
            +
                * with event specified
         
     | 
| 
      
 3240 
     | 
    
         
            +
                  * [calls the block the first time an event is emitted only](./spec/unit/modules/event_emitter_spec.rb#L182)
         
     | 
| 
      
 3241 
     | 
    
         
            +
                  * [does not remove other blocks after it is called](./spec/unit/modules/event_emitter_spec.rb#L189)
         
     | 
| 
      
 3242 
     | 
    
         
            +
                  * [catches exceptions in the provided block, logs the error and continues](./spec/unit/modules/event_emitter_spec.rb#L197)
         
     | 
| 
      
 3243 
     | 
    
         
            +
                * with no event specified
         
     | 
| 
      
 3244 
     | 
    
         
            +
                  * [calls the block the first time an event is emitted only](./spec/unit/modules/event_emitter_spec.rb#L207)
         
     | 
| 
      
 3245 
     | 
    
         
            +
                  * [does not remove other blocks after it is called](./spec/unit/modules/event_emitter_spec.rb#L214)
         
     | 
| 
      
 3246 
     | 
    
         
            +
                  * [catches exceptions in the provided block, logs the error and continues](./spec/unit/modules/event_emitter_spec.rb#L222)
         
     | 
| 
       2648 
3247 
     | 
    
         
             
              * #unsafe_once
         
     | 
| 
       2649 
     | 
    
         
            -
                * [calls the block the first time an event is emitted only](./spec/unit/modules/event_emitter_spec.rb# 
     | 
| 
       2650 
     | 
    
         
            -
                * [does not catch exceptions in provided blocks](./spec/unit/modules/event_emitter_spec.rb# 
     | 
| 
      
 3248 
     | 
    
         
            +
                * [calls the block the first time an event is emitted only](./spec/unit/modules/event_emitter_spec.rb#L233)
         
     | 
| 
      
 3249 
     | 
    
         
            +
                * [does not catch exceptions in provided blocks](./spec/unit/modules/event_emitter_spec.rb#L240)
         
     | 
| 
       2651 
3250 
     | 
    
         
             
              * #off
         
     | 
| 
       2652 
     | 
    
         
            -
                * with event  
     | 
| 
       2653 
     | 
    
         
            -
                  *  
     | 
| 
       2654 
     | 
    
         
            -
             
     | 
| 
       2655 
     | 
    
         
            -
             
     | 
| 
       2656 
     | 
    
         
            -
             
     | 
| 
       2657 
     | 
    
         
            -
                  *  
     | 
| 
       2658 
     | 
    
         
            -
             
     | 
| 
      
 3251 
     | 
    
         
            +
                * with event specified in on handler
         
     | 
| 
      
 3252 
     | 
    
         
            +
                  * with event names as arguments
         
     | 
| 
      
 3253 
     | 
    
         
            +
                    * [deletes matching callbacks when a block is provided](./spec/unit/modules/event_emitter_spec.rb#L259)
         
     | 
| 
      
 3254 
     | 
    
         
            +
                    * [deletes all matching callbacks when a block is not provided](./spec/unit/modules/event_emitter_spec.rb#L264)
         
     | 
| 
      
 3255 
     | 
    
         
            +
                    * [continues if the block does not exist](./spec/unit/modules/event_emitter_spec.rb#L269)
         
     | 
| 
      
 3256 
     | 
    
         
            +
                  * without any event names
         
     | 
| 
      
 3257 
     | 
    
         
            +
                    * [deletes all matching callbacks](./spec/unit/modules/event_emitter_spec.rb#L276)
         
     | 
| 
      
 3258 
     | 
    
         
            +
                    * [deletes all callbacks if not block given](./spec/unit/modules/event_emitter_spec.rb#L281)
         
     | 
| 
      
 3259 
     | 
    
         
            +
                * when on callback is configured for all events
         
     | 
| 
      
 3260 
     | 
    
         
            +
                  * with event names as arguments
         
     | 
| 
      
 3261 
     | 
    
         
            +
                    * [does not remove the all events callback when a block is provided](./spec/unit/modules/event_emitter_spec.rb#L298)
         
     | 
| 
      
 3262 
     | 
    
         
            +
                    * [does not remove the all events callback when a block is not provided](./spec/unit/modules/event_emitter_spec.rb#L303)
         
     | 
| 
      
 3263 
     | 
    
         
            +
                    * [does not remove the all events callback when the block does not match](./spec/unit/modules/event_emitter_spec.rb#L308)
         
     | 
| 
      
 3264 
     | 
    
         
            +
                  * without any event names
         
     | 
| 
      
 3265 
     | 
    
         
            +
                    * [deletes all matching callbacks](./spec/unit/modules/event_emitter_spec.rb#L315)
         
     | 
| 
      
 3266 
     | 
    
         
            +
                    * [deletes all callbacks if not block given](./spec/unit/modules/event_emitter_spec.rb#L320)
         
     | 
| 
      
 3267 
     | 
    
         
            +
                * with unsafe_on subscribers
         
     | 
| 
      
 3268 
     | 
    
         
            +
                  * [does not deregister them](./spec/unit/modules/event_emitter_spec.rb#L336)
         
     | 
| 
      
 3269 
     | 
    
         
            +
                * with unsafe_once subscribers
         
     | 
| 
      
 3270 
     | 
    
         
            +
                  * [does not deregister them](./spec/unit/modules/event_emitter_spec.rb#L351)
         
     | 
| 
      
 3271 
     | 
    
         
            +
              * #unsafe_off
         
     | 
| 
      
 3272 
     | 
    
         
            +
                * with unsafe_on subscribers
         
     | 
| 
      
 3273 
     | 
    
         
            +
                  * [deregisters them](./spec/unit/modules/event_emitter_spec.rb#L370)
         
     | 
| 
      
 3274 
     | 
    
         
            +
                * with unsafe_once subscribers
         
     | 
| 
      
 3275 
     | 
    
         
            +
                  * [deregister them](./spec/unit/modules/event_emitter_spec.rb#L385)
         
     | 
| 
      
 3276 
     | 
    
         
            +
                * with on subscribers
         
     | 
| 
      
 3277 
     | 
    
         
            +
                  * [does not deregister them](./spec/unit/modules/event_emitter_spec.rb#L400)
         
     | 
| 
      
 3278 
     | 
    
         
            +
                * with once subscribers
         
     | 
| 
      
 3279 
     | 
    
         
            +
                  * [does not deregister them](./spec/unit/modules/event_emitter_spec.rb#L415)
         
     | 
| 
       2659 
3280 
     | 
    
         | 
| 
       2660 
3281 
     | 
    
         
             
            ### Ably::Modules::StateEmitter
         
     | 
| 
       2661 
3282 
     | 
    
         
             
            _(see [spec/unit/modules/state_emitter_spec.rb](./spec/unit/modules/state_emitter_spec.rb))_
         
     | 
| 
         @@ -2771,7 +3392,7 @@ _(see [spec/unit/realtime/client_spec.rb](./spec/unit/realtime/client_spec.rb))_ 
     | 
|
| 
       2771 
3392 
     | 
    
         
             
                  * with token_details
         
     | 
| 
       2772 
3393 
     | 
    
         
             
                    * [sets the token](./spec/shared/client_initializer_behaviour.rb#L151)
         
     | 
| 
       2773 
3394 
     | 
    
         
             
                  * with token_params
         
     | 
| 
       2774 
     | 
    
         
            -
                    * [configures  
     | 
| 
      
 3395 
     | 
    
         
            +
                    * [configures default_token_params](./spec/shared/client_initializer_behaviour.rb#L159)
         
     | 
| 
       2775 
3396 
     | 
    
         
             
                  * endpoint
         
     | 
| 
       2776 
3397 
     | 
    
         
             
                    * [defaults to production](./spec/shared/client_initializer_behaviour.rb#L170)
         
     | 
| 
       2777 
3398 
     | 
    
         
             
                    * with environment option
         
     | 
| 
         @@ -2812,8 +3433,8 @@ _(see [spec/unit/realtime/client_spec.rb](./spec/unit/realtime/client_spec.rb))_ 
     | 
|
| 
       2812 
3433 
     | 
    
         
             
            ### Ably::Realtime::Connection
         
     | 
| 
       2813 
3434 
     | 
    
         
             
            _(see [spec/unit/realtime/connection_spec.rb](./spec/unit/realtime/connection_spec.rb))_
         
     | 
| 
       2814 
3435 
     | 
    
         
             
              * callbacks
         
     | 
| 
       2815 
     | 
    
         
            -
                * [are supported for valid STATE events](./spec/unit/realtime/connection_spec.rb# 
     | 
| 
       2816 
     | 
    
         
            -
                * [fail with unacceptable STATE event names](./spec/unit/realtime/connection_spec.rb# 
     | 
| 
      
 3436 
     | 
    
         
            +
                * [are supported for valid STATE events](./spec/unit/realtime/connection_spec.rb#L21)
         
     | 
| 
      
 3437 
     | 
    
         
            +
                * [fail with unacceptable STATE event names](./spec/unit/realtime/connection_spec.rb#L27)
         
     | 
| 
       2817 
3438 
     | 
    
         | 
| 
       2818 
3439 
     | 
    
         
             
            ### Ably::Realtime::Presence
         
     | 
| 
       2819 
3440 
     | 
    
         
             
            _(see [spec/unit/realtime/presence_spec.rb](./spec/unit/realtime/presence_spec.rb))_
         
     | 
| 
         @@ -2822,17 +3443,17 @@ _(see [spec/unit/realtime/presence_spec.rb](./spec/unit/realtime/presence_spec.r 
     | 
|
| 
       2822 
3443 
     | 
    
         
             
                * [fail with unacceptable STATE event names](./spec/unit/realtime/presence_spec.rb#L19)
         
     | 
| 
       2823 
3444 
     | 
    
         
             
              * subscriptions
         
     | 
| 
       2824 
3445 
     | 
    
         
             
                * #subscribe
         
     | 
| 
       2825 
     | 
    
         
            -
                  * [without a block raises an invalid ArgumentError](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2826 
     | 
    
         
            -
                  * [with no action specified subscribes the provided block to all action](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2827 
     | 
    
         
            -
                  * [with a single action argument subscribes that block to matching actions](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2828 
     | 
    
         
            -
                  * [with a multiple action arguments subscribes that block to all of those actions](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2829 
     | 
    
         
            -
                  * [with a multiple duplicate action arguments subscribes that block to all of those unique actions once](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
      
 3446 
     | 
    
         
            +
                  * [without a block raises an invalid ArgumentError](./spec/unit/realtime/presence_spec.rb#L63)
         
     | 
| 
      
 3447 
     | 
    
         
            +
                  * [with no action specified subscribes the provided block to all action](./spec/unit/realtime/presence_spec.rb#L67)
         
     | 
| 
      
 3448 
     | 
    
         
            +
                  * [with a single action argument subscribes that block to matching actions](./spec/unit/realtime/presence_spec.rb#L73)
         
     | 
| 
      
 3449 
     | 
    
         
            +
                  * [with a multiple action arguments subscribes that block to all of those actions](./spec/unit/realtime/presence_spec.rb#L80)
         
     | 
| 
      
 3450 
     | 
    
         
            +
                  * [with a multiple duplicate action arguments subscribes that block to all of those unique actions once](./spec/unit/realtime/presence_spec.rb#L92)
         
     | 
| 
       2830 
3451 
     | 
    
         
             
                * #unsubscribe
         
     | 
| 
       2831 
     | 
    
         
            -
                  * [with no action specified unsubscribes that block from all events](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2832 
     | 
    
         
            -
                  * [with a single action argument unsubscribes the provided block with the matching action](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2833 
     | 
    
         
            -
                  * [with multiple action arguments unsubscribes each of those matching actions with the provided block](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2834 
     | 
    
         
            -
                  * [with a non-matching action argument has no effect](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
       2835 
     | 
    
         
            -
                  * [with no block argument unsubscribes all blocks for the action argument](./spec/unit/realtime/presence_spec.rb# 
     | 
| 
      
 3452 
     | 
    
         
            +
                  * [with no action specified unsubscribes that block from all events](./spec/unit/realtime/presence_spec.rb#L107)
         
     | 
| 
      
 3453 
     | 
    
         
            +
                  * [with a single action argument unsubscribes the provided block with the matching action](./spec/unit/realtime/presence_spec.rb#L113)
         
     | 
| 
      
 3454 
     | 
    
         
            +
                  * [with multiple action arguments unsubscribes each of those matching actions with the provided block](./spec/unit/realtime/presence_spec.rb#L119)
         
     | 
| 
      
 3455 
     | 
    
         
            +
                  * [with a non-matching action argument has no effect](./spec/unit/realtime/presence_spec.rb#L125)
         
     | 
| 
      
 3456 
     | 
    
         
            +
                  * [with no block argument unsubscribes all blocks for the action argument](./spec/unit/realtime/presence_spec.rb#L131)
         
     | 
| 
       2836 
3457 
     | 
    
         | 
| 
       2837 
3458 
     | 
    
         
             
            ### Ably::Realtime
         
     | 
| 
       2838 
3459 
     | 
    
         
             
            _(see [spec/unit/realtime/realtime_spec.rb](./spec/unit/realtime/realtime_spec.rb))_
         
     | 
| 
         @@ -2845,12 +3466,12 @@ _(see [spec/unit/realtime/safe_deferrable_spec.rb](./spec/unit/realtime/safe_def 
     | 
|
| 
       2845 
3466 
     | 
    
         
             
                  * [adds a callback that is called when #fail is called](./spec/shared/safe_deferrable_behaviour.rb#L15)
         
     | 
| 
       2846 
3467 
     | 
    
         
             
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb#L22)
         
     | 
| 
       2847 
3468 
     | 
    
         
             
                * #fail
         
     | 
| 
       2848 
     | 
    
         
            -
                  * [calls the callbacks defined with #errback, but not the ones added for success #callback](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3469 
     | 
    
         
            +
                  * [calls the callbacks defined with #errback, but not the ones added for success #callback](./spec/shared/safe_deferrable_behaviour.rb#L34)
         
     | 
| 
       2849 
3470 
     | 
    
         
             
                * #callback
         
     | 
| 
       2850 
     | 
    
         
            -
                  * [adds a callback that is called when #succed is called](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
       2851 
     | 
    
         
            -
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3471 
     | 
    
         
            +
                  * [adds a callback that is called when #succed is called](./spec/shared/safe_deferrable_behaviour.rb#L46)
         
     | 
| 
      
 3472 
     | 
    
         
            +
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb#L53)
         
     | 
| 
       2852 
3473 
     | 
    
         
             
                * #succeed
         
     | 
| 
       2853 
     | 
    
         
            -
                  * [calls the callbacks defined with #callback, but not the ones added for #errback](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3474 
     | 
    
         
            +
                  * [calls the callbacks defined with #callback, but not the ones added for #errback](./spec/shared/safe_deferrable_behaviour.rb#L65)
         
     | 
| 
       2854 
3475 
     | 
    
         | 
| 
       2855 
3476 
     | 
    
         
             
            ### Ably::Models::Message
         
     | 
| 
       2856 
3477 
     | 
    
         
             
            _(see [spec/unit/realtime/safe_deferrable_spec.rb](./spec/unit/realtime/safe_deferrable_spec.rb))_
         
     | 
| 
         @@ -2859,12 +3480,12 @@ _(see [spec/unit/realtime/safe_deferrable_spec.rb](./spec/unit/realtime/safe_def 
     | 
|
| 
       2859 
3480 
     | 
    
         
             
                  * [adds a callback that is called when #fail is called](./spec/shared/safe_deferrable_behaviour.rb#L15)
         
     | 
| 
       2860 
3481 
     | 
    
         
             
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb#L22)
         
     | 
| 
       2861 
3482 
     | 
    
         
             
                * #fail
         
     | 
| 
       2862 
     | 
    
         
            -
                  * [calls the callbacks defined with #errback, but not the ones added for success #callback](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3483 
     | 
    
         
            +
                  * [calls the callbacks defined with #errback, but not the ones added for success #callback](./spec/shared/safe_deferrable_behaviour.rb#L34)
         
     | 
| 
       2863 
3484 
     | 
    
         
             
                * #callback
         
     | 
| 
       2864 
     | 
    
         
            -
                  * [adds a callback that is called when #succed is called](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
       2865 
     | 
    
         
            -
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3485 
     | 
    
         
            +
                  * [adds a callback that is called when #succed is called](./spec/shared/safe_deferrable_behaviour.rb#L46)
         
     | 
| 
      
 3486 
     | 
    
         
            +
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb#L53)
         
     | 
| 
       2866 
3487 
     | 
    
         
             
                * #succeed
         
     | 
| 
       2867 
     | 
    
         
            -
                  * [calls the callbacks defined with #callback, but not the ones added for #errback](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3488 
     | 
    
         
            +
                  * [calls the callbacks defined with #callback, but not the ones added for #errback](./spec/shared/safe_deferrable_behaviour.rb#L65)
         
     | 
| 
       2868 
3489 
     | 
    
         | 
| 
       2869 
3490 
     | 
    
         
             
            ### Ably::Models::PresenceMessage
         
     | 
| 
       2870 
3491 
     | 
    
         
             
            _(see [spec/unit/realtime/safe_deferrable_spec.rb](./spec/unit/realtime/safe_deferrable_spec.rb))_
         
     | 
| 
         @@ -2873,12 +3494,12 @@ _(see [spec/unit/realtime/safe_deferrable_spec.rb](./spec/unit/realtime/safe_def 
     | 
|
| 
       2873 
3494 
     | 
    
         
             
                  * [adds a callback that is called when #fail is called](./spec/shared/safe_deferrable_behaviour.rb#L15)
         
     | 
| 
       2874 
3495 
     | 
    
         
             
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb#L22)
         
     | 
| 
       2875 
3496 
     | 
    
         
             
                * #fail
         
     | 
| 
       2876 
     | 
    
         
            -
                  * [calls the callbacks defined with #errback, but not the ones added for success #callback](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3497 
     | 
    
         
            +
                  * [calls the callbacks defined with #errback, but not the ones added for success #callback](./spec/shared/safe_deferrable_behaviour.rb#L34)
         
     | 
| 
       2877 
3498 
     | 
    
         
             
                * #callback
         
     | 
| 
       2878 
     | 
    
         
            -
                  * [adds a callback that is called when #succed is called](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
       2879 
     | 
    
         
            -
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3499 
     | 
    
         
            +
                  * [adds a callback that is called when #succed is called](./spec/shared/safe_deferrable_behaviour.rb#L46)
         
     | 
| 
      
 3500 
     | 
    
         
            +
                  * [catches exceptions in the callback and logs the error to the logger](./spec/shared/safe_deferrable_behaviour.rb#L53)
         
     | 
| 
       2880 
3501 
     | 
    
         
             
                * #succeed
         
     | 
| 
       2881 
     | 
    
         
            -
                  * [calls the callbacks defined with #callback, but not the ones added for #errback](./spec/shared/safe_deferrable_behaviour.rb# 
     | 
| 
      
 3502 
     | 
    
         
            +
                  * [calls the callbacks defined with #callback, but not the ones added for #errback](./spec/shared/safe_deferrable_behaviour.rb#L65)
         
     | 
| 
       2882 
3503 
     | 
    
         | 
| 
       2883 
3504 
     | 
    
         
             
            ### Ably::Rest::Channel
         
     | 
| 
       2884 
3505 
     | 
    
         
             
            _(see [spec/unit/rest/channel_spec.rb](./spec/unit/rest/channel_spec.rb))_
         
     | 
| 
         @@ -2958,7 +3579,7 @@ _(see [spec/unit/rest/client_spec.rb](./spec/unit/rest/client_spec.rb))_ 
     | 
|
| 
       2958 
3579 
     | 
    
         
             
                  * with token_details
         
     | 
| 
       2959 
3580 
     | 
    
         
             
                    * [sets the token](./spec/shared/client_initializer_behaviour.rb#L151)
         
     | 
| 
       2960 
3581 
     | 
    
         
             
                  * with token_params
         
     | 
| 
       2961 
     | 
    
         
            -
                    * [configures  
     | 
| 
      
 3582 
     | 
    
         
            +
                    * [configures default_token_params](./spec/shared/client_initializer_behaviour.rb#L159)
         
     | 
| 
       2962 
3583 
     | 
    
         
             
                  * endpoint
         
     | 
| 
       2963 
3584 
     | 
    
         
             
                    * [defaults to production](./spec/shared/client_initializer_behaviour.rb#L170)
         
     | 
| 
       2964 
3585 
     | 
    
         
             
                    * with environment option
         
     | 
| 
         @@ -2991,7 +3612,7 @@ _(see [spec/unit/rest/client_spec.rb](./spec/unit/rest/client_spec.rb))_ 
     | 
|
| 
       2991 
3612 
     | 
    
         
             
              * initializer options
         
     | 
| 
       2992 
3613 
     | 
    
         
             
                * TLS
         
     | 
| 
       2993 
3614 
     | 
    
         
             
                  * disabled
         
     | 
| 
       2994 
     | 
    
         
            -
                    * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection](./spec/unit/rest/client_spec.rb#L17)
         
     | 
| 
      
 3615 
     | 
    
         
            +
                    * [fails for any operation with basic auth and attempting to send an API key over a non-secure connection (#RSA1)](./spec/unit/rest/client_spec.rb#L17)
         
     | 
| 
       2995 
3616 
     | 
    
         
             
                * :use_token_auth
         
     | 
| 
       2996 
3617 
     | 
    
         
             
                  * set to false
         
     | 
| 
       2997 
3618 
     | 
    
         
             
                    * with a key and :tls => false
         
     | 
| 
         @@ -3028,12 +3649,12 @@ _(see [spec/unit/util/crypto_spec.rb](./spec/unit/util/crypto_spec.rb))_ 
     | 
|
| 
       3028 
3649 
     | 
    
         
             
                * [raises an ArgumentError](./spec/unit/util/crypto_spec.rb#L93)
         
     | 
| 
       3029 
3650 
     | 
    
         
             
              * using shared client lib fixture data
         
     | 
| 
       3030 
3651 
     | 
    
         
             
                * with AES-128-CBC
         
     | 
| 
       3031 
     | 
    
         
            -
                  * behaves like an Ably encrypter and decrypter
         
     | 
| 
      
 3652 
     | 
    
         
            +
                  * behaves like an Ably encrypter and decrypter (#RTL7d)
         
     | 
| 
       3032 
3653 
     | 
    
         
             
                    * text payload
         
     | 
| 
       3033 
3654 
     | 
    
         
             
                      * [encrypts exactly the same binary data as other client libraries](./spec/unit/util/crypto_spec.rb#L116)
         
     | 
| 
       3034 
3655 
     | 
    
         
             
                      * [decrypts exactly the same binary data as other client libraries](./spec/unit/util/crypto_spec.rb#L120)
         
     | 
| 
       3035 
3656 
     | 
    
         
             
                * with AES-256-CBC
         
     | 
| 
       3036 
     | 
    
         
            -
                  * behaves like an Ably encrypter and decrypter
         
     | 
| 
      
 3657 
     | 
    
         
            +
                  * behaves like an Ably encrypter and decrypter (#RTL7d)
         
     | 
| 
       3037 
3658 
     | 
    
         
             
                    * text payload
         
     | 
| 
       3038 
3659 
     | 
    
         
             
                      * [encrypts exactly the same binary data as other client libraries](./spec/unit/util/crypto_spec.rb#L116)
         
     | 
| 
       3039 
3660 
     | 
    
         
             
                      * [decrypts exactly the same binary data as other client libraries](./spec/unit/util/crypto_spec.rb#L120)
         
     | 
| 
         @@ -3052,6 +3673,6 @@ _(see [spec/unit/util/pub_sub_spec.rb](./spec/unit/util/pub_sub_spec.rb))_ 
     | 
|
| 
       3052 
3673 
     | 
    
         | 
| 
       3053 
3674 
     | 
    
         
             
              ## Test summary
         
     | 
| 
       3054 
3675 
     | 
    
         | 
| 
       3055 
     | 
    
         
            -
              * Passing tests:  
     | 
| 
       3056 
     | 
    
         
            -
              * Pending tests:  
     | 
| 
      
 3676 
     | 
    
         
            +
              * Passing tests: 1806
         
     | 
| 
      
 3677 
     | 
    
         
            +
              * Pending tests: 12
         
     | 
| 
       3057 
3678 
     | 
    
         
             
              * Failing tests: 0
         
     |