SPEC.md in ably-0.8.1 vs SPEC.md in ably-0.8.2

- old
+ new

@@ -1,6 +1,6 @@ -# Ably Realtime & REST Client Library 0.8.0 Specification +# Ably Realtime & REST Client Library 0.8.1 Specification ### Ably::Realtime::Channel#history _(see [spec/acceptance/realtime/channel_history_spec.rb](./spec/acceptance/realtime/channel_history_spec.rb))_ * using JSON and MsgPack protocol * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/channel_history_spec.rb#L21) @@ -168,11 +168,11 @@ * [never calls the provided success block](./spec/acceptance/realtime/connection_failures_spec.rb#L263) * connection resume * when DISCONNECTED ProtocolMessage received from the server * [reconnects automatically and immediately](./spec/acceptance/realtime/connection_failures_spec.rb#L292) * and subsequently fails to reconnect - * [retries every CONNECT_RETRY_CONFIG[:disconnected][:retry_every] seconds](./spec/acceptance/realtime/connection_failures_spec.rb#L322) + * [retries every 15 seconds](./spec/acceptance/realtime/connection_failures_spec.rb#L322) * when websocket transport is closed * [reconnects automatically](./spec/acceptance/realtime/connection_failures_spec.rb#L365) * after successfully reconnecting and resuming * [retains connection_id and connection_key](./spec/acceptance/realtime/connection_failures_spec.rb#L382) * [retains channel subscription state](./spec/acceptance/realtime/connection_failures_spec.rb#L399) @@ -274,47 +274,47 @@ * [raises an exception](./spec/acceptance/realtime/connection_spec.rb#L501) * with a success block that raises an exception * [catches the exception and logs the error](./spec/acceptance/realtime/connection_spec.rb#L508) * recovery * #recovery_key - * [is composed of connection id and serial that is kept up to date with each message ACK received](./spec/acceptance/realtime/connection_spec.rb#L545) - * [is available when connection is in one of the states: connecting, connected, disconnected, suspended, failed](./spec/acceptance/realtime/connection_spec.rb#L566) - * [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb#L590) + * [is composed of connection key and serial that is kept up to date with each message ACK received](./spec/acceptance/realtime/connection_spec.rb#L545) + * [is available when connection is in one of the states: connecting, connected, disconnected, suspended, failed](./spec/acceptance/realtime/connection_spec.rb#L568) + * [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb#L592) * opening a new connection using a recently disconnected connection's #recovery_key * connection#id and connection#key after recovery - * [remains the same](./spec/acceptance/realtime/connection_spec.rb#L604) + * [remains the same](./spec/acceptance/realtime/connection_spec.rb#L606) * when messages have been sent whilst the old connection is disconnected * the new connection - * [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb#L645) + * [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb#L647) * with :recover option * with invalid syntax - * [raises an exception](./spec/acceptance/realtime/connection_spec.rb#L670) + * [raises an exception](./spec/acceptance/realtime/connection_spec.rb#L672) * with invalid formatted value sent to server - * [triggers a fatal error on the connection object, sets the #error_reason and disconnects](./spec/acceptance/realtime/connection_spec.rb#L679) + * [triggers a fatal error on the connection object, sets the #error_reason and disconnects](./spec/acceptance/realtime/connection_spec.rb#L681) * with expired (missing) value sent to server - * [triggers an error on the connection object, sets the #error_reason, yet will connect anyway](./spec/acceptance/realtime/connection_spec.rb#L694) + * [triggers an error on the connection object, sets the #error_reason, yet will connect anyway](./spec/acceptance/realtime/connection_spec.rb#L696) * with many connections simultaneously - * [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb#L713) + * [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb#L715) * when a state transition is unsupported - * [emits a StateChangeError](./spec/acceptance/realtime/connection_spec.rb#L733) + * [emits a StateChangeError](./spec/acceptance/realtime/connection_spec.rb#L735) * protocol failure * receiving an invalid ProtocolMessage - * [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb#L749) + * [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb#L751) * undocumented method * #internet_up? - * [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb#L765) + * [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb#L767) * internet up URL protocol * when using TLS for the connection - * [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L776) + * [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L778) * when using a non-secured connection - * [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L786) + * [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L788) * when the Internet is up - * [calls the block with true](./spec/acceptance/realtime/connection_spec.rb#L795) - * [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L802) + * [calls the block with true](./spec/acceptance/realtime/connection_spec.rb#L797) + * [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L804) * when the Internet is down - * [calls the block with false](./spec/acceptance/realtime/connection_spec.rb#L814) - * [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L821) + * [calls the block with false](./spec/acceptance/realtime/connection_spec.rb#L816) + * [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L823) ### Ably::Realtime::Channel Message _(see [spec/acceptance/realtime/message_spec.rb](./spec/acceptance/realtime/message_spec.rb))_ * using JSON and MsgPack protocol * [sends a String data payload](./spec/acceptance/realtime/message_spec.rb#L25) @@ -471,11 +471,11 @@ * [raises an exception if not entered](./spec/acceptance/realtime/presence_spec.rb#L600) * :data option * when set to a string * [emits the new data for the leave event](./spec/acceptance/realtime/presence_spec.rb#L561) * when set to nil - * [emits the previously defined value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L574) + * [emits a nil value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L574) * when not passed as an argument * [emits the previously defined value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L587) * it should behave like a public presence method * [returns a SafeDeferrable that catches exceptions in callbacks and logs them](./spec/acceptance/realtime/presence_spec.rb#L56) * [calls the Deferrable callback on success](./spec/acceptance/realtime/presence_spec.rb#L63) @@ -580,11 +580,11 @@ * [emits an error when cipher does not match and presence data cannot be decoded](./spec/acceptance/realtime/presence_spec.rb#L1293) * leaving * [expect :left event once underlying connection is closed](./spec/acceptance/realtime/presence_spec.rb#L1310) * [expect :left event with client data from enter event](./spec/acceptance/realtime/presence_spec.rb#L1320) * connection failure mid-way through a large member sync - * PENDING: *[resumes the SYNC operation](./spec/acceptance/realtime/presence_spec.rb#L1339)* + * [resumes the SYNC operation](./spec/acceptance/realtime/presence_spec.rb#L1338) ### Ably::Realtime::Client#stats _(see [spec/acceptance/realtime/stats_spec.rb](./spec/acceptance/realtime/stats_spec.rb))_ * using JSON and MsgPack protocol * fetching stats @@ -603,120 +603,120 @@ * using JSON and MsgPack protocol * [has immutable options](./spec/acceptance/rest/auth_spec.rb#L54) * #request_token * [returns a valid requested token in the expected format with valid issued and expires attributes](./spec/acceptance/rest/auth_spec.rb#L69) * with option :client_id - * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L100) + * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101) * with option :capability - * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L100) + * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101) * with option :nonce - * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L100) + * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101) * with option :timestamp - * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L100) + * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101) * with option :ttl - * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L100) + * [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101) * with :key option - * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L129) + * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L130) * with :key_name & :key_secret options - * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L158) + * [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L159) * with :query_time option - * [queries the server for the time](./spec/acceptance/rest/auth_spec.rb#L166) + * [queries the server for the time](./spec/acceptance/rest/auth_spec.rb#L167) * without :query_time option - * [does not query the server for the time](./spec/acceptance/rest/auth_spec.rb#L175) + * [does not query the server for the time](./spec/acceptance/rest/auth_spec.rb#L176) * with :auth_url option * when response from :auth_url is a valid token request - * [requests a token from :auth_url using an HTTP GET request](./spec/acceptance/rest/auth_spec.rb#L223) - * [returns a valid token generated from the token request](./spec/acceptance/rest/auth_spec.rb#L228) + * [requests a token from :auth_url using an HTTP GET request](./spec/acceptance/rest/auth_spec.rb#L224) + * [returns a valid token generated from the token request](./spec/acceptance/rest/auth_spec.rb#L229) * with :query_params - * [requests a token from :auth_url with the :query_params](./spec/acceptance/rest/auth_spec.rb#L235) + * [requests a token from :auth_url with the :query_params](./spec/acceptance/rest/auth_spec.rb#L236) * with :headers - * [requests a token from :auth_url with the HTTP headers set](./spec/acceptance/rest/auth_spec.rb#L243) + * [requests a token from :auth_url with the HTTP headers set](./spec/acceptance/rest/auth_spec.rb#L244) * with POST - * [requests a token from :auth_url using an HTTP POST instead of the default GET](./spec/acceptance/rest/auth_spec.rb#L251) + * [requests a token from :auth_url using an HTTP POST instead of the default GET](./spec/acceptance/rest/auth_spec.rb#L252) * when response from :auth_url is a token details object - * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L276) + * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L277) * when response from :auth_url is text/plain content type and a token string - * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L293) + * [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L294) * when response is invalid * 500 - * [raises ServerError](./spec/acceptance/rest/auth_spec.rb#L306) + * [raises ServerError](./spec/acceptance/rest/auth_spec.rb#L307) * XML - * [raises InvalidResponseBody](./spec/acceptance/rest/auth_spec.rb#L317) + * [raises InvalidResponseBody](./spec/acceptance/rest/auth_spec.rb#L318) * with a Proc for the :auth_callback option * that returns a TokenRequest - * [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L336) - * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L341) + * [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L337) + * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L342) * that returns a TokenDetails JSON object - * [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L370) - * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L375) + * [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L371) + * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L376) * that returns a TokenDetails object - * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L396) + * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L397) * that returns a Token string - * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L412) + * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L413) * with client_id - * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L444) + * [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L445) * before #authorise has been called - * [has no current_token_details](./spec/acceptance/rest/auth_spec.rb#L451) + * [has no current_token_details](./spec/acceptance/rest/auth_spec.rb#L452) * #authorise - * [updates the persisted auth options that are then used for subsequent authorise requests](./spec/acceptance/rest/auth_spec.rb#L498) + * [updates the persisted auth options that are then used for subsequent authorise requests](./spec/acceptance/rest/auth_spec.rb#L499) * when called for the first time since the client has been instantiated - * [passes all options to #request_token](./spec/acceptance/rest/auth_spec.rb#L462) - * [returns a valid token](./spec/acceptance/rest/auth_spec.rb#L467) - * [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#L471) + * [passes all options to #request_token](./spec/acceptance/rest/auth_spec.rb#L463) + * [returns a valid token](./spec/acceptance/rest/auth_spec.rb#L468) + * [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#L472) * with previous authorisation - * [does not request a token if current_token_details has not expired](./spec/acceptance/rest/auth_spec.rb#L482) - * [requests a new token if token is expired](./spec/acceptance/rest/auth_spec.rb#L487) - * [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#L493) + * [does not request a token if current_token_details has not expired](./spec/acceptance/rest/auth_spec.rb#L483) + * [requests a new token if token is expired](./spec/acceptance/rest/auth_spec.rb#L488) + * [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#L494) * with a Proc for the :auth_callback option - * [calls the Proc](./spec/acceptance/rest/auth_spec.rb#L514) - * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L518) + * [calls the Proc](./spec/acceptance/rest/auth_spec.rb#L515) + * [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L519) * for every subsequent #request_token * without a :auth_callback Proc - * [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb#L524) + * [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb#L525) * with a provided block - * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](./spec/acceptance/rest/auth_spec.rb#L531) + * [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](./spec/acceptance/rest/auth_spec.rb#L532) * #create_token_request - * [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb#L547) - * [uses the default TTL](./spec/acceptance/rest/auth_spec.rb#L551) - * [uses the default capability](./spec/acceptance/rest/auth_spec.rb#L555) + * [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb#L548) + * [uses the default TTL](./spec/acceptance/rest/auth_spec.rb#L552) + * [uses the default capability](./spec/acceptance/rest/auth_spec.rb#L556) * the nonce - * [is unique for every request](./spec/acceptance/rest/auth_spec.rb#L560) - * [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb#L565) + * [is unique for every request](./spec/acceptance/rest/auth_spec.rb#L561) + * [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb#L566) * with option :ttl - * [overrides default](./spec/acceptance/rest/auth_spec.rb#L576) + * [overrides default](./spec/acceptance/rest/auth_spec.rb#L577) * with option :nonce - * [overrides default](./spec/acceptance/rest/auth_spec.rb#L576) + * [overrides default](./spec/acceptance/rest/auth_spec.rb#L577) * with option :client_id - * [overrides default](./spec/acceptance/rest/auth_spec.rb#L576) + * [overrides default](./spec/acceptance/rest/auth_spec.rb#L577) * with additional invalid attributes - * [are ignored](./spec/acceptance/rest/auth_spec.rb#L584) + * [are ignored](./spec/acceptance/rest/auth_spec.rb#L585) * when required fields are missing - * [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb#L595) - * [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb#L599) + * [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb#L596) + * [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb#L600) * with :query_time option - * [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb#L608) + * [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb#L609) * with :timestamp option - * [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb#L618) + * [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb#L619) * signing - * [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb#L640) + * [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb#L641) * using token authentication * with :token option - * [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb#L663) - * [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb#L667) - * [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb#L675) - * [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb#L683) + * [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb#L664) + * [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb#L668) + * [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb#L676) + * [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb#L684) * when implicit as a result of using :client id * and requests to the Ably server are mocked - * [will send a token request to the server](./spec/acceptance/rest/auth_spec.rb#L711) + * [will send a token request to the server](./spec/acceptance/rest/auth_spec.rb#L712) * a token is created - * [before a request is made](./spec/acceptance/rest/auth_spec.rb#L720) - * [when a message is published](./spec/acceptance/rest/auth_spec.rb#L724) - * [with capability and TTL defaults](./spec/acceptance/rest/auth_spec.rb#L728) + * [before a request is made](./spec/acceptance/rest/auth_spec.rb#L721) + * [when a message is published](./spec/acceptance/rest/auth_spec.rb#L725) + * [with capability and TTL defaults](./spec/acceptance/rest/auth_spec.rb#L729) * when using an :key and basic auth - * [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb#L743) - * [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb#L747) - * [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb#L751) + * [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb#L744) + * [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb#L748) + * [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb#L752) ### Ably::Rest _(see [spec/acceptance/rest/base_spec.rb](./spec/acceptance/rest/base_spec.rb))_ * transport protocol * when protocol is not defined it defaults to :msgpack @@ -852,11 +852,11 @@ * [stringifies the JSON and sets the encoding attribute to "json"](./spec/acceptance/rest/encoders_spec.rb#L139) * with encryption * with UTF-8 data * [applies utf-8, cipher and base64 encodings and sets the encoding attribute to "utf-8/cipher+aes-128-cbc/base64"](./spec/acceptance/rest/encoders_spec.rb#L154) * with binary data - * [applies cipher and base64 encoding and sets the encoding attribute to "utf-8/cipher+aes-128-cbc/base64"](./spec/acceptance/rest/encoders_spec.rb#L165) + * [applies cipher and base64 encoding and sets the encoding attribute to "cipher+aes-128-cbc/base64"](./spec/acceptance/rest/encoders_spec.rb#L165) * with JSON data * [applies json, utf-8, cipher and base64 encoding and sets the encoding attribute to "json/utf-8/cipher+aes-128-cbc/base64"](./spec/acceptance/rest/encoders_spec.rb#L176) ### Ably::Rest::Channel messages _(see [spec/acceptance/rest/message_spec.rb](./spec/acceptance/rest/message_spec.rb))_ @@ -2066,8 +2066,8 @@ ------- ## Test summary - * Passing tests: 1028 - * Pending tests: 7 + * Passing tests: 1029 + * Pending tests: 6 * Failing tests: 0