<testsuite name="rspec1" tests="609" skipped="0" failures="77" errors="0" time="2427.341670" timestamp="2025-01-31T13:29:27+00:00" hostname="fv-az1046-316">
<properties>
<property name="seed" value="16416"/>
</properties>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails == is false when class type differs" file="./spec/unit/models/auth_details_spec.rb" time="0.005434"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails == is true when attributes are the same" file="./spec/unit/models/auth_details_spec.rb" time="0.000713"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails == is false when attributes are not the same" file="./spec/unit/models/auth_details_spec.rb" time="0.000710"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails AuthDetails conversion methods with a JSON object returns a new AuthDetails object from the JSON" file="./spec/unit/models/auth_details_spec.rb" time="0.000849"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails AuthDetails conversion methods with a AuthDetails object returns the AuthDetails object" file="./spec/unit/models/auth_details_spec.rb" time="0.000539"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model attributes #attributes provides access to #attributes" file="./spec/unit/models/auth_details_spec.rb" time="0.000786"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model attributes #access_token retrieves attribute :access_token" file="./spec/unit/models/auth_details_spec.rb" time="0.000750"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model attributes #[] provides accessor method to #attributes" file="./spec/unit/models/auth_details_spec.rb" time="0.000528"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model #to_json returns a JSON string with Ably payload naming" file="./spec/unit/models/auth_details_spec.rb" time="0.001981"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model is immutable prevents changes" file="./spec/unit/models/auth_details_spec.rb" time="0.001510"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model is immutable dups options" file="./spec/unit/models/auth_details_spec.rb" time="0.000663"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model #== is true when attributes are the same" file="./spec/unit/models/auth_details_spec.rb" time="0.000505"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model #== is false when class type differs" file="./spec/unit/models/auth_details_spec.rb" time="0.000519"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model #== is false when attributes are not the same" file="./spec/unit/models/auth_details_spec.rb" time="0.000504"></testcase>
<testcase classname="spec.unit.models.auth_details_spec" name="Ably::Models::AuthDetails behaves like a model #to_msgpack returns a msgpack object with Ably payload naming" file="./spec/unit/models/auth_details_spec.rb" time="0.000746"></testcase>
<testcase classname="spec.unit.models.message_encoders.utf8_spec" name="Ably::Models::MessageEncoders::Utf8#decode message with utf8 payload sets the encoding" file="./spec/unit/models/message_encoders/utf8_spec.rb" time="0.000604"></testcase>
<testcase classname="spec.unit.models.message_encoders.utf8_spec" name="Ably::Models::MessageEncoders::Utf8#decode message with utf8 payload strips the encoding" file="./spec/unit/models/message_encoders/utf8_spec.rb" time="0.001190"></testcase>
<testcase classname="spec.unit.models.message_encoders.utf8_spec" name="Ably::Models::MessageEncoders::Utf8#decode message with utf8 payload before other payloads sets the encoding" file="./spec/unit/models/message_encoders/utf8_spec.rb" time="0.000568"></testcase>
<testcase classname="spec.unit.models.message_encoders.utf8_spec" name="Ably::Models::MessageEncoders::Utf8#decode message with utf8 payload before other payloads strips the encoding" file="./spec/unit/models/message_encoders/utf8_spec.rb" time="0.022614"></testcase>
<testcase classname="spec.unit.models.message_encoders.utf8_spec" name="Ably::Models::MessageEncoders::Utf8#decode message with another payload leaves the encoding intact" file="./spec/unit/models/message_encoders/utf8_spec.rb" time="0.000604"></testcase>
<testcase classname="spec.unit.models.message_encoders.utf8_spec" name="Ably::Models::MessageEncoders::Utf8#decode message with another payload leaves the message data intact" file="./spec/unit/models/message_encoders/utf8_spec.rb" time="0.000892"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_on calls the block every time an event is emitted only" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000549"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_on does not catch exceptions in provided blocks" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000710"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_once does not catch exceptions in provided blocks" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000706"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_once calls the block the first time an event is emitted only" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000544"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_off with once subscribers does not deregister them" file="./spec/unit/modules/event_emitter_spec.rb" time="0.001120"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_off with on subscribers does not deregister them" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000771"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_off with unsafe_once subscribers deregister them" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000711"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#unsafe_off with unsafe_on subscribers deregisters them" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000608"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off when on callback is configured for all events with event names as arguments does not remove the all events callback when a block is provided" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000633"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off when on callback is configured for all events with event names as arguments does not remove the all events callback when a block is not provided" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000738"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off when on callback is configured for all events with event names as arguments does not remove the all events callback when the block does not match" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000652"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off when on callback is configured for all events without any event names deletes all matching callbacks" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000684"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off when on callback is configured for all events without any event names deletes all callbacks if not block given" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000653"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off with unsafe_on subscribers does not deregister them" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000732"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off with unsafe_once subscribers does not deregister them" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000688"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off with event specified in on handler with event names as arguments continues if the block does not exist" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000735"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off with event specified in on handler with event names as arguments deletes matching callbacks when a block is provided" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000620"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off with event specified in on handler with event names as arguments deletes all matching callbacks when a block is not provided" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000680"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off with event specified in on handler without any event names deletes all callbacks if not block given" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000937"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#off with event specified in on handler without any event names deletes all matching callbacks" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000863"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#once (#RTE4) with event specified catches exceptions in the provided block, logs the error and continues" file="./spec/unit/modules/event_emitter_spec.rb" time="0.001673"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#once (#RTE4) with event specified does not remove other blocks after it is called" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000566"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#once (#RTE4) with event specified calls the block the first time an event is emitted only" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000602"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#once (#RTE4) with no event specified catches exceptions in the provided block, logs the error and continues" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000849"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#once (#RTE4) with no event specified does not remove other blocks after it is called" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000567"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#once (#RTE4) with no event specified calls the block the first time an event is emitted only" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000579"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out should emit an event for any number of subscribers" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000760"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out sends only messages to matching event names" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000695"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out #on subscribe to multiple events with the same block" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000687"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out event callback changes within the callback block when callbacks are removed is unaffected and processes the prior event callbacks once (#RTE6b)" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000712"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out event callback changes within the callback block when callbacks are removed removes them for the next emitted event (#RTE6b)" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000690"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out event callback changes within the callback block when new event callbacks are added adds them for the next emitted event (#RTE6b)" file="./spec/unit/modules/event_emitter_spec.rb" time="0.002195"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out event callback changes within the callback block when new event callbacks are added is unaffected and processes the prior event callbacks once (#RTE6b)" file="./spec/unit/modules/event_emitter_spec.rb" time="0.001030"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out without coercion only matches event names on type matches" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000713"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#emit event fan out with coercion calls the provided proc to coerce the event name" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000732"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#on (#RTE3) with event specified calls the block every time an event is emitted only" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000695"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#on (#RTE3) with event specified catches exceptions in the provided block, logs the error and continues" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000829"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#on (#RTE3) with no event specified catches exceptions in the provided block, logs the error and continues" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000830"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#on (#RTE3) with no event specified calls the block every time an event is emitted only" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000634"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with no data payload leaves the message data intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000710"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with no data payload leaves the encoding intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000600"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with UTF-8 payload leaves the encoding intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000692"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with UTF-8 payload leaves the message data intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000650"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode already encoded message with hash payload adds the encoding" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000716"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode already encoded message with hash payload encodes hash payload data as json" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000625"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with hash payload encodes hash payload data as json" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000553"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with hash payload adds the encoding" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000619"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with Array payload encodes Array payload data as json" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000519"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with Array payload adds the encoding" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000586"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with nil payload leaves the message data intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000599"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with nil payload leaves the encoding intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000622"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with hash payload and underscore case keys encodes hash payload data as json and leaves underscore case in tact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000518"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#encode message with hash payload and underscore case keys adds the encoding" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000493"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with json payload strips the encoding" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000654"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with json payload decodes json" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000558"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with json payload before other payloads decodes json" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000547"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with json payload before other payloads strips the encoding" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000519"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with another payload leaves the message data intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000587"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with another payload leaves the encoding intact" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000648"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with json payload in camelCase decodes json" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000779"></testcase>
<testcase classname="spec.unit.models.message_encoders.json_spec" name="Ably::Models::MessageEncoders::Json#decode message with json payload in camelCase strips the encoding" file="./spec/unit/models/message_encoders/json_spec.rb" time="0.000590"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC with invalid cipher data raise an exception" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.001636"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with another payload leaves the message data intact" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000548"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with another payload leaves the encoding intact" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.001811"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with cipher payload strips the encoding" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.001212"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with cipher payload decodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.001027"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with cipher payload before other payloads strips the encoding" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000968"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with cipher payload before other payloads decodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000946"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with binary payload decodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000985"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with binary payload returns ASCII_8BIT encoded binary data" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000964"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC valid cipher data message with binary payload strips the encoding" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000901"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC 256 bit key with invalid channel_option cipher params raise an exception" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000934"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with channel set up for AES-128-CBC 256 bit key without any configured encryption raise an exception" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000579"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with AES-256-CBC message with cipher payload decodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000960"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#decode with AES-256-CBC message with cipher payload strips the encoding" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000895"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with AES-256-CBC message with cipher payload decodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.001045"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with AES-256-CBC message with cipher payload strips the encoding" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000738"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC channel_option cipher params have invalid algorithm raise an exception" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000730"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC channel_option cipher params have invalid key length raise an exception" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000686"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC channel_option cipher params have missing key raise an exception" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000569"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with string payload encodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000847"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with string payload adds the encoding with utf-8" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000754"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with json payload encodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.001645"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with json payload adds the encoding with utf-8" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000997"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with binary payload encodes cipher" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000958"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with binary payload adds the encoding without utf-8 prefixed" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000805"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with binary payload returns ASCII_8BIT encoded binary data" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000913"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with existing cipher encoding before leaves encoding intact" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000548"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true message with existing cipher encoding before leaves message intact as it is already encrypted" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000688"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true with encryption set to to false leaves encoding intact" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000576"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true with encryption set to to false leaves message intact as encryption is not enable" file="./spec/unit/models/message_encoders/cipher_spec.rb" time="0.000674"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata failed response #error_message to be populated" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000992"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata failed response #status_code reflects status code" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000736"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata failed response #success? is false" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001628"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata failed response #error_code to be populated" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001026"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata failed response #headers to be present" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000790"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata successful response #headers to be a hash" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000900"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata successful response #status_code reflects status code" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000848"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata successful response #success? is true" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001001"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata successful response #error_code to be empty" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000957"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 response metadata successful response #error_message to be empty" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000848"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items provides [] accessor method" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000813"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items #last gets the last item in page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000872"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items returns correct length from body" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000644"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items is Enumerable" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000939"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items is iterable" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000764"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items #first gets the first item in page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000706"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items #each yields each item" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.002047"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items #each returns an enumerator" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001234"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items with coercion returns coerced objects" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001127"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items Array conversion and nil handling #HP3 with empty response is an array" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000850"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items Array conversion and nil handling #HP3 with Json Array is an array" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000916"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items Array conversion and nil handling #HP3 with Json Object is an array" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000954"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 #items Array conversion and nil handling #HP3 with nil response is an array" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000918"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with non paged http response does not support pagination" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000946"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with non paged http response returns nil when accessing first page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000949"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with non paged http response does not have next page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001034"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with non paged http response is the last page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000993"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with non paged http response returns nil when accessing next page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000805"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response has next page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000869"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response supports pagination" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001010"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response is not the last page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000935"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page is the last page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001219"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page returns another HttpPaginatedResponse" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001137"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page returns nil when trying to access the last page when it is the last page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001191"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page retrieves the next page of results" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000967"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page does not have a next page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001140"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page and then first page retrieves the first page of results" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001176"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page and then first page returns a HttpPaginatedResponse" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001297"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 paged transformations with each block calls the block for each result on second page after retrieving the results" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001098"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 paged transformations with each block calls the block for each result after retrieving the results" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.002087"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 paged transformations with option async_blocking_operations: true #next allows a success callback block to be added" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.013335"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 paged transformations with option async_blocking_operations: true #next returns a SafeDeferrable that catches exceptions in callbacks and logs them" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.002699"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 paged transformations with option async_blocking_operations: true #first calls the errback callback when first page headers are missing" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.002200"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels destroying channels #release detaches and then releases the channel resources" file="./spec/unit/realtime/channels_spec.rb" time="0.002209"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels#fetch calls the block if channel is missing" file="./spec/unit/realtime/channels_spec.rb" time="0.000821"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels#fetch retrieves a channel if it exists" file="./spec/unit/realtime/channels_spec.rb" time="0.001060"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels is Enumerable provides #length" file="./spec/unit/realtime/channels_spec.rb" time="0.001167"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels is Enumerable allows enumeration" file="./spec/unit/realtime/channels_spec.rb" time="0.000956"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels is Enumerable #each returns an enumerator" file="./spec/unit/realtime/channels_spec.rb" time="0.001073"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels is Enumerable #each yields each channel" file="./spec/unit/realtime/channels_spec.rb" time="0.001130"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels [] creates a channel" file="./spec/unit/realtime/channels_spec.rb" time="0.000892"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when an existing channel exists will leave the options intact on the channel if not provided" file="./spec/unit/realtime/channels_spec.rb" time="0.000941"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when an existing channel exists will update the options on the channel if provided (RSN3c)" file="./spec/unit/realtime/channels_spec.rb" time="0.001173"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when an existing channel exists hash is expected to be a kind of Hash" file="./spec/unit/realtime/channels_spec.rb" time="0.000630"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when an existing channel exists hash will reuse a channel object if it exists (RTS3a)" file="./spec/unit/realtime/channels_spec.rb" time="0.000877"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when an existing channel exists ChannelOptions object will reuse a channel object if it exists (RTS3a)" file="./spec/unit/realtime/channels_spec.rb" time="0.001003"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when an existing channel exists ChannelOptions object is expected to be a kind of Ably::Models::ChannelOptions" file="./spec/unit/realtime/channels_spec.rb" time="0.000743"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when channel doesn&apos;t exist hash creates a channel (RTS3a)" file="./spec/unit/realtime/channels_spec.rb" time="0.000952"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when channel doesn&apos;t exist hash is expected to be a kind of Hash" file="./spec/unit/realtime/channels_spec.rb" time="0.000732"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when channel doesn&apos;t exist ChannelOptions object creates a channel (RTS3a)" file="./spec/unit/realtime/channels_spec.rb" time="0.002555"></testcase>
<testcase classname="spec.unit.realtime.channels_spec" name="Ably::Realtime::Channels creating channels #get when channel doesn&apos;t exist ChannelOptions object is expected to be a kind of Ably::Models::ChannelOptions" file="./spec/unit/realtime/channels_spec.rb" time="0.000947"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block raises an Exception does not call the callback block of the SafeDeferrable" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.201707"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block raises an Exception does not call the provided block" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.201961"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block raises an Exception calls the errback block of the SafeDeferrable" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.101824"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block returns result does not call the errback" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.301973"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block returns result returns a SafeDeferrable that catches and logs exceptions in the provided callbacks" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.001849"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block returns result calls the provided block with result when provided" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.101512"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block returns result catches exceptions in the provided block and logs them to logger" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.102092"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block returns result does not block EventMachine" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.101725"></testcase>
<testcase classname="spec.unit.modules.async_wrapper_spec" name="Ably::Modules::AsyncWrapper#async_wrap blocking block returns result returns a SafeDeferrable that calls the callback block" file="./spec/unit/modules/async_wrapper_spec.rb" time="0.101520"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage without ProtocolMessage has no ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.000602"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage without ProtocolMessage initializes with the JSON" file="./spec/unit/models/presence_message_spec.rb" time="0.000694"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage without ProtocolMessage raises an exception when accessing ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.000636"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage without ProtocolMessage returns a PresenceMessage object" file="./spec/unit/models/presence_message_spec.rb" time="0.000712"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage with ProtocolMessage initializes with the JSON" file="./spec/unit/models/presence_message_spec.rb" time="0.000616"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage with ProtocolMessage has a ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.000702"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage with ProtocolMessage returns a PresenceMessage object" file="./spec/unit/models/presence_message_spec.rb" time="0.000689"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with another PresenceMessage with ProtocolMessage provides access to ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.000624"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON without ProtocolMessage raises an exception when accessing ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.000570"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON without ProtocolMessage returns a PresenceMessage object" file="./spec/unit/models/presence_message_spec.rb" time="0.000514"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON without ProtocolMessage has no ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.000532"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON without ProtocolMessage initializes with the JSON" file="./spec/unit/models/presence_message_spec.rb" time="0.000543"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON with ProtocolMessage returns a PresenceMessage object" file="./spec/unit/models/presence_message_spec.rb" time="0.000563"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON with ProtocolMessage has a ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.002322"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON with ProtocolMessage provides access to ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.000818"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage PresenceMessage conversion method with JSON with ProtocolMessage initializes with the JSON" file="./spec/unit/models/presence_message_spec.rb" time="0.000572"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage without action raises an exception when accessed" file="./spec/unit/models/presence_message_spec.rb" time="0.000591"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#timestamp retrieves attribute :timestamp as a Time object from ProtocolMessage" file="./spec/unit/models/presence_message_spec.rb" time="0.001275"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#size String (#TO3l8a) should return 20 bytes" file="./spec/unit/models/presence_message_spec.rb" time="0.000737"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#size Array (#TO3l8b) should return 18 bytes" file="./spec/unit/models/presence_message_spec.rb" time="0.000683"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#size extras (#TO3l8d) should return 51 bytes" file="./spec/unit/models/presence_message_spec.rb" time="0.000669"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#size nil (#TO3l8e) should return 1 bytes" file="./spec/unit/models/presence_message_spec.rb" time="0.000551"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#size Object (#TO3l8b) should return 32 bytes" file="./spec/unit/models/presence_message_spec.rb" time="0.000673"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#member_key attribute is string in format connection_id:client_id" file="./spec/unit/models/presence_message_spec.rb" time="0.000559"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#member_key attribute with a single connection and different client_ids is unique" file="./spec/unit/models/presence_message_spec.rb" time="0.000637"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#member_key attribute with the same client id across multiple connections is unique" file="./spec/unit/models/presence_message_spec.rb" time="0.000731"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage with action enter provides action as an Enum" file="./spec/unit/models/presence_message_spec.rb" time="0.000672"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage with action absent provides action as an Enum" file="./spec/unit/models/presence_message_spec.rb" time="0.000605"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model is immutable dups options" file="./spec/unit/models/presence_message_spec.rb" time="0.007711"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model is immutable prevents changes" file="./spec/unit/models/presence_message_spec.rb" time="0.006811"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model #== is false when class type differs" file="./spec/unit/models/presence_message_spec.rb" time="0.006360"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model #== is true when attributes are the same" file="./spec/unit/models/presence_message_spec.rb" time="0.004256"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model #== is false when attributes are not the same" file="./spec/unit/models/presence_message_spec.rb" time="0.000876"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model #to_msgpack returns a msgpack object with Ably payload naming" file="./spec/unit/models/presence_message_spec.rb" time="0.000829"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model #to_json returns a JSON string with Ably payload naming" file="./spec/unit/models/presence_message_spec.rb" time="0.000758"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model attributes #client_id retrieves attribute :client_id" file="./spec/unit/models/presence_message_spec.rb" time="0.000694"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model attributes #data retrieves attribute :data" file="./spec/unit/models/presence_message_spec.rb" time="0.000689"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model attributes #encoding retrieves attribute :encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000633"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model attributes #attributes provides access to #attributes" file="./spec/unit/models/presence_message_spec.rb" time="0.000707"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model attributes #[] provides accessor method to #attributes" file="./spec/unit/models/presence_message_spec.rb" time="0.000676"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage behaves like a model attributes #id retrieves attribute :id" file="./spec/unit/models/presence_message_spec.rb" time="0.000655"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#shallow_clone with new attributes passed in to the method creates a duplicate of the message without any ProtocolMessage dependency" file="./spec/unit/models/presence_message_spec.rb" time="0.000992"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#shallow_clone with new attributes passed in to the method with an invalid ProtocolMessage (missing an ID) allows an ID to be passed in to the shallow clone that takes precedence" file="./spec/unit/models/presence_message_spec.rb" time="0.000944"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#shallow_clone with new attributes passed in to the method with mixing of cases resolves case issues and can use camelCase or snake_case" file="./spec/unit/models/presence_message_spec.rb" time="0.001446"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#shallow_clone with inherited attributes from ProtocolMessage creates a duplicate of the message without any ProtocolMessage dependency" file="./spec/unit/models/presence_message_spec.rb" time="0.000966"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#shallow_clone with embedded attributes for all fields creates a duplicate of the message without any ProtocolMessage dependency" file="./spec/unit/models/presence_message_spec.rb" time="0.000874"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded (#TP4) with no encoding returns a presence message object" file="./spec/unit/models/presence_message_spec.rb" time="0.001389"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded (#TP4) with no encoding with a block does not call the block" file="./spec/unit/models/presence_message_spec.rb" time="0.000839"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded (#TP4) with an encoding returns a presence message object" file="./spec/unit/models/presence_message_spec.rb" time="0.000918"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded (#TP4) with a custom encoding returns a presence message object with the residual incompatible transforms left in the encoding property" file="./spec/unit/models/presence_message_spec.rb" time="0.000879"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded (#TP4) with invalid Cipher encoding without a block raises an exception" file="./spec/unit/models/presence_message_spec.rb" time="0.001151"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded (#TP4) with invalid Cipher encoding with a block calls the block with the exception" file="./spec/unit/models/presence_message_spec.rb" time="0.000945"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded (#TP4) with a Cipher encoding returns a presence message object with the residual incompatible transforms left in the encoding property" file="./spec/unit/models/presence_message_spec.rb" time="0.001249"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#to_json with valid data converts the attribute back to Java mixedCase notation using string keys" file="./spec/unit/models/presence_message_spec.rb" time="0.000758"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#to_json with binary data encodes as Base64 so that it can be converted to UTF-8 automatically by JSON#dump" file="./spec/unit/models/presence_message_spec.rb" time="0.000782"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#to_json with binary data adds Base64 encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000785"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#to_json with invalid data raises an exception" file="./spec/unit/models/presence_message_spec.rb" time="0.000664"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#connection_id attribute when this model has no connectionId attribute with a protocol message with a connectionId uses the model value" file="./spec/unit/models/presence_message_spec.rb" time="0.000626"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#connection_id attribute when this model has no connectionId attribute and no protocol message uses the model value" file="./spec/unit/models/presence_message_spec.rb" time="0.000593"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#connection_id attribute when this model has a connectionId attribute but no protocol message uses the model value" file="./spec/unit/models/presence_message_spec.rb" time="0.000596"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#connection_id attribute when this model has a connectionId attribute with a protocol message with a different connectionId uses the model value" file="./spec/unit/models/presence_message_spec.rb" time="0.000631"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage Java naming converts the attribute to ruby symbol naming convention" file="./spec/unit/models/presence_message_spec.rb" time="0.000613"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as Integer raises an argument error" file="./spec/unit/models/presence_message_spec.rb" time="0.001230"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as ASCII_8BIT string gets converted to UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000638"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as ASCII_8BIT string is compatible with original encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000815"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as UTF_8 string is permitted" file="./spec/unit/models/presence_message_spec.rb" time="0.000742"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as UTF_8 string remains as UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000634"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as SHIFT_JIS string gets converted to UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.001132"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as SHIFT_JIS string is compatible with original encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000766"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :client_id as Nil is permitted" file="./spec/unit/models/presence_message_spec.rb" time="0.000636"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as SHIFT_JIS string is compatible with original encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000590"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as SHIFT_JIS string gets converted to UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000708"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as ASCII_8BIT string gets converted to UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000711"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as ASCII_8BIT string is compatible with original encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000617"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as Nil is permitted" file="./spec/unit/models/presence_message_spec.rb" time="0.000661"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as Integer raises an argument error" file="./spec/unit/models/presence_message_spec.rb" time="0.000592"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as UTF_8 string remains as UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000694"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :connection_id as UTF_8 string is permitted" file="./spec/unit/models/presence_message_spec.rb" time="0.000684"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as Integer raises an argument error" file="./spec/unit/models/presence_message_spec.rb" time="0.000585"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as ASCII_8BIT string is compatible with original encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000653"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as ASCII_8BIT string gets converted to UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000658"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as SHIFT_JIS string is compatible with original encoding" file="./spec/unit/models/presence_message_spec.rb" time="0.000608"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as SHIFT_JIS string gets converted to UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000610"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as UTF_8 string remains as UTF-8" file="./spec/unit/models/presence_message_spec.rb" time="0.000650"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as UTF_8 string is permitted" file="./spec/unit/models/presence_message_spec.rb" time="0.000698"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage initialized with :encoding as Nil is permitted" file="./spec/unit/models/presence_message_spec.rb" time="0.000654"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage part of ProtocolMessage should not modify the data payload" file="./spec/unit/models/presence_message_spec.rb" time="0.000788"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage part of ProtocolMessage should generate a message ID from the index, serial and connection id" file="./spec/unit/models/presence_message_spec.rb" time="0.000950"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage from REST request with embedded fields without protocol message #timestamp uses embedded timestamp" file="./spec/unit/models/presence_message_spec.rb" time="0.000675"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage from REST request with embedded fields without protocol message #id uses embedded ID" file="./spec/unit/models/presence_message_spec.rb" time="0.000677"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage from REST request with embedded fields with protocol message #id prefers embedded ID" file="./spec/unit/models/presence_message_spec.rb" time="0.000628"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage from REST request with embedded fields with protocol message #timestamp prefers embedded timestamp" file="./spec/unit/models/presence_message_spec.rb" time="0.000706"></testcase>
<testcase classname="spec.unit.models.presence_message_spec" name="Ably::Models::PresenceMessage#from_encoded_array (#TP4) with no encoding returns an Array of presence message objects" file="./spec/unit/models/presence_message_spec.rb" time="0.001186"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#status #TI1, #TI2 is an alias for #status_code" file="./spec/unit/models/error_info_spec.rb" time="0.000604"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model #== is false when class type differs" file="./spec/unit/models/error_info_spec.rb" time="0.000539"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model #== is false when attributes are not the same" file="./spec/unit/models/error_info_spec.rb" time="0.000533"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model #== is true when attributes are the same" file="./spec/unit/models/error_info_spec.rb" time="0.000590"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model #to_json returns a JSON string with Ably payload naming" file="./spec/unit/models/error_info_spec.rb" time="0.000603"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #status_code retrieves attribute :status_code" file="./spec/unit/models/error_info_spec.rb" time="0.000611"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #[] provides accessor method to #attributes" file="./spec/unit/models/error_info_spec.rb" time="0.000587"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #attributes provides access to #attributes" file="./spec/unit/models/error_info_spec.rb" time="0.000593"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #code retrieves attribute :code" file="./spec/unit/models/error_info_spec.rb" time="0.000561"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #message retrieves attribute :message" file="./spec/unit/models/error_info_spec.rb" time="0.000570"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #href retrieves attribute :href" file="./spec/unit/models/error_info_spec.rb" time="0.000597"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #cause retrieves attribute :cause" file="./spec/unit/models/error_info_spec.rb" time="0.000547"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model attributes #request_id retrieves attribute :request_id" file="./spec/unit/models/error_info_spec.rb" time="0.000576"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model #to_msgpack returns a msgpack object with Ably payload naming" file="./spec/unit/models/error_info_spec.rb" time="0.000554"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model is immutable dups options" file="./spec/unit/models/error_info_spec.rb" time="0.000509"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#TI1, #TI4 behaves like a model is immutable prevents changes" file="./spec/unit/models/error_info_spec.rb" time="0.000644"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo log entries container help link #TI5 without an error code does not include the help URL" file="./spec/unit/models/error_info_spec.rb" time="0.000688"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo log entries container help link #TI5 with an error code and a message with a different error URL includes the specified error URL from the message and the error code URL in the stringified object" file="./spec/unit/models/error_info_spec.rb" time="0.001191"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo log entries container help link #TI5 with an error code and a message with the same error URL includes the specified error URL only once in the stringified object" file="./spec/unit/models/error_info_spec.rb" time="0.000705"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo log entries container help link #TI5 with a specified error code includes https://help.ably.io/error/[CODE] in the stringified object" file="./spec/unit/models/error_info_spec.rb" time="0.000645"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo log entries container help link #TI5 with an error code and an href attribute includes the specified href in the stringified object" file="./spec/unit/models/error_info_spec.rb" time="0.000778"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#cause #TI1 should return cause attribute" file="./spec/unit/models/error_info_spec.rb" time="0.000564"></testcase>
<testcase classname="spec.unit.models.error_info_spec" name="Ably::Models::ErrorInfo#request_id #RSC7c should return request ID" file="./spec/unit/models/error_info_spec.rb" time="0.000559"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest TokenRequest conversion methods with a JSON object returns a new TokenRequest object from the JSON" file="./spec/unit/models/token_request_spec.rb" time="0.000576"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest TokenRequest conversion methods with a TokenRequest object returns the TokenRequest object" file="./spec/unit/models/token_request_spec.rb" time="0.000557"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest from_json (#TE6) with Ruby idiomatic Hash object returns a valid TokenRequest object" file="./spec/unit/models/token_request_spec.rb" time="0.000684"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest from_json (#TE6) with JSON string returns a valid TokenRequest object" file="./spec/unit/models/token_request_spec.rb" time="0.002091"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest from_json (#TE6) with JSON-like object returns a valid TokenRequest object" file="./spec/unit/models/token_request_spec.rb" time="0.000669"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest == is false when class type differs" file="./spec/unit/models/token_request_spec.rb" time="0.000493"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest == is true when attributes are the same" file="./spec/unit/models/token_request_spec.rb" time="0.000734"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest == is false when attributes are not the same" file="./spec/unit/models/token_request_spec.rb" time="0.000562"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model #to_msgpack returns a msgpack object with Ably payload naming" file="./spec/unit/models/token_request_spec.rb" time="0.000662"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model attributes #mac retrieves attribute :mac" file="./spec/unit/models/token_request_spec.rb" time="0.000646"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model attributes #client_id retrieves attribute :client_id" file="./spec/unit/models/token_request_spec.rb" time="0.000543"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model attributes #nonce retrieves attribute :nonce" file="./spec/unit/models/token_request_spec.rb" time="0.000646"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model attributes #key_name retrieves attribute :key_name" file="./spec/unit/models/token_request_spec.rb" time="0.000525"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model attributes #[] provides accessor method to #attributes" file="./spec/unit/models/token_request_spec.rb" time="0.000575"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model attributes #attributes provides access to #attributes" file="./spec/unit/models/token_request_spec.rb" time="0.000674"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model is immutable dups options" file="./spec/unit/models/token_request_spec.rb" time="0.000550"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model is immutable prevents changes" file="./spec/unit/models/token_request_spec.rb" time="0.000554"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model #to_json returns a JSON string with Ably payload naming" file="./spec/unit/models/token_request_spec.rb" time="0.000616"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model #== is true when attributes are the same" file="./spec/unit/models/token_request_spec.rb" time="0.000652"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model #== is false when class type differs" file="./spec/unit/models/token_request_spec.rb" time="0.000539"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest behaves like a model #== is false when attributes are not the same" file="./spec/unit/models/token_request_spec.rb" time="0.000638"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest attributes #timestamp when converted to JSON is in milliseconds since epoch" file="./spec/unit/models/token_request_spec.rb" time="0.000514"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest attributes #timestamp with :timestamp option as Time in constructor retrieves attribute :timestamp as Time" file="./spec/unit/models/token_request_spec.rb" time="0.000633"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest attributes #timestamp with :timestamp option as milliseconds in constructor retrieves attribute :timestamp as Time" file="./spec/unit/models/token_request_spec.rb" time="0.000557"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest attributes #capability retrieves attribute :capability as parsed JSON" file="./spec/unit/models/token_request_spec.rb" time="0.000617"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest attributes #ttl with :ttl option as milliseconds in constructor retrieves attribute :ttl as seconds" file="./spec/unit/models/token_request_spec.rb" time="0.000518"></testcase>
<testcase classname="spec.unit.models.token_request_spec" name="Ably::Models::TokenRequest attributes #ttl when converted to JSON is in milliseconds since epoch" file="./spec/unit/models/token_request_spec.rb" time="0.000540"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client passes on the options to the initializer" file="./spec/unit/realtime/client_spec.rb" time="4.007732"><failure message="the Ably::Rest::Client class does not implement the instance method: environment" type="RSpec::Mocks::MockExpectationError">Failure/Error: rest_client = instance_double(&apos;Ably::Rest::Client&apos;, auth: instance_double(&apos;Ably::Auth&apos;), options: client_options, environment: &apos;production&apos;, use_tls?: true, custom_tls_port: nil)
  the Ably::Rest::Client class does not implement the instance method: environment
./spec/unit/realtime/client_spec.rb:16:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #use_tls?" file="./spec/unit/realtime/client_spec.rb" time="4.008620"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce25468 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce023f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c95c800 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c95c710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c95c698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c95c620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c95c558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c95c508 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce023f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce023f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c95c800 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c95c710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c95c698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c95c620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c95c558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c95c4e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce25468 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce023f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c95c800 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c95c710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c95c698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c95c620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c95c558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c95c508 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce023f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce023f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c95c800 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0a150 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c95c710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c95c698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c95c620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c95c558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c95c4e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25468 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #log_level" file="./spec/unit/realtime/client_spec.rb" time="4.008844"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf1e108 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce6cdb8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8c25c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8c24d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8c2458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8c2390 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8c22c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8c2278 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce6cdb8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce6cdb8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8c25c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8c24d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8c2458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8c2390 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8c22c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8c2250 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf1e108 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce6cdb8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8c25c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8c24d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8c2458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8c2390 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8c22c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8c2278 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce6cdb8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce6cdb8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8c25c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd13200 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8c24d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8c2458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8c2390 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8c22c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8c2250 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf1e108 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #custom_host" file="./spec/unit/realtime/client_spec.rb" time="4.008706"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf5e078 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce67b88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c858da0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c858cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c858c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c858bc0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c858af8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c858aa8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce67b88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce67b88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c858da0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c858cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c858c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c858bc0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c858af8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c858a80 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf5e078 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce67b88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c858da0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c858cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c858c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c858bc0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c858af8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c858aa8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce67b88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce67b88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c858da0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd3c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c858cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c858c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c858bc0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c858af8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c858a80 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf5e078 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #environment" file="./spec/unit/realtime/client_spec.rb" time="4.008246"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf58998 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce63d58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5bf828 @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5bf710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5bf698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5bf620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5bf558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5bf508 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce63d58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce63d58 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5bf828 @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5bf710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5bf698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5bf620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5bf558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5bf4e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf58998 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce63d58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5bf828 @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5bf710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5bf698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5bf620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5bf558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5bf508 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce63d58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce63d58 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5bf828 @client=#&lt;Ably::Rest::Client:0x00007fef3cd45660 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5bf710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5bf698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5bf620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5bf558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5bf4e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf58998 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer delegators delegates :auth_options to .auth" file="./spec/unit/realtime/client_spec.rb" time="4.008370"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf3e0c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5ef8c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5ef7d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5ef758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5ef6e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5ef618 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5ef5c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf3e0c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf3e0c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5ef8c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5ef7d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5ef758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5ef6e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5ef618 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5ef5a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf3e0c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5ef8c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5ef7d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5ef758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5ef6e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5ef618 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5ef5c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf3e0c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf3e0c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5ef8c0 @client=#&lt;Ably::Rest::Client:0x00007fef3cf04b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5ef7d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5ef758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5ef6e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5ef618 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5ef5a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf54ed8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:395:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer delegators delegates :client_id to .auth" file="./spec/unit/realtime/client_spec.rb" time="4.008590"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf73360 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf36050 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b69c8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b68d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b6860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b67e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b6720 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8b66d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf36050 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf36050 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b69c8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b68d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b6860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b67e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b6720 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8b66a8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf73360 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf36050 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b69c8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b68d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b6860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b67e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b6720 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8b66d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf36050 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf36050 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b69c8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57b060 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b68d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b6860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b67e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b6720 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8b66a8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf73360 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:395:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with invalid arguments key and key_name raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.000859"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with invalid arguments key and key_secret raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.000808"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with invalid arguments nil raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.000714"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with invalid arguments empty hash raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.000741"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with invalid arguments key: &quot;invalid:asdad&quot; raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.000759"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with invalid arguments key: &quot;invalid&quot; raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.000780"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="37.858648"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfb5148 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c545780 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef402b3db0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cef4da8 @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cef4cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cef4c18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cef4b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cef4ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cef49e8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef402b3db0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef402b3db0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cef4da8 @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cef4cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cef4c18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cef4b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cef4ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cef49c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfb5148 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c545780 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef402b3db0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cef4da8 @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cef4cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cef4c18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cef4b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cef4ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cef49e8 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef402b3db0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef402b3db0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cef4da8 @client=#&lt;Ably::Rest::Client:0x00007fef3c545780 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cef4cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cef4c18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cef4b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cef4ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cef49c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfb5148 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:348:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="33.646163"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ced14c0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cd99580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfe2288 @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfe1fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfe1e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfe1b58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfe1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cfe18b0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cd99580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cd99580 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfe2288 @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfe1fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfe1e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfe1b58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfe1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cfe1888 @client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ced14c0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cd99580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfe2288 @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfe1fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfe1e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfe1b58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfe1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cfe18b0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cd99580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;nonprod:sandbox-a.foo.com&quot;, &quot;nonprod:sandbox-b.foo.com&quot;, &quot;nonprod:sandbox-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cd99580 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfe2288 @client=#&lt;Ably::Rest::Client:0x00007fef3c537f90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfe1fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfe1e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfe1b58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfe1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cfe1888 @client=#&lt;Ably::Realtime::Client:0x00007fef3ced14c0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:344:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="33.352612"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf74260 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce66968 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdb66f8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdb6608 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdb6518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdb64a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdb63d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cdb6388 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce66968 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce66968 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdb66f8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdb6608 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdb6518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdb64a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdb63d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cdb6360 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf74260 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce66968 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdb66f8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdb6608 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdb6518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdb64a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdb63d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cdb6388 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce66968 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce66968 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdb66f8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558e98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdb6608 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdb6518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdb64a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdb63d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cdb6360 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74260 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:316:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set without custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="32.986722"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d13db78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1133f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cca6bf0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cca6ab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cca6a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cca68f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cca66a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cca6650 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d1133f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1133f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cca6bf0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cca6ab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cca6a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cca68f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cca66a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cca6628 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d13db78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1133f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cca6bf0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cca6ab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cca6a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cca68f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cca66a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cca6650 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d1133f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1133f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cca6bf0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57ade0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cca6ab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cca6a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cca68f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cca66a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cca6628 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13db78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:312:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with environment and without custom fallback hosts configured sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="33.441863"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3e95dfc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9e5d58 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9e5c68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9e5bf0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9e5b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9e5ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9e5a60 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3e95dfc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3e95dfc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9e5d58 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9e5c68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9e5bf0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9e5b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9e5ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9e5a38 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3e95dfc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9e5d58 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9e5c68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9e5bf0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9e5b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9e5ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9e5a60 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3e95dfc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3e95dfc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9e5d58 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ccaa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9e5c68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9e5bf0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9e5b78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9e5ab0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9e5a38 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec21ae8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:326:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with environment and without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="33.963041"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c5294e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec06360 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9535e8 @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9534f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c953480 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c953408 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c953340 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9532f0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ec06360 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec06360 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9535e8 @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9534f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c953480 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c953408 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c953340 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9532c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c5294e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec06360 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9535e8 @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9534f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c953480 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c953408 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c953340 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9532f0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ec06360 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec06360 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9535e8 @client=#&lt;Ably::Rest::Client:0x00007fef3c92e9c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9534f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c953480 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c953408 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c953340 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9532c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5294e0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:334:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with environment and without custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="34.462848"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c5156e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c50b238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c850808 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c850718 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8506a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c850600 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c850538 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8504e8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c50b238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c50b238 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c850808 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c850718 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8506a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c850600 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c850538 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8504c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c5156e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c50b238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c850808 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c850718 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8506a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c850600 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c850538 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8504e8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c50b238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;foo.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foobar&quot;, @endpoint=&quot;foobar&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c50b238 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c850808 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbfdd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c850718 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8506a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c850600 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c850538 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8504c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5156e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:330:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with token sets the token" file="./spec/unit/realtime/client_spec.rb" time="33.787402"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce2e928 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e42a0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e4250 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5a1a58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5a18f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce2e7e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5a19e0&gt;, @mon_data_owner_object_id=18880&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5a1788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce2e888 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5a3e20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5a3da8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5e8bd8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5e8ae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5e8a70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5e89f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5e8930 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5e88e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce2e888 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e42a0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e4250 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5a1a58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5a18f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce2e7e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5a19e0&gt;, @mon_data_owner_object_id=18880&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5a1788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce2e888 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5e8bd8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5e8ae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5e8a70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5e89f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5e8930 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5a3e20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5a3da8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5e88b8 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce2e928 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e42a0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e4250 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5a1a58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5a18f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce2e7e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5a19e0&gt;, @mon_data_owner_object_id=18880&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5a1788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce2e888 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5a3e20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5a3da8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5e8bd8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5e8ae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5e8a70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5e89f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5e8930 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5e88e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce2e888 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e42a0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e4250 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5a1a58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5a18f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce2e7e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5a19e0&gt;, @mon_data_owner_object_id=18880&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5a1788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce2e888 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5e8bd8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fc90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5e8ae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5e8a70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5e89f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5e8930 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5a3e20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5a3da8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5e88b8 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce2e928 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:128:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri defaults to production" file="./spec/unit/realtime/client_spec.rb" time="33.439246"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d3e00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c968cb8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c968bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c968b50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c968ad8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c968a10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9689c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d3e00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d3e00 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c968cb8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c968bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c968b50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c968ad8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c968a10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c968998 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d3e00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c968cb8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c968bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c968b50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c968ad8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c968a10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9689c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d3e00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d3e00 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c968cb8 @client=#&lt;Ably::Rest::Client:0x00007fef3cd10500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c968bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c968b50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c968ad8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c968a10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c968998 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d3ea0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with realtime_host option uses an alternate uri for Realtime clients" file="./spec/unit/realtime/client_spec.rb" time="0.001307"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with tls_port option and a TLS connection uses the custom port for TLS requests" file="./spec/unit/realtime/client_spec.rb" time="33.419062"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c49f150 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=666, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c49f0b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce76c28 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce764f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce763b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce760e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce75e40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3ce75d78 @client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c49f0b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=666, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c49f0b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce76c28 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce764f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce763b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce760e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce75e40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3ce75d50 @client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c49f150 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=666, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c49f0b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce76c28 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce764f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce763b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce760e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce75e40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3ce75d78 @client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c49f0b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=666, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c49f0b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce76c28 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4d360 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce764f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce763b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce760e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce75e40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3ce75d50 @client=#&lt;Ably::Realtime::Client:0x00007fef3c49f150 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with port option and non-TLS connections uses the custom port for non-TLS requests" file="./spec/unit/realtime/client_spec.rb" time="33.747936"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c538210 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=999, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4ba518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf9e718 @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf9e510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf9e498 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf9e420 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf9e358 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cf9e2e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4ba518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=999, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4ba518 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf9e718 @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf9e510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf9e498 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf9e420 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf9e358 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cf9e2b8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c538210 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=999, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4ba518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf9e718 @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf9e510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf9e498 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf9e420 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf9e358 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cf9e2e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4ba518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=999, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4ba518 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf9e718 @client=#&lt;Ably::Rest::Client:0x00007fef3c538210 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf9e510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf9e498 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf9e420 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf9e358 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cf9e2b8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4ba5b8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with environment option uses an alternate uri" file="./spec/unit/realtime/client_spec.rb" time="32.955412"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;sandbox&quot;, @endpoint=&quot;sandbox&quot;, @fallback_hosts=[&quot;sandbox..a.fallback.ably-realtime.com&quot;, &quot;sandbox..b.fallback.ably-realtime.com&quot;, &quot;sandbox..c.fallback.ably-realtime.com&quot;, &quot;sandbox..d.fallback.ably-realtime.com&quot;, &quot;sandbox..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d5b60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce15ab8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce15770 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce156a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce155e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce15518 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3ce15478 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d5b60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;sandbox&quot;, @endpoint=&quot;sandbox&quot;, @fallback_hosts=[&quot;sandbox..a.fallback.ably-realtime.com&quot;, &quot;sandbox..b.fallback.ably-realtime.com&quot;, &quot;sandbox..c.fallback.ably-realtime.com&quot;, &quot;sandbox..d.fallback.ably-realtime.com&quot;, &quot;sandbox..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d5b60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce15ab8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce15770 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce156a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce155e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce15518 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3ce15450 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;sandbox&quot;, @endpoint=&quot;sandbox&quot;, @fallback_hosts=[&quot;sandbox..a.fallback.ably-realtime.com&quot;, &quot;sandbox..b.fallback.ably-realtime.com&quot;, &quot;sandbox..c.fallback.ably-realtime.com&quot;, &quot;sandbox..d.fallback.ably-realtime.com&quot;, &quot;sandbox..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d5b60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce15ab8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce15770 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce156a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce155e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce15518 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3ce15478 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d5b60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;sandbox&quot;, @endpoint=&quot;sandbox&quot;, @fallback_hosts=[&quot;sandbox..a.fallback.ably-realtime.com&quot;, &quot;sandbox..b.fallback.ably-realtime.com&quot;, &quot;sandbox..c.fallback.ably-realtime.com&quot;, &quot;sandbox..d.fallback.ably-realtime.com&quot;, &quot;sandbox..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d5b60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ce15ab8 @client=#&lt;Ably::Rest::Client:0x00007fef3c558fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ce15770 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ce156a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ce155e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ce15518 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3ce15450 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d5c00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with rest_host option uses an alternate uri for REST clients" file="./spec/unit/realtime/client_spec.rb" time="33.047822"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;custom-rest.host.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f0d20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc5d5b8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc5d4c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc5d450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc5d3d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc5d310 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc5d2c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4f0d20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;custom-rest.host.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f0d20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc5d5b8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc5d4c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc5d450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc5d3d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc5d310 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc5d298 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;custom-rest.host.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f0d20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc5d5b8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc5d4c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc5d450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc5d3d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc5d310 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc5d2c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4f0d20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=&quot;custom-rest.host.com&quot;, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f0d20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc5d5b8 @client=#&lt;Ably::Rest::Client:0x00007fef3c57a7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc5d4c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc5d450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc5d3d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc5d310 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc5d298 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f0dc0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash sets the key_name" file="./spec/unit/realtime/client_spec.rb" time="32.262436"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c52c280 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52c1e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a9268 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a9178 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a9100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a9088 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a8f98 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9a8f20 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c52c1e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52c1e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a9268 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a9178 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a9100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a9088 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a8f98 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9a8ef8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c52c280 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52c1e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a9268 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a9178 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a9100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a9088 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a8f98 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9a8f20 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c52c1e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52c1e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a9268 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a9178 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a9100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a9088 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a8f98 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9a8ef8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52c280 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash sets the key" file="./spec/unit/realtime/client_spec.rb" time="34.060430"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf101e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf100a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c901720 @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c901630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9015b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c901540 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c901478 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c901428 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf100a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf100a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c901720 @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c901630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9015b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c901540 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c901478 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c901400 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf101e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf100a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c901720 @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c901630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9015b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c901540 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c901478 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c901428 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf100a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf100a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c901720 @client=#&lt;Ably::Rest::Client:0x00007fef3c92dc08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c901630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9015b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c901540 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c901478 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c901400 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf101e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash sets the key_secret" file="./spec/unit/realtime/client_spec.rb" time="33.773376"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfae938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c86b310 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c86b220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c86b1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c86b130 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c86b068 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c86b018 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cfae938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfae938 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c86b310 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c86b220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c86b1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c86b130 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c86b068 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c86aff0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfae938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c86b310 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c86b220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c86b1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c86b130 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c86b068 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c86b018 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cfae938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfae938 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c86b310 @client=#&lt;Ably::Rest::Client:0x00007fef3ccbe890 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c86b220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c86b1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c86b130 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c86b068 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c86aff0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfae9d8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash uses basic auth" file="./spec/unit/realtime/client_spec.rb" time="33.133605"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d151a60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1519c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5eff50 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5efe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5efd70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5efbe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5efb18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5efac8 @client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d1519c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1519c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5eff50 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5efe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5efd70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5efbe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5efb18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5efaa0 @client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d151a60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1519c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5eff50 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5efe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5efd70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5efbe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5efb18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5efac8 @client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d1519c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;App.k3y:sec-r3t&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d1519c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5eff50 @client=#&lt;Ably::Rest::Client:0x00007fef3cd0fb50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5efe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5efd70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5efbe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5efb18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5efaa0 @client=#&lt;Ably::Realtime::Client:0x00007fef3d151a60 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string token key instead of options hash sets the token" file="./spec/unit/realtime/client_spec.rb" time="33.747846"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4eda30 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ed9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9906c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c990560 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ecc60e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c990650&gt;, @mon_data_owner_object_id=19080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c990420&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ecc64a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @token_params={}, @token_option=&quot;app.kjhkasjhdsakdh127g7g1271&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9928b0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c992838 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9c8dc0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9c8cd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9c8c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9c8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9c8b18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9c8ac8 @client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ecc64a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4eda30 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ed9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9906c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c990560 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ecc60e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c990650&gt;, @mon_data_owner_object_id=19080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c990420&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ecc64a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9c8dc0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9c8cd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9c8c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9c8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9c8b18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @token_params={}, @token_option=&quot;app.kjhkasjhdsakdh127g7g1271&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9928b0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c992838 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9c8aa0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4eda30 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ed9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9906c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c990560 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ecc60e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c990650&gt;, @mon_data_owner_object_id=19080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c990420&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ecc64a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @token_params={}, @token_option=&quot;app.kjhkasjhdsakdh127g7g1271&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9928b0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c992838 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9c8dc0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9c8cd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9c8c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9c8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9c8b18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9c8ac8 @client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ecc64a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4eda30 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ed9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9906c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c990560 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ecc60e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c990650&gt;, @mon_data_owner_object_id=19080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c990420&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ecc64a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9c8dc0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd2fa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9c8cd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9c8c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9c8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9c8b18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @token_params={}, @token_option=&quot;app.kjhkasjhdsakdh127g7g1271&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9928b0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c992838 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9c8aa0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ecc6e08 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:114:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with fallback_hosts_use_default uses the production default fallback hosts (#RTN17b)" file="./spec/unit/realtime/client_spec.rb" time="32.635440"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c490f10 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c490e70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d145760 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d145378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d145210 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d1448d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d142830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d142420 @client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c490e70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c490e70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d145760 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d145378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d145210 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d1448d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d142830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d141de0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c490f10 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c490e70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d145760 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d145378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d145210 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d1448d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d142830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d142420 @client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c490e70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c490e70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d145760 @client=#&lt;Ably::Rest::Client:0x00007fef3cd4fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d145378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d145210 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d1448d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d142830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d141de0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c490f10 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:301:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with fallback_hosts_use_default sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="33.317092"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c491f50 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c531910 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c491eb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cefeb50 @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cefea60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cefe9c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cefe948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cefe830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cefe7e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c491eb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c491eb0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cefeb50 @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cefea60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cefe9c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cefe948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cefe830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cefe790 @client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c491f50 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c531910 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c491eb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cefeb50 @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cefea60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cefe9c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cefe948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cefe830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cefe7e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c491eb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;main.a.fallback.ably-realtime.com&quot;, &quot;main.b.fallback.ably-realtime.com&quot;, &quot;main.c.fallback.ably-realtime.com&quot;, &quot;main.d.fallback.ably-realtime.com&quot;, &quot;main.e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c491eb0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cefeb50 @client=#&lt;Ably::Rest::Client:0x00007fef3c531910 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cefea60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cefe9c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cefe948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cefe830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cefe790 @client=#&lt;Ably::Realtime::Client:0x00007fef3c491f50 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:297:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with custom fallback hosts configured uses the custom provided fallback hosts (#RSC15a)" file="./spec/unit/realtime/client_spec.rb" time="32.868825"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4dc000 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c552318 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4dbf60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cda47a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cda4570 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cda44f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cda42f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cda41b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cda4160 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4dbf60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4dbf60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cda47a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cda4570 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cda44f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cda42f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cda41b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cda40c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4dc000 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c552318 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4dbf60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cda47a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cda4570 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cda44f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cda42f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cda41b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cda4160 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4dbf60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4dbf60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cda47a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c552318 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cda4570 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cda44f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cda42f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cda41b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cda40c0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4dc000 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:286:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with custom fallback hosts configured sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="33.446598"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f5e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc28200 @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc28110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc27ff8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc27f80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc27e18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc27da0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4f5e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f5e60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc28200 @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc28110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc27ff8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc27f80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc27e18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc27d78 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f5e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc28200 @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc28110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc27ff8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc27f80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc27e18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc27da0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4f5e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo-a.foo.com&quot;, &quot;foo-b.foo.com&quot;, &quot;foo-c.foo.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4f5e60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc28200 @client=#&lt;Ably::Rest::Client:0x00007fef3c573ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc28110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc27ff8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc27f80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc27e18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc27d78 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f5f00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:282:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set without custom fallback hosts configured uses the default fallback hosts (#TBC, see https://github.com/ably/wiki/issues/361)" file="./spec/unit/realtime/client_spec.rb" time="34.739443"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c5108c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c510828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98d220 @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98d130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98d0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98d040 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98cf78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c98cf28 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c510828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c510828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98d220 @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98d130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98d0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98d040 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98cf78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c98cf00 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c5108c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c510828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98d220 @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98d130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98d0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98d040 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98cf78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c98cf28 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c510828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c510828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98d220 @client=#&lt;Ably::Rest::Client:0x00007fef3c5c4ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98d130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98d0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98d040 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98cf78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c98cf00 @client=#&lt;Ably::Realtime::Client:0x00007fef3c5108c8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:272:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set without custom fallback hosts configured sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="33.541109"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce90a10 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c926688 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce90970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d1ae8 @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d19f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d1980 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d1908 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d1840 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d17f0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce90970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce90970 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d1ae8 @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d19f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d1980 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d1908 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d1840 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d17c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce90a10 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c926688 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce90970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d1ae8 @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d19f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d1980 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d1908 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d1840 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d17f0 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce90970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=&quot;foo&quot;, @endpoint=&quot;foo&quot;, @fallback_hosts=[&quot;foo..a.fallback.ably-realtime.com&quot;, &quot;foo..b.fallback.ably-realtime.com&quot;, &quot;foo..c.fallback.ably-realtime.com&quot;, &quot;foo..d.fallback.ably-realtime.com&quot;, &quot;foo..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce90970 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d1ae8 @client=#&lt;Ably::Rest::Client:0x00007fef3c926688 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d19f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d1980 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d1908 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d1840 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d17c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce90a10 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:268:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments custom port when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="34.302655"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf74300 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=555, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf73ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b28a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b27b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b26c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b2600 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b25b0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf73ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=555, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf73ae0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b28a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b27b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b26c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b2600 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b2588 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf74300 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=555, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf73ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b28a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b27b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b26c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b2600 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b25b0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf73ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=555, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf73ae0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b28a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb67d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b27b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b26c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b2600 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b2588 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf74300 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:376:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments tls defaults to TLS" file="./spec/unit/realtime/client_spec.rb" time="37.567836"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d138218 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d137ef8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b1bd0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b1ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b1a68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b19f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8b18d8 @client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d137ef8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d137ef8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b1bd0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b1ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b1a68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b19f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8b18b0 @client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d138218 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d137ef8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b1bd0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b1ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b1a68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b19f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8b18d8 @client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d137ef8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3d137ef8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8b1bd0 @client=#&lt;Ably::Rest::Client:0x00007fef3cd07590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8b1ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8b1a68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8b19f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8b1928 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8b18b0 @client=#&lt;Ably::Realtime::Client:0x00007fef3d138218 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:203:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments tls set to false uses plain text" file="./spec/unit/realtime/client_spec.rb" time="38.413928"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec5b900 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc8a888 @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc8a748 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc8a6d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc8a658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc8a590 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc8a540 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ec5b900 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec5b900 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc8a888 @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc8a748 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc8a6d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc8a658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc8a590 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc8a518 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec5b900 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc8a888 @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc8a748 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc8a6d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc8a658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc8a590 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc8a540 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ec5b900 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ec5b900 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc8a888 @client=#&lt;Ably::Rest::Client:0x00007fef3cd27458 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc8a748 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc8a6d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc8a658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc8a590 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc8a518 @client=#&lt;Ably::Realtime::Client:0x00007fef3ec5bae0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:203:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments tls set to false uses HTTP" file="./spec/unit/realtime/client_spec.rb" time="33.967689"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce25828 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce25788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d19ebd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d19e838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d19e0e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d19da28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d19d7f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d19d780 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce25788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce25788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d19ebd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d19e838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d19e0e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d19da28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d19d7f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d19d758 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce25828 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce25788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d19ebd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d19e838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d19e0e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d19da28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d19d7f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d19d780 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce25788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @tls=false, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce25788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d19ebd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e44e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d19e838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d19e0e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d19da28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d19d7f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d19d758 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce25828 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:203:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments realtime_host when set without custom fallback hosts configured sets the realtime_host option" file="./spec/unit/realtime/client_spec.rb" time="0.001523"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments realtime_host when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="0.000735"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger default uses Ruby Logger" file="./spec/unit/realtime/client_spec.rb" time="33.693741"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b7db8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdc1378 @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdc1080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdc0f90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdc0ea0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdc0d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cdc0d38 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b7db8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b7db8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdc1378 @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdc1080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdc0f90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdc0ea0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdc0d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cdc0d10 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b7db8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdc1378 @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdc1080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdc0f90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdc0ea0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdc0d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cdc0d38 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b7db8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b7db8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdc1378 @client=#&lt;Ably::Rest::Client:0x00007fef3c55c818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdc1080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdc0f90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdc0ea0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdc0d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cdc0d10 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b7e58 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger default specifies Logger::WARN log level" file="./spec/unit/realtime/client_spec.rb" time="34.192843"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d1740 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d16a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc6d0d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc6cfe0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc6cf68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc6cef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc6ce28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc6cdd8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d16a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d16a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc6d0d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc6cfe0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc6cf68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc6cef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc6ce28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc6cdb0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d1740 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d16a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc6d0d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc6cfe0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc6cf68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc6cef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc6ce28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc6cdd8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d16a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4d16a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc6d0d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57d9a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc6cfe0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc6cf68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc6cef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc6ce28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc6cdb0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d1740 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger with custom logger and log_level sets the custom log level" file="./spec/unit/realtime/client_spec.rb" time="33.731948"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c97edb0 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c51aa08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c97e748 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c97e658 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c97e5e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c97e568 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c97e4a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c97e450 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c51aa08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c97edb0 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c51aa08 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c97e748 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c97e658 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c97e5e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c97e568 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c97e4a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c97e428 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c97edb0 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c51aa08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c97e748 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c97e658 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c97e5e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c97e568 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c97e4a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c97e450 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c51aa08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c97edb0 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c51aa08 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c97e748 @client=#&lt;Ably::Rest::Client:0x00007fef3c5ce9e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c97e658 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c97e5e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c97e568 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c97e4a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c97e428 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51aaa8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger with custom logger and log_level uses the custom logger" file="./spec/unit/realtime/client_spec.rb" time="34.634492"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf15148 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c8dac38 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf150a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8da260 @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8da170 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8da0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8da058 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d9f40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d9ef0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf150a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c8dac38 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf150a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8da260 @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8da170 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8da0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8da058 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d9f40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d9ea0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf15148 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c8dac38 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf150a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8da260 @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8da170 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8da0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8da058 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d9f40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d9ef0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf150a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007fef3c8dac38 @messages=[]&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf150a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8da260 @client=#&lt;Ably::Rest::Client:0x00007fef3c92fdc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8da170 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8da0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8da058 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d9f40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d9ea0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf15148 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger with log_level :none silences all logging with a NilLogger" file="./spec/unit/realtime/client_spec.rb" time="34.570526"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007fef3c5b7cb8&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfabb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b7998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b78a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b7830 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b77b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b76f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b76a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cfabb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007fef3c5b7cb8&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfabb98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b7998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b78a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b7830 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b77b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b76f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b7678 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007fef3c5b7cb8&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfabb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b7998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b78a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b7830 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b77b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b76f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b76a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cfabb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007fef3c5b7cb8&gt;, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cfabb98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b7998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc70640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b78a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b7830 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b77b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b76f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b7678 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfabeb8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments key only connects to the Ably service" file="./spec/unit/realtime/client_spec.rb" time="33.021647"><failure message="expected no Exception, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c48d360 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/shared/client_initializer_behaviour.rb:72:in `block (5 levels) in &lt;top (required)&gt;&apos;
  # ./spec/shared/client_initializer_behaviour.rb:72:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected no Exception, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c48d360 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/shared/client_initializer_behaviour.rb:72:in `block (5 levels) in &lt;top (required)&gt;&apos;
    # ./spec/shared/client_initializer_behaviour.rb:72:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/shared/client_initializer_behaviour.rb:72:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments key only uses basic auth" file="./spec/unit/realtime/client_spec.rb" time="33.830201"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c52fd40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52fca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3e3286d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3e327cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3e327870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3e326ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3e325cc8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3e3259f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c52fca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52fca0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3e3286d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3e327cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3e327870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3e326ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3e325cc8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3e325908 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c52fd40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52fca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3e3286d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3e327cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3e327870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3e326ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3e325cc8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3e3259f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c52fca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c52fca0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3e3286d0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ec0a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3e327cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3e327870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3e326ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3e325cc8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3e325908 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52fd40 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:76:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments custom TLS port when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="33.665442"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c479608 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=555, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c479568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cec8f00 @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cec8cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cec8c80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cec8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cec8aa0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cec8a50 @client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c479568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=555, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c479568 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cec8f00 @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cec8cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cec8c80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cec8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cec8aa0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cec8a28 @client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c479608 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=555, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c479568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cec8f00 @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cec8cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cec8c80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cec8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cec8aa0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cec8a50 @client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c479568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=555, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c479568 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cec8f00 @client=#&lt;Ably::Rest::Client:0x00007fef3c54c940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cec8cf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cec8c80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cec8be0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cec8aa0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cec8a28 @client=#&lt;Ably::Realtime::Client:0x00007fef3c479608 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:387:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with token_details sets the token" file="./spec/unit/realtime/client_spec.rb" time="33.884906"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c481c40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ca918 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ca8c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3ccc55c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3ccc52f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c481b00 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3ccc5460&gt;, @mon_data_owner_object_id=19260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3ccc4f10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c481ba0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ccc0ff0 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ccc0f00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ccc0e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ccc0de8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ccc0d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3ccc0cd0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c481ba0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ca918 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ca8c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3ccc55c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3ccc52f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c481b00 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3ccc5460&gt;, @mon_data_owner_object_id=19260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3ccc4f10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c481ba0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ccc0ff0 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ccc0f00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ccc0e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ccc0de8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ccc0d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3ccc0ca8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c481c40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ca918 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ca8c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3ccc55c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3ccc52f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c481b00 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3ccc5460&gt;, @mon_data_owner_object_id=19260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3ccc4f10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c481ba0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ccc0ff0 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ccc0f00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ccc0e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ccc0de8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ccc0d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3ccc0cd0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c481ba0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ca918 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ca8c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3ccc55c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3ccc52f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c481b00 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3ccc5460&gt;, @mon_data_owner_object_id=19260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3ccc4f10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c481ba0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3ccc0ff0 @client=#&lt;Ably::Rest::Client:0x00007fef3c56ca88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3ccc0f00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3ccc0e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3ccc0de8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3ccc0d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3ccc8660 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3ccc85c0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3ccc0ca8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c481c40 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:136:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments key_name and key_secret constructs a key" file="./spec/unit/realtime/client_spec.rb" time="34.031463"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b8718 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key_name=&gt;&quot;id&quot;, :key_secret=&gt;&quot;secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b8678 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a5a00 @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a5910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a5898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a5820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a5758 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9a5708 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b8678 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key_name=&gt;&quot;id&quot;, :key_secret=&gt;&quot;secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b8678 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a5a00 @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a5910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a5898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a5820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a5758 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9a56e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b8718 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key_name=&gt;&quot;id&quot;, :key_secret=&gt;&quot;secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b8678 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a5a00 @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a5910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a5898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a5820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a5758 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9a5708 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b8678 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key_name=&gt;&quot;id&quot;, :key_secret=&gt;&quot;secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c4b8678 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9a5a00 @client=#&lt;Ably::Rest::Client:0x00007fef3c58d710 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9a5910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9a5898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9a5820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9a5758 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9a56e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8718 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:84:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with token_params configures default_token_params" file="./spec/unit/realtime/client_spec.rb" time="35.490378"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4fe380 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf37720 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf376d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dfcd8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dfb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4fe240 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dfc60&gt;, @mon_data_owner_object_id=19440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dfa30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4fe2e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={:ttl=&gt;777, :client_id=&gt;&quot;john&quot;}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c3560 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c34e8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8dcdd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8dcce0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8dcc68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8dcbf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8dcb28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8dcad8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4fe2e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf37720 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf376d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dfcd8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dfb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4fe240 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dfc60&gt;, @mon_data_owner_object_id=19440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dfa30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4fe2e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8dcdd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8dcce0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8dcc68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8dcbf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8dcb28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={:ttl=&gt;777, :client_id=&gt;&quot;john&quot;}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c3560 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c34e8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8dcab0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4fe380 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf37720 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf376d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dfcd8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dfb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4fe240 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dfc60&gt;, @mon_data_owner_object_id=19440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dfa30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4fe2e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={:ttl=&gt;777, :client_id=&gt;&quot;john&quot;}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c3560 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c34e8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8dcdd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8dcce0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8dcc68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8dcbf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8dcb28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8dcad8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4fe2e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf37720 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf376d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dfcd8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dfb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4fe240 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dfc60&gt;, @mon_data_owner_object_id=19440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dfa30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4fe2e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8dcdd0 @client=#&lt;Ably::Rest::Client:0x00007fef3c84e120 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8dcce0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8dcc68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8dcbf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8dcb28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={:ttl=&gt;777, :client_id=&gt;&quot;john&quot;}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c3560 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c34e8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8dcab0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4fe380 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:144:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client when :transport_params option is passed converts options to strings" file="./spec/unit/realtime/client_spec.rb" time="34.133872"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce5b040 @transport_params={&quot;heartbeats&quot;=&gt;&quot;true&quot;, &quot;v&quot;=&gt;&quot;1.0&quot;, &quot;extra_param&quot;=&gt;&quot;extra_param&quot;}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce5adc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b2c68 @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b2b78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b2920 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b26f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b2628 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce5adc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce5adc0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b2c68 @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b2b78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b2920 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b26f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b2448 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce5b040 @transport_params={&quot;heartbeats&quot;=&gt;&quot;true&quot;, &quot;v&quot;=&gt;&quot;1.0&quot;, &quot;extra_param&quot;=&gt;&quot;extra_param&quot;}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce5adc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b2c68 @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b2b78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b2920 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b26f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b2628 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce5adc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3ce5adc0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b2c68 @client=#&lt;Ably::Rest::Client:0x00007fef3cc7eec0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b2b78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b2a10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b2920 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b26f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b2448 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce5b040 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:40:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client push #push returns a Push object" file="./spec/unit/realtime/client_spec.rb" time="34.831633"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf7c320 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf7c280 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8f0358 @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8f0240 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8f01c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8f0150 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8f0010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c93ffc0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf7c280 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf7c280 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8f0358 @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8f0240 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8f01c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8f0150 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8f0010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c93ff98 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf7c320 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf7c280 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8f0358 @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8f0240 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8f01c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8f0150 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8f0010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c93ffc0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf7c280 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3cf7c280 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8f0358 @client=#&lt;Ably::Rest::Client:0x00007fef3ccfe760 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8f0240 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8f01c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8f0150 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8f0010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c93ff98 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf7c320 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:52:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client push #device is not supported and raises an exception" file="./spec/unit/realtime/client_spec.rb" time="33.721834"><failure message="expected Ably::Exceptions::PushNotificationsNotSupported, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3ec20e68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/client_spec.rb:48:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/client_spec.rb:48:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected Ably::Exceptions::PushNotificationsNotSupported, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3ec20e68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/client_spec.rb:48:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/client_spec.rb:48:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/client_spec.rb:48:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels [] creates a channel" file="./spec/unit/rest/channels_spec.rb" time="0.001742"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#fetch retrieves a channel if it exists" file="./spec/unit/rest/channels_spec.rb" time="0.000693"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#fetch calls the block if channel is missing" file="./spec/unit/rest/channels_spec.rb" time="0.001184"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists hash will reuse a channel object if it exists (RSN3a)" file="./spec/unit/rest/channels_spec.rb" time="0.001037"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists hash is expected to be a kind of Hash" file="./spec/unit/rest/channels_spec.rb" time="0.000510"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists ChannelOptions object will reuse a channel object if it exists (RSN3a)" file="./spec/unit/rest/channels_spec.rb" time="0.000901"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists ChannelOptions object is expected to be a kind of Ably::Models::ChannelOptions" file="./spec/unit/rest/channels_spec.rb" time="0.000516"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists with new channel_options modes ChannelOptions object will update channel with provided options modes (RSN3c)" file="./spec/unit/rest/channels_spec.rb" time="0.000713"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists with new channel_options modes ChannelOptions object is expected to be a kind of Ably::Models::ChannelOptions" file="./spec/unit/rest/channels_spec.rb" time="0.000937"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists with new channel_options modes hash will update channel with provided options modes (RSN3c)" file="./spec/unit/rest/channels_spec.rb" time="0.000687"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when an existing channel exists with new channel_options modes hash is expected to be a kind of Hash" file="./spec/unit/rest/channels_spec.rb" time="0.000801"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when channel doesn&apos;t exist ChannelOptions object is expected to be a kind of Ably::Models::ChannelOptions" file="./spec/unit/rest/channels_spec.rb" time="0.000700"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when channel doesn&apos;t exist ChannelOptions object creates a channel (RSN3a)" file="./spec/unit/rest/channels_spec.rb" time="0.000817"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when channel doesn&apos;t exist hash is expected to be a kind of Hash" file="./spec/unit/rest/channels_spec.rb" time="0.000771"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels#get when channel doesn&apos;t exist hash creates a channel (RSN3a)" file="./spec/unit/rest/channels_spec.rb" time="0.000800"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels destroying channels #release releases the channel resoures" file="./spec/unit/rest/channels_spec.rb" time="0.001007"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels is Enumerable provides #length" file="./spec/unit/rest/channels_spec.rb" time="0.000813"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels is Enumerable allows enumeration" file="./spec/unit/rest/channels_spec.rb" time="0.000912"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels is Enumerable #each returns an enumerator" file="./spec/unit/rest/channels_spec.rb" time="0.000914"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels is Enumerable #each yields each channel" file="./spec/unit/rest/channels_spec.rb" time="0.000946"></testcase>
<testcase classname="spec.unit.realtime.realtime_spec" name="Ably::Realtime constructor returns an Ably::Realtime::Client" file="./spec/unit/realtime/realtime_spec.rb" time="34.419037"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c583490 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c47f648 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8bdac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8bd9d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8bd958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8bd8e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8bd818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8bd7c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c47f648 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c47f648 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8bdac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8bd9d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8bd958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8bd8e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8bd818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8bd7a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c583490 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c47f648 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8bdac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8bd9d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8bd958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8bd8e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8bd818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8bd7c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c47f648 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;app.key:secret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007fef3c47f648 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8bdac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c583490 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8bd9d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8bd958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8bd8e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8bd818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8bd7a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47f6e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./lib/ably/realtime.rb:57:in `new&apos;
./lib/ably/realtime.rb:57:in `new&apos;
./spec/unit/realtime/realtime_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange invalid attributes raises an argument error" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000802"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#resumed (#TH4) is false when ommitted" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000572"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#resumed (#TH4) is true when provided" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000457"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#current (#TH1) is an attribute" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000554"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#current (#TH1) is required" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000691"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#previous (#TH2) is an attribute" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000443"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#previous (#TH2) is required" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000471"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#reason (#TH3) is an attribute" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000461"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#reason (#TH3) is not required" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000459"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#event (#TH5) is an attribute" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000462"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#event (#TH5) is not required" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000440"></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel callbacks are supported for valid STATE events" file="./spec/unit/realtime/channel_spec.rb" time="34.435450"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c482280 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce083e0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce08390 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cccd688 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cccd520 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c482140 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cccd610&gt;, @mon_data_owner_object_id=20300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cccd3b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4821e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc602e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc60268 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cccb1a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cccb0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cccb018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cccafa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cccae88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cccae38 @client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4821e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce083e0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce08390 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cccd688 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cccd520 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c482140 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cccd610&gt;, @mon_data_owner_object_id=20300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cccd3b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4821e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cccb1a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cccb0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cccb018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cccafa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cccae88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc602e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc60268 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cccae10 @client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c482280 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce083e0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce08390 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cccd688 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cccd520 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c482140 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cccd610&gt;, @mon_data_owner_object_id=20300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cccd3b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4821e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc602e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc60268 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cccb1a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cccb0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cccb018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cccafa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cccae88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cccae38 @client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4821e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce083e0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce08390 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cccd688 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cccd520 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c482140 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cccd610&gt;, @mon_data_owner_object_id=20300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cccd3b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4821e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cccb1a8 @client=#&lt;Ably::Rest::Client:0x00007fef3ccb5f10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cccb0b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cccb018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cccafa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cccae88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc602e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc60268 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cccae10 @client=#&lt;Ably::Realtime::Client:0x00007fef3c482280 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:123:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel callbacks fail with unacceptable STATE event names" file="./spec/unit/realtime/channel_spec.rb" time="33.366287"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c478ac8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:128:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:128:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c478ac8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:128:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:128:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/channel_spec.rb:128:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as Integer raises an argument error" file="./spec/unit/realtime/channel_spec.rb" time="33.894849"><failure message="expected ArgumentError with message matching /must be a String/, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c4f9100 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:56:in `block (5 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:56:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected ArgumentError with message matching /must be a String/, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c4f9100 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:56:in `block (5 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:56:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/channel_spec.rb:56:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as ASCII_8BIT string gets converted to UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="34.575142"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3d6c0 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3d670 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c939a30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9398c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cfa1af8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9399b8&gt;, @mon_data_owner_object_id=20840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c939788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cfa1b98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93c870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93c7f8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c938090 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c937fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c937f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c937eb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c937de8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c937d98 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cfa1b98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3d6c0 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3d670 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c939a30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9398c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cfa1af8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9399b8&gt;, @mon_data_owner_object_id=20840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c939788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cfa1b98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c938090 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c937fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c937f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c937eb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c937de8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93c870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93c7f8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c937d70 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3d6c0 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3d670 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c939a30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9398c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cfa1af8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9399b8&gt;, @mon_data_owner_object_id=20840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c939788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cfa1b98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93c870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93c7f8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c938090 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c937fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c937f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c937eb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c937de8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c937d98 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cfa1b98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3d6c0 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3d670 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c939a30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9398c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cfa1af8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9399b8&gt;, @mon_data_owner_object_id=20840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c939788&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cfa1b98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c938090 @client=#&lt;Ably::Rest::Client:0x00007fef3c585b50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c937fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c937f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c937eb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c937de8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93c870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93c7f8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c937d70 @client=#&lt;Ably::Realtime::Client:0x00007fef3cfa1c38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:44:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as ASCII_8BIT string is compatible with original encoding" file="./spec/unit/realtime/channel_spec.rb" time="33.187580"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3e347260 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d1110f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111050 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c859a70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c859908 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3e344c40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8599f8&gt;, @mon_data_owner_object_id=21020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8597c8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3e346860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c85d1e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c85d170 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c856b90 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c856a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c856988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c856910 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c856848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8567f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3e346860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d1110f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111050 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c859a70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c859908 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3e344c40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8599f8&gt;, @mon_data_owner_object_id=21020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8597c8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3e346860 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c856b90 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c856a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c856988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c856910 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c856848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c85d1e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c85d170 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8567d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3e347260 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d1110f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111050 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c859a70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c859908 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3e344c40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8599f8&gt;, @mon_data_owner_object_id=21020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8597c8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3e346860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c85d1e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c85d170 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c856b90 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c856a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c856988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c856910 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c856848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8567f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3e346860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d1110f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111050 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c859a70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c859908 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3e344c40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8599f8&gt;, @mon_data_owner_object_id=21020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8597c8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3e346860 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c856b90 @client=#&lt;Ably::Rest::Client:0x00007fef3c8461a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c856a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c856988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c856910 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c856848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c85d1e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c85d170 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8567d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3e347260 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:48:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as SHIFT_JIS string is compatible with original encoding" file="./spec/unit/realtime/channel_spec.rb" time="33.717990"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c518708 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3eb2d998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3eb2d858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8daa08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8da5a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5185c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8da7b0&gt;, @mon_data_owner_object_id=21200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8da288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c518668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8dfd78 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8dfc88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6188 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6020 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d5fa8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d5ee0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d5e90 @client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c518668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3eb2d998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3eb2d858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8daa08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8da5a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5185c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8da7b0&gt;, @mon_data_owner_object_id=21200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8da288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c518668 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6188 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6020 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d5fa8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d5ee0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8dfd78 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8dfc88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d5e68 @client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c518708 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3eb2d998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3eb2d858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8daa08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8da5a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5185c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8da7b0&gt;, @mon_data_owner_object_id=21200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8da288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c518668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8dfd78 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8dfc88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6188 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6020 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d5fa8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d5ee0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d5e90 @client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c518668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3eb2d998 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3eb2d858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8daa08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8da5a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5185c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8da7b0&gt;, @mon_data_owner_object_id=21200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8da288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c518668 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6188 @client=#&lt;Ably::Rest::Client:0x00007fef3cc75b40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6020 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d5fa8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d5ee0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8dfd78 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8dfc88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d5e68 @client=#&lt;Ably::Realtime::Client:0x00007fef3c518708 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:36:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as SHIFT_JIS string gets converted to UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="33.151732"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c453f20 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef424c7be0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef424c7910 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cee1690 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cee14b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c453de0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cee1618&gt;, @mon_data_owner_object_id=21380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cee1280&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c453e80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cee8fd0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cee8e40 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf99f10 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf99d08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf99c90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf99c18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf99a38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cf99998 @client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c453e80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef424c7be0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef424c7910 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cee1690 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cee14b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c453de0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cee1618&gt;, @mon_data_owner_object_id=21380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cee1280&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c453e80 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf99f10 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf99d08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf99c90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf99c18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf99a38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cee8fd0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cee8e40 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cf99970 @client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c453f20 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef424c7be0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef424c7910 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cee1690 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cee14b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c453de0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cee1618&gt;, @mon_data_owner_object_id=21380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cee1280&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c453e80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cee8fd0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cee8e40 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf99f10 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf99d08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf99c90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf99c18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf99a38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cf99998 @client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c453e80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef424c7be0 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef424c7910 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cee1690 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cee14b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c453de0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cee1618&gt;, @mon_data_owner_object_id=21380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cee1280&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c453e80 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cf99f10 @client=#&lt;Ably::Rest::Client:0x00007fef3ccf48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cf99d08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cf99c90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cf99c18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cf99a38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cee8fd0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cee8e40 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cf99970 @client=#&lt;Ably::Realtime::Client:0x00007fef3c453f20 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:32:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as Nil raises an argument error" file="./spec/unit/realtime/channel_spec.rb" time="34.386893"><failure message="expected ArgumentError with message matching /must be a String/, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c488fe0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:64:in `block (5 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:64:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected ArgumentError with message matching /must be a String/, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c488fe0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:64:in `block (5 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:64:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/channel_spec.rb:64:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as UTF_8 string remains as UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="33.530930"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d8680 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c569748 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c502e08 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c502db8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc3e848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc3e6e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4d8540 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc3e7d0&gt;, @mon_data_owner_object_id=21740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc3e5a0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4d85e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc20988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc20910 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc3cbd8 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc3c9a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc3c728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc3c688 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc3c570 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc3c4f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d85e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c502e08 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c502db8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc3e848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc3e6e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4d8540 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc3e7d0&gt;, @mon_data_owner_object_id=21740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc3e5a0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4d85e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc3cbd8 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc3c9a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc3c728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc3c688 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc3c570 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc20988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc20910 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc3c4d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4d8680 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c569748 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c502e08 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c502db8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc3e848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc3e6e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4d8540 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc3e7d0&gt;, @mon_data_owner_object_id=21740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc3e5a0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4d85e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc20988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc20910 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc3cbd8 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc3c9a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc3c728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc3c688 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc3c570 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc3c4f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4d85e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c502e08 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c502db8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc3e848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc3e6e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4d8540 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc3e7d0&gt;, @mon_data_owner_object_id=21740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc3e5a0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4d85e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc3cbd8 @client=#&lt;Ably::Rest::Client:0x00007fef3c569748 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc3c9a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc3c728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc3c688 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc3c570 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc20988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc20910 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc3c4d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4d8680 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:24:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as UTF_8 string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="33.623890"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3f2e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3f290 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c940f60 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c940df8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cdf0010 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c940ee8&gt;, @mon_data_owner_object_id=21920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c940cb8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cdf00b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c944638 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9445c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8ff5b0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8ff4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8ff448 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8ff3a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8ff2e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8ff290 @client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cdf00b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3f2e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3f290 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c940f60 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c940df8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cdf0010 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c940ee8&gt;, @mon_data_owner_object_id=21920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c940cb8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cdf00b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8ff5b0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8ff4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8ff448 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8ff3a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8ff2e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c944638 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9445c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8ff268 @client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3f2e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3f290 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c940f60 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c940df8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cdf0010 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c940ee8&gt;, @mon_data_owner_object_id=21920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c940cb8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cdf00b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c944638 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9445c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8ff5b0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8ff4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8ff448 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8ff3a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8ff2e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8ff290 @client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cdf00b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf3f2e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf3f290 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c940f60 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c940df8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cdf0010 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c940ee8&gt;, @mon_data_owner_object_id=21920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c940cb8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cdf00b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8ff5b0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5899d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8ff4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8ff448 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8ff3a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8ff2e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c944638 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9445c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8ff268 @client=#&lt;Ably::Realtime::Client:0x00007fef3cdf01f0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:20:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as SHIFT_JIS string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="34.094755"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf51378 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d111e10 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111dc0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5bae90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5bad28 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf7fb60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5bae18&gt;, @mon_data_owner_object_id=22100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5babe8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf7fc00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5bd398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5bd2d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b94f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b93d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b92e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b9248 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b9180 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b9130 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf7fc00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d111e10 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111dc0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5bae90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5bad28 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf7fb60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5bae18&gt;, @mon_data_owner_object_id=22100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5babe8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf7fc00 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b94f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b93d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b92e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b9248 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b9180 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5bd398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5bd2d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b9108 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf51378 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d111e10 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111dc0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5bae90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5bad28 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf7fb60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5bae18&gt;, @mon_data_owner_object_id=22100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5babe8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf7fc00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5bd398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5bd2d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b94f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b93d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b92e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b9248 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b9180 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5b9130 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf7fc00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d111e10 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d111dc0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5bae90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5bad28 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf7fb60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5bae18&gt;, @mon_data_owner_object_id=22100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5babe8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf7fc00 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5b94f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8494e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5b93d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5b92e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5b9248 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5b9180 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c5bd398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5bd2d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5b9108 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf51378 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as ASCII_8BIT string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="34.307566"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d13de98 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e952e48 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e952df8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c98e418 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c98e2b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3d13ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c98e3a0&gt;, @mon_data_owner_object_id=22280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c98e170&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3d13d178 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9505c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c950550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98ad90 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98aca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98ac28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98ab88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98aac0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c98aa48 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d13d178 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e952e48 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e952df8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c98e418 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c98e2b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3d13ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c98e3a0&gt;, @mon_data_owner_object_id=22280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c98e170&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3d13d178 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98ad90 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98aca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98ac28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98ab88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98aac0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9505c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c950550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c98aa20 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3d13de98 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e952e48 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e952df8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c98e418 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c98e2b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3d13ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c98e3a0&gt;, @mon_data_owner_object_id=22280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c98e170&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3d13d178 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9505c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c950550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98ad90 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98aca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98ac28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98ab88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98aac0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c98aa48 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3d13d178 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e952e48 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e952df8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c98e418 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c98e2b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3d13ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c98e3a0&gt;, @mon_data_owner_object_id=22280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c98e170&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3d13d178 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c98ad90 @client=#&lt;Ably::Rest::Client:0x00007fef3cc78c00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c98aca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c98ac28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c98ab88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c98aac0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9505c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c950550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c98aa20 @client=#&lt;Ably::Realtime::Client:0x00007fef3d13de98 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as Integer raises an argument error" file="./spec/unit/realtime/channel_spec.rb" time="33.485969"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c528680 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e36ccb8 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e36cc68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3d0453b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3d045220 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5280e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3d045338&gt;, @mon_data_owner_object_id=22460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d044ff0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c528180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef425b1c40 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef439ad9d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d06d568 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d06cc58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d06c910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d06c460 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d06c190 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d06c140 @client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c528180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e36ccb8 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e36cc68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3d0453b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3d045220 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5280e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3d045338&gt;, @mon_data_owner_object_id=22460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d044ff0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c528180 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d06d568 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d06cc58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d06c910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d06c460 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d06c190 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef425b1c40 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef439ad9d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d06c118 @client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c528680 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e36ccb8 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e36cc68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3d0453b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3d045220 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5280e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3d045338&gt;, @mon_data_owner_object_id=22460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d044ff0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c528180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef425b1c40 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef439ad9d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d06d568 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d06cc58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d06c910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d06c460 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d06c190 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d06c140 @client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c528180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e36ccb8 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e36cc68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3d0453b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3d045220 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c5280e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3d045338&gt;, @mon_data_owner_object_id=22460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d044ff0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c528180 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d06d568 @client=#&lt;Ably::Rest::Client:0x00007fef3c8e9ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d06cc58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d06c910 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d06c460 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d06c190 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef425b1c40 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef439ad9d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d06c118 @client=#&lt;Ably::Realtime::Client:0x00007fef3c528680 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as UTF_8 string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="33.272016"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c47eb08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4a1b30 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4a1ae0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cddf0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cdde478 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c47e9c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cdde8b0&gt;, @mon_data_owner_object_id=22640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cdddde8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c47ea68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cdc4708 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cdc4668 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdd63e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdd6250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdd6188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdd60c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdd5eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cdd5e68 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c47ea68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4a1b30 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4a1ae0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cddf0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cdde478 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c47e9c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cdde8b0&gt;, @mon_data_owner_object_id=22640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cdddde8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c47ea68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdd63e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdd6250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdd6188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdd60c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdd5eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cdc4708 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cdc4668 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cdd5df0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c47eb08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4a1b30 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4a1ae0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cddf0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cdde478 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c47e9c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cdde8b0&gt;, @mon_data_owner_object_id=22640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cdddde8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c47ea68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cdc4708 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cdc4668 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdd63e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdd6250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdd6188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdd60c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdd5eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cdd5e68 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c47ea68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4a1b30 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4a1ae0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cddf0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cdde478 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c47e9c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cdde8b0&gt;, @mon_data_owner_object_id=22640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cdddde8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c47ea68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cdd63e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c549d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cdd6250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cdd6188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cdd60c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cdd5eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cdc4708 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cdc4668 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cdd5df0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c47eb08 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as Nil is permitted" file="./spec/unit/realtime/channel_spec.rb" time="33.248251"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c484bc0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c569108 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c509618 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c5095c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9c17a0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9c1638 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c484a80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9c1728&gt;, @mon_data_owner_object_id=22820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c9c14f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c484b20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9c4158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9c40e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9df778 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9df688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9df610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9df598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9df4d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9df458 @client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c484b20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c509618 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c5095c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9c17a0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9c1638 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c484a80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9c1728&gt;, @mon_data_owner_object_id=22820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c9c14f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c484b20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9df778 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9df688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9df610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9df598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9df4d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9c4158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9c40e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9df430 @client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c484bc0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c569108 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c509618 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c5095c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9c17a0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9c1638 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c484a80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9c1728&gt;, @mon_data_owner_object_id=22820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c9c14f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c484b20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9c4158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9c40e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9df778 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9df688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9df610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9df598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9df4d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c9df458 @client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c484b20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c509618 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c5095c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c9c17a0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c9c1638 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c484a80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c9c1728&gt;, @mon_data_owner_object_id=22820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c9c14f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c484b20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9df778 @client=#&lt;Ably::Rest::Client:0x00007fef3c569108 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c9df688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c9df610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9df598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c9df4d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9c4158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9c40e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c9df430 @client=#&lt;Ably::Realtime::Client:0x00007fef3c484bc0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with a multiple duplicate event name arguments subscribes that block to all of those unique event names once" file="./spec/unit/realtime/channel_spec.rb" time="34.234750"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b5838 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c588850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce06ea0 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce06e50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dd0c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dcf10 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b56f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dd000&gt;, @mon_data_owner_object_id=23000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dcc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b5798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c2e80 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c2db8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6c00 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6a20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d69a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d68e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d6890 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b5798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce06ea0 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce06e50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dd0c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dcf10 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b56f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dd000&gt;, @mon_data_owner_object_id=23000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dcc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b5798 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6c00 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6a20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d69a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d68e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c2e80 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c2db8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d6868 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b5838 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c588850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce06ea0 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce06e50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dd0c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dcf10 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b56f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dd000&gt;, @mon_data_owner_object_id=23000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dcc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b5798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c2e80 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c2db8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6c00 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6a20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d69a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d68e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c8d6890 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b5798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ce06ea0 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ce06e50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c8dd0c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8dcf10 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b56f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8dd000&gt;, @mon_data_owner_object_id=23000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c8dcc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b5798 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c8d6c00 @client=#&lt;Ably::Rest::Client:0x00007fef3c588850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c8d6a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c8d6a20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c8d69a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c8d68e0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c8c2e80 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c8c2db8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c8d6868 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b5838 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with no event name specified subscribes the provided block to all events" file="./spec/unit/realtime/channel_spec.rb" time="34.347631"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d0e3498 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d0e3448 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5ac390 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5abda0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4f8160 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5ac250&gt;, @mon_data_owner_object_id=23180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5ab120&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4f8200 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c590640 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5905c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5a7ac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5a79d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5a7958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5a78e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5a7818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5a77c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4f8200 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d0e3498 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d0e3448 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5ac390 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5abda0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4f8160 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5ac250&gt;, @mon_data_owner_object_id=23180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5ab120&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4f8200 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5a7ac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5a79d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5a7958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5a78e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5a7818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c590640 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5905c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5a77a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d0e3498 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d0e3448 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5ac390 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5abda0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4f8160 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5ac250&gt;, @mon_data_owner_object_id=23180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5ab120&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4f8200 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c590640 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5905c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5a7ac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5a79d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5a7958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5a78e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5a7818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c5a77c8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4f8200 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d0e3498 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d0e3448 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c5ac390 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c5abda0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4f8160 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c5ac250&gt;, @mon_data_owner_object_id=23180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c5ab120&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4f8200 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c5a7ac0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8484a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c5a79d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c5a7958 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c5a78e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c5a7818 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c590640 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c5905c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c5a77a0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4f82a0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe without a block raises an invalid ArgumentError" file="./spec/unit/realtime/channel_spec.rb" time="38.662115"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf16188 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e957b78 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e957b28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc470d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc46f20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf15d28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc47038&gt;, @mon_data_owner_object_id=23360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc46de0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf15e68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9f1158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9f0fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc44608 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc44518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc44478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc443b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc43d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc43c58 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf15e68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e957b78 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e957b28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc470d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc46f20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf15d28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc47038&gt;, @mon_data_owner_object_id=23360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc46de0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf15e68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc44608 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc44518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc44478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc443b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc43d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9f1158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9f0fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc43be0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3cf16188 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e957b78 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e957b28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc470d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc46f20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf15d28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc47038&gt;, @mon_data_owner_object_id=23360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc46de0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf15e68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9f1158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9f0fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc44608 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc44518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc44478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc443b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc43d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc43c58 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3cf15e68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e957b78 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e957b28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc470d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc46f20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3cf15d28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc47038&gt;, @mon_data_owner_object_id=23360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc46de0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3cf15e68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc44608 @client=#&lt;Ably::Rest::Client:0x00007fef3cc77940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc44518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc44478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc443b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc43d20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c9f1158 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9f0fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc43be0 @client=#&lt;Ably::Realtime::Client:0x00007fef3cf16188 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with a single event name subscribes that block to matching events" file="./spec/unit/realtime/channel_spec.rb" time="36.581471"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c45dc00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ceb21d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ceb2188 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cfd7d38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cfd7888 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c45dac0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cfd7a18&gt;, @mon_data_owner_object_id=23540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cfd76f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c45db60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cfc16a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cfc1498 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfee358 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfee060 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfedef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfedd68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfecd50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cfecb98 @client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c45db60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ceb21d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ceb2188 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cfd7d38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cfd7888 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c45dac0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cfd7a18&gt;, @mon_data_owner_object_id=23540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cfd76f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c45db60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfee358 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfee060 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfedef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfedd68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfecd50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cfc16a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cfc1498 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cfec5d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c45dc00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ceb21d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ceb2188 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cfd7d38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cfd7888 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c45dac0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cfd7a18&gt;, @mon_data_owner_object_id=23540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cfd76f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c45db60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cfc16a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cfc1498 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfee358 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfee060 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfedef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfedd68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfecd50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cfecb98 @client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c45db60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3ceb21d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3ceb2188 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cfd7d38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cfd7888 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c45dac0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cfd7a18&gt;, @mon_data_owner_object_id=23540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cfd76f8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c45db60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cfee358 @client=#&lt;Ably::Rest::Client:0x00007fef3c53e610 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cfee060 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cfedef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cfedd68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cfecd50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cfc16a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cfc1498 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cfec5d0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c45dc00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with a multiple event name arguments subscribes that block to all of those event names" file="./spec/unit/realtime/channel_spec.rb" time="34.192301"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4642f8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e7a90 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e7a40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc61a50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc618c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4641b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc619b0&gt;, @mon_data_owner_object_id=23720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc61780&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c464258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc653f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc65308 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc88470 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc88380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc88308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc88290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc881c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc88178 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c464258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e7a90 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e7a40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc61a50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc618c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4641b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc619b0&gt;, @mon_data_owner_object_id=23720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc61780&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c464258 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc88470 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc88380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc88308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc88290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc881c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc653f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc65308 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc88150 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4642f8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e7a90 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e7a40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc61a50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc618c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4641b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc619b0&gt;, @mon_data_owner_object_id=23720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc61780&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c464258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc653f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc65308 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc88470 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc88380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc88308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc88290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc881c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cc88178 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c464258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4e7a90 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4e7a40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cc61a50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cc618c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4641b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cc619b0&gt;, @mon_data_owner_object_id=23720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cc61780&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c464258 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cc88470 @client=#&lt;Ably::Rest::Client:0x00007fef3c55d998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cc88380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cc88308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cc88290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cc881c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cc653f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cc65308 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cc88150 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4642f8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with no event name specified unsubscribes that block from all events" file="./spec/unit/realtime/channel_spec.rb" time="34.869636"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c488540 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cd9e9e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cd9e990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c947018 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c946d20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c488400 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c946f50&gt;, @mon_data_owner_object_id=23900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c946be0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4884a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c949750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9496d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9429a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c942590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c942518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9424a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c942388 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c942338 @client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4884a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cd9e9e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cd9e990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c947018 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c946d20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c488400 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c946f50&gt;, @mon_data_owner_object_id=23900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c946be0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4884a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9429a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c942590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c942518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9424a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c942388 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c949750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9496d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c942310 @client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c488540 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cd9e9e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cd9e990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c947018 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c946d20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c488400 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c946f50&gt;, @mon_data_owner_object_id=23900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c946be0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4884a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c949750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9496d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9429a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c942590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c942518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9424a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c942388 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c942338 @client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4884a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cd9e9e0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cd9e990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c947018 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c946d20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c488400 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c946f50&gt;, @mon_data_owner_object_id=23900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c946be0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4884a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9429a0 @client=#&lt;Ably::Rest::Client:0x00007fef3c57cfa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c942590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c942518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c9424a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c942388 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c949750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c9496d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c942310 @client=#&lt;Ably::Realtime::Client:0x00007fef3c488540 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with no block argument unsubscribes all blocks for the event name argument" file="./spec/unit/realtime/channel_spec.rb" time="34.037430"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf34390 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf34340 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c881d68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c881c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b8a38 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c881cf0&gt;, @mon_data_owner_object_id=24080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c881a98&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b8ad8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c885030 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c884fb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c82e9d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c82e8e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c82e870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c82e7f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c82e730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c82e6e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b8ad8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf34390 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf34340 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c881d68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c881c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b8a38 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c881cf0&gt;, @mon_data_owner_object_id=24080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c881a98&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b8ad8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c82e9d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c82e8e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c82e870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c82e7f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c82e730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c885030 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c884fb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c82e6b8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf34390 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf34340 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c881d68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c881c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b8a38 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c881cf0&gt;, @mon_data_owner_object_id=24080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c881a98&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b8ad8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c885030 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c884fb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c82e9d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c82e8e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c82e870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c82e7f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c82e730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c82e6e0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c4b8ad8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3cf34390 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3cf34340 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c881d68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c881c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c4b8a38 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c881cf0&gt;, @mon_data_owner_object_id=24080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c881a98&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c4b8ad8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c82e9d8 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cc6e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c82e8e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c82e870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c82e7f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c82e730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c885030 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c884fb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c82e6b8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c4b8b78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with a non-matching event name argument has no effect" file="./spec/unit/realtime/channel_spec.rb" time="34.248329"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c52a340 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef402dca30 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef402dc9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c938108 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c937c30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c529e40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c938018&gt;, @mon_data_owner_object_id=24260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c937078&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c52a2a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93a4d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93a458 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9352f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c935200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c935188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c935110 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c935048 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c934ff8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c52a2a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef402dca30 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef402dc9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c938108 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c937c30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c529e40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c938018&gt;, @mon_data_owner_object_id=24260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c937078&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c52a2a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9352f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c935200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c935188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c935110 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c935048 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93a4d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93a458 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c934fd0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c52a340 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef402dca30 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef402dc9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c938108 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c937c30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c529e40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c938018&gt;, @mon_data_owner_object_id=24260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c937078&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c52a2a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93a4d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93a458 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9352f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c935200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c935188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c935110 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c935048 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c934ff8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c52a2a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef402dca30 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef402dc9e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c938108 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c937c30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c529e40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c938018&gt;, @mon_data_owner_object_id=24260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c937078&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c52a2a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c9352f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c92c308 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c935200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c935188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c935110 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c935048 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c93a4d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c93a458 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c934fd0 @client=#&lt;Ably::Realtime::Client:0x00007fef3c52a340 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with a single event name argument unsubscribes the provided block with the matching event name" file="./spec/unit/realtime/channel_spec.rb" time="34.570194"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c51ae68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e331aa0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e331a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef425bbc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef439ecae8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c51ad28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef439ad9b0&gt;, @mon_data_owner_object_id=24440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d03fed8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c51adc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3edb74e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3edb65c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d03bd38 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d03b888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d03b7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d03b658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d03b3b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d03b1f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c51adc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e331aa0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e331a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef425bbc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef439ecae8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c51ad28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef439ad9b0&gt;, @mon_data_owner_object_id=24440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d03fed8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c51adc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d03bd38 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d03b888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d03b7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d03b658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d03b3b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3edb74e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3edb65c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d03b130 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c51ae68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e331aa0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e331a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef425bbc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef439ecae8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c51ad28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef439ad9b0&gt;, @mon_data_owner_object_id=24440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d03fed8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c51adc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3edb74e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3edb65c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d03bd38 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d03b888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d03b7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d03b658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d03b3b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3d03b1f8 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c51adc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3e331aa0 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3e331a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef425bbc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef439ecae8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c51ad28 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef439ad9b0&gt;, @mon_data_owner_object_id=24440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3d03fed8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c51adc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3d03bd38 @client=#&lt;Ably::Rest::Client:0x00007fef3c8ea7a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3d03b888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3d03b7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3d03b658 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3d03b3b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3edb74e8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3edb65c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3d03b130 @client=#&lt;Ably::Realtime::Client:0x00007fef3c51ae68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with multiple event name arguments unsubscribes each of those matching event names with the provided block" file="./spec/unit/realtime/channel_spec.rb" time="34.142000"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c46ea78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ef1f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ef1a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cd8f940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cd8f7b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c46e898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cd8f8a0&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cd8f648&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c46e938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cd72818 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cd72778 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cd8ad50 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cd8ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cd8aaa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cd8a9e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cd8a918 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cd8a878 @client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c46e938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ef1f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ef1a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cd8f940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cd8f7b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c46e898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cd8f8a0&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cd8f648&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c46e938 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cd8ad50 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cd8ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cd8aaa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cd8a9e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cd8a918 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cd72818 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cd72778 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cd8a850 @client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3c46ea78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ef1f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ef1a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cd8f940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cd8f7b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c46e898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cd8f8a0&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cd8f648&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c46e938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cd72818 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cd72778 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cd8ad50 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cd8ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cd8aaa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cd8a9e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cd8a918 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3cd8a878 @client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3c46e938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3c4ef1f0 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3c4ef1a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3cd8f940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3cd8f7b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3c46e898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3cd8f8a0&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3cd8f648&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3c46e938 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3cd8ad50 @client=#&lt;Ably::Rest::Client:0x00007fef3c54a000 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3cd8ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3cd8aaa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3cd8a9e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3cd8a918 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3cd72818 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3cd72778 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3cd8a850 @client=#&lt;Ably::Realtime::Client:0x00007fef3c46ea78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel msgbus fail with unacceptable STATE event names" file="./spec/unit/realtime/channel_spec.rb" time="35.176072"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c4bb4b8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:141:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:150:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:150:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef...y::Realtime::Client:0x00007fef3c4bb4b8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:141:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:150:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:150:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/channel_spec.rb:150:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel msgbus supports messages" file="./spec/unit/realtime/channel_spec.rb" time="34.060184"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce9da30 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d084ab0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d084a10 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c853918 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8537b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce9d7b0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8538a0&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c853670&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce9d990 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c856e88 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c856e10 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c851f78 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c851e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c851de8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c851d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c851ca8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c851c58 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce9d990 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d084ab0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d084a10 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c853918 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8537b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce9d7b0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8538a0&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c853670&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce9d990 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c851f78 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c851e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c851de8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c851d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c851ca8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c856e88 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c856e10 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c851c30 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;" type="NameError">Failure/Error: &quot;#{endpoint}.realtime.#{root_domain}&quot;

NameError:
  undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007fef3ce9da30 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d084ab0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d084a10 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c853918 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8537b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce9d7b0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8538a0&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c853670&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce9d990 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c856e88 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c856e10 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c851f78 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c851e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c851de8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c851d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c851ca8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007fef3c851c58 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007fef3ce9d990 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007fef3d084ab0 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007fef3d084a10 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007fef3c853918 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007fef3c8537b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007fef3ce9d7b0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007fef3c8538a0&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007fef3c853670&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007fef3ce9d990 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007fef3c851f78 @client=#&lt;Ably::Rest::Client:0x00007fef3c5cb420 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007fef3c851e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007fef3c851de8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007fef3c851d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007fef3c851ca8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007fef3c856e88 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007fef3c856e10 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007fef3c851c30 @client=#&lt;Ably::Realtime::Client:0x00007fef3ce9da30 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:141:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:145:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.rest.rest_spec" name="Ably::Rest constructor returns an Ably::Rest::Client" file="./spec/unit/rest/rest_spec.rb" time="0.001378"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel is available in the #push attribute of the channel" file="./spec/unit/rest/push_channel_spec.rb" time="0.000895"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel is constructed with a channel" file="./spec/unit/rest/push_channel_spec.rb" time="0.000517"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel raises an exception if constructed with an invalid type" file="./spec/unit/rest/push_channel_spec.rb" time="0.000532"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel exposes the channel as attribute #channel" file="./spec/unit/rest/push_channel_spec.rb" time="0.000528"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel methods not implemented as push notifications #subscribe_device raises an unsupported exception" file="./spec/unit/rest/push_channel_spec.rb" time="0.000532"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel methods not implemented as push notifications #unsubscribe_client_id raises an unsupported exception" file="./spec/unit/rest/push_channel_spec.rb" time="0.000571"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel methods not implemented as push notifications #subscribe_client_id raises an unsupported exception" file="./spec/unit/rest/push_channel_spec.rb" time="0.000534"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel methods not implemented as push notifications #get_subscriptions raises an unsupported exception" file="./spec/unit/rest/push_channel_spec.rb" time="0.000519"></testcase>
<testcase classname="spec.unit.rest.push_channel_spec" name="Ably::Rest::Channel::PushChannel methods not implemented as push notifications #unsubscribe_device raises an unsupported exception" file="./spec/unit/rest/push_channel_spec.rb" time="0.000551"></testcase>
<testcase classname="spec.unit.realtime.websocket_transport_spec" name="Ably::Realtime::Connection::WebsocketTransport behaves like an outgoing protocol message bus behaves like a protocol message bus __protocol_msgbus__ PubSub fail with unacceptable STATE event names" file="./spec/unit/realtime/websocket_transport_spec.rb" time="0.003327"></testcase>
<testcase classname="spec.unit.realtime.websocket_transport_spec" name="Ably::Realtime::Connection::WebsocketTransport behaves like an outgoing protocol message bus behaves like a protocol message bus __protocol_msgbus__ PubSub supports valid ProtocolMessage messages" file="./spec/unit/realtime/websocket_transport_spec.rb" time="0.002887"></testcase>
<testcase classname="spec.unit.realtime.websocket_transport_spec" name="Ably::Realtime::Connection::WebsocketTransport behaves like an incoming protocol message bus behaves like a protocol message bus __protocol_msgbus__ PubSub fail with unacceptable STATE event names" file="./spec/unit/realtime/websocket_transport_spec.rb" time="0.001097"></testcase>
<testcase classname="spec.unit.realtime.websocket_transport_spec" name="Ably::Realtime::Connection::WebsocketTransport behaves like an incoming protocol message bus behaves like a protocol message bus __protocol_msgbus__ PubSub supports valid ProtocolMessage messages" file="./spec/unit/realtime/websocket_transport_spec.rb" time="0.000892"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper provides methods to read values using snake_case" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000572"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper provides accessor set method to values using snake_case" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000808"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper provides accessor method to values using snake_case" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000606"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper #attributes returns raw Hash object" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000635"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper provides methods to write values using snake_case" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000581"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper does not provide methods for keys that are missing" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000995"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper recursively wrapping child objects ignores arrays" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000529"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper recursively wrapping child objects wraps Hashes" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000715"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper recursively wrapping child objects :stop_at option with string does not wrap the matching key" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000529"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper recursively wrapping child objects :stop_at option with symbol does not wrap the matching key" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000845"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper Kernel.Array like method to create a IdiomaticRubyWrapper will return the same IdiomaticRubyWrapper if passed in" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000484"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper Kernel.Array like method to create a IdiomaticRubyWrapper will return the same IdiomaticRubyWrapper if passed in" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000808"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData returns nil for non existent keys" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000536"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData camel_case_string allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000615"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData camel_case_string updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000594"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData camel_case_string updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.001035"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData lower_case_symbol allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000778"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData lower_case_symbol updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000943"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData lower_case_symbol updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000623"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData symbol allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000621"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData symbol updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000525"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData symbol updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000874"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData mixed_case_symbol allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000592"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData mixed_case_symbol updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000567"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData mixed_case_symbol updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000724"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData snake_case_symbol allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000494"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData snake_case_symbol updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000715"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData snake_case_symbol updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000567"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData lower_case_string allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000539"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData lower_case_string updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.002152"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData lower_case_string updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000627"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData new keys uses mixedCase" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000592"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData snake_case_string allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000610"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData snake_case_string updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000797"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData snake_case_string updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000555"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData mixed_case_string allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000600"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData mixed_case_string updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000788"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData mixed_case_string updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000573"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData camel_case_symbol allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000606"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData camel_case_symbol updates returns the new value" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000557"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData camel_case_symbol updates returns the new value in the JSON" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000825"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck returns correct size" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000556"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #to_json returns JSON stringified" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000517"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #to_json returns child JSON objects in the JSON stringified" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000618"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck supports Hash-like #keys" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000628"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck is Enumerable" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000472"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck supports Hash-like #values" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000534"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #fetch calls the block if key does not exist" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000523"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #fetch allows a default value argument" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000465"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #fetch raise an exception if key does not exist" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000582"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #fetch fetches the key" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000523"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck with snake case JSON #to_json uses mixedCase for any non mixedCase keys" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000560"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #dup returns a new object with the underlying JSON duped" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000492"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #dup returns a new IdiomaticRubyWrapper with the same underlying Hash object" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000573"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #dup keeps the stop_at list intact" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000454"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #to_hash converts hashes within hashes" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000581"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #to_hash returns a hash" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000524"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #== presents itself as a symbolized version of the object" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000460"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #== compares with itself" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000462"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #== returns false if different values to another IdiomaticRubyWrapper" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000490"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #== returns false if comparing with a non Hash/IdiomaticRubyWrapper object" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000429"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #== returns false if different values to another Hash" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000471"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #to_json with changes returns stringified JSON with changes" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000570"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck #to_msgpack returns a msgpack object" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000528"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck iterable yields key value pairs" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.001600"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck iterable #each returns an enumerator" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000676"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper acts like a duck iterable #each yields key value pairs" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000558"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails attributes #max_idle_interval (#CD2h) retrieves attribute :max_idle_interval and converts it from ms to s" file="./spec/unit/models/connection_details_spec.rb" time="0.000666"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails attributes #connection_state_ttl (#CD2f) retrieves attribute :connection_state_ttl and converts it from ms to s" file="./spec/unit/models/connection_details_spec.rb" time="0.000614"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails == is true when attributes are the same" file="./spec/unit/models/connection_details_spec.rb" time="0.000959"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails == is false when class type differs" file="./spec/unit/models/connection_details_spec.rb" time="0.000609"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails == is false when attributes are not the same" file="./spec/unit/models/connection_details_spec.rb" time="0.000886"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails ConnectionDetails conversion methods with a ConnectionDetails object returns the ConnectionDetails object" file="./spec/unit/models/connection_details_spec.rb" time="0.000601"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails ConnectionDetails conversion methods with a JSON object returns a new ConnectionDetails object from the JSON" file="./spec/unit/models/connection_details_spec.rb" time="0.000669"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model is immutable prevents changes" file="./spec/unit/models/connection_details_spec.rb" time="0.000853"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model is immutable dups options" file="./spec/unit/models/connection_details_spec.rb" time="0.000727"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model #to_msgpack returns a msgpack object with Ably payload naming" file="./spec/unit/models/connection_details_spec.rb" time="0.000668"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model attributes #max_message_size retrieves attribute :max_message_size" file="./spec/unit/models/connection_details_spec.rb" time="0.000673"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model attributes #attributes provides access to #attributes" file="./spec/unit/models/connection_details_spec.rb" time="0.000659"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model attributes #max_frame_size retrieves attribute :max_frame_size" file="./spec/unit/models/connection_details_spec.rb" time="0.000628"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model attributes #connection_key retrieves attribute :connection_key" file="./spec/unit/models/connection_details_spec.rb" time="0.000644"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model attributes #client_id retrieves attribute :client_id" file="./spec/unit/models/connection_details_spec.rb" time="0.000732"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model attributes #max_inbound_rate retrieves attribute :max_inbound_rate" file="./spec/unit/models/connection_details_spec.rb" time="0.000737"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model attributes #[] provides accessor method to #attributes" file="./spec/unit/models/connection_details_spec.rb" time="0.000650"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model #to_json returns a JSON string with Ably payload naming" file="./spec/unit/models/connection_details_spec.rb" time="0.000720"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model #== is false when class type differs" file="./spec/unit/models/connection_details_spec.rb" time="0.000614"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model #== is true when attributes are the same" file="./spec/unit/models/connection_details_spec.rb" time="0.000871"></testcase>
<testcase classname="spec.unit.models.connection_details_spec" name="Ably::Models::ConnectionDetails behaves like a model #== is false when attributes are not the same" file="./spec/unit/models/connection_details_spec.rb" time="0.001877"></testcase>
<testcase classname="spec.unit.models.channel_metrics_spec" name="Ably::Models::ChannelMetrics#connections should return integer" file="./spec/unit/models/channel_metrics_spec.rb" time="0.000645"></testcase>
<testcase classname="spec.unit.models.channel_metrics_spec" name="Ably::Models::ChannelMetrics#presence_connections should return integer" file="./spec/unit/models/channel_metrics_spec.rb" time="0.000491"></testcase>
<testcase classname="spec.unit.models.channel_metrics_spec" name="Ably::Models::ChannelMetrics#subscribers should return integer" file="./spec/unit/models/channel_metrics_spec.rb" time="0.000635"></testcase>
<testcase classname="spec.unit.models.channel_metrics_spec" name="Ably::Models::ChannelMetrics#publishers should return integer" file="./spec/unit/models/channel_metrics_spec.rb" time="0.000576"></testcase>
<testcase classname="spec.unit.models.channel_metrics_spec" name="Ably::Models::ChannelMetrics#presence_subscribers should return integer" file="./spec/unit/models/channel_metrics_spec.rb" time="0.000488"></testcase>
<testcase classname="spec.unit.models.channel_metrics_spec" name="Ably::Models::ChannelMetrics#presence_members should return integer" file="./spec/unit/models/channel_metrics_spec.rb" time="0.000502"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel raises an exception if constructed with an invalid type" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000509"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel exposes the channel as attribute #channel" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000829"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel is available in the #push attribute of the channel" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000673"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel is constructed with a channel" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000712"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel methods not implemented as push notifications #unsubscribe_client_id raises an unsupported exception" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000739"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel methods not implemented as push notifications #subscribe_client_id raises an unsupported exception" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000700"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel methods not implemented as push notifications #subscribe_device raises an unsupported exception" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000765"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel methods not implemented as push notifications #unsubscribe_device raises an unsupported exception" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000768"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel methods not implemented as push notifications #get_subscriptions raises an unsupported exception" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000668"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #subscribe with a single action argument subscribes that block to matching actions" file="./spec/unit/realtime/presence_spec.rb" time="0.001087"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #subscribe with a multiple action arguments subscribes that block to all of those actions" file="./spec/unit/realtime/presence_spec.rb" time="0.001546"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #subscribe without a block raises an invalid ArgumentError" file="./spec/unit/realtime/presence_spec.rb" time="0.000644"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #subscribe with no action specified subscribes the provided block to all action" file="./spec/unit/realtime/presence_spec.rb" time="0.000959"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #subscribe with a multiple duplicate action arguments subscribes that block to all of those unique actions once" file="./spec/unit/realtime/presence_spec.rb" time="0.000835"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #unsubscribe with no block argument unsubscribes all blocks for the action argument" file="./spec/unit/realtime/presence_spec.rb" time="0.000975"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #unsubscribe with a single action argument unsubscribes the provided block with the matching action" file="./spec/unit/realtime/presence_spec.rb" time="0.000942"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #unsubscribe with no action specified unsubscribes that block from all events" file="./spec/unit/realtime/presence_spec.rb" time="0.008361"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #unsubscribe with a non-matching action argument has no effect" file="./spec/unit/realtime/presence_spec.rb" time="0.009251"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence subscriptions #unsubscribe with multiple action arguments unsubscribes each of those matching actions with the provided block" file="./spec/unit/realtime/presence_spec.rb" time="0.006594"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence callbacks fail with unacceptable STATE event names" file="./spec/unit/realtime/presence_spec.rb" time="0.005465"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence callbacks are supported for valid STATE events" file="./spec/unit/realtime/presence_spec.rb" time="0.004238"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence msgbus fail with unacceptable STATE event names" file="./spec/unit/realtime/presence_spec.rb" time="0.000596"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence msgbus supports messages" file="./spec/unit/realtime/presence_spec.rb" time="0.001401"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with UTF-8 payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000573"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with UTF-8 payload leaves the data intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000725"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport already encoded message with binary payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000564"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport already encoded message with binary payload leaves the message data intact as Base64 encoding is not necessary" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000700"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with empty binary string payload leaves the message data intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000520"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with empty binary string payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000724"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with nil payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000529"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with nil payload leaves the message data intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000665"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with binary payload leaves the message data intact as Base64 encoding is not necessary" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000515"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over binary transport message with binary payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000670"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport message with binary payload encodes binary data as base64" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000775"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport message with binary payload adds the encoding" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000637"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport already encoded message with binary payload adds the encoding" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000604"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport already encoded message with binary payload encodes binary data as base64" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000684"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport message with UTF-8 payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000664"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport message with UTF-8 payload leaves the data intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000641"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport message with nil payload leaves the message data intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000680"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#encode over text transport message with nil payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000623"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#decode message with base64 payload strips the encoding" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000549"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#decode message with base64 payload decodes base64" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000544"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#decode message with another payload leaves the encoding intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000523"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#decode message with another payload leaves the message data intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000656"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#decode message with base64 payload before other payloads decodes base64" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000531"></testcase>
<testcase classname="spec.unit.models.message_encoders.base64_spec" name="Ably::Models::MessageEncoders::Base64#decode message with base64 payload before other payloads strips the encoding" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000639"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails camelCase constructor attributes are rubyfied and exposed as underscore case" file="./spec/unit/models/device_push_details_spec.rb" time="0.000530"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails camelCase constructor attributes are generated when the object is serialised to JSON" file="./spec/unit/models/device_push_details_spec.rb" time="0.000620"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#state and #state= rejects non string or nil values" file="./spec/unit/models/device_push_details_spec.rb" time="0.000535"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#state and #state= setter accepts nil" file="./spec/unit/models/device_push_details_spec.rb" time="0.000566"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#state and #state= setter accepts a string value and getter returns the new value" file="./spec/unit/models/device_push_details_spec.rb" time="0.000585"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#error_reason and #error_reason= rejects non Hash, ErrorInfo or nil values" file="./spec/unit/models/device_push_details_spec.rb" time="0.000523"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#error_reason and #error_reason= setter accepts a Hash value and getter returns a ErrorInfo object" file="./spec/unit/models/device_push_details_spec.rb" time="0.000651"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#error_reason and #error_reason= setter accepts a ErrorInfo object and getter returns a ErrorInfo object" file="./spec/unit/models/device_push_details_spec.rb" time="0.000669"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#error_reason and #error_reason= setter accepts nil values" file="./spec/unit/models/device_push_details_spec.rb" time="0.000686"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#recipient and #recipient= rejects non Hash or nil values" file="./spec/unit/models/device_push_details_spec.rb" time="0.000564"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#recipient and #recipient= setter accepts nil but always returns an empty hash" file="./spec/unit/models/device_push_details_spec.rb" time="0.000629"></testcase>
<testcase classname="spec.unit.models.device_push_details_spec" name="Ably::Models::DevicePushDetails#recipient and #recipient= setter accepts a Hash value and getter returns the new value" file="./spec/unit/models/device_push_details_spec.rb" time="0.000695"></testcase>
</testsuite>
