<testsuite name="rspec1" tests="609" skipped="0" failures="77" errors="0" time="2120.728753" timestamp="2025-01-31T13:29:22+00:00" hostname="fv-az1307-498">
<properties>
<property name="seed" value="56982"/>
</properties>
<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.005439"></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.001714"></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.000731"></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.000838"></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.000729"></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.000811"></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.000690"></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.000640"></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.000656"></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.001437"></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.000613"></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.001512"></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.002272"></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.001202"></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.001100"></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.000746"></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.000813"></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.000939"></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.000851"></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.009358"></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.001321"></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.001093"></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.001160"></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.001120"></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.001034"></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.001089"></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.001132"></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.001000"></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.000918"></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.000846"></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.001742"></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.000822"></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.000680"></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.000939"></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.001233"></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.000752"></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.001101"></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.000840"></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.000948"></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.001147"></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.000965"></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.000833"></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.000849"></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.000969"></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.000714"></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.000780"></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.000772"></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.000876"></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.000762"></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.000772"></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.000825"></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.000827"></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.000696"></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.000909"></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.001911"></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.000818"></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.000977"></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.000935"></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.000850"></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.002775"></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.001111"></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.001076"></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.001020"></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.001221"></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.001213"></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.000837"></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.000849"></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.000917"></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.001415"></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.001091"></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.001575"></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.001193"></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.001700"></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.000802"></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.000971"></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.000781"></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.000755"></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.000877"></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.001014"></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.000872"></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.001839"></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.000881"></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.000855"></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.000956"></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.000760"></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.000816"></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.001270"></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.001344"></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.000864"></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.000873"></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.000993"></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.001323"></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.000943"></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.000945"></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.000978"></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.000882"></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.000882"></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.000997"></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.000926"></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.000826"></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.000968"></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.000773"></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.001059"></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.000909"></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.000869"></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.000801"></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.000843"></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.001011"></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.000847"></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.000932"></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.000851"></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.000863"></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.001023"></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.001215"></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.001063"></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.001055"></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.000919"></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.000842"></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.000797"></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.000790"></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.000854"></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.000909"></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.000781"></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.000772"></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.001141"></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.002276"></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.001005"></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.000987"></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.000984"></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.001009"></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.001179"></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.000854"></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.000864"></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.000815"></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.000865"></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.000829"></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.000825"></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.000963"></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.001198"></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.003140"></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.000938"></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.000891"></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.000918"></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.000939"></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.001019"></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.000923"></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.000909"></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.000901"></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.001566"></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.001048"></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.001171"></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.000849"></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.000762"></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.002622"></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.000987"></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.000793"></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.001044"></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.000799"></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.000642"></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.000691"></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.000686"></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.000715"></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.000720"></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.000932"></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.000850"></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.000704"></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.000716"></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.000765"></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.000770"></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.000775"></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.000771"></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.000746"></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.000739"></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.000713"></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.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 message data intact as Base64 encoding is not necessary" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000699"></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.000738"></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.000669"></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 UTF-8 payload leaves the data intact" file="./spec/unit/models/message_encoders/base64_spec.rb" time="0.000636"></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.000751"></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.000701"></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.000671"></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.000670"></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.000586"></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.000555"></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.000679"></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.000924"></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.000880"></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.000892"></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.002721"></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.000975"></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.000943"></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.000922"></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.000893"></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.000823"></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.000818"></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.000850"></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.000796"></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.001174"></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.001042"></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.000822"></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.000800"></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.000776"></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.000821"></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.000784"></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.001111"></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.001006"></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="4.012954"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b8e9998 @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:0x000056371b8e9740 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&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:0x000056371b8e9268 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8e8f20 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8e8d40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8e8ca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8e8c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8e8ae8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab507f0 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab507a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab505c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab503b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab504a8 @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:0x000056371ab50480&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab4b958&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b8e8a70 @client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8e9268 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&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:0x000056371b8e9268 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8e8f20 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8e8d40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8e8ca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8e8c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8e8ae8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab507f0 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab507a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab505c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab503b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab504a8 @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:0x000056371ab50480&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab4b958&gt;&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:0x000056371b8e8a20 @client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371ab4b548 @client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab4b430 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab4b318 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab4a8c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab4ad78 @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:0x000056371ab4ac10&gt;, @mon_data_owner_object_id=24640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab4a198&gt;&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:0x000056371b8e9998 @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:0x000056371b8e9740 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&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:0x000056371b8e9268 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8e8f20 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8e8d40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8e8ca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8e8c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8e8ae8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab507f0 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab507a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab505c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab503b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab504a8 @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:0x000056371ab50480&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab4b958&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b8e8a70 @client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8e9268 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&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:0x000056371b8e9268 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8e8f20 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8e8d40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8e8ca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8e8c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8e8ae8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab507f0 @client=#&lt;Ably::Rest::Client:0x000056371b8e9740 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab507a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab505c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab503b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab504a8 @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:0x000056371ab50480&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab4b958&gt;&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:0x000056371b8e8a20 @client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371ab4b548 @client=#&lt;Ably::Realtime::Client:0x000056371b8e9998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab4b430 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab4b318 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab4a8c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab4ad78 @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:0x000056371ab4ac10&gt;, @mon_data_owner_object_id=24640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab4a198&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.013977"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b9f9bd0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&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:0x000056371b9f9428 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9f9090 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9f8eb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9f8e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9f8d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9f8c58 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab207f8 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab206e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab07dc0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab07758 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab079b0 @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:0x000056371ab07988&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab05048&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b9f8be0 @client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9f9428 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&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:0x000056371b9f9428 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9f9090 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9f8eb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9f8e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9f8d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9f8c58 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab207f8 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab206e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab07dc0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab07758 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab079b0 @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:0x000056371ab07988&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab05048&gt;&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:0x000056371b9f8b90 @client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371ab04e90 @client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab04cd8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab048a0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab1b820 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab047d8 @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:0x000056371ab04648&gt;, @mon_data_owner_object_id=24760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab1ac40&gt;&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:0x000056371b9f9bd0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&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:0x000056371b9f9428 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9f9090 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9f8eb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9f8e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9f8d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9f8c58 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab207f8 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab206e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab07dc0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab07758 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab079b0 @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:0x000056371ab07988&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab05048&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b9f8be0 @client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9f9428 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&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:0x000056371b9f9428 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9f9090 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9f8eb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9f8e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9f8d70 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9f8c58 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ab207f8 @client=#&lt;Ably::Rest::Client:0x000056371b9f99a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab206e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab07dc0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab07758 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab079b0 @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:0x000056371ab07988&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab05048&gt;&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:0x000056371b9f8b90 @client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371ab04e90 @client=#&lt;Ably::Realtime::Client:0x000056371b9f9bd0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ab04cd8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ab048a0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ab1b820 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ab047d8 @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:0x000056371ab04648&gt;, @mon_data_owner_object_id=24760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ab1ac40&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.016542"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371a134848 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371abfee68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&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:0x000056371abf4fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371abe9cc0 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371abe96d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371abe9338 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371abe8668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371abe3d48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371aab9af8 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371aab9878 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371aab94e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371aab83d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371aab9058 @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:0x000056371aab8fb8&gt;, @mon_data_owner_object_id=24860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371aab81a8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371abe3460 @client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371abf4fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371abfee68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&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:0x000056371abf4fa8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371abe9cc0 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371abe96d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371abe9338 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371abe8668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371abe3d48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371aab9af8 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371aab9878 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371aab94e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371aab83d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371aab9058 @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:0x000056371aab8fb8&gt;, @mon_data_owner_object_id=24860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371aab81a8&gt;&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:0x000056371abe3168 @client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371aab3ec8 @client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371aab3d38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371aab3a18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371aab2960 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371aab36f8 @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:0x000056371aab3658&gt;, @mon_data_owner_object_id=24880&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371aab1d80&gt;&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:0x000056371a134848 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371abfee68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&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:0x000056371abf4fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371abe9cc0 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371abe96d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371abe9338 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371abe8668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371abe3d48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371aab9af8 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371aab9878 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371aab94e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371aab83d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371aab9058 @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:0x000056371aab8fb8&gt;, @mon_data_owner_object_id=24860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371aab81a8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371abe3460 @client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371abf4fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371abfee68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&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:0x000056371abf4fa8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371abe9cc0 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371abe96d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371abe9338 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371abe8668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371abe3d48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371aab9af8 @client=#&lt;Ably::Rest::Client:0x000056371abfee68 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371aab9878 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371aab94e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371aab83d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371aab9058 @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:0x000056371aab8fb8&gt;, @mon_data_owner_object_id=24860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371aab81a8&gt;&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:0x000056371abe3168 @client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371aab3ec8 @client=#&lt;Ably::Realtime::Client:0x000056371a134848 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371aab3d38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371aab3a18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371aab2960 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371aab36f8 @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:0x000056371aab3658&gt;, @mon_data_owner_object_id=24880&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371aab1d80&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.012994"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b402448 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b402178 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&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:0x000056371b401d18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b402178 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b401368 @client=#&lt;Ably::Rest::Client:0x000056371b402178 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b400c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b400af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b400a30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b400828 @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:0x000056371b4006c0 @client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b401d18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b402178 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&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:0x000056371b401d18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b401368 @client=#&lt;Ably::Rest::Client:0x000056371b402178 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b400c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b400af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b400a30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b400828 @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:0x000056371b400670 @client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&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:0x000056371b402448 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b402178 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&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:0x000056371b401d18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b402178 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b401368 @client=#&lt;Ably::Rest::Client:0x000056371b402178 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b400c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b400af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b400a30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b400828 @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:0x000056371b4006c0 @client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b401d18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b402178 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&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:0x000056371b401d18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b401368 @client=#&lt;Ably::Rest::Client:0x000056371b402178 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b400c38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b400af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b400a30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b400828 @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:0x000056371b400670 @client=#&lt;Ably::Realtime::Client:0x000056371b402448 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.015050"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b6017d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b601640 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b601168 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&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:0x000056371b600ec0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b600df8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b651898 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6516b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b651618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b651550 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b651438 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b66e7e0 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b66e768 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b66e650 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b66e498 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b66e588 @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:0x000056371b66e538&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b66e290&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b6513c0 @client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b601168 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b601640 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b601168 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b651898 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6516b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b651618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b651550 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b651438 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b66e7e0 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b66e768 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b66e650 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b66e498 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b66e588 @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:0x000056371b66e538&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b66e290&gt;&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:0x000056371b600ec0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b600df8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b651370 @client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&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:0x000056371b6017d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b601640 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b601168 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&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:0x000056371b600ec0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b600df8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b651898 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6516b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b651618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b651550 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b651438 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b66e7e0 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b66e768 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b66e650 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b66e498 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b66e588 @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:0x000056371b66e538&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b66e290&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b6513c0 @client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b601168 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b601640 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b601168 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b651898 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6516b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b651618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b651550 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b651438 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b66e7e0 @client=#&lt;Ably::Rest::Client:0x000056371b601640 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b66e768 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b66e650 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b66e498 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b66e588 @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:0x000056371b66e538&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b66e290&gt;&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:0x000056371b600ec0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b600df8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b651370 @client=#&lt;Ably::Realtime::Client:0x000056371b6017d0 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.012806"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b76b530 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&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:0x000056371b76ae78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b76ac48 @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b76aa18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b76a978 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b76a8d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b76a770 @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:0x000056371b76a6f8 @client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b76ae78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&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:0x000056371b76ae78 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b76ac48 @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b76aa18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b76a978 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b76a8d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b76a770 @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:0x000056371b76a6a8 @client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&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:0x000056371b76b530 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&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:0x000056371b76ae78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b76ac48 @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b76aa18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b76a978 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b76a8d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b76a770 @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:0x000056371b76a6f8 @client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b76ae78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&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:0x000056371b76ae78 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b76ac48 @client=#&lt;Ably::Rest::Client:0x000056371b76b3c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b76aa18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b76a978 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b76a8d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b76a770 @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:0x000056371b76a6a8 @client=#&lt;Ably::Realtime::Client:0x000056371b76b530 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.015301"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b89a988 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b89a820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b89a320 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&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:0x000056371b89a078 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b899fb0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b883a30 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b883850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b883788 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8836e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b883558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b893d68 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b893cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b893c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b893a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b893b38 @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:0x000056371b893ae8&gt;, @mon_data_owner_object_id=16380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b8938b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b8834e0 @client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b89a320 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b89a820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b89a320 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b883a30 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b883850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b883788 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8836e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b883558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b893d68 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b893cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b893c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b893a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b893b38 @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:0x000056371b893ae8&gt;, @mon_data_owner_object_id=16380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b8938b8&gt;&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:0x000056371b89a078 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b899fb0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b883490 @client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&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:0x000056371b89a988 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b89a820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b89a320 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&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:0x000056371b89a078 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b899fb0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b883a30 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b883850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b883788 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8836e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b883558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b893d68 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b893cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b893c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b893a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b893b38 @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:0x000056371b893ae8&gt;, @mon_data_owner_object_id=16380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b8938b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b8834e0 @client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b89a320 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b89a820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b89a320 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b883a30 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b883850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b883788 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8836e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b883558 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b893d68 @client=#&lt;Ably::Rest::Client:0x000056371b89a820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b893cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b893c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b893a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b893b38 @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:0x000056371b893ae8&gt;, @mon_data_owner_object_id=16380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b8938b8&gt;&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:0x000056371b89a078 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b899fb0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b883490 @client=#&lt;Ably::Realtime::Client:0x000056371b89a988 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.014090"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b9b8c48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&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:0x000056371b9b8518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9b81d0 @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9b3fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9b3f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9b3e78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9b3d60 @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:0x000056371b9b3ce8 @client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9b8518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&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:0x000056371b9b8518 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9b81d0 @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9b3fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9b3f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9b3e78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9b3d60 @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:0x000056371b9b3c98 @client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&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:0x000056371b9b8c48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&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:0x000056371b9b8518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9b81d0 @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9b3fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9b3f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9b3e78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9b3d60 @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:0x000056371b9b3ce8 @client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9b8518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&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:0x000056371b9b8518 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9b81d0 @client=#&lt;Ably::Rest::Client:0x000056371b9b8ab8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9b3fb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9b3f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9b3e78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9b3d60 @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:0x000056371b9b3c98 @client=#&lt;Ably::Realtime::Client:0x000056371b9b8c48 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.026932"><failure message="expected no Exception, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00005637...y::Realtime::Client:0x000056371b3b99c8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.0.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:0x00005637...y::Realtime::Client:0x000056371b3b99c8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.0.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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.013213"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b5ea148 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b5ea238 @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:0x000056371b5e9ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e9748 @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e9540 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e94a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e9400 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e92e8 @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:0x000056371b5e9270 @client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5e9ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b5ea238 @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:0x000056371b5e9ae0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e9748 @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e9540 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e94a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e9400 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e92e8 @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:0x000056371b5e91f8 @client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&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:0x000056371b5ea148 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b5ea238 @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:0x000056371b5e9ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e9748 @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e9540 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e94a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e9400 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e92e8 @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:0x000056371b5e9270 @client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5e9ae0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b5ea238 @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:0x000056371b5e9ae0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e9748 @client=#&lt;Ably::Rest::Client:0x000056371b5e9fe0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e9540 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e94a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e9400 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e92e8 @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:0x000056371b5e91f8 @client=#&lt;Ably::Realtime::Client:0x000056371b5ea148 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.013350"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b6af628 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b6af498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b6af6f0 @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:0x000056371b6aef20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6af498 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6ae9f8 @client=#&lt;Ably::Rest::Client:0x000056371b6af498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6ae700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6ae660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6ae598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6ae480 @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:0x000056371b6ae408 @client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6aef20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6af498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b6af6f0 @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:0x000056371b6aef20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6ae9f8 @client=#&lt;Ably::Rest::Client:0x000056371b6af498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6ae700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6ae660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6ae598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6ae480 @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:0x000056371b6ae3b8 @client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&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:0x000056371b6af628 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b6af498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b6af6f0 @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:0x000056371b6aef20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6af498 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6ae9f8 @client=#&lt;Ably::Rest::Client:0x000056371b6af498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6ae700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6ae660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6ae598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6ae480 @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:0x000056371b6ae408 @client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6aef20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6af498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x000056371b6af6f0 @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:0x000056371b6aef20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6ae9f8 @client=#&lt;Ably::Rest::Client:0x000056371b6af498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6ae700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6ae660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6ae598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6ae480 @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:0x000056371b6ae3b8 @client=#&lt;Ably::Realtime::Client:0x000056371b6af628 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.012790"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b7e2180 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7e2018 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x000056371b7e1ca8&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:0x000056371b7e1b40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7e17f8 @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7e1618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7e1578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7e14d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7e13c0 @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:0x000056371b7e1348 @client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7e1b40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x000056371b7e1ca8&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:0x000056371b7e1b40 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7e17f8 @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7e1618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7e1578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7e14d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7e13c0 @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:0x000056371b7e12f8 @client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&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:0x000056371b7e2180 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7e2018 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x000056371b7e1ca8&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:0x000056371b7e1b40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7e17f8 @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7e1618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7e1578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7e14d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7e13c0 @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:0x000056371b7e1348 @client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7e1b40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x000056371b7e1ca8&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:0x000056371b7e1b40 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7e17f8 @client=#&lt;Ably::Rest::Client:0x000056371b7e2018 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7e1618 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7e1578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7e14d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7e13c0 @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:0x000056371b7e12f8 @client=#&lt;Ably::Realtime::Client:0x000056371b7e2180 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.013154"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b90b980 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b90b818 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&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:0x000056371b90b318 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b90b818 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b90afa8 @client=#&lt;Ably::Rest::Client:0x000056371b90b818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b90adc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b90ad28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b90ac88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b90ab70 @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:0x000056371b90aaf8 @client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b90b318 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b90b818 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&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:0x000056371b90b318 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b90afa8 @client=#&lt;Ably::Rest::Client:0x000056371b90b818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b90adc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b90ad28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b90ac88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b90ab70 @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:0x000056371b90aaa8 @client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&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:0x000056371b90b980 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b90b818 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&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:0x000056371b90b318 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b90b818 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b90afa8 @client=#&lt;Ably::Rest::Client:0x000056371b90b818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b90adc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b90ad28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b90ac88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b90ab70 @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:0x000056371b90aaf8 @client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b90b318 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b90b818 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&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:0x000056371b90b318 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b90afa8 @client=#&lt;Ably::Rest::Client:0x000056371b90b818 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b90adc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b90ad28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b90ac88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b90ab70 @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:0x000056371b90aaa8 @client=#&lt;Ably::Realtime::Client:0x000056371b90b980 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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 uses Ruby Logger" file="./spec/unit/realtime/client_spec.rb" time="4.014527"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b9e0090 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9db950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&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:0x000056371b9da028 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9db950 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9d9c18 @client=#&lt;Ably::Rest::Client:0x000056371b9db950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9d9740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9d9510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9d9290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d8f70 @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:0x000056371b9d8d18 @client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9da028 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9db950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&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:0x000056371b9da028 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9d9c18 @client=#&lt;Ably::Rest::Client:0x000056371b9db950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9d9740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9d9510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9d9290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d8f70 @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:0x000056371b9d8c50 @client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&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:0x000056371b9e0090 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9db950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&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:0x000056371b9da028 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9db950 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9d9c18 @client=#&lt;Ably::Rest::Client:0x000056371b9db950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9d9740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9d9510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9d9290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d8f70 @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:0x000056371b9d8d18 @client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9da028 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9db950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&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:0x000056371b9da028 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9d9c18 @client=#&lt;Ably::Rest::Client:0x000056371b9db950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9d9740 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9d9510 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9d9290 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d8f70 @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:0x000056371b9d8c50 @client=#&lt;Ably::Realtime::Client:0x000056371b9e0090 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.016992"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371aed19d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371aed1668 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&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:0x000056371aebeba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371aed1668 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371aebd348 @client=#&lt;Ably::Rest::Client:0x000056371aed1668 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ae9fe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ae9f898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ae9f5f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ae9e7e0 @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:0x000056371ae9e4c0 @client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371aebeba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371aed1668 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&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:0x000056371aebeba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371aebd348 @client=#&lt;Ably::Rest::Client:0x000056371aed1668 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ae9fe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ae9f898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ae9f5f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ae9e7e0 @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:0x000056371ae9e1f0 @client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&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:0x000056371aed19d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371aed1668 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&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:0x000056371aebeba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371aed1668 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371aebd348 @client=#&lt;Ably::Rest::Client:0x000056371aed1668 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ae9fe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ae9f898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ae9f5f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ae9e7e0 @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:0x000056371ae9e4c0 @client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371aebeba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371aed1668 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&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:0x000056371aebeba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371aebd348 @client=#&lt;Ably::Rest::Client:0x000056371aed1668 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ae9fe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ae9f898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ae9f5f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ae9e7e0 @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:0x000056371ae9e1f0 @client=#&lt;Ably::Realtime::Client:0x000056371aed19d8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.014103"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b55bad8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&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:0x000056371b55b3a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b55af20 @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b55aa20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b55a778 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b55a638 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b55a4f8 @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:0x000056371b55a408 @client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b55b3a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&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:0x000056371b55b3a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b55af20 @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b55aa20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b55a778 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b55a638 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b55a4f8 @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:0x000056371b55a390 @client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&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:0x000056371b55bad8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&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:0x000056371b55b3a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b55af20 @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b55aa20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b55a778 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b55a638 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b55a4f8 @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:0x000056371b55a408 @client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b55b3a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&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:0x000056371b55b3a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b55af20 @client=#&lt;Ably::Rest::Client:0x000056371b55b7e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b55aa20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b55a778 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b55a638 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b55a4f8 @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:0x000056371b55a390 @client=#&lt;Ably::Realtime::Client:0x000056371b55bad8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="4.012831"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b6534e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b653378 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&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:0x000056371b652f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b653378 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b652ba8 @client=#&lt;Ably::Rest::Client:0x000056371b653378 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6529c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6528d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b652838 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b652720 @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:0x000056371b6526a8 @client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b652f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b653378 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&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:0x000056371b652f18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b652ba8 @client=#&lt;Ably::Rest::Client:0x000056371b653378 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6529c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6528d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b652838 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b652720 @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:0x000056371b652658 @client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&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:0x000056371b6534e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b653378 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&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:0x000056371b652f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b653378 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b652ba8 @client=#&lt;Ably::Rest::Client:0x000056371b653378 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6529c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6528d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b652838 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b652720 @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:0x000056371b6526a8 @client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b652f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b653378 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&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:0x000056371b652f18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b652ba8 @client=#&lt;Ably::Rest::Client:0x000056371b653378 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6529c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6528d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b652838 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b652720 @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:0x000056371b652658 @client=#&lt;Ably::Realtime::Client:0x000056371b6534e0 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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 has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="37.838212"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b843610 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b843480 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&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:0x000056371b8430c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b843480 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b842d78 @client=#&lt;Ably::Rest::Client:0x000056371b843480 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b842b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b842af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b842a58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b842940 @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:0x000056371b8428a0 @client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8430c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b843480 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&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:0x000056371b8430c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b842d78 @client=#&lt;Ably::Rest::Client:0x000056371b843480 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b842b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b842af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b842a58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b842940 @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:0x000056371b842850 @client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&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:0x000056371b843610 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b843480 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&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:0x000056371b8430c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b843480 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b842d78 @client=#&lt;Ably::Rest::Client:0x000056371b843480 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b842b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b842af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b842a58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b842940 @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:0x000056371b8428a0 @client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8430c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b843480 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&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:0x000056371b8430c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b842d78 @client=#&lt;Ably::Rest::Client:0x000056371b843480 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b842b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b842af8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b842a58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b842940 @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:0x000056371b842850 @client=#&lt;Ably::Realtime::Client:0x000056371b843610 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.534928"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b9db0e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9daf78 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&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:0x000056371b9dab68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9da668 @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9da230 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9da190 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9da0c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d9f88 @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:0x000056371b9d9f10 @client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9dab68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&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:0x000056371b9dab68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9da668 @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9da230 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9da190 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9da0c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d9f88 @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:0x000056371b9d9e98 @client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&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:0x000056371b9db0e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9daf78 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&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:0x000056371b9dab68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9da668 @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9da230 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9da190 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9da0c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d9f88 @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:0x000056371b9d9f10 @client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9dab68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&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:0x000056371b9dab68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9da668 @client=#&lt;Ably::Rest::Client:0x000056371b9daf78 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9da230 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9da190 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9da0c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9d9f88 @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:0x000056371b9d9e98 @client=#&lt;Ably::Realtime::Client:0x000056371b9db0e0 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.172582"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b449078 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b4480d8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&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:0x000056371b443c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b442d18 @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b442a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b442930 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b442890 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b442728 @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:0x000056371b442638 @client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b443c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&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:0x000056371b443c18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b442d18 @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b442a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b442930 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b442890 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b442728 @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:0x000056371b4425c0 @client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&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:0x000056371b449078 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b4480d8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&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:0x000056371b443c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b442d18 @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b442a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b442930 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b442890 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b442728 @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:0x000056371b442638 @client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b443c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&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:0x000056371b443c18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b442d18 @client=#&lt;Ably::Rest::Client:0x000056371b4480d8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b442a98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b442930 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b442890 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b442728 @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:0x000056371b4425c0 @client=#&lt;Ably::Realtime::Client:0x000056371b449078 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.080582"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b697ca8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b697ac8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&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:0x000056371b6975c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b697230 @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b697000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b696f60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b696ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b696da8 @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:0x000056371b696d30 @client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6975c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&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:0x000056371b6975c8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b697230 @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b697000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b696f60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b696ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b696da8 @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:0x000056371b696ce0 @client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&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:0x000056371b697ca8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b697ac8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&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:0x000056371b6975c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b697230 @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b697000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b696f60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b696ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b696da8 @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:0x000056371b696d30 @client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6975c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&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:0x000056371b6975c8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b697230 @client=#&lt;Ably::Rest::Client:0x000056371b697ac8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b697000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b696f60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b696ec0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b696da8 @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:0x000056371b696ce0 @client=#&lt;Ably::Realtime::Client:0x000056371b697ca8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.910342"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b863b90 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b863938 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&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:0x000056371b8633e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&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:0x000056371b863078 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b862e48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b862da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b862d08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b862b28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3c57f0 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3c57a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3c5728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3c54d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3c56b0 @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:0x000056371b3c5610&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3c52f0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b862a10 @client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8633e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b863938 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&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:0x000056371b8633e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b863078 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b862e48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b862da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b862d08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b862b28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3c57f0 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3c57a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3c5728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3c54d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3c56b0 @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:0x000056371b3c5610&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3c52f0&gt;&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:0x000056371b862998 @client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3c52c8 @client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3c52a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3c5228 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3c5098 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3c5160 @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:0x000056371b3c5138&gt;, @mon_data_owner_object_id=25000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3c4df0&gt;&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:0x000056371b863b90 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b863938 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&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:0x000056371b8633e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&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:0x000056371b863078 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b862e48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b862da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b862d08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b862b28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3c57f0 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3c57a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3c5728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3c54d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3c56b0 @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:0x000056371b3c5610&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3c52f0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b862a10 @client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8633e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b863938 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&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:0x000056371b8633e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b863078 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b862e48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b862da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b862d08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b862b28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3c57f0 @client=#&lt;Ably::Rest::Client:0x000056371b863938 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3c57a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3c5728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3c54d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3c56b0 @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:0x000056371b3c5610&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3c52f0&gt;&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:0x000056371b862998 @client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3c52c8 @client=#&lt;Ably::Realtime::Client:0x000056371b863b90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3c52a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3c5228 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3c5098 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3c5160 @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:0x000056371b3c5138&gt;, @mon_data_owner_object_id=25000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3c4df0&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.247921"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371ba23278 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ba22f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&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:0x000056371ba22850 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&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:0x000056371ba224e0 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba222d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba22238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba22030 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba21d38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3abf08 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3abe90 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3abe40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3abcb0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3abdc8 @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:0x000056371b3abda0&gt;, @mon_data_owner_object_id=25100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3abb48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371ba21978 @client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ba22850 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&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:0x000056371ba22850 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba224e0 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba222d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba22238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba22030 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba21d38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3abf08 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3abe90 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3abe40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3abcb0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3abdc8 @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:0x000056371b3abda0&gt;, @mon_data_owner_object_id=25100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3abb48&gt;&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:0x000056371ba21888 @client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3abad0 @client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3abaa8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3aba58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3ab8c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3ab9e0 @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:0x000056371b3ab968&gt;, @mon_data_owner_object_id=25120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3ab378&gt;&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:0x000056371ba23278 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ba22f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&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:0x000056371ba22850 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&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:0x000056371ba224e0 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba222d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba22238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba22030 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba21d38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3abf08 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3abe90 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3abe40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3abcb0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3abdc8 @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:0x000056371b3abda0&gt;, @mon_data_owner_object_id=25100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3abb48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371ba21978 @client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ba22850 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&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:0x000056371ba22850 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba224e0 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba222d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba22238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba22030 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba21d38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3abf08 @client=#&lt;Ably::Rest::Client:0x000056371ba22f58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3abe90 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3abe40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3abcb0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3abdc8 @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:0x000056371b3abda0&gt;, @mon_data_owner_object_id=25100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3abb48&gt;&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:0x000056371ba21888 @client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3abad0 @client=#&lt;Ably::Realtime::Client:0x000056371ba23278 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3abaa8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3aba58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3ab8c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3ab9e0 @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:0x000056371b3ab968&gt;, @mon_data_owner_object_id=25120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3ab378&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.832001"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b4c3170 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&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:0x000056371b4c02b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&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:0x000056371b4bbbc8 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b4bb4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4bb1f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4bb038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4baed0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3a1df0 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3a1dc8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3a1cb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3a1968 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3a1a80 @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:0x000056371b3a1a30&gt;, @mon_data_owner_object_id=25220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3a1620&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b4bae08 @client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b4c02b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&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:0x000056371b4c02b8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b4bbbc8 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b4bb4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4bb1f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4bb038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4baed0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3a1df0 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3a1dc8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3a1cb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3a1968 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3a1a80 @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:0x000056371b3a1a30&gt;, @mon_data_owner_object_id=25220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3a1620&gt;&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:0x000056371b4bab60 @client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3a1580 @client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3a1558 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3a14e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3a1328 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3a1468 @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:0x000056371b3a1440&gt;, @mon_data_owner_object_id=25240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3a10a8&gt;&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:0x000056371b4c3170 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&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:0x000056371b4c02b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&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:0x000056371b4bbbc8 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b4bb4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4bb1f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4bb038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4baed0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3a1df0 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3a1dc8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3a1cb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3a1968 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3a1a80 @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:0x000056371b3a1a30&gt;, @mon_data_owner_object_id=25220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3a1620&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b4bae08 @client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b4c02b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&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:0x000056371b4c02b8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b4bbbc8 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b4bb4c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4bb1f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4bb038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4baed0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b3a1df0 @client=#&lt;Ably::Rest::Client:0x000056371b4c2c70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3a1dc8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3a1cb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3a1968 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3a1a80 @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:0x000056371b3a1a30&gt;, @mon_data_owner_object_id=25220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3a1620&gt;&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:0x000056371b4bab60 @client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3a1580 @client=#&lt;Ably::Realtime::Client:0x000056371b4c3170 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3a1558 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3a14e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3a1328 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3a1468 @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:0x000056371b3a1440&gt;, @mon_data_owner_object_id=25240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3a10a8&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.624988"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b70e1c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b70df98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&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:0x000056371b70da98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&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:0x000056371b70d700 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b70d4d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b70d430 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b70d318 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b70d188 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b2b88d0 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b2b8858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b2b87e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b2b83d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b2b8510 @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:0x000056371b2b84e8&gt;, @mon_data_owner_object_id=25340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b2b8218&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b70d110 @client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b70da98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b70df98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&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:0x000056371b70da98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b70d700 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b70d4d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b70d430 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b70d318 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b70d188 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b2b88d0 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b2b8858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b2b87e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b2b83d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b2b8510 @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:0x000056371b2b84e8&gt;, @mon_data_owner_object_id=25340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b2b8218&gt;&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:0x000056371b70d0c0 @client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b2b81f0 @client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b2b81c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b2b8088 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371afc79a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371afc7ef0 @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:0x000056371afc7d88&gt;, @mon_data_owner_object_id=25360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371afc6bb8&gt;&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:0x000056371b70e1c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b70df98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&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:0x000056371b70da98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&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:0x000056371b70d700 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b70d4d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b70d430 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b70d318 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b70d188 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b2b88d0 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b2b8858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b2b87e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b2b83d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b2b8510 @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:0x000056371b2b84e8&gt;, @mon_data_owner_object_id=25340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b2b8218&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b70d110 @client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b70da98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b70df98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&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:0x000056371b70da98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b70d700 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b70d4d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b70d430 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b70d318 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b70d188 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b2b88d0 @client=#&lt;Ably::Rest::Client:0x000056371b70df98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b2b8858 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b2b87e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b2b83d0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b2b8510 @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:0x000056371b2b84e8&gt;, @mon_data_owner_object_id=25340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b2b8218&gt;&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:0x000056371b70d0c0 @client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b2b81f0 @client=#&lt;Ably::Realtime::Client:0x000056371b70e1c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b2b81c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b2b8088 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371afc79a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371afc7ef0 @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:0x000056371afc7d88&gt;, @mon_data_owner_object_id=25360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371afc6bb8&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.953285"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b902420 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9021f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&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:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x000056371b901b10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8f8768 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8f8588 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8f84e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8f8448 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8f8308 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b901020 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b900f80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b900e68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b900c88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b900da0 @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:0x000056371b900d28&gt;, @mon_data_owner_object_id=16560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b900a58&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b8f8290 @client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b901b10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&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:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x000056371b901b10 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8f8768 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8f8588 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8f84e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8f8448 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8f8308 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b901020 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b900f80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b900e68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b900c88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b900da0 @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:0x000056371b900d28&gt;, @mon_data_owner_object_id=16560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b900a58&gt;&gt;&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b8f8240 @client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&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:0x000056371b902420 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9021f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&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:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x000056371b901b10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8f8768 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8f8588 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8f84e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8f8448 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8f8308 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b901020 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b900f80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b900e68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b900c88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b900da0 @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:0x000056371b900d28&gt;, @mon_data_owner_object_id=16560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b900a58&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b8f8290 @client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b901b10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&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:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x000056371b901b10 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b8f8768 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b8f8588 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b8f84e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b8f8448 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b8f8308 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b901020 @client=#&lt;Ably::Rest::Client:0x000056371b9021f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b900f80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b900e68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b900c88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b900da0 @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:0x000056371b900d28&gt;, @mon_data_owner_object_id=16560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b900a58&gt;&gt;&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x000056371b891db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b891cc0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b8f8240 @client=#&lt;Ably::Realtime::Client:0x000056371b902420 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.404074"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371ad9c860 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ad96e60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&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:0x000056371ad8f750 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ad8e3c8 @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ad8d1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ad8cf00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ad8ca28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ad8c460 @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:0x000056371ad8c168 @client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ad8f750 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&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:0x000056371ad8f750 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ad8e3c8 @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ad8d1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ad8cf00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ad8ca28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ad8c460 @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:0x000056371ad57fa8 @client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&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:0x000056371ad9c860 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ad96e60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&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:0x000056371ad8f750 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ad8e3c8 @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ad8d1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ad8cf00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ad8ca28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ad8c460 @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:0x000056371ad8c168 @client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ad8f750 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&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:0x000056371ad8f750 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ad8e3c8 @client=#&lt;Ably::Rest::Client:0x000056371ad96e60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ad8d1a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ad8cf00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ad8ca28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ad8c460 @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:0x000056371ad57fa8 @client=#&lt;Ably::Realtime::Client:0x000056371ad9c860 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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 has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="0.002224"></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.000864"></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="33.004943"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b677138 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b676f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&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:0x000056371b676a58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b676f58 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6766c0 @client=#&lt;Ably::Rest::Client:0x000056371b676f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b676328 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b676288 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6761e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6760a8 @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:0x000056371b676030 @client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b676a58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b676f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&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:0x000056371b676a58 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6766c0 @client=#&lt;Ably::Rest::Client:0x000056371b676f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b676328 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b676288 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6761e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6760a8 @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:0x000056371b675fe0 @client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&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:0x000056371b677138 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b676f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&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:0x000056371b676a58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b676f58 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6766c0 @client=#&lt;Ably::Rest::Client:0x000056371b676f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b676328 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b676288 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6761e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6760a8 @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:0x000056371b676030 @client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b676a58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b676f58 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&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:0x000056371b676a58 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6766c0 @client=#&lt;Ably::Rest::Client:0x000056371b676f58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b676328 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b676288 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6761e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6760a8 @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:0x000056371b675fe0 @client=#&lt;Ably::Realtime::Client:0x000056371b677138 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="32.776367"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b8405c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b840460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&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:0x000056371b83baf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b840460 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b83b5a0 @client=#&lt;Ably::Rest::Client:0x000056371b840460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b83b3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b83b320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b83b280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b83b140 @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:0x000056371b83b0c8 @client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b83baf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b840460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&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:0x000056371b83baf0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b83b5a0 @client=#&lt;Ably::Rest::Client:0x000056371b840460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b83b3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b83b320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b83b280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b83b140 @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:0x000056371b83b078 @client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&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:0x000056371b8405c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b840460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&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:0x000056371b83baf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b840460 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b83b5a0 @client=#&lt;Ably::Rest::Client:0x000056371b840460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b83b3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b83b320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b83b280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b83b140 @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:0x000056371b83b0c8 @client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b83baf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b840460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&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:0x000056371b83baf0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b83b5a0 @client=#&lt;Ably::Rest::Client:0x000056371b840460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b83b3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b83b320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b83b280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b83b140 @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:0x000056371b83b078 @client=#&lt;Ably::Realtime::Client:0x000056371b8405c8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.334597"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371a0de3a8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371a0dc508 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&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:0x000056371a0c5c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a0c44a8 @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a10abd8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a10a1d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a109f08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a1092d8 @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:0x000056371a108900 @client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371a0c5c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&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:0x000056371a0c5c18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a0c44a8 @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a10abd8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a10a1d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a109f08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a1092d8 @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:0x000056371a108748 @client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&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:0x000056371a0de3a8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371a0dc508 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&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:0x000056371a0c5c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a0c44a8 @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a10abd8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a10a1d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a109f08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a1092d8 @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:0x000056371a108900 @client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371a0c5c18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&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:0x000056371a0c5c18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a0c44a8 @client=#&lt;Ably::Rest::Client:0x000056371a0dc508 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a10abd8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a10a1d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a109f08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a1092d8 @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:0x000056371a108748 @client=#&lt;Ably::Realtime::Client:0x000056371a0de3a8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.898636"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b51a9c0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b51a600 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&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:0x000056371b51a010 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b51a600 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b519b10 @client=#&lt;Ably::Rest::Client:0x000056371b51a600 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b519728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b519638 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5194f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b519228 @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:0x000056371b5191b0 @client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b51a010 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b51a600 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&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:0x000056371b51a010 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b519b10 @client=#&lt;Ably::Rest::Client:0x000056371b51a600 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b519728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b519638 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5194f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b519228 @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:0x000056371b519138 @client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&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:0x000056371b51a9c0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b51a600 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&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:0x000056371b51a010 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b51a600 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b519b10 @client=#&lt;Ably::Rest::Client:0x000056371b51a600 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b519728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b519638 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5194f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b519228 @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:0x000056371b5191b0 @client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b51a010 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b51a600 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&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:0x000056371b51a010 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b519b10 @client=#&lt;Ably::Rest::Client:0x000056371b51a600 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b519728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b519638 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5194f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b519228 @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:0x000056371b519138 @client=#&lt;Ably::Realtime::Client:0x000056371b51a9c0 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="32.781432"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b7c2a60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7c2808 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&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:0x000056371b7c2448 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7c20b0 @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7c1ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7c1e30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7c1d90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7c1bd8 @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:0x000056371b7c1b60 @client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7c2448 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&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:0x000056371b7c2448 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7c20b0 @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7c1ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7c1e30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7c1d90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7c1bd8 @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:0x000056371b7c1b10 @client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&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:0x000056371b7c2a60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7c2808 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&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:0x000056371b7c2448 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7c20b0 @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7c1ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7c1e30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7c1d90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7c1bd8 @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:0x000056371b7c1b60 @client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7c2448 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&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:0x000056371b7c2448 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7c20b0 @client=#&lt;Ably::Rest::Client:0x000056371b7c2808 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7c1ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7c1e30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7c1d90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7c1bd8 @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:0x000056371b7c1b10 @client=#&lt;Ably::Realtime::Client:0x000056371b7c2a60 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.472623"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b9a2f38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&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:0x000056371b9a29e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9a26a0 @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9a23d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9a22b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9a2218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9a20b0 @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:0x000056371b9a2038 @client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9a29e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&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:0x000056371b9a29e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9a26a0 @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9a23d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9a22b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9a2218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9a20b0 @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:0x000056371b9a1fe8 @client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&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:0x000056371b9a2f38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&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:0x000056371b9a29e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9a26a0 @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9a23d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9a22b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9a2218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9a20b0 @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:0x000056371b9a2038 @client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b9a29e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&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:0x000056371b9a29e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b9a26a0 @client=#&lt;Ably::Rest::Client:0x000056371b9a2da8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9a23d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9a22b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9a2218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9a20b0 @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:0x000056371b9a1fe8 @client=#&lt;Ably::Realtime::Client:0x000056371b9a2f38 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.592165"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b3f21b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b3f2048 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&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:0x000056371b3f1238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b3f0c20 @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b3f05b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b3f03d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b3f0018 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b3ebd10 @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:0x000056371b3ebba8 @client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b3f1238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&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:0x000056371b3f1238 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b3f0c20 @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b3f05b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b3f03d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b3f0018 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b3ebd10 @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:0x000056371b3ebb58 @client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&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:0x000056371b3f21b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b3f2048 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&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:0x000056371b3f1238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b3f0c20 @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b3f05b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b3f03d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b3f0018 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b3ebd10 @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:0x000056371b3ebba8 @client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b3f1238 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&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:0x000056371b3f1238 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b3f0c20 @client=#&lt;Ably::Rest::Client:0x000056371b3f2048 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b3f05b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b3f03d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b3f0018 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b3ebd10 @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:0x000056371b3ebb58 @client=#&lt;Ably::Realtime::Client:0x000056371b3f21b0 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.364398"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b6cdce0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&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:0x000056371b6cd1c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b77bf20 @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b77bd40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b77bca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b77bc00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b77bac0 @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:0x000056371b77ba48 @client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6cd1c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&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:0x000056371b6cd1c8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b77bf20 @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b77bd40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b77bca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b77bc00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b77bac0 @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:0x000056371b77b9f8 @client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&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:0x000056371b6cdce0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&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:0x000056371b6cd1c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b77bf20 @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b77bd40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b77bca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b77bc00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b77bac0 @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:0x000056371b77ba48 @client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6cd1c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&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:0x000056371b6cd1c8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b77bf20 @client=#&lt;Ably::Rest::Client:0x000056371b6cdb28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b77bd40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b77bca0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b77bc00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b77bac0 @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:0x000056371b77b9f8 @client=#&lt;Ably::Realtime::Client:0x000056371b6cdce0 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.299958"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b8f8f60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&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:0x000056371b8f8628 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b99bfa8 @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b99ba30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b99b968 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b99b760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b99b418 @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:0x000056371b99b3a0 @client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8f8628 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&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:0x000056371b8f8628 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b99bfa8 @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b99ba30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b99b968 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b99b760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b99b418 @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:0x000056371b99b300 @client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&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:0x000056371b8f8f60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&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:0x000056371b8f8628 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b99bfa8 @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b99ba30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b99b968 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b99b760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b99b418 @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:0x000056371b99b3a0 @client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8f8628 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&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:0x000056371b8f8628 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b99bfa8 @client=#&lt;Ably::Rest::Client:0x000056371b8f8d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b99ba30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b99b968 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b99b760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b99b418 @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:0x000056371b99b300 @client=#&lt;Ably::Realtime::Client:0x000056371b8f8f60 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="32.724722"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371ae1d050 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ae10fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&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:0x000056371ae10288 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ae031f0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b417b90 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b417960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4178c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4177d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4176b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371adcab98 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371adcaa80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371adca490 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371adc95e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371adc9a40 @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:0x000056371adc9838&gt;, @mon_data_owner_object_id=16740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371adc9090&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b417640 @client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ae10fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ae10fa8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b417b90 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b417960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4178c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4177d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4176b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371adcab98 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371adcaa80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371adca490 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371adc95e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371adc9a40 @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:0x000056371adc9838&gt;, @mon_data_owner_object_id=16740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371adc9090&gt;&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:0x000056371ae10288 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ae031f0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b4175f0 @client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371af56e08 @client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371af56a70 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371af569a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371af55be8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371af56728 @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:0x000056371af566d8&gt;, @mon_data_owner_object_id=25420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371af54978&gt;&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:0x000056371ae1d050 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ae10fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&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:0x000056371ae10288 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ae031f0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b417b90 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b417960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4178c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4177d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4176b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371adcab98 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371adcaa80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371adca490 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371adc95e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371adc9a40 @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:0x000056371adc9838&gt;, @mon_data_owner_object_id=16740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371adc9090&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b417640 @client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ae10fa8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ae10fa8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b417b90 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b417960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b4178c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4177d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b4176b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371adcab98 @client=#&lt;Ably::Rest::Client:0x000056371ae13fc8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371adcaa80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371adca490 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371adc95e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371adc9a40 @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:0x000056371adc9838&gt;, @mon_data_owner_object_id=16740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371adc9090&gt;&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:0x000056371ae10288 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ae031f0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b4175f0 @client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371af56e08 @client=#&lt;Ably::Realtime::Client:0x000056371ae1d050 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371af56a70 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371af569a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371af55be8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371af56728 @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:0x000056371af566d8&gt;, @mon_data_owner_object_id=25420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371af54978&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.238685"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b6bceb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&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:0x000056371b6bc788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6bc3f0 @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6bc1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6bc148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6bc0a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6b7fa8 @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:0x000056371b6b7f30 @client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6bc788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&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:0x000056371b6bc788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6bc3f0 @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6bc1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6bc148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6bc0a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6b7fa8 @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:0x000056371b6b7eb8 @client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&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:0x000056371b6bceb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&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:0x000056371b6bc788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6bc3f0 @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6bc1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6bc148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6bc0a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6b7fa8 @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:0x000056371b6b7f30 @client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b6bc788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&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:0x000056371b6bc788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b6bc3f0 @client=#&lt;Ably::Rest::Client:0x000056371b6bcd00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b6bc1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b6bc148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6bc0a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b6b7fa8 @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:0x000056371b6b7eb8 @client=#&lt;Ably::Realtime::Client:0x000056371b6bceb8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.609434"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b8a0d60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b8a0950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&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:0x000056371b8a00e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b89bc20 @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b89ba40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b89b9a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b89b900 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b89b7e8 @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:0x000056371b89b770 @client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8a00e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&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:0x000056371b8a00e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b89bc20 @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b89ba40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b89b9a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b89b900 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b89b7e8 @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:0x000056371b89b720 @client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&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:0x000056371b8a0d60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b8a0950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&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:0x000056371b8a00e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b89bc20 @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b89ba40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b89b9a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b89b900 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b89b7e8 @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:0x000056371b89b770 @client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b8a00e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&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:0x000056371b8a00e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b89bc20 @client=#&lt;Ably::Rest::Client:0x000056371b8a0950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b89ba40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b89b9a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b89b900 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b89b7e8 @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:0x000056371b89b720 @client=#&lt;Ably::Realtime::Client:0x000056371b8a0d60 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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 tls_port option and a TLS connection uses the custom port for TLS requests" file="./spec/unit/realtime/client_spec.rb" time="34.603348"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371ba61e10 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&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:0x000056371ba618c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba61550 @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba61370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba612d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba61230 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba61118 @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:0x000056371ba610a0 @client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ba618c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&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:0x000056371ba618c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba61550 @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba61370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba612d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba61230 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba61118 @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:0x000056371ba61050 @client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&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:0x000056371ba61e10 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&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:0x000056371ba618c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba61550 @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba61370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba612d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba61230 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba61118 @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:0x000056371ba610a0 @client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ba618c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&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:0x000056371ba618c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba61550 @client=#&lt;Ably::Rest::Client:0x000056371ba61ca8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371ba61370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371ba612d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371ba61230 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371ba61118 @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:0x000056371ba61050 @client=#&lt;Ably::Realtime::Client:0x000056371ba61e10 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.009120"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b5ab650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5ab498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&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:0x000056371b5aaac0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5aa6d8 @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5aa200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5aa0e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5aa048 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5a9dc8 @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:0x000056371b5a9d50 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5aaac0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&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:0x000056371b5aaac0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5aa6d8 @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5aa200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5aa0e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5aa048 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5a9dc8 @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:0x000056371b5a9cd8 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&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:0x000056371b5ab650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5ab498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&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:0x000056371b5aaac0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5aa6d8 @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5aa200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5aa0e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5aa048 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5a9dc8 @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:0x000056371b5a9d50 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5aaac0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&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:0x000056371b5aaac0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5aa6d8 @client=#&lt;Ably::Rest::Client:0x000056371b5ab498 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5aa200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5aa0e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5aa048 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5a9dc8 @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:0x000056371b5a9cd8 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab650 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.002063"></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="34.549766"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b81b700 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b81b570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&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:0x000056371b81b110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b81b570 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b81adc8 @client=#&lt;Ably::Rest::Client:0x000056371b81b570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b81abc0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b81ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b81aa30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b81a918 @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:0x000056371b81a8a0 @client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b81b110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b81b570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&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:0x000056371b81b110 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b81adc8 @client=#&lt;Ably::Rest::Client:0x000056371b81b570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b81abc0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b81ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b81aa30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b81a918 @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:0x000056371b81a800 @client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&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:0x000056371b81b700 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b81b570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&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:0x000056371b81b110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b81b570 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b81adc8 @client=#&lt;Ably::Rest::Client:0x000056371b81b570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b81abc0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b81ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b81aa30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b81a918 @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:0x000056371b81a8a0 @client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b81b110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b81b570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&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:0x000056371b81b110 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b81adc8 @client=#&lt;Ably::Rest::Client:0x000056371b81b570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b81abc0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b81ab20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b81aa30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b81a918 @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:0x000056371b81a800 @client=#&lt;Ably::Realtime::Client:0x000056371b81b700 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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: &quot;invalid:asdad&quot; raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.001568"></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.001290"></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.001053"></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.000937"></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.001247"></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.001071"></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="36.818476"><failure message="expected Ably::Exceptions::PushNotificationsNotSupported, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00005637...y::Realtime::Client:0x000056371b4245e8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.0.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:0x00005637...y::Realtime::Client:0x000056371b4245e8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.0.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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.017090"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b761698 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7614e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&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:0x000056371b760b30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b75b270 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b75af50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b75ade8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b75ac08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b75a690 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ae302e0 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ae301a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ae30128 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ae1fbc0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ae30088 @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:0x000056371ae30038&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ae1f120&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b75a550 @client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b760b30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&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:0x000056371b760b30 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b75b270 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b75af50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b75ade8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b75ac08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b75a690 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ae302e0 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ae301a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ae30128 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ae1fbc0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ae30088 @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:0x000056371ae30038&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ae1f120&gt;&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:0x000056371b75a500 @client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371ae1ef90 @client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ae1ef68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ae1eec8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ae1dbe0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ae1eb58 @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:0x000056371ae1eab8&gt;, @mon_data_owner_object_id=25660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ae1d168&gt;&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:0x000056371b761698 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7614e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&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:0x000056371b760b30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b75b270 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b75af50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b75ade8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b75ac08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b75a690 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ae302e0 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ae301a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ae30128 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ae1fbc0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ae30088 @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:0x000056371ae30038&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ae1f120&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b75a550 @client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b760b30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&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:0x000056371b760b30 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b75b270 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b75af50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b75ade8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b75ac08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b75a690 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ae302e0 @client=#&lt;Ably::Rest::Client:0x000056371b7614e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ae301a0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ae30128 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ae1fbc0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ae30088 @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:0x000056371ae30038&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ae1f120&gt;&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:0x000056371b75a500 @client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371ae1ef90 @client=#&lt;Ably::Realtime::Client:0x000056371b761698 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ae1ef68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ae1eec8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ae1dbe0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ae1eb58 @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:0x000056371ae1eab8&gt;, @mon_data_owner_object_id=25660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ae1d168&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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 passes on the options to the initializer" file="./spec/unit/realtime/client_spec.rb" time="34.037932"><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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.800120"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371a38f778 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371a38d400 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&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:0x000056371a3618f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a38d400 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a3cff58 @client=#&lt;Ably::Rest::Client:0x000056371a38d400 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a3cf008 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a3ced60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a3cda00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a3cd118 @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:0x000056371a3ccc40 @client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371a3618f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a38d400 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&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:0x000056371a3618f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a3cff58 @client=#&lt;Ably::Rest::Client:0x000056371a38d400 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a3cf008 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a3ced60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a3cda00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a3cd118 @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:0x000056371a3a7328 @client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&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:0x000056371a38f778 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371a38d400 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&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:0x000056371a3618f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a38d400 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a3cff58 @client=#&lt;Ably::Rest::Client:0x000056371a38d400 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a3cf008 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a3ced60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a3cda00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a3cd118 @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:0x000056371a3ccc40 @client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371a3618f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a38d400 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&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:0x000056371a3618f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a3cff58 @client=#&lt;Ably::Rest::Client:0x000056371a38d400 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a3cf008 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371a3ced60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371a3cda00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371a3cd118 @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:0x000056371a3a7328 @client=#&lt;Ably::Realtime::Client:0x000056371a38f778 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.864478"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b619510 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b619240 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&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:0x000056371b612508 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b619240 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b611810 @client=#&lt;Ably::Rest::Client:0x000056371b619240 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b611518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b611478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6113d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b611248 @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:0x000056371b6111d0 @client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b612508 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b619240 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&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:0x000056371b612508 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b611810 @client=#&lt;Ably::Rest::Client:0x000056371b619240 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b611518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b611478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6113d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b611248 @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:0x000056371b611180 @client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&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:0x000056371b619510 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b619240 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&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:0x000056371b612508 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b619240 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b611810 @client=#&lt;Ably::Rest::Client:0x000056371b619240 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b611518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b611478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6113d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b611248 @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:0x000056371b6111d0 @client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b612508 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b619240 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&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:0x000056371b612508 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b611810 @client=#&lt;Ably::Rest::Client:0x000056371b619240 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b611518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b611478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b6113d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b611248 @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:0x000056371b611180 @client=#&lt;Ably::Realtime::Client:0x000056371b619510 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.289125"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b87b628 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&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:0x000056371b87afc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b87ab60 @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b87a840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b87a7a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b87a6d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b87a570 @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:0x000056371b87a4f8 @client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b87afc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&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:0x000056371b87afc0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b87ab60 @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b87a840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b87a7a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b87a6d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b87a570 @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:0x000056371b87a480 @client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&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:0x000056371b87b628 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&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:0x000056371b87afc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b87ab60 @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b87a840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b87a7a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b87a6d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b87a570 @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:0x000056371b87a4f8 @client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b87afc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&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:0x000056371b87afc0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b87ab60 @client=#&lt;Ably::Rest::Client:0x000056371b87b4c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b87a840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b87a7a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b87a6d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b87a570 @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:0x000056371b87a480 @client=#&lt;Ably::Realtime::Client:0x000056371b87b628 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.285720"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371a01a958 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371a01a570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&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:0x0000563719fdc658 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a01a570 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a013cc0 @client=#&lt;Ably::Rest::Client:0x000056371a01a570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a010e80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000563719ff9988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000563719ff8268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000563719fd6a00 @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:0x0000563719fd52e0 @client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000563719fdc658 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a01a570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&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:0x0000563719fdc658 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a013cc0 @client=#&lt;Ably::Rest::Client:0x000056371a01a570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a010e80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000563719ff9988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000563719ff8268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000563719fd6a00 @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:0x0000563719fd5010 @client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&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:0x000056371a01a958 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371a01a570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&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:0x0000563719fdc658 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a01a570 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a013cc0 @client=#&lt;Ably::Rest::Client:0x000056371a01a570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a010e80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000563719ff9988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000563719ff8268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000563719fd6a00 @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:0x0000563719fd52e0 @client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000563719fdc658 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371a01a570 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&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:0x0000563719fdc658 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371a013cc0 @client=#&lt;Ably::Rest::Client:0x000056371a01a570 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371a010e80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000563719ff9988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000563719ff8268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000563719fd6a00 @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:0x0000563719fd5010 @client=#&lt;Ably::Realtime::Client:0x000056371a01a958 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.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.001454"></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.000797"></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.000941"></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.000715"></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.000767"></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.000916"></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.000816"></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.000891"></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.000676"></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.000617"></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.000626"></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.000697"></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.000747"></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.000733"></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.000930"></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.000713"></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.000903"></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.000722"></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.000927"></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.000765"></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.000779"></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.000805"></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.000611"></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.000694"></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.000856"></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.000792"></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.000891"></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.000746"></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.000725"></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.000676"></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.000710"></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.000705"></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.000703"></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.001186"></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.001102"></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.000745"></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.000740"></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.001174"></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.001115"></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.001069"></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.001074"></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.001059"></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.000979"></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.000952"></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.000743"></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.001069"></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.001082"></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.001082"></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.000967"></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.001202"></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.000975"></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.000935"></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.001112"></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.000974"></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.000760"></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.000766"></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.000774"></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.003529"></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.001203"></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.001139"></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.000841"></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.001091"></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.000994"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence msgbus supports messages" file="./spec/unit/realtime/presence_spec.rb" time="0.001315"></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.000918"></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.000905"></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.000891"></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.001312"></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.001217"></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.001231"></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.001305"></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.001206"></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.001755"></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.001223"></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.001258"></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.000904"></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.001157"></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.000726"></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.000820"></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.000705"></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.000751"></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.000763"></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.000771"></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.000801"></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.000726"></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.000775"></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.070830"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c34f2e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c34f180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&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:0x000056371c34ec80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c34f180 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c34e938 @client=#&lt;Ably::Rest::Client:0x000056371c34f180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c34e758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c34e6b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c34e618 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c34e500 @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:0x000056371c34e488 @client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c34ec80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c34f180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&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:0x000056371c34ec80 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c34e938 @client=#&lt;Ably::Rest::Client:0x000056371c34f180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c34e758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c34e6b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c34e618 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c34e500 @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:0x000056371c34e438 @client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&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:0x000056371c34f2e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c34f180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&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:0x000056371c34ec80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c34f180 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c34e938 @client=#&lt;Ably::Rest::Client:0x000056371c34f180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c34e758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c34e6b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c34e618 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c34e500 @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:0x000056371c34e488 @client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c34ec80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c34f180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&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:0x000056371c34ec80 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c34e938 @client=#&lt;Ably::Rest::Client:0x000056371c34f180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c34e758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c34e6b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c34e618 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c34e500 @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:0x000056371c34e438 @client=#&lt;Ably::Realtime::Client:0x000056371c34f2e8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.061156"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c49e450 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c49dd20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&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:0x000056371c49d938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c49d820 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c494e50 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c494c70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c494bd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c494b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c494a18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c497510 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c497498 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4973a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4971f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4972e0 @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:0x000056371c497290&gt;, @mon_data_owner_object_id=17980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c497060&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c4949a0 @client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c49dd20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c49dd20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c494e50 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c494c70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c494bd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c494b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c494a18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c497510 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c497498 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4973a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4971f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4972e0 @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:0x000056371c497290&gt;, @mon_data_owner_object_id=17980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c497060&gt;&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:0x000056371c49d938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c49d820 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c494950 @client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371adf0578 @client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371adf0550 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371adf04d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371adeb870 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371adf0208 @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:0x000056371adf01e0&gt;, @mon_data_owner_object_id=25720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371adeb028&gt;&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:0x000056371c49e450 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c49dd20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&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:0x000056371c49d938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c49d820 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c494e50 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c494c70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c494bd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c494b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c494a18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c497510 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c497498 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4973a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4971f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4972e0 @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:0x000056371c497290&gt;, @mon_data_owner_object_id=17980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c497060&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c4949a0 @client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c49dd20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c49dd20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c494e50 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c494c70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c494bd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c494b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c494a18 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c497510 @client=#&lt;Ably::Rest::Client:0x000056371c49e2c0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c497498 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4973a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4971f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4972e0 @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:0x000056371c497290&gt;, @mon_data_owner_object_id=17980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c497060&gt;&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:0x000056371c49d938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c49d820 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c494950 @client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371adf0578 @client=#&lt;Ably::Realtime::Client:0x000056371c49e450 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371adf0550 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371adf04d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371adeb870 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371adf0208 @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:0x000056371adf01e0&gt;, @mon_data_owner_object_id=25720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371adeb028&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.526617"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c5e5f98 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c5e5958 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&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:0x000056371c5e56d8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c5e5610 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5dcd30 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5dcb50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5dcab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5dca10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5dc8f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c5df3c8 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5df350 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5df260 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5df0a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5df198 @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:0x000056371c5df148&gt;, @mon_data_owner_object_id=18160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5def18&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c5dc880 @client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c5e5958 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c5e5958 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5dcd30 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5dcb50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5dcab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5dca10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5dc8f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c5df3c8 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5df350 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5df260 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5df0a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5df198 @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:0x000056371c5df148&gt;, @mon_data_owner_object_id=18160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5def18&gt;&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:0x000056371c5e56d8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c5e5610 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c5dc830 @client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b45a328 @client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b45a210 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b45a1c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b459c70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b45a120 @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:0x000056371b459e50&gt;, @mon_data_owner_object_id=25780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4599a0&gt;&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:0x000056371c5e5f98 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c5e5958 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&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:0x000056371c5e56d8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c5e5610 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5dcd30 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5dcb50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5dcab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5dca10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5dc8f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c5df3c8 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5df350 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5df260 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5df0a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5df198 @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:0x000056371c5df148&gt;, @mon_data_owner_object_id=18160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5def18&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c5dc880 @client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c5e5958 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c5e5958 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5dcd30 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5dcb50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5dcab0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5dca10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5dc8f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c5df3c8 @client=#&lt;Ably::Rest::Client:0x000056371c5e5e30 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5df350 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5df260 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5df0a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5df198 @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:0x000056371c5df148&gt;, @mon_data_owner_object_id=18160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5def18&gt;&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:0x000056371c5e56d8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c5e5610 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c5dc830 @client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b45a328 @client=#&lt;Ably::Realtime::Client:0x000056371c5e5f98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b45a210 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b45a1c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b459c70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b45a120 @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:0x000056371b459e50&gt;, @mon_data_owner_object_id=25780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4599a0&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.887324"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c72c280 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c72c118 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c727c08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&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:0x000056371c727988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c7278c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c71f008 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c71ee28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c71ed88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c71ece8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c71ebd0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c7256d8 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c725660 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c725570 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c7253b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c7254a8 @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:0x000056371c725458&gt;, @mon_data_owner_object_id=18340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c725228&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c71eb58 @client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c727c08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c72c118 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c727c08 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c71f008 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c71ee28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c71ed88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c71ece8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c71ebd0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c7256d8 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c725660 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c725570 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c7253b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c7254a8 @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:0x000056371c725458&gt;, @mon_data_owner_object_id=18340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c725228&gt;&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:0x000056371c727988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c7278c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c71eb08 @client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b451ed0 @client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b451ea8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b451e08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b451c50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b451d90 @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:0x000056371b451d68&gt;, @mon_data_owner_object_id=25840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b451a70&gt;&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:0x000056371c72c280 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c72c118 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c727c08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&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:0x000056371c727988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c7278c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c71f008 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c71ee28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c71ed88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c71ece8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c71ebd0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c7256d8 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c725660 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c725570 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c7253b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c7254a8 @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:0x000056371c725458&gt;, @mon_data_owner_object_id=18340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c725228&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c71eb58 @client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c727c08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c72c118 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c727c08 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c71f008 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c71ee28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c71ed88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c71ece8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c71ebd0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c7256d8 @client=#&lt;Ably::Rest::Client:0x000056371c72c118 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c725660 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c725570 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c7253b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c7254a8 @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:0x000056371c725458&gt;, @mon_data_owner_object_id=18340&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c725228&gt;&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:0x000056371c727988 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c7278c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c71eb08 @client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b451ed0 @client=#&lt;Ably::Realtime::Client:0x000056371c72c280 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b451ea8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b451e08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b451c50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b451d90 @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:0x000056371b451d68&gt;, @mon_data_owner_object_id=25840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b451a70&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="32.745749"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b5f9008 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5f8860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&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:0x000056371b5f8518 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5f83d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e1ca0 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e18e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e1818 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e1728 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e1520 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b5ebb60 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b5ebac0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b5eb8e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5eb610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b5eb7c8 @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:0x000056371b5eb728&gt;, @mon_data_owner_object_id=18520&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5eb3b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b5e1458 @client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5f8860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5f8860 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e1ca0 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e18e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e1818 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e1728 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e1520 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b5ebb60 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b5ebac0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b5eb8e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5eb610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b5eb7c8 @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:0x000056371b5eb728&gt;, @mon_data_owner_object_id=18520&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5eb3b8&gt;&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:0x000056371b5f8518 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5f83d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b5e1408 @client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b43b450 @client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b43b220 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b43b1a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b43ad20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b43b0e0 @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:0x000056371b43afc8&gt;, @mon_data_owner_object_id=25900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b43a7f8&gt;&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:0x000056371b5f9008 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5f8860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&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:0x000056371b5f8518 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5f83d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e1ca0 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e18e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e1818 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e1728 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e1520 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b5ebb60 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b5ebac0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b5eb8e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5eb610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b5eb7c8 @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:0x000056371b5eb728&gt;, @mon_data_owner_object_id=18520&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5eb3b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b5e1458 @client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5f8860 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5f8860 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b5e1ca0 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b5e18e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b5e1818 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b5e1728 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b5e1520 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b5ebb60 @client=#&lt;Ably::Rest::Client:0x000056371b5f8e50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b5ebac0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b5eb8e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5eb610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b5eb7c8 @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:0x000056371b5eb728&gt;, @mon_data_owner_object_id=18520&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5eb3b8&gt;&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:0x000056371b5f8518 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5f83d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b5e1408 @client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b43b450 @client=#&lt;Ably::Realtime::Client:0x000056371b5f9008 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b43b220 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b43b1a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b43ad20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b43b0e0 @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:0x000056371b43afc8&gt;, @mon_data_owner_object_id=25900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b43a7f8&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="37.350804"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b8990b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b898f48 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b898a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&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:0x000056371b8987c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b898700 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b88a588 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b88a038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b889f70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b889e58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b889d40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b8921c0 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b892148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b892058 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b891e50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b891f90 @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:0x000056371b891f40&gt;, @mon_data_owner_object_id=18700&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b891c48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b889cc8 @client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b898a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b898f48 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b898a70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b88a588 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b88a038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b889f70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b889e58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b889d40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b8921c0 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b892148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b892058 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b891e50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b891f90 @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:0x000056371b891f40&gt;, @mon_data_owner_object_id=18700&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b891c48&gt;&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:0x000056371b8987c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b898700 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b889c78 @client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4331d8 @client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b433110 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b432ff8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b432cd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b432e40 @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:0x000056371b432df0&gt;, @mon_data_owner_object_id=25960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b432a08&gt;&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:0x000056371b8990b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b898f48 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b898a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&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:0x000056371b8987c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b898700 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b88a588 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b88a038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b889f70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b889e58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b889d40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b8921c0 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b892148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b892058 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b891e50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b891f90 @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:0x000056371b891f40&gt;, @mon_data_owner_object_id=18700&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b891c48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b889cc8 @client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b898a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b898f48 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b898a70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b88a588 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b88a038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b889f70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b889e58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b889d40 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b8921c0 @client=#&lt;Ably::Rest::Client:0x000056371b898f48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b892148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b892058 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b891e50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b891f90 @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:0x000056371b891f40&gt;, @mon_data_owner_object_id=18700&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b891c48&gt;&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:0x000056371b8987c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b898700 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b889c78 @client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4331d8 @client=#&lt;Ably::Realtime::Client:0x000056371b8990b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b433110 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b432ff8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b432cd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b432e40 @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:0x000056371b432df0&gt;, @mon_data_owner_object_id=25960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b432a08&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.746514"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00005637...y::Realtime::Client:0x000056371c124108 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.0.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:0x00005637...y::Realtime::Client:0x000056371c124108 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.0.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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.123112"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c2e5410 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c2e4dd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&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:0x000056371c2e4b50 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2e4a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c2dc1f8 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c2dc018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2d7f68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c2d7ec8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c2d7db0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c2de890 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c2de818 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c2de728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c2de570 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c2de660 @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:0x000056371c2de610&gt;, @mon_data_owner_object_id=19060&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c2de3e0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c2d7d38 @client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c2e4dd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c2e4dd0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c2dc1f8 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c2dc018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2d7f68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c2d7ec8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c2d7db0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c2de890 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c2de818 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c2de728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c2de570 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c2de660 @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:0x000056371c2de610&gt;, @mon_data_owner_object_id=19060&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c2de3e0&gt;&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:0x000056371c2e4b50 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2e4a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c2d7ce8 @client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b41cc30 @client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b41cc08 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b41cb90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b41c9d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b41cb18 @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:0x000056371b41caf0&gt;, @mon_data_owner_object_id=26080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b41c1b8&gt;&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:0x000056371c2e5410 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c2e4dd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&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:0x000056371c2e4b50 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2e4a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c2dc1f8 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c2dc018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2d7f68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c2d7ec8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c2d7db0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c2de890 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c2de818 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c2de728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c2de570 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c2de660 @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:0x000056371c2de610&gt;, @mon_data_owner_object_id=19060&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c2de3e0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c2d7d38 @client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c2e4dd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c2e4dd0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c2dc1f8 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c2dc018 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2d7f68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c2d7ec8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c2d7db0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c2de890 @client=#&lt;Ably::Rest::Client:0x000056371c2e52a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c2de818 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c2de728 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c2de570 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c2de660 @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:0x000056371c2de610&gt;, @mon_data_owner_object_id=19060&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c2de3e0&gt;&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:0x000056371c2e4b50 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2e4a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c2d7ce8 @client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b41cc30 @client=#&lt;Ably::Realtime::Client:0x000056371c2e5410 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b41cc08 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b41cb90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b41c9d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b41cb18 @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:0x000056371b41caf0&gt;, @mon_data_owner_object_id=26080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b41c1b8&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.211524"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c41f790 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c41f628 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c41f150 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&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:0x000056371c41eed0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c41ee08 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c416528 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c416348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c4162a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c416208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c4160f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c41cbf8 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c41cb80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c41ca90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c41c8d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c41c9c8 @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:0x000056371c41c978&gt;, @mon_data_owner_object_id=19240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c41c748&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c416078 @client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c41f150 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c41f628 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c41f150 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c416528 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c416348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c4162a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c416208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c4160f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c41cbf8 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c41cb80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c41ca90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c41c8d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c41c9c8 @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:0x000056371c41c978&gt;, @mon_data_owner_object_id=19240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c41c748&gt;&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:0x000056371c41eed0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c41ee08 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c416028 @client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b408f00 @client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b408eb0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b408e38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b408c80 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b408dc0 @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:0x000056371b408d70&gt;, @mon_data_owner_object_id=26140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b408870&gt;&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:0x000056371c41f790 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c41f628 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c41f150 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&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:0x000056371c41eed0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c41ee08 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c416528 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c416348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c4162a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c416208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c4160f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c41cbf8 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c41cb80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c41ca90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c41c8d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c41c9c8 @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:0x000056371c41c978&gt;, @mon_data_owner_object_id=19240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c41c748&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c416078 @client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c41f150 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c41f628 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c41f150 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c416528 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c416348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c4162a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c416208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c4160f0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c41cbf8 @client=#&lt;Ably::Rest::Client:0x000056371c41f628 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c41cb80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c41ca90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c41c8d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c41c9c8 @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:0x000056371c41c978&gt;, @mon_data_owner_object_id=19240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c41c748&gt;&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:0x000056371c41eed0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c41ee08 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c416028 @client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b408f00 @client=#&lt;Ably::Realtime::Client:0x000056371c41f790 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b408eb0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b408e38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b408c80 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b408dc0 @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:0x000056371b408d70&gt;, @mon_data_owner_object_id=26140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b408870&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.881259"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c55ebd8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c55ea70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c55e570 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&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:0x000056371c55e2f0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c55e228 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5b5960 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5b5780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5b56e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5b5640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5b5528 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c55c040 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5b7fa8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5b7eb8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5b7d00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5b7df0 @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:0x000056371c5b7da0&gt;, @mon_data_owner_object_id=19420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5b7b70&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c5b54b0 @client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c55e570 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c55e570 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5b5960 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5b5780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5b56e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5b5640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5b5528 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c55c040 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5b7fa8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5b7eb8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5b7d00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5b7df0 @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:0x000056371c5b7da0&gt;, @mon_data_owner_object_id=19420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5b7b70&gt;&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:0x000056371c55e2f0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c55e228 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c5b5460 @client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3fb9b8 @client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3fb968 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3fb8c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3fb5a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3fb7b0 @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:0x000056371b3fb738&gt;, @mon_data_owner_object_id=26200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3f8678&gt;&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:0x000056371c55ebd8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c55ea70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c55e570 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&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:0x000056371c55e2f0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c55e228 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5b5960 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5b5780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5b56e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5b5640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5b5528 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c55c040 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5b7fa8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5b7eb8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5b7d00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5b7df0 @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:0x000056371c5b7da0&gt;, @mon_data_owner_object_id=19420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5b7b70&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c5b54b0 @client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c55e570 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c55e570 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c5b5960 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c5b5780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c5b56e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5b5640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5b5528 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c55c040 @client=#&lt;Ably::Rest::Client:0x000056371c55ea70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c5b7fa8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c5b7eb8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c5b7d00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c5b7df0 @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:0x000056371c5b7da0&gt;, @mon_data_owner_object_id=19420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c5b7b70&gt;&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:0x000056371c55e2f0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c55e228 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c5b5460 @client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3fb9b8 @client=#&lt;Ably::Realtime::Client:0x000056371c55ebd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3fb968 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3fb8c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3fb5a8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3fb7b0 @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:0x000056371b3fb738&gt;, @mon_data_owner_object_id=26200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3f8678&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.005379"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c6fe858 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c6fe218 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&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:0x000056371c6fdf98 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c6fded0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c6f55f0 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c6f5410 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c6f5370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c6f52d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c6f51b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c6f7cd8 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c6f7c60 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c6f7b70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c6f79b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c6f7aa8 @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:0x000056371c6f7a58&gt;, @mon_data_owner_object_id=19600&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c6f7828&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c6f5140 @client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c6fe218 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c6fe218 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c6f55f0 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c6f5410 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c6f5370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c6f52d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c6f51b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c6f7cd8 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c6f7c60 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c6f7b70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c6f79b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c6f7aa8 @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:0x000056371c6f7a58&gt;, @mon_data_owner_object_id=19600&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c6f7828&gt;&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:0x000056371c6fdf98 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c6fded0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c6f50f0 @client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3d77c0 @client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3d7798 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3d7720 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3d74a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3d7630 @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:0x000056371b3d7590&gt;, @mon_data_owner_object_id=26260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3d7310&gt;&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:0x000056371c6fe858 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c6fe218 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&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:0x000056371c6fdf98 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c6fded0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c6f55f0 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c6f5410 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c6f5370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c6f52d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c6f51b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c6f7cd8 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c6f7c60 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c6f7b70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c6f79b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c6f7aa8 @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:0x000056371c6f7a58&gt;, @mon_data_owner_object_id=19600&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c6f7828&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c6f5140 @client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c6fe218 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c6fe218 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c6f55f0 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c6f5410 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c6f5370 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c6f52d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c6f51b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c6f7cd8 @client=#&lt;Ably::Rest::Client:0x000056371c6fe6f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c6f7c60 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c6f7b70 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c6f79b8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c6f7aa8 @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:0x000056371c6f7a58&gt;, @mon_data_owner_object_id=19600&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c6f7828&gt;&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:0x000056371c6fdf98 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c6fded0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c6f50f0 @client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3d77c0 @client=#&lt;Ably::Realtime::Client:0x000056371c6fe858 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3d7798 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3d7720 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3d74a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3d7630 @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:0x000056371b3d7590&gt;, @mon_data_owner_object_id=26260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3d7310&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.961681"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b5ab6a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5ab448 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5aa818 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&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:0x000056371b5aa070 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5a9d78 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b573890 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b573598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b573408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b573138 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b572fa8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b57bbd0 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b57b928 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b57b770 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b57b568 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b57b658 @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:0x000056371b57b608&gt;, @mon_data_owner_object_id=19780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b57b180&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b572ee0 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5aa818 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5aa818 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b573890 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b573598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b573408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b573138 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b572fa8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b57bbd0 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b57b928 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b57b770 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b57b568 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b57b658 @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:0x000056371b57b608&gt;, @mon_data_owner_object_id=19780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b57b180&gt;&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:0x000056371b5aa070 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5a9d78 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b572e90 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3cf0e8 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3cf0c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3cf048 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3cecb0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3ceee0 @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:0x000056371b3cee68&gt;, @mon_data_owner_object_id=26320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3cead0&gt;&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:0x000056371b5ab6a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b5ab448 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5aa818 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&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:0x000056371b5aa070 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5a9d78 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b573890 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b573598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b573408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b573138 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b572fa8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b57bbd0 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b57b928 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b57b770 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b57b568 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b57b658 @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:0x000056371b57b608&gt;, @mon_data_owner_object_id=19780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b57b180&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b572ee0 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b5aa818 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b5aa818 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b573890 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b573598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b573408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b573138 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b572fa8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b57bbd0 @client=#&lt;Ably::Rest::Client:0x000056371b5ab448 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b57b928 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b57b770 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b57b568 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b57b658 @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:0x000056371b57b608&gt;, @mon_data_owner_object_id=19780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b57b180&gt;&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:0x000056371b5aa070 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b5a9d78 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b572e90 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b3cf0e8 @client=#&lt;Ably::Realtime::Client:0x000056371b5ab6a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b3cf0c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b3cf048 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b3cecb0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b3ceee0 @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:0x000056371b3cee68&gt;, @mon_data_owner_object_id=26320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b3cead0&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.039320"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b86a738 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b86a030 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&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:0x000056371b869db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b869ce8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b85ab58 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b85a928 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b85a888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b85a7e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b85a630 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b863320 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b863258 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b863118 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b862e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b862fb0 @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:0x000056371b862f10&gt;, @mon_data_owner_object_id=19960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b862948&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b85a478 @client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b86a030 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b86a030 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b85ab58 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b85a928 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b85a888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b85a7e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b85a630 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b863320 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b863258 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b863118 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b862e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b862fb0 @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:0x000056371b862f10&gt;, @mon_data_owner_object_id=19960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b862948&gt;&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:0x000056371b869db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b869ce8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b85a400 @client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4fa3c8 @client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4f9ea0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4f99f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4f9658 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4f9810 @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:0x000056371b4f9720&gt;, @mon_data_owner_object_id=26380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4f9478&gt;&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:0x000056371b86a738 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b86a030 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&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:0x000056371b869db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b869ce8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b85ab58 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b85a928 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b85a888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b85a7e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b85a630 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b863320 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b863258 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b863118 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b862e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b862fb0 @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:0x000056371b862f10&gt;, @mon_data_owner_object_id=19960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b862948&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b85a478 @client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b86a030 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b86a030 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b85ab58 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b85a928 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b85a888 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b85a7e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b85a630 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b863320 @client=#&lt;Ably::Rest::Client:0x000056371b86a5d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b863258 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b863118 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b862e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b862fb0 @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:0x000056371b862f10&gt;, @mon_data_owner_object_id=19960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b862948&gt;&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:0x000056371b869db0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b869ce8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b85a400 @client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4fa3c8 @client=#&lt;Ably::Realtime::Client:0x000056371b86a738 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4f9ea0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4f99f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4f9658 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4f9810 @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:0x000056371b4f9720&gt;, @mon_data_owner_object_id=26380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4f9478&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.011721"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c0e6b00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c0e6998 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c0e63a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&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:0x000056371c0e6010 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c0e5ed0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c0b8fe8 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c0b8d18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c0b8c78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c0b8bb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c0b8a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c0bba40 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c0bb9c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c0bb8d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c0bb720 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c0bb810 @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:0x000056371c0bb7c0&gt;, @mon_data_owner_object_id=20140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0bb590&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c0b89a8 @client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c0e63a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c0e63a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c0b8fe8 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c0b8d18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c0b8c78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c0b8bb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c0b8a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c0bba40 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c0bb9c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c0bb8d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c0bb720 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c0bb810 @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:0x000056371c0bb7c0&gt;, @mon_data_owner_object_id=20140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0bb590&gt;&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:0x000056371c0e6010 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c0e5ed0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c0b8958 @client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4f0b48 @client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4f0b20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4f0ad0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4f08c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4f0a58 @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:0x000056371b4f0a08&gt;, @mon_data_owner_object_id=26440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4f0620&gt;&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:0x000056371c0e6b00 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c0e6998 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c0e63a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&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:0x000056371c0e6010 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c0e5ed0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c0b8fe8 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c0b8d18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c0b8c78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c0b8bb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c0b8a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c0bba40 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c0bb9c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c0bb8d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c0bb720 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c0bb810 @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:0x000056371c0bb7c0&gt;, @mon_data_owner_object_id=20140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0bb590&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c0b89a8 @client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c0e63a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c0e63a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c0b8fe8 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c0b8d18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c0b8c78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c0b8bb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c0b8a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c0bba40 @client=#&lt;Ably::Rest::Client:0x000056371c0e6998 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c0bb9c8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c0bb8d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c0bb720 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c0bb810 @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:0x000056371c0bb7c0&gt;, @mon_data_owner_object_id=20140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0bb590&gt;&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:0x000056371c0e6010 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c0e5ed0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c0b8958 @client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4f0b48 @client=#&lt;Ably::Realtime::Client:0x000056371c0e6b00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4f0b20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4f0ad0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4f08c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4f0a58 @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:0x000056371b4f0a08&gt;, @mon_data_owner_object_id=26440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4f0620&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.236606"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c224df0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c224c88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c224788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&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:0x000056371c2244b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2243f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c217b50 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c217970 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2178d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c217830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c217718 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c21e220 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c21e1a8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c21e0b8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c21df00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c21dff0 @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:0x000056371c21dfa0&gt;, @mon_data_owner_object_id=20320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c21dd70&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c2176a0 @client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c224788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c224c88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c224788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c217b50 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c217970 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2178d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c217830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c217718 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c21e220 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c21e1a8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c21e0b8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c21df00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c21dff0 @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:0x000056371c21dfa0&gt;, @mon_data_owner_object_id=20320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c21dd70&gt;&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:0x000056371c2244b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2243f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c217650 @client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4e1940 @client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4e1918 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4e18c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4e1788 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4e1850 @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:0x000056371b4e1828&gt;, @mon_data_owner_object_id=26500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4e15f8&gt;&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:0x000056371c224df0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c224c88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c224788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&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:0x000056371c2244b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2243f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c217b50 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c217970 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2178d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c217830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c217718 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c21e220 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c21e1a8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c21e0b8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c21df00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c21dff0 @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:0x000056371c21dfa0&gt;, @mon_data_owner_object_id=20320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c21dd70&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c2176a0 @client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c224788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c224c88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c224788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c217b50 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c217970 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c2178d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c217830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c217718 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c21e220 @client=#&lt;Ably::Rest::Client:0x000056371c224c88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c21e1a8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c21e0b8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c21df00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c21dff0 @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:0x000056371c21dfa0&gt;, @mon_data_owner_object_id=20320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c21dd70&gt;&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:0x000056371c2244b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c2243f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c217650 @client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4e1940 @client=#&lt;Ably::Realtime::Client:0x000056371c224df0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4e1918 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4e18c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4e1788 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4e1850 @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:0x000056371b4e1828&gt;, @mon_data_owner_object_id=26500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4e15f8&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.436442"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c3c4ae8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c3c4980 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c3c44a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&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:0x000056371c3c4228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c3c4160 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c3b7848 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c3b7668 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c3b75c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c3b7528 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c3b7410 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c3bdef0 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c3bde78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c3bdd88 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c3bdbd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c3bdcc0 @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:0x000056371c3bdc70&gt;, @mon_data_owner_object_id=20500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c3bda40&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c3b7398 @client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c3c44a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c3c44a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c3b7848 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c3b7668 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c3b75c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c3b7528 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c3b7410 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c3bdef0 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c3bde78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c3bdd88 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c3bdbd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c3bdcc0 @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:0x000056371c3bdc70&gt;, @mon_data_owner_object_id=20500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c3bda40&gt;&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:0x000056371c3c4228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c3c4160 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c3b7348 @client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4d8f48 @client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4d8f20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4d8e80 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4d8c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4d8de0 @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:0x000056371b4d8db8&gt;, @mon_data_owner_object_id=26560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4d8930&gt;&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:0x000056371c3c4ae8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c3c4980 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c3c44a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&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:0x000056371c3c4228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c3c4160 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c3b7848 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c3b7668 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c3b75c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c3b7528 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c3b7410 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c3bdef0 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c3bde78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c3bdd88 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c3bdbd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c3bdcc0 @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:0x000056371c3bdc70&gt;, @mon_data_owner_object_id=20500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c3bda40&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c3b7398 @client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c3c44a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c3c44a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c3b7848 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c3b7668 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c3b75c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c3b7528 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c3b7410 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c3bdef0 @client=#&lt;Ably::Rest::Client:0x000056371c3c4980 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c3bde78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c3bdd88 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c3bdbd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c3bdcc0 @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:0x000056371c3bdc70&gt;, @mon_data_owner_object_id=20500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c3bda40&gt;&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:0x000056371c3c4228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c3c4160 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c3b7348 @client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4d8f48 @client=#&lt;Ably::Realtime::Client:0x000056371c3c4ae8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4d8f20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4d8e80 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4d8c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4d8de0 @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:0x000056371b4d8db8&gt;, @mon_data_owner_object_id=26560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4d8930&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.078258"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c4f6588 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c4f5de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&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:0x000056371c4f5b60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c4f5a98 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c547c08 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c547a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c547960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5478c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5477a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c4ee6a8 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c4ee630 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4ee540 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4ee068 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4ee180 @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:0x000056371c4ee108&gt;, @mon_data_owner_object_id=20680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c4ede60&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c547730 @client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c4f5de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c4f5de0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c547c08 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c547a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c547960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5478c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5477a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c4ee6a8 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c4ee630 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4ee540 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4ee068 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4ee180 @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:0x000056371c4ee108&gt;, @mon_data_owner_object_id=20680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c4ede60&gt;&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:0x000056371c4f5b60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c4f5a98 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c5476e0 @client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4d0bb8 @client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4d0a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4d09b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4d0848 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4d0938 @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:0x000056371b4d0910&gt;, @mon_data_owner_object_id=26620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4d0528&gt;&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:0x000056371c4f6588 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c4f5de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&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:0x000056371c4f5b60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c4f5a98 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c547c08 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c547a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c547960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5478c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5477a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c4ee6a8 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c4ee630 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4ee540 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4ee068 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4ee180 @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:0x000056371c4ee108&gt;, @mon_data_owner_object_id=20680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c4ede60&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c547730 @client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c4f5de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c4f5de0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c547c08 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c547a00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c547960 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c5478c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c5477a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c4ee6a8 @client=#&lt;Ably::Rest::Client:0x000056371c4f62e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c4ee630 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c4ee540 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c4ee068 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c4ee180 @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:0x000056371c4ee108&gt;, @mon_data_owner_object_id=20680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c4ede60&gt;&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:0x000056371c4f5b60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c4f5a98 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c5476e0 @client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4d0bb8 @client=#&lt;Ably::Realtime::Client:0x000056371c4f6588 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4d0a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4d09b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4d0848 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4d0938 @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:0x000056371b4d0910&gt;, @mon_data_owner_object_id=26620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4d0528&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.477606"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c686678 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c686510 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c686038 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&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:0x000056371c685c00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c685b38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c67d0a0 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c67cec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c67ce20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c67cd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c67cc68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c67f850 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c67f7d8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c67f6e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c67f530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c67f620 @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:0x000056371c67f5d0&gt;, @mon_data_owner_object_id=20860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c67f3a0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c67cbf0 @client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c686038 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c686510 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c686038 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c67d0a0 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c67cec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c67ce20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c67cd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c67cc68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c67f850 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c67f7d8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c67f6e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c67f530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c67f620 @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:0x000056371c67f5d0&gt;, @mon_data_owner_object_id=20860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c67f3a0&gt;&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:0x000056371c685c00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c685b38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c67cba0 @client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4c8328 @client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4c82d8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4c8148 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4c3f08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4c8080 @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:0x000056371b4c8058&gt;, @mon_data_owner_object_id=26680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4c3a58&gt;&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:0x000056371c686678 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c686510 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c686038 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&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:0x000056371c685c00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c685b38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c67d0a0 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c67cec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c67ce20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c67cd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c67cc68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c67f850 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c67f7d8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c67f6e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c67f530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c67f620 @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:0x000056371c67f5d0&gt;, @mon_data_owner_object_id=20860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c67f3a0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c67cbf0 @client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c686038 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c686510 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c686038 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c67d0a0 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c67cec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c67ce20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c67cd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c67cc68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c67f850 @client=#&lt;Ably::Rest::Client:0x000056371c686510 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c67f7d8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c67f6e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c67f530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c67f620 @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:0x000056371c67f5d0&gt;, @mon_data_owner_object_id=20860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c67f3a0&gt;&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:0x000056371c685c00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c685b38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c67cba0 @client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4c8328 @client=#&lt;Ably::Realtime::Client:0x000056371c686678 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4c82d8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4c8148 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4c3f08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4c8080 @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:0x000056371b4c8058&gt;, @mon_data_owner_object_id=26680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4c3a58&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.688479"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b49b080 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b49ae28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b49a180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&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:0x000056371b499d20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b499be0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b465868 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b465408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b465368 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4652c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b464e90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b48a4d8 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b48a460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b48a2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b48a000 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b48a168 @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:0x000056371b48a118&gt;, @mon_data_owner_object_id=21040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b489d80&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b464d00 @client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b49a180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b49a180 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b465868 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b465408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b465368 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4652c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b464e90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b48a4d8 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b48a460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b48a2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b48a000 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b48a168 @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:0x000056371b48a118&gt;, @mon_data_owner_object_id=21040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b489d80&gt;&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:0x000056371b499d20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b499be0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b464c60 @client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4ab3b8 @client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4ab390 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4ab2f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4aaff8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4ab228 @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:0x000056371b4ab188&gt;, @mon_data_owner_object_id=26740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4aabe8&gt;&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:0x000056371b49b080 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b49ae28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b49a180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&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:0x000056371b499d20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b499be0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b465868 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b465408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b465368 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4652c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b464e90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b48a4d8 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b48a460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b48a2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b48a000 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b48a168 @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:0x000056371b48a118&gt;, @mon_data_owner_object_id=21040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b489d80&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b464d00 @client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b49a180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b49a180 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b465868 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b465408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b465368 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b4652c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b464e90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b48a4d8 @client=#&lt;Ably::Rest::Client:0x000056371b49ae28 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b48a460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b48a2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b48a000 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b48a168 @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:0x000056371b48a118&gt;, @mon_data_owner_object_id=21040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b489d80&gt;&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:0x000056371b499d20 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b499be0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b464c60 @client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4ab3b8 @client=#&lt;Ably::Realtime::Client:0x000056371b49b080 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4ab390 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4ab2f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4aaff8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4ab228 @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:0x000056371b4ab188&gt;, @mon_data_owner_object_id=26740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4aabe8&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.292488"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b7fa2d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7f9970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&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:0x000056371b7f93d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b7f92e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7eb000 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7eadf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7ead58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7eacb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7eab50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7f1770 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b7f16d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b7f15e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b7f1428 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b7f1518 @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:0x000056371b7f14c8&gt;, @mon_data_owner_object_id=21220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b7f1298&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b7eaad8 @client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7f9970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7f9970 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7eb000 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7eadf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7ead58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7eacb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7eab50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7f1770 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b7f16d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b7f15e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b7f1428 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b7f1518 @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:0x000056371b7f14c8&gt;, @mon_data_owner_object_id=21220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b7f1298&gt;&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:0x000056371b7f93d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b7f92e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b7eaa88 @client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4a3460 @client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4a3438 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4a3398 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4a3078 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4a31b8 @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:0x000056371b4a3190&gt;, @mon_data_owner_object_id=26800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4a2d08&gt;&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:0x000056371b7fa2d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7f9970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&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:0x000056371b7f93d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b7f92e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7eb000 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7eadf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7ead58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7eacb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7eab50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7f1770 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b7f16d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b7f15e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b7f1428 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b7f1518 @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:0x000056371b7f14c8&gt;, @mon_data_owner_object_id=21220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b7f1298&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b7eaad8 @client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7f9970 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7f9970 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7eb000 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7eadf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b7ead58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b7eacb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b7eab50 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7f1770 @client=#&lt;Ably::Rest::Client:0x000056371b7fa0c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b7f16d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b7f15e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b7f1428 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b7f1518 @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:0x000056371b7f14c8&gt;, @mon_data_owner_object_id=21220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b7f1298&gt;&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:0x000056371b7f93d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b7f92e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b7eaa88 @client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b4a3460 @client=#&lt;Ably::Realtime::Client:0x000056371b7fa2d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b4a3438 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b4a3398 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b4a3078 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b4a31b8 @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:0x000056371b4a3190&gt;, @mon_data_owner_object_id=26800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b4a2d08&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.018051"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c0938d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c093770 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c093298 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&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:0x000056371c093018 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c092f50 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371bfd65f8 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371bfd6418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371bfd6378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371bfd62d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371bfd61c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c090d68 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c090cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c090c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c090a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c090b38 @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:0x000056371c090ae8&gt;, @mon_data_owner_object_id=21400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0908b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371bfd6148 @client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c093298 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c093770 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c093298 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371bfd65f8 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371bfd6418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371bfd6378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371bfd62d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371bfd61c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c090d68 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c090cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c090c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c090a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c090b38 @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:0x000056371c090ae8&gt;, @mon_data_owner_object_id=21400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0908b8&gt;&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:0x000056371c093018 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c092f50 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371bfd60f8 @client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b49b0a8 @client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b49b058 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b49af18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b49ac70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b49ae78 @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:0x000056371b49ae50&gt;, @mon_data_owner_object_id=26860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b49a478&gt;&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:0x000056371c0938d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c093770 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c093298 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&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:0x000056371c093018 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c092f50 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371bfd65f8 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371bfd6418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371bfd6378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371bfd62d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371bfd61c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c090d68 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c090cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c090c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c090a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c090b38 @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:0x000056371c090ae8&gt;, @mon_data_owner_object_id=21400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0908b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371bfd6148 @client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c093298 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c093770 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c093298 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371bfd65f8 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371bfd6418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371bfd6378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371bfd62d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371bfd61c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c090d68 @client=#&lt;Ably::Rest::Client:0x000056371c093770 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c090cf0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c090c00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c090a48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c090b38 @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:0x000056371c090ae8&gt;, @mon_data_owner_object_id=21400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c0908b8&gt;&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:0x000056371c093018 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c092f50 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371bfd60f8 @client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b49b0a8 @client=#&lt;Ably::Realtime::Client:0x000056371c0938d8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b49b058 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b49af18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b49ac70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b49ae78 @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:0x000056371b49ae50&gt;, @mon_data_owner_object_id=26860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b49a478&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.860801"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371c1ec9f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c1ec888 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c1ec3b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&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:0x000056371c1ec130 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c1ec068 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c246d88 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c246ba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c246b08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c246a68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c246950 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c1e5ab0 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c1e5a38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c1e5948 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c1e5718 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c1e5808 @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:0x000056371c1e57b8&gt;, @mon_data_owner_object_id=21580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c1e5588&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c2468d8 @client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c1ec3b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c1ec3b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c246d88 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c246ba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c246b08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c246a68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c246950 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c1e5ab0 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c1e5a38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c1e5948 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c1e5718 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c1e5808 @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:0x000056371c1e57b8&gt;, @mon_data_owner_object_id=21580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c1e5588&gt;&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:0x000056371c1ec130 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c1ec068 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c246888 @client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b48af78 @client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b48af28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b48aeb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b48aac8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b48ad20 @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:0x000056371b48aca8&gt;, @mon_data_owner_object_id=26920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b48a820&gt;&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:0x000056371c1ec9f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371c1ec888 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c1ec3b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&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:0x000056371c1ec130 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c1ec068 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c246d88 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c246ba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c246b08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c246a68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c246950 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c1e5ab0 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c1e5a38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c1e5948 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c1e5718 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c1e5808 @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:0x000056371c1e57b8&gt;, @mon_data_owner_object_id=21580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c1e5588&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371c2468d8 @client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371c1ec3b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&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}, @auth=#&lt;Ably::Auth:0x000056371c1ec3b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371c246d88 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371c246ba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371c246b08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371c246a68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371c246950 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371c1e5ab0 @client=#&lt;Ably::Rest::Client:0x000056371c1ec888 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371c1e5a38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371c1e5948 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371c1e5718 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371c1e5808 @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:0x000056371c1e57b8&gt;, @mon_data_owner_object_id=21580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371c1e5588&gt;&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:0x000056371c1ec130 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371c1ec068 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371c246888 @client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b48af78 @client=#&lt;Ably::Realtime::Client:0x000056371c1ec9f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b48af28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b48aeb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b48aac8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b48ad20 @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:0x000056371b48aca8&gt;, @mon_data_owner_object_id=26920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b48a820&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.173370"><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:0x00005637...y::Realtime::Client:0x000056371c39fa68 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.0.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:0x00005637...y::Realtime::Client:0x000056371c39fa68 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.0.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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.539425"><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:0x00005637...y::Realtime::Client:0x000056371c5e61c8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.0.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:0x00005637...y::Realtime::Client:0x000056371c5e61c8 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.0.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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="33.714236"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b3a1008 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b3a0568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&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:0x000056371b3a0248 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b3a0158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371af43678 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371af422f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371af421b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371af41eb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371af41bc0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371afc6f28 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371afc6d20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371afc6910 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371afc5970 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371afc6140 @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:0x000056371afc5b28&gt;, @mon_data_owner_object_id=22120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371afc5178&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371af416c0 @client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b3a0568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b3a0568 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371af43678 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371af422f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371af421b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371af41eb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371af41bc0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371afc6f28 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371afc6d20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371afc6910 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371afc5970 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371afc6140 @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:0x000056371afc5b28&gt;, @mon_data_owner_object_id=22120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371afc5178&gt;&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:0x000056371b3a0248 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b3a0158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371af41030 @client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b5830d8 @client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b582ea8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b582e58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5822f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b582958 @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:0x000056371b582908&gt;, @mon_data_owner_object_id=27100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b581d78&gt;&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:0x000056371b3a1008 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b3a0568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&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:0x000056371b3a0248 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b3a0158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371af43678 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371af422f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371af421b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371af41eb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371af41bc0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371afc6f28 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371afc6d20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371afc6910 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371afc5970 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371afc6140 @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:0x000056371afc5b28&gt;, @mon_data_owner_object_id=22120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371afc5178&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371af416c0 @client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b3a0568 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b3a0568 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371af43678 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371af422f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371af421b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371af41eb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371af41bc0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371afc6f28 @client=#&lt;Ably::Rest::Client:0x000056371b3a0db0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371afc6d20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371afc6910 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371afc5970 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371afc6140 @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:0x000056371afc5b28&gt;, @mon_data_owner_object_id=22120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371afc5178&gt;&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:0x000056371b3a0248 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b3a0158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371af41030 @client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b5830d8 @client=#&lt;Ably::Realtime::Client:0x000056371b3a1008 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b582ea8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b582e58 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5822f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b582958 @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:0x000056371b582908&gt;, @mon_data_owner_object_id=27100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b581d78&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="34.813898"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371b798e18 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b798c60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7980a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&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:0x000056371b793c60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b793a58 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7793d8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7791d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b779130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b779090 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b778f28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7821b8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b782140 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b781e48 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b781bc8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b781d08 @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:0x000056371b781c68&gt;, @mon_data_owner_object_id=22300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b781330&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b778eb0 @client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7980a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b798c60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7980a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7793d8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7791d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b779130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b779090 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b778f28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7821b8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b782140 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b781e48 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b781bc8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b781d08 @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:0x000056371b781c68&gt;, @mon_data_owner_object_id=22300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b781330&gt;&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:0x000056371b793c60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b793a58 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b778e38 @client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b5784d0 @client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b5784a8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b578430 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5782f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b5783b8 @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:0x000056371b578390&gt;, @mon_data_owner_object_id=27160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5780e8&gt;&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:0x000056371b798e18 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371b798c60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7980a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&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:0x000056371b793c60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b793a58 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7793d8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7791d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b779130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b779090 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b778f28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7821b8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b782140 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b781e48 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b781bc8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b781d08 @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:0x000056371b781c68&gt;, @mon_data_owner_object_id=22300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b781330&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b778eb0 @client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371b7980a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371b798c60 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&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}, @auth=#&lt;Ably::Auth:0x000056371b7980a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371b7793d8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b7791d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b779130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b779090 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b778f28 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371b7821b8 @client=#&lt;Ably::Rest::Client:0x000056371b798c60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b782140 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b781e48 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b781bc8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b781d08 @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:0x000056371b781c68&gt;, @mon_data_owner_object_id=22300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b781330&gt;&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:0x000056371b793c60 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371b793a58 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b778e38 @client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b5784d0 @client=#&lt;Ably::Realtime::Client:0x000056371b798e18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b5784a8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b578430 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b5782f0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b5783b8 @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:0x000056371b578390&gt;, @mon_data_owner_object_id=27160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5780e8&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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 are supported for valid STATE events" file="./spec/unit/realtime/channel_spec.rb" time="33.315672"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x000056371ba12978 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ba12810 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ba12310 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&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:0x000056371ba12090 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ba11fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba001d8 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9fb598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9fbf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9fbea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9fbcf0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ba097b0 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ba09738 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ba095f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ba093a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ba09490 @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:0x000056371ba09440&gt;, @mon_data_owner_object_id=22480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ba091e8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b9fbb88 @client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ba12310 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba12810 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ba12310 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba001d8 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9fb598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9fbf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9fbea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9fbcf0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ba097b0 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ba09738 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ba095f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ba093a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ba09490 @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:0x000056371ba09440&gt;, @mon_data_owner_object_id=22480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ba091e8&gt;&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:0x000056371ba12090 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ba11fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b9fbb38 @client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b569de0 @client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b569d68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b569b60 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b569958 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b569a98 @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:0x000056371b569a70&gt;, @mon_data_owner_object_id=27220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5696b0&gt;&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:0x000056371ba12978 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x000056371ba12810 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ba12310 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&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:0x000056371ba12090 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ba11fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba001d8 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9fb598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9fbf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9fbea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9fbcf0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ba097b0 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ba09738 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ba095f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ba093a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ba09490 @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:0x000056371ba09440&gt;, @mon_data_owner_object_id=22480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ba091e8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x000056371b9fbb88 @client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x000056371ba12310 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x000056371ba12810 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&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}, @auth=#&lt;Ably::Auth:0x000056371ba12310 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x000056371ba001d8 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x000056371b9fb598 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x000056371b9fbf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x000056371b9fbea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x000056371b9fbcf0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x000056371ba097b0 @client=#&lt;Ably::Rest::Client:0x000056371ba12810 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371ba09738 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371ba095f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371ba093a0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371ba09490 @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:0x000056371ba09440&gt;, @mon_data_owner_object_id=22480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371ba091e8&gt;&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:0x000056371ba12090 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x000056371ba11fc8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x000056371b9fbb38 @client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x000056371b569de0 @client=#&lt;Ably::Realtime::Client:0x000056371ba12978 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x000056371b569d68 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x000056371b569b60 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x000056371b569958 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x000056371b569a98 @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:0x000056371b569a70&gt;, @mon_data_owner_object_id=27220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x000056371b5696b0&gt;&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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="39.130008"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00005637...y::Realtime::Client:0x000056371c215288 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.0.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:0x00005637...y::Realtime::Client:0x000056371c215288 ...&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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.0.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.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.0.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.0.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.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.001454"></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.001333"></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.000652"></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.000772"></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.000862"></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.000812"></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.000799"></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.000755"></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.000757"></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.000613"></testcase>
<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.000571"></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.000716"></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.000854"></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.000707"></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.000708"></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.000890"></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.000747"></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.000708"></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.000797"></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.000797"></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.000851"></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.000817"></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.000735"></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.001036"></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.000931"></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.000914"></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.003478"></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.000862"></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.000871"></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.000958"></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.000877"></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.000914"></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.000751"></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.000695"></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.000688"></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.000877"></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.000722"></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.000735"></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.000619"></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.000869"></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.000739"></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.000862"></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.000745"></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.000796"></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.000775"></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.000619"></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.000690"></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.000933"></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.000754"></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.000676"></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.000844"></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.000602"></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.000838"></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.000572"></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.000820"></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.000925"></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.000687"></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.000744"></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.000873"></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.000680"></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.000810"></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.000738"></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.000648"></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.001094"></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.000806"></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.000663"></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.000999"></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.000711"></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.000608"></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.001020"></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.000790"></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.000718"></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.001004"></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.000860"></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.000797"></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.000854"></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.000972"></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.000777"></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.000952"></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.000815"></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.000754"></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.000655"></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.003246"></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.000895"></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.000780"></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.001023"></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.000846"></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.000745"></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.000978"></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.000793"></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.000792"></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.000702"></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.000662"></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.000651"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels [] creates a channel" file="./spec/unit/rest/channels_spec.rb" time="0.001186"></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.000941"></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.001089"></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.001100"></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.001130"></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.001138"></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.000812"></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.000943"></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.000759"></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.000944"></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.000988"></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.000789"></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.000944"></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.000798"></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.000929"></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.000738"></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.000846"></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.000752"></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.000829"></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.000816"></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.001494"></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.001103"></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.001025"></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.000713"></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.001094"></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.000784"></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.001059"></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.001382"></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.000694"></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.001185"></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.000661"></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.001138"></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.001176"></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.001165"></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.001140"></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.001200"></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.001082"></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.003146"></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.410817"></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.202144"></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.102623"></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.102977"></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.102465"></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.002263"></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.302687"></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.102117"></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.102304"></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.001417"></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.001036"></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.000995"></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.000979"></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.000975"></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.000991"></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.001011"></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.001019"></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.001335"></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.001199"></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.001178"></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.001167"></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.001169"></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.001283"></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.001346"></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.001075"></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.004729"></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.002491"></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.002256"></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.002390"></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.000949"></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 nil response is an array" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.000905"></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.000881"></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.000919"></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.000927"></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.000941"></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.000914"></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.000938"></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.000918"></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.000911"></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.000948"></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.000974"></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.000904"></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.000910"></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.000886"></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.000975"></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.000960"></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.000959"></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.000987"></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.001005"></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.000958"></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.000980"></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.000730"></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.000728"></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.000760"></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.000773"></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.000658"></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.000840"></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.000760"></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.000836"></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.000802"></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.000755"></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.000617"></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.000782"></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.000756"></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.000772"></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.000792"></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.000759"></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.000765"></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.000627"></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.001267"></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.000902"></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.000826"></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.002852"></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.000852"></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.000782"></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.000791"></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.000661"></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.000771"></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.000742"></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.000780"></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.000767"></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.000761"></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.000725"></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.000661"></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.000708"></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.000724"></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.000748"></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.000760"></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.000723"></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.000676"></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.000732"></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.000778"></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.000757"></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.000738"></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.000703"></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.000672"></testcase>
</testsuite>
