<testsuite name="rspec1" tests="609" skipped="0" failures="77" errors="0" time="1224.770913" timestamp="2025-01-31T13:29:26+00:00" hostname="fv-az1701-148">
<properties>
<property name="seed" value="14671"/>
</properties>
<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.006301"></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.001189"></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.001407"></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.000864"></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.000877"></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.000868"></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.000854"></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.000878"></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.000940"></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.001133"></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.001472"></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.000932"></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.000827"></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.000925"></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.000921"></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.000894"></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.000761"></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.000895"></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.000704"></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.008334"></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.000773"></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.000670"></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.000777"></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.000811"></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.001016"></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.000863"></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.000886"></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.000975"></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.000831"></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.000836"></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.000873"></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.000766"></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.000806"></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.000876"></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.000735"></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.001101"></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.000820"></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.000675"></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.000717"></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.000747"></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.000748"></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.000765"></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.000771"></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.000921"></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.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.000724"></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.000770"></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.000760"></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.000823"></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.000786"></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.000622"></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.000776"></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.001223"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels [] creates a channel" file="./spec/unit/rest/channels_spec.rb" time="0.001111"></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.001143"></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.001044"></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.000981"></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.000985"></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.000645"></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.000769"></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.000868"></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.002295"></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.001080"></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.000854"></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.000727"></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.001065"></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.000796"></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.000900"></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.000680"></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.000884"></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.000722"></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.000869"></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.000797"></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.000976"></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.000727"></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.000750"></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.000685"></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.000639"></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.000715"></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.000843"></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.000744"></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.000772"></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.000781"></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.000746"></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.000727"></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.000768"></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.000716"></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.000630"></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.000744"></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.000675"></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.000632"></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.000632"></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.000713"></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.000698"></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.000685"></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.000621"></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.000568"></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="4.017433"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3950b960 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f38e5bde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&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:0x0000557f394e37d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f394e1430 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f38759ad8 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f386fd698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f386f4660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f386ef0e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f386edec8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f39135548 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f39134828 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3912f508 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3912d938 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3912e180 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3912dd48&gt;, @mon_data_owner_object_id=15760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f39127ba0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f386ec348 @client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f38e5bde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f38e5bde0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f38759ad8 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f386fd698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f386f4660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f386ef0e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f386edec8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f39135548 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f39134828 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3912f508 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3912d938 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3912e180 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3912dd48&gt;, @mon_data_owner_object_id=15760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f39127ba0&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:0x0000557f394e37d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f394e1430 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f386ec190 @client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a399b30 @client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a399ae0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a399950 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a399180 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a399770 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a3996d0&gt;, @mon_data_owner_object_id=22060&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a398988&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:0x0000557f3950b960 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f38e5bde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&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:0x0000557f394e37d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f394e1430 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f38759ad8 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f386fd698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f386f4660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f386ef0e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f386edec8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f39135548 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f39134828 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3912f508 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3912d938 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3912e180 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3912dd48&gt;, @mon_data_owner_object_id=15760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f39127ba0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f386ec348 @client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f38e5bde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f38e5bde0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f38759ad8 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f386fd698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f386f4660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f386ef0e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f386edec8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f39135548 @client=#&lt;Ably::Rest::Client:0x0000557f3950a1a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f39134828 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3912f508 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3912d938 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3912e180 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3912dd48&gt;, @mon_data_owner_object_id=15760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f39127ba0&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:0x0000557f394e37d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f394e1430 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f386ec190 @client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a399b30 @client=#&lt;Ably::Realtime::Client:0x0000557f3950b960 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a399ae0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a399950 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a399180 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a399770 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a3996d0&gt;, @mon_data_owner_object_id=22060&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a398988&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="4.030367"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f...y::Realtime::Client:0x0000557f3ab1e540 ...&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:0x0000557f...y::Realtime::Client:0x0000557f3ab1e540 ...&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.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as UTF_8 string remains as UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="4.015301"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac628e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&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:0x0000557f3ac62618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac62550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acb9490 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acb92b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acb91e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acb9148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acb9008 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acbbe48 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acbbdd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acbbce0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acbbb00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acbbc18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acbbbc8&gt;, @mon_data_owner_object_id=16120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acbb970&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3acb8f90 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac628e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac628e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acb9490 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acb92b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acb91e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acb9148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acb9008 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acbbe48 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acbbdd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acbbce0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acbbb00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acbbc18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acbbbc8&gt;, @mon_data_owner_object_id=16120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acbb970&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:0x0000557f3ac62618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac62550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3acb8f40 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a333768 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a333588 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a333538 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a332f98 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a333380 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a333358&gt;, @mon_data_owner_object_id=22180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a331ee0&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:0x0000557f3ac62fc8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac628e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&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:0x0000557f3ac62618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac62550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acb9490 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acb92b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acb91e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acb9148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acb9008 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acbbe48 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acbbdd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acbbce0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acbbb00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acbbc18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acbbbc8&gt;, @mon_data_owner_object_id=16120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acbb970&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3acb8f90 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac628e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac628e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acb9490 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acb92b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acb91e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acb9148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acb9008 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acbbe48 @client=#&lt;Ably::Rest::Client:0x0000557f3ac62e38 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acbbdd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acbbce0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acbbb00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acbbc18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acbbbc8&gt;, @mon_data_owner_object_id=16120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acbb970&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:0x0000557f3ac62618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac62550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3acb8f40 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a333768 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac62fc8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a333588 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a333538 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a332f98 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a333380 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a333358&gt;, @mon_data_owner_object_id=22180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a331ee0&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 UTF_8 string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="4.015384"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3adc4b78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adc4538 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&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:0x0000557f3adc42b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adc41f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adb6bb8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb69d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb6938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb6820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb66b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbdff8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbdf80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbde90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbdcd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbddc8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbdd78&gt;, @mon_data_owner_object_id=16300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbdb48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3adb6640 @client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3adc4538 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adc4538 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adb6bb8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb69d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb6938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb6820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb66b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbdff8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbdf80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbde90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbdcd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbddc8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbdd78&gt;, @mon_data_owner_object_id=16300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbdb48&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:0x0000557f3adc42b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adc41f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3adb65f0 @client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9bf8c0 @client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9bf848 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9bf7d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9bf578 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9bf758 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9bf708&gt;, @mon_data_owner_object_id=22240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9bf398&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:0x0000557f3adc4b78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adc4538 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&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:0x0000557f3adc42b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adc41f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adb6bb8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb69d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb6938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb6820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb66b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbdff8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbdf80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbde90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbdcd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbddc8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbdd78&gt;, @mon_data_owner_object_id=16300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbdb48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3adb6640 @client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3adc4538 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adc4538 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adb6bb8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb69d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb6938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb6820 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb66b8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbdff8 @client=#&lt;Ably::Rest::Client:0x0000557f3adc4a10 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbdf80 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbde90 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbdcd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbddc8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbdd78&gt;, @mon_data_owner_object_id=16300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbdb48&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:0x0000557f3adc42b8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adc41f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3adb65f0 @client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9bf8c0 @client=#&lt;Ably::Realtime::Client:0x0000557f3adc4b78 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9bf848 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9bf7d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9bf578 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9bf758 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9bf708&gt;, @mon_data_owner_object_id=22240&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9bf398&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 ASCII_8BIT string gets converted to UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="4.015321"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aeae868 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aeae1d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&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:0x0000557f3aeadf58 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aeade18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aea5218 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aea5038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aea4f98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aea4ef8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aea4de0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aea78b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aea7838 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aea7748 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aea7590 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aea7680 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aea7630&gt;, @mon_data_owner_object_id=16480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aea7400&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aea4d68 @client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aeae1d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aeae1d8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aea5218 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aea5038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aea4f98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aea4ef8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aea4de0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aea78b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aea7838 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aea7748 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aea7590 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aea7680 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aea7630&gt;, @mon_data_owner_object_id=16480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aea7400&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:0x0000557f3aeadf58 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aeade18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aea4d18 @client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9bc3a0 @client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9bc378 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9bc2b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9bc120 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9bc238 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9bc1e8&gt;, @mon_data_owner_object_id=22300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9b7f58&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:0x0000557f3aeae868 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aeae1d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&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:0x0000557f3aeadf58 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aeade18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aea5218 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aea5038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aea4f98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aea4ef8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aea4de0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aea78b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aea7838 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aea7748 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aea7590 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aea7680 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aea7630&gt;, @mon_data_owner_object_id=16480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aea7400&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aea4d68 @client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aeae1d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aeae1d8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aea5218 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aea5038 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aea4f98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aea4ef8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aea4de0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aea78b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aeae700 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aea7838 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aea7748 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aea7590 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aea7680 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aea7630&gt;, @mon_data_owner_object_id=16480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aea7400&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:0x0000557f3aeadf58 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aeade18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aea4d18 @client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9bc3a0 @client=#&lt;Ably::Realtime::Client:0x0000557f3aeae868 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9bc378 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9bc2b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9bc120 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9bc238 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9bc1e8&gt;, @mon_data_owner_object_id=22300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9b7f58&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="4.014923"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3af974a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af97338 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af96e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&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:0x0000557f3af96be0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af96b18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af8e210 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af8e030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af8df90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af8def0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af8ddd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af94930 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af948b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af947c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94700 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af946b0&gt;, @mon_data_owner_object_id=16660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94480&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3af8dd60 @client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af96e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af96e60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af8e210 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af8e030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af8df90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af8def0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af8ddd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af94930 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af948b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af947c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94700 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af946b0&gt;, @mon_data_owner_object_id=16660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94480&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:0x0000557f3af96be0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af96b18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3af8dd10 @client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9b4a38 @client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9b4a10 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9b49c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9b4880 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9b4948 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9b4920&gt;, @mon_data_owner_object_id=22360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9b46f0&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:0x0000557f3af974a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af97338 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af96e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&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:0x0000557f3af96be0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af96b18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af8e210 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af8e030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af8df90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af8def0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af8ddd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af94930 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af948b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af947c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94700 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af946b0&gt;, @mon_data_owner_object_id=16660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94480&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3af8dd60 @client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af96e60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af96e60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af8e210 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af8e030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af8df90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af8def0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af8ddd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af94930 @client=#&lt;Ably::Rest::Client:0x0000557f3af97338 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af948b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af947c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94700 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af946b0&gt;, @mon_data_owner_object_id=16660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94480&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:0x0000557f3af96be0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af96b18 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3af8dd10 @client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9b4a38 @client=#&lt;Ably::Realtime::Client:0x0000557f3af974a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9b4a10 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9b49c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9b4880 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9b4948 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9b4920&gt;, @mon_data_owner_object_id=22360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9b46f0&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#initializer as SHIFT_JIS string gets converted to UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="4.017495"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a097978 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a096820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a095100 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&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:0x0000557f3a0944d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a094048 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a03da90 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a03c0a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a053b38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a0528c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a0507f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a076188 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a075e40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a075288 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a074c48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a0750d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a075058&gt;, @mon_data_owner_object_id=16840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a074428&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3a050488 @client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a095100 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a095100 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a03da90 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a03c0a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a053b38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a0528c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a0507f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a076188 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a075e40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a075288 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a074c48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a0750d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a075058&gt;, @mon_data_owner_object_id=16840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a074428&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:0x0000557f3a0944d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a094048 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3a050320 @client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9a2d88 @client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9a2d60 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9a2ce8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9a2a90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9a2b80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9a2b58&gt;, @mon_data_owner_object_id=22420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9a2900&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:0x0000557f3a097978 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a096820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a095100 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&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:0x0000557f3a0944d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a094048 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a03da90 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a03c0a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a053b38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a0528c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a0507f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a076188 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a075e40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a075288 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a074c48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a0750d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a075058&gt;, @mon_data_owner_object_id=16840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a074428&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3a050488 @client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a095100 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a095100 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a03da90 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a03c0a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a053b38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a0528c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a0507f8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a076188 @client=#&lt;Ably::Rest::Client:0x0000557f3a096820 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a075e40 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a075288 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a074c48 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a0750d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a075058&gt;, @mon_data_owner_object_id=16840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a074428&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:0x0000557f3a0944d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a094048 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3a050320 @client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9a2d88 @client=#&lt;Ably::Realtime::Client:0x0000557f3a097978 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9a2d60 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9a2ce8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9a2a90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9a2b80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9a2b58&gt;, @mon_data_owner_object_id=22420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9a2900&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 SHIFT_JIS string is compatible with original encoding" file="./spec/unit/realtime/channel_spec.rb" time="4.014645"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa0708 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&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:0x0000557f3aaa02f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa0230 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90600 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90330 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa901c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa8bf10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa987d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa986e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa98530 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa98350 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa98440 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa983f0&gt;, @mon_data_owner_object_id=17020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa93fa8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa8be98 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aaa0708 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa0708 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90600 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90330 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa901c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa8bf10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa987d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa986e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa98530 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa98350 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa98440 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa983f0&gt;, @mon_data_owner_object_id=17020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa93fa8&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:0x0000557f3aaa02f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa0230 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aa8be48 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a99a3e0 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a99a3b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a99a318 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a99a1d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a99a2a0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a99a278&gt;, @mon_data_owner_object_id=22480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a99a070&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:0x0000557f3aaa10b8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa0708 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&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:0x0000557f3aaa02f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa0230 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90600 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90330 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa901c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa8bf10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa987d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa986e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa98530 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa98350 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa98440 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa983f0&gt;, @mon_data_owner_object_id=17020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa93fa8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa8be98 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aaa0708 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa0708 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90600 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90330 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa901c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa8bf10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa987d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa0f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa986e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa98530 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa98350 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa98440 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa983f0&gt;, @mon_data_owner_object_id=17020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa93fa8&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:0x0000557f3aaa02f8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa0230 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aa8be48 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a99a3e0 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa10b8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a99a3b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a99a318 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a99a1d8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a99a2a0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a99a278&gt;, @mon_data_owner_object_id=22480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a99a070&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 Nil raises an argument error" file="./spec/unit/realtime/channel_spec.rb" time="4.021816"><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:0x0000557f...y::Realtime::Client:0x0000557f3ac31428 ...&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:0x0000557f...y::Realtime::Client:0x0000557f3ac31428 ...&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="4.019578"><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:0x0000557f...y::Realtime::Client:0x0000557f3addc980 ...&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:0x0000557f...y::Realtime::Client:0x0000557f3addc980 ...&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#publish name argument as SHIFT_JIS string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="4.013990"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3af4fe48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af4f808 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&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:0x0000557f3af4f588 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af4f4c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af46b68 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af46988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af468e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af46848 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af46730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af4d238 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af4d1c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af4d0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af4cf18 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af4d008 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af4cfb8&gt;, @mon_data_owner_object_id=17560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af4cd88&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3af466b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af4f808 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af4f808 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af46b68 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af46988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af468e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af46848 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af46730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af4d238 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af4d1c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af4d0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af4cf18 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af4d008 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af4cfb8&gt;, @mon_data_owner_object_id=17560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af4cd88&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:0x0000557f3af4f588 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af4f4c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3af46668 @client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a983a78 @client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a983a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a983a00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a983898 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a983988 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a983960&gt;, @mon_data_owner_object_id=22660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a983528&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:0x0000557f3af4fe48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af4f808 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&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:0x0000557f3af4f588 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af4f4c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af46b68 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af46988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af468e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af46848 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af46730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af4d238 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af4d1c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af4d0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af4cf18 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af4d008 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af4cfb8&gt;, @mon_data_owner_object_id=17560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af4cd88&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3af466b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af4f808 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af4f808 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af46b68 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af46988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af468e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af46848 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af46730 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af4d238 @client=#&lt;Ably::Rest::Client:0x0000557f3af4fce0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af4d1c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af4d0d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af4cf18 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af4d008 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af4cfb8&gt;, @mon_data_owner_object_id=17560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af4cd88&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:0x0000557f3af4f588 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af4f4c0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3af46668 @client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a983a78 @client=#&lt;Ably::Realtime::Client:0x0000557f3af4fe48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a983a50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a983a00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a983898 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a983988 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a983960&gt;, @mon_data_owner_object_id=22660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a983528&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="4.017498"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f39971ec8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f399714f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f39969a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&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:0x0000557f399684e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f39947c68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f398167b8 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f39814918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f398146c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f398144e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f39807f10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f398d37a0 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f398d2f08 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f398d2300 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f398d1798 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f398d1f90 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f398d1c70&gt;, @mon_data_owner_object_id=17740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f398d1270&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f39807c40 @client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f39969a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f39969a20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f398167b8 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f39814918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f398146c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f398144e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f39807f10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f398d37a0 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f398d2f08 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f398d2300 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f398d1798 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f398d1f90 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f398d1c70&gt;, @mon_data_owner_object_id=17740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f398d1270&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:0x0000557f399684e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f39947c68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f39807b50 @client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a97bf80 @client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a97bf58 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a97bf08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a97bda0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a97be90 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a97be68&gt;, @mon_data_owner_object_id=22720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a97bb70&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:0x0000557f39971ec8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f399714f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f39969a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&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:0x0000557f399684e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f39947c68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f398167b8 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f39814918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f398146c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f398144e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f39807f10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f398d37a0 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f398d2f08 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f398d2300 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f398d1798 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f398d1f90 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f398d1c70&gt;, @mon_data_owner_object_id=17740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f398d1270&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f39807c40 @client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f39969a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f39969a20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f398167b8 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f39814918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f398146c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f398144e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f39807f10 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f398d37a0 @client=#&lt;Ably::Rest::Client:0x0000557f399714f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f398d2f08 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f398d2300 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f398d1798 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f398d1f90 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f398d1c70&gt;, @mon_data_owner_object_id=17740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f398d1270&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:0x0000557f399684e0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f39947c68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f39807b50 @client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a97bf80 @client=#&lt;Ably::Realtime::Client:0x0000557f39971ec8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a97bf58 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a97bf08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a97bda0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a97be90 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a97be68&gt;, @mon_data_owner_object_id=22720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a97bb70&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 ASCII_8BIT string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="4.015791"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aa81588 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa809a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&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:0x0000557f3aa80610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa804d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa709e0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa70558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa70418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa70300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa700d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa789b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa78938 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa78848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa78528 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa78780 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa786b8&gt;, @mon_data_owner_object_id=17920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa781b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa70058 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aa809a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa809a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa709e0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa70558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa70418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa70300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa700d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa789b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa78938 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa78848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa78528 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa78780 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa786b8&gt;, @mon_data_owner_object_id=17920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa781b8&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:0x0000557f3aa80610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa804d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aa70378 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9789e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9789c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9788a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a978470 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9787e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a978768&gt;, @mon_data_owner_object_id=22780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9781a0&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:0x0000557f3aa81588 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa809a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&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:0x0000557f3aa80610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa804d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa709e0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa70558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa70418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa70300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa700d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa789b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa78938 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa78848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa78528 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa78780 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa786b8&gt;, @mon_data_owner_object_id=17920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa781b8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa70058 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aa809a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa809a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa709e0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa70558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa70418 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa70300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa700d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa789b0 @client=#&lt;Ably::Rest::Client:0x0000557f3aa812e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa78938 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa78848 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa78528 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa78780 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa786b8&gt;, @mon_data_owner_object_id=17920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa781b8&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:0x0000557f3aa80610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa804d0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aa70378 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9789e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa81588 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9789c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9788a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a978470 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9787e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a978768&gt;, @mon_data_owner_object_id=22780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9781a0&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="4.015444"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3abe5f50 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abe58c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&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:0x0000557f3abe5618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abe5550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdc6f8 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdc4f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdc450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdc388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdc270 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abdef98 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abdef20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abdee30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abdec50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abded68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abded18&gt;, @mon_data_owner_object_id=18100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abdeac0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3abdc1f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abe58c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abe58c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdc6f8 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdc4f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdc450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdc388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdc270 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abdef98 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abdef20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abdee30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abdec50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abded68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abded18&gt;, @mon_data_owner_object_id=18100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abdeac0&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:0x0000557f3abe5618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abe5550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3abdc1a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a8882b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a888290 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a888240 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a888100 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a8881c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a8881a0&gt;, @mon_data_owner_object_id=22840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a5979f0&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:0x0000557f3abe5f50 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abe58c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&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:0x0000557f3abe5618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abe5550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdc6f8 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdc4f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdc450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdc388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdc270 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abdef98 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abdef20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abdee30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abdec50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abded68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abded18&gt;, @mon_data_owner_object_id=18100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abdeac0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3abdc1f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abe58c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abe58c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdc6f8 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdc4f0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdc450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdc388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdc270 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abdef98 @client=#&lt;Ably::Rest::Client:0x0000557f3abe5de8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abdef20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abdee30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abdec50 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abded68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abded18&gt;, @mon_data_owner_object_id=18100&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abdeac0&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:0x0000557f3abe5618 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abe5550 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3abdc1a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a8882b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abe5f50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a888290 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a888240 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a888100 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a8881c8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a8881a0&gt;, @mon_data_owner_object_id=22840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a5979f0&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="4.015590"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ad66c08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ad665a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&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:0x0000557f3ad66320 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ad66258 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad5cc80 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad5caa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad5ca00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad5c960 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad5c848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ad64070 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ad5ff48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ad5fde0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ad5fb88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ad5fc78 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ad5fc28&gt;, @mon_data_owner_object_id=18280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ad5f9f8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ad5c7d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ad665a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ad665a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad5cc80 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad5caa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad5ca00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad5c960 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad5c848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ad64070 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ad5ff48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ad5fde0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ad5fb88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ad5fc78 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ad5fc28&gt;, @mon_data_owner_object_id=18280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ad5f9f8&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:0x0000557f3ad66320 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ad66258 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ad5c780 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa16530 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa164b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa16378 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa160f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa162d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa162b0&gt;, @mon_data_owner_object_id=22900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa15e28&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:0x0000557f3ad66c08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ad665a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&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:0x0000557f3ad66320 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ad66258 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad5cc80 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad5caa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad5ca00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad5c960 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad5c848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ad64070 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ad5ff48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ad5fde0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ad5fb88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ad5fc78 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ad5fc28&gt;, @mon_data_owner_object_id=18280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ad5f9f8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ad5c7d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ad665a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ad665a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad5cc80 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad5caa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad5ca00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad5c960 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad5c848 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ad64070 @client=#&lt;Ably::Rest::Client:0x0000557f3ad66aa0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ad5ff48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ad5fde0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ad5fb88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ad5fc78 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ad5fc28&gt;, @mon_data_owner_object_id=18280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ad5f9f8&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:0x0000557f3ad66320 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ad66258 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ad5c780 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa16530 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad66c08 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa164b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa16378 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa160f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa162d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa162b0&gt;, @mon_data_owner_object_id=22900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa15e28&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 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="4.013696"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ae464e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae45ea8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&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:0x0000557f3ae45c28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ae45b60 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae3c768 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3c470 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3c3a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3c268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3c010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ae3f648 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ae3f5d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ae3f4e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ae3f328 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ae3f418 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ae3f3c8&gt;, @mon_data_owner_object_id=18460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ae3f198&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ae3df28 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae45ea8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae45ea8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae3c768 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3c470 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3c3a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3c268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3c010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ae3f648 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ae3f5d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ae3f4e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ae3f328 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ae3f418 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ae3f3c8&gt;, @mon_data_owner_object_id=18460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ae3f198&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:0x0000557f3ae45c28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ae45b60 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ae3e130 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa0f3e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa0f398 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa0f320 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa0eee8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa0f118 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa0f050&gt;, @mon_data_owner_object_id=22960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa0eba0&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:0x0000557f3ae464e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae45ea8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&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:0x0000557f3ae45c28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ae45b60 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae3c768 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3c470 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3c3a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3c268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3c010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ae3f648 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ae3f5d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ae3f4e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ae3f328 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ae3f418 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ae3f3c8&gt;, @mon_data_owner_object_id=18460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ae3f198&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ae3df28 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae45ea8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae45ea8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae3c768 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3c470 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3c3a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3c268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3c010 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ae3f648 @client=#&lt;Ably::Rest::Client:0x0000557f3ae46380 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ae3f5d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ae3f4e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ae3f328 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ae3f418 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ae3f3c8&gt;, @mon_data_owner_object_id=18460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ae3f198&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:0x0000557f3ae45c28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ae45b60 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ae3e130 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa0f3e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae464e8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa0f398 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa0f320 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa0eee8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa0f118 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa0f050&gt;, @mon_data_owner_object_id=22960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa0eba0&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="4.013954"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3af9c400 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af97d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&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:0x0000557f3af97ab8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af979f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af87d48 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af87b40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af87aa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af87a00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af878e8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af952e0 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af95268 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af95060 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94e08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94f48 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af94ed0&gt;, @mon_data_owner_object_id=18640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94c50&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3af87870 @client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af97d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af97d38 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af87d48 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af87b40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af87aa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af87a00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af878e8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af952e0 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af95268 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af95060 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94e08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94f48 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af94ed0&gt;, @mon_data_owner_object_id=18640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94c50&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:0x0000557f3af97ab8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af979f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3af87820 @client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa07df0 @client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa07d50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa07c88 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa079e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa07b20 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa07af8&gt;, @mon_data_owner_object_id=23020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa077d8&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:0x0000557f3af9c400 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af97d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&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:0x0000557f3af97ab8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af979f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af87d48 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af87b40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af87aa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af87a00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af878e8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af952e0 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af95268 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af95060 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94e08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94f48 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af94ed0&gt;, @mon_data_owner_object_id=18640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94c50&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3af87870 @client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af97d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af97d38 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af87d48 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af87b40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af87aa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af87a00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af878e8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3af952e0 @client=#&lt;Ably::Rest::Client:0x0000557f3af9c298 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3af95268 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3af95060 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3af94e08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3af94f48 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3af94ed0&gt;, @mon_data_owner_object_id=18640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3af94c50&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:0x0000557f3af97ab8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3af979f0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3af87820 @client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa07df0 @client=#&lt;Ably::Realtime::Client:0x0000557f3af9c400 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa07d50 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa07c88 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa079e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa07b20 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa07af8&gt;, @mon_data_owner_object_id=23020&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa077d8&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="4.016088"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a1cca78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a1c7410 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&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:0x0000557f3a1c6df8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a1c6b28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a171218 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a16bf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a16b700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a16af80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a16a6c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a1ae9d8 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a1ae8e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a1ae370 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a1ad588 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a1ad790 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a1ad740&gt;, @mon_data_owner_object_id=18820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a1acea8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3a16a4b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a1c7410 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a1c7410 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a171218 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a16bf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a16b700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a16af80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a16a6c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a1ae9d8 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a1ae8e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a1ae370 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a1ad588 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a1ad790 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a1ad740&gt;, @mon_data_owner_object_id=18820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a1acea8&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:0x0000557f3a1c6df8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a1c6b28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3a16a3a0 @client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa04588 @client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa04510 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa044c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa04358 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa04420 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa043f8&gt;, @mon_data_owner_object_id=23080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa041f0&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:0x0000557f3a1cca78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a1c7410 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&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:0x0000557f3a1c6df8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a1c6b28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a171218 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a16bf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a16b700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a16af80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a16a6c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a1ae9d8 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a1ae8e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a1ae370 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a1ad588 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a1ad790 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a1ad740&gt;, @mon_data_owner_object_id=18820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a1acea8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3a16a4b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a1c7410 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a1c7410 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a171218 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a16bf48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a16b700 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a16af80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a16a6c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a1ae9d8 @client=#&lt;Ably::Rest::Client:0x0000557f3a1cc550 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a1ae8e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a1ae370 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a1ad588 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a1ad790 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a1ad740&gt;, @mon_data_owner_object_id=18820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a1acea8&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:0x0000557f3a1c6df8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a1c6b28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3a16a3a0 @client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa04588 @client=#&lt;Ably::Realtime::Client:0x0000557f3a1cca78 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa04510 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa044c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa04358 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa04420 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa043f8&gt;, @mon_data_owner_object_id=23080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa041f0&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 duplicate event name arguments subscribes that block to all of those unique event names once" file="./spec/unit/realtime/channel_spec.rb" time="4.014390"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aa56388 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa55b68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&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:0x0000557f3aa55820 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa55758 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab0ed20 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab0eb18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab0ea78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab0e9d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab0e820 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa3a408 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa3a318 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa3a188 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa39e90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa3a098 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa3a048&gt;, @mon_data_owner_object_id=19000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa39b48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ab0e7a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aa55b68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa55b68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab0ed20 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab0eb18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab0ea78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab0e9d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab0e820 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa3a408 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa3a318 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa3a188 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa39e90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa3a098 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa3a048&gt;, @mon_data_owner_object_id=19000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa39b48&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:0x0000557f3aa55820 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa55758 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ab0e708 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9fd080 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9fd058 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9fcf68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9fcdd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9fcea0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9fce78&gt;, @mon_data_owner_object_id=23140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9fcc48&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:0x0000557f3aa56388 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa55b68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&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:0x0000557f3aa55820 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa55758 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab0ed20 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab0eb18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab0ea78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab0e9d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab0e820 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa3a408 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa3a318 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa3a188 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa39e90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa3a098 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa3a048&gt;, @mon_data_owner_object_id=19000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa39b48&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ab0e7a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aa55b68 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa55b68 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab0ed20 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab0eb18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab0ea78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab0e9d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab0e820 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa3a408 @client=#&lt;Ably::Rest::Client:0x0000557f3aa561a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa3a318 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa3a188 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa39e90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa3a098 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa3a048&gt;, @mon_data_owner_object_id=19000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa39b48&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:0x0000557f3aa55820 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aa55758 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ab0e708 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9fd080 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa56388 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9fd058 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9fcf68 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9fcdd8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9fcea0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9fce78&gt;, @mon_data_owner_object_id=23140&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9fcc48&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="4.014114"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac50620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&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:0x0000557f3ac503a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac502b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac41af8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac41918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac41878 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac417b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac41698 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac49b18 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac49aa0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac49988 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac49690 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac49898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac49848&gt;, @mon_data_owner_object_id=19180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac49500&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ac41620 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac50620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac50620 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac41af8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac41918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac41878 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac417b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac41698 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac49b18 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac49aa0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac49988 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac49690 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac49898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac49848&gt;, @mon_data_owner_object_id=19180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac49500&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:0x0000557f3ac503a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac502b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ac415d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9eb060 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9eb038 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9eafc0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9eaca0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9eae80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9eae30&gt;, @mon_data_owner_object_id=23200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9eaa20&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:0x0000557f3ac50cd8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac50620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&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:0x0000557f3ac503a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac502b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac41af8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac41918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac41878 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac417b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac41698 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac49b18 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac49aa0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac49988 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac49690 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac49898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac49848&gt;, @mon_data_owner_object_id=19180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac49500&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ac41620 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac50620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac50620 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac41af8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac41918 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac41878 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac417b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac41698 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac49b18 @client=#&lt;Ably::Rest::Client:0x0000557f3ac50b70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac49aa0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac49988 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac49690 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac49898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac49848&gt;, @mon_data_owner_object_id=19180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac49500&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:0x0000557f3ac503a0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac502b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ac415d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9eb060 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac50cd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9eb038 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9eafc0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9eaca0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9eae80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9eae30&gt;, @mon_data_owner_object_id=23200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9eaa20&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 block argument unsubscribes all blocks for the event name argument" file="./spec/unit/realtime/channel_spec.rb" time="4.015017"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3adbfa38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adbf3f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&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:0x0000557f3adbf178 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adbf0b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adafe08 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adafc28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adafb88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adafae8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adaf980 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbcc98 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbcbf8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbcb08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbc928 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbca18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbc9c8&gt;, @mon_data_owner_object_id=19360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbc798&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3adaf908 @client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3adbf3f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adbf3f8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adafe08 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adafc28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adafb88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adafae8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adaf980 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbcc98 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbcbf8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbcb08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbc928 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbca18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbc9c8&gt;, @mon_data_owner_object_id=19360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbc798&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:0x0000557f3adbf178 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adbf0b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3adaf8b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9e3950 @client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9e3900 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9e38b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9e36f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9e3838 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9e3810&gt;, @mon_data_owner_object_id=23260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9e3518&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:0x0000557f3adbfa38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adbf3f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&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:0x0000557f3adbf178 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adbf0b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adafe08 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adafc28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adafb88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adafae8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adaf980 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbcc98 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbcbf8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbcb08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbc928 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbca18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbc9c8&gt;, @mon_data_owner_object_id=19360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbc798&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3adaf908 @client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3adbf3f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adbf3f8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adafe08 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adafc28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adafb88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adafae8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adaf980 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3adbcc98 @client=#&lt;Ably::Rest::Client:0x0000557f3adbf8d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3adbcbf8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3adbcb08 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3adbc928 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3adbca18 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3adbc9c8&gt;, @mon_data_owner_object_id=19360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3adbc798&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:0x0000557f3adbf178 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3adbf0b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3adaf8b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9e3950 @client=#&lt;Ably::Realtime::Client:0x0000557f3adbfa38 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9e3900 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9e38b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9e36f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9e3838 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9e3810&gt;, @mon_data_owner_object_id=23260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9e3518&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="4.013915"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aebee70 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebe600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&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:0x0000557f3aebe308 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aebe240 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aeaf150 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aeaeea8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aeaed68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aeaec78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aeaeb38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aeb6c48 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aeb6bd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aeb6ae0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aeb6860 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aeb69f0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aeb69a0&gt;, @mon_data_owner_object_id=19540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aeb6428&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aeaea70 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aebe600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebe600 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aeaf150 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aeaeea8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aeaed68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aeaec78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aeaeb38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aeb6c48 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aeb6bd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aeb6ae0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aeb6860 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aeb69f0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aeb69a0&gt;, @mon_data_owner_object_id=19540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aeb6428&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:0x0000557f3aebe308 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aebe240 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aeae980 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9dadc8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9dada0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9dad50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9dac10 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9dacd8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9dacb0&gt;, @mon_data_owner_object_id=23320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9da620&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:0x0000557f3aebee70 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebe600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&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:0x0000557f3aebe308 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aebe240 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aeaf150 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aeaeea8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aeaed68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aeaec78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aeaeb38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aeb6c48 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aeb6bd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aeb6ae0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aeb6860 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aeb69f0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aeb69a0&gt;, @mon_data_owner_object_id=19540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aeb6428&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aeaea70 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aebe600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebe600 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aeaf150 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aeaeea8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aeaed68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aeaec78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aeaeb38 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aeb6c48 @client=#&lt;Ably::Rest::Client:0x0000557f3aebec40 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aeb6bd0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aeb6ae0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aeb6860 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aeb69f0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aeb69a0&gt;, @mon_data_owner_object_id=19540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aeb6428&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:0x0000557f3aebe308 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aebe240 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aeae980 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9dadc8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebee70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9dada0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9dad50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9dac10 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9dacd8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9dacb0&gt;, @mon_data_owner_object_id=23320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9da620&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="4.015403"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3afc48b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afbfdd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&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:0x0000557f3afbfb30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3afbfa68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afb4320 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afb4140 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afb40a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b047fd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b047eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3afbce58 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3afbcc78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3afbc4d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3afb7818 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3afb7b60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3afb7a70&gt;, @mon_data_owner_object_id=19720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3afb74f8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3b047e40 @client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3afbfdd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afbfdd8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afb4320 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afb4140 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afb40a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b047fd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b047eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3afbce58 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3afbcc78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3afbc4d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3afb7818 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3afb7b60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3afb7a70&gt;, @mon_data_owner_object_id=19720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3afb74f8&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:0x0000557f3afbfb30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3afbfa68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3b047df0 @client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9cea28 @client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9cea00 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9ce8c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9ce668 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9ce7f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9ce780&gt;, @mon_data_owner_object_id=23380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9ce438&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:0x0000557f3afc48b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afbfdd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&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:0x0000557f3afbfb30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3afbfa68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afb4320 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afb4140 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afb40a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b047fd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b047eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3afbce58 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3afbcc78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3afbc4d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3afb7818 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3afb7b60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3afb7a70&gt;, @mon_data_owner_object_id=19720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3afb74f8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3b047e40 @client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3afbfdd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afbfdd8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afb4320 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afb4140 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afb40a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b047fd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b047eb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3afbce58 @client=#&lt;Ably::Rest::Client:0x0000557f3afc43b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3afbcc78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3afbc4d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3afb7818 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3afb7b60 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3afb7a70&gt;, @mon_data_owner_object_id=19720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3afb74f8&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:0x0000557f3afbfb30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3afbfa68 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3b047df0 @client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9cea28 @client=#&lt;Ably::Realtime::Client:0x0000557f3afc48b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9cea00 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9ce8c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9ce668 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9ce7f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9ce780&gt;, @mon_data_owner_object_id=23380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9ce438&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="4.018562"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a9832d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a982a38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&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:0x0000557f3a982790 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a9826a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a96c468 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a96c1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a96c120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a96c080 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a88beb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a97ace8 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a97ac48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a97aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a97a6f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a97a888 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a97a7c0&gt;, @mon_data_owner_object_id=19900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a97a3b0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3a88be40 @client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a982a38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a982a38 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a96c468 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a96c1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a96c120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a96c080 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a88beb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a97ace8 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a97ac48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a97aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a97a6f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a97a888 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a97a7c0&gt;, @mon_data_owner_object_id=19900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a97a3b0&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:0x0000557f3a982790 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a9826a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3a88bdf0 @client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9c5428 @client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9c5360 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9c5298 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9c4fa0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9c5130 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9c50b8&gt;, @mon_data_owner_object_id=23440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9c4d20&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:0x0000557f3a9832d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a982a38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&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:0x0000557f3a982790 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a9826a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a96c468 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a96c1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a96c120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a96c080 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a88beb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a97ace8 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a97ac48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a97aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a97a6f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a97a888 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a97a7c0&gt;, @mon_data_owner_object_id=19900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a97a3b0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3a88be40 @client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a982a38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3a982a38 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a96c468 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a96c1e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a96c120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a96c080 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a88beb8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3a97ace8 @client=#&lt;Ably::Rest::Client:0x0000557f3a9830c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a97ac48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a97aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a97a6f8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a97a888 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a97a7c0&gt;, @mon_data_owner_object_id=19900&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a97a3b0&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:0x0000557f3a982790 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3a9826a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3a88bdf0 @client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3a9c5428 @client=#&lt;Ably::Realtime::Client:0x0000557f3a9832d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3a9c5360 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3a9c5298 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3a9c4fa0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3a9c5130 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3a9c50b8&gt;, @mon_data_owner_object_id=23440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3a9c4d20&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 event name specified unsubscribes that block from all events" file="./spec/unit/realtime/channel_spec.rb" time="4.015428"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3abce828 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abcdb30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&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:0x0000557f3abcd888 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abcd748 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abbf238 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abbf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abbef90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abbeef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abbedd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abc6ee8 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abc6e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abc66f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abc5c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abc5db8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abc5d18&gt;, @mon_data_owner_object_id=20080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abc5a70&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3abbed60 @client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abcdb30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abcdb30 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abbf238 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abbf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abbef90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abbeef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abbedd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abc6ee8 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abc6e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abc66f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abc5c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abc5db8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abc5d18&gt;, @mon_data_owner_object_id=20080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abc5a70&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:0x0000557f3abcd888 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abcd748 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3abbed10 @client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa98b48 @client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa989b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa988c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa9b000 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa98738 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa98670&gt;, @mon_data_owner_object_id=23500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa92ce8&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:0x0000557f3abce828 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abcdb30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&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:0x0000557f3abcd888 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abcd748 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abbf238 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abbf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abbef90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abbeef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abbedd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abc6ee8 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abc6e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abc66f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abc5c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abc5db8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abc5d18&gt;, @mon_data_owner_object_id=20080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abc5a70&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3abbed60 @client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abcdb30 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3abcdb30 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abbf238 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abbf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abbef90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abbeef0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abbedd8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3abc6ee8 @client=#&lt;Ably::Rest::Client:0x0000557f3abce3f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3abc6e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3abc66f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3abc5c00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3abc5db8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3abc5d18&gt;, @mon_data_owner_object_id=20080&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3abc5a70&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:0x0000557f3abcd888 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3abcd748 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3abbed10 @client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa98b48 @client=#&lt;Ably::Realtime::Client:0x0000557f3abce828 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa989b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa988c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa9b000 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa98738 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa98670&gt;, @mon_data_owner_object_id=23500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa92ce8&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 msgbus supports messages" file="./spec/unit/realtime/channel_spec.rb" time="4.013751"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3acda5f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3acda460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3acd9f10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&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:0x0000557f3acd9c68 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3acd9ba0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acc8008 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acc3df0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acc3d50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acc3cb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acc3b70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acd0780 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acd0708 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acd0618 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acd03e8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acd0550 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acd04b0&gt;, @mon_data_owner_object_id=20260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acd01e0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3acc3af8 @client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3acd9f10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3acd9f10 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acc8008 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acc3df0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acc3d50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acc3cb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acc3b70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acd0780 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acd0708 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acd0618 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acd03e8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acd0550 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acd04b0&gt;, @mon_data_owner_object_id=20260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acd01e0&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:0x0000557f3acd9c68 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3acd9ba0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3acc3aa8 @client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa88c70 @client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa88c48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa88bf8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa88ab8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa88b80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa88b58&gt;, @mon_data_owner_object_id=23560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa88950&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:0x0000557f3acda5f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3acda460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3acd9f10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&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:0x0000557f3acd9c68 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3acd9ba0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acc8008 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acc3df0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acc3d50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acc3cb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acc3b70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acd0780 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acd0708 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acd0618 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acd03e8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acd0550 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acd04b0&gt;, @mon_data_owner_object_id=20260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acd01e0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3acc3af8 @client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3acd9f10 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3acd9f10 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3acc8008 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3acc3df0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3acc3d50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3acc3cb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3acc3b70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3acd0780 @client=#&lt;Ably::Rest::Client:0x0000557f3acda460 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3acd0708 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3acd0618 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3acd03e8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3acd0550 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3acd04b0&gt;, @mon_data_owner_object_id=20260&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3acd01e0&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:0x0000557f3acd9c68 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3acd9ba0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3acc3aa8 @client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x0000557f3aa88c70 @client=#&lt;Ably::Realtime::Client:0x0000557f3acda5f0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa88c48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa88bf8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa88ab8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa88b80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa88b58&gt;, @mon_data_owner_object_id=23560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa88950&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 msgbus fail with unacceptable STATE event names" file="./spec/unit/realtime/channel_spec.rb" time="4.019822"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f...y::Realtime::Client:0x0000557f3ae77b10 ...&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:0x0000557f...y::Realtime::Client:0x0000557f3ae77b10 ...&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.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.001902"></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.000952"></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.000909"></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.001277"></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.003106"></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.001268"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page returns nil when trying to access the last page when it is the last page" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001191"></testcase>
<testcase classname="spec.unit.models.http_paginated_result_spec" name="Ably::Models::HttpPaginatedResponse: #HP1 -&gt; #HP8 with paged http response accessing next page returns another HttpPaginatedResponse" file="./spec/unit/models/http_paginated_result_spec.rb" time="0.001108"></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.001298"></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.001236"></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.000919"></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.000826"></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.000801"></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.000814"></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.000882"></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.000913"></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.000932"></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.000898"></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.000838"></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.000807"></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.000906"></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.000937"></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.000944"></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.000900"></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.000884"></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.000903"></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.000875"></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.000872"></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.000851"></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.000848"></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.002209"></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.001027"></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.000959"></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.016074"></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.002304"></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.002092"></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.001058"></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.001085"></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.000910"></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.000917"></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.000920"></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.000928"></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.000913"></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.001220"></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.002430"></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.001074"></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.001075"></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.001868"></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.302697"></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.103771"></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.102485"></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.102426"></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.102290"></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.105248"></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.202432"></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.202304"></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.001062"></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.000733"></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.000791"></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.000803"></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.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.002111"></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.000697"></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.000731"></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.000723"></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.000745"></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.000634"></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.000636"></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.000625"></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.000686"></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.000695"></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.000774"></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.000720"></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.000805"></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.000778"></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.000756"></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.000744"></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.000692"></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.010516"></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.008806"></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.013851"></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.001419"></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.000970"></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.000668"></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.000817"></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.000849"></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.000795"></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.000850"></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.000749"></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.000758"></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.000775"></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.000690"></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.000633"></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.000752"></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.000732"></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.000673"></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.000777"></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.000644"></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.001037"></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.000913"></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.001209"></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.000903"></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.000831"></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.000867"></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.000822"></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.000874"></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.000961"></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.000850"></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.000858"></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.001028"></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.002458"></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.001174"></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.001033"></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.000970"></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.000912"></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.000829"></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.000780"></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.000908"></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.000816"></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.000723"></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.000633"></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.000581"></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.000673"></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.000734"></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.000676"></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.000698"></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.000655"></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.000686"></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.000681"></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.000614"></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.000685"></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.000752"></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.000713"></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.000695"></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.000643"></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.000614"></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.000650"></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.000768"></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.000935"></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.000813"></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.000908"></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.002894"></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.000782"></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.000600"></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.000598"></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.000749"></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.000708"></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.000722"></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.000893"></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.000865"></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.000836"></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.000877"></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.000824"></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.000820"></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.000812"></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.000812"></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.000803"></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.001183"></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.000791"></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.000819"></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.000748"></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.000728"></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.000843"></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.000809"></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.001419"></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.000894"></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.000864"></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.000834"></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.000872"></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.000820"></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.002992"></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.000935"></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.000875"></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.000945"></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.000907"></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.000830"></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.000844"></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.000858"></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.000886"></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.000857"></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.000883"></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.000849"></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.000930"></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.000756"></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.000863"></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.000921"></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.000813"></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.000818"></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.001040"></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.001089"></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.001178"></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.001667"></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.001083"></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.001298"></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.002159"></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.000905"></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.000835"></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.000921"></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.000815"></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.000868"></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.000841"></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.000810"></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.000784"></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.000719"></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.000696"></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.000706"></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.000771"></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.000751"></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.000766"></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.000741"></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.000930"></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.001024"></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.001296"></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.001110"></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.001002"></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.000892"></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.001400"></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.001039"></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.000999"></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.002057"></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.000990"></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.000929"></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.000971"></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.000759"></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.000861"></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.000831"></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.000775"></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.000795"></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.000903"></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.000845"></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.000818"></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.000811"></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.000799"></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.000800"></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.000761"></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.000839"></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.000898"></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.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.001024"></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.000845"></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.000890"></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="4.014949"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3969b7d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3969a718 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f396855e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f396d6290 @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f396d4d28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f396d4120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f396a79e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f396a7350 @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:0x0000557f396a72b0 @client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f396855e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f396855e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f396d6290 @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f396d4d28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f396d4120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f396a79e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f396a7350 @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:0x0000557f396a70d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&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:0x0000557f3969b7d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3969a718 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f396855e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f396d6290 @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f396d4d28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f396d4120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f396a79e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f396a7350 @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:0x0000557f396a72b0 @client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f396855e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f396855e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f396d6290 @client=#&lt;Ably::Rest::Client:0x0000557f3969a718 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f396d4d28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f396d4120 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f396a79e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f396a7350 @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:0x0000557f396a70d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3969b7d0 ...&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.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.013838"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa0c5a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa07968 @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa075d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa07530 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa07490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa07328 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa07080 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aa0c5a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa0c5a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa07968 @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa075d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa07530 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa07490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa07328 @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:0x0000557f3aa07008 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&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:0x0000557f3aa0d2f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa0c5a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa07968 @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa075d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa07530 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa07490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa07328 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa07080 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aa0c5a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aa0c5a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa07968 @client=#&lt;Ably::Rest::Client:0x0000557f3aa0ce18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa075d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa07530 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa07490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa07328 @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:0x0000557f3aa07008 @client=#&lt;Ably::Realtime::Client:0x0000557f3aa0d2f0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:395:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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.014499"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ab839e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ab82770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab82270 @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab82090 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab81ff0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab81f28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab81dc0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ab81d48 @client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ab82770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ab82770 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab82270 @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab82090 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab81ff0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab81f28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab81dc0 @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:0x0000557f3ab81cf8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&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:0x0000557f3ab839e0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ab82770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab82270 @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab82090 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab81ff0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab81f28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab81dc0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ab81d48 @client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ab82770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ab82770 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ab82270 @client=#&lt;Ably::Rest::Client:0x0000557f3ab83080 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ab82090 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ab81ff0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ab81f28 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ab81dc0 @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:0x0000557f3ab81cf8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ab839e0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:395:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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 empty hash raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.001240"></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.001070"></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.001044"></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.000914"></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.001020"></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.001045"></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.013404"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ae65190 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&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:0x0000557f3ae64bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae64880 @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae64678 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae645d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae64538 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae64420 @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:0x0000557f3ae643a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae64bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&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:0x0000557f3ae64bc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae64880 @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae64678 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae645d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae64538 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae64420 @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:0x0000557f3ae64358 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&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:0x0000557f3ae65190 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&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:0x0000557f3ae64bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae64880 @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae64678 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae645d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae64538 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae64420 @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:0x0000557f3ae643a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae64bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&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:0x0000557f3ae64bc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae64880 @client=#&lt;Ably::Rest::Client:0x0000557f3ae64fb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae64678 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae645d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae64538 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae64420 @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:0x0000557f3ae64358 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae65190 ...&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 environment when set with fallback_hosts_use_default uses the production default fallback hosts (#RTN17b)" file="./spec/unit/realtime/client_spec.rb" time="4.014438"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3af343a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3af2fcb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af2f918 @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af2f738 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af2f698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af2f5d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af2f3c8 @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:0x0000557f3af2f350 @client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af2fcb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3af2fcb0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af2f918 @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af2f738 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af2f698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af2f5d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af2f3c8 @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:0x0000557f3af2f300 @client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&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:0x0000557f3af343a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3af2fcb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af2f918 @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af2f738 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af2f698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af2f5d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af2f3c8 @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:0x0000557f3af2f350 @client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af2fcb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3af2fcb0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af2f918 @client=#&lt;Ably::Rest::Client:0x0000557f3af341e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af2f738 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af2f698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af2f5d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af2f3c8 @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:0x0000557f3af2f300 @client=#&lt;Ably::Realtime::Client:0x0000557f3af343a0 ...&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 environment when set with fallback_hosts_use_default sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="4.016694"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a036740 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3a034828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a02fb70 @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a02df50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a02d870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a02c768 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a01aae0 @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:0x0000557f3a01a888 @client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a034828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3a034828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a02fb70 @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a02df50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a02d870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a02c768 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a01aae0 @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:0x0000557f3a019d20 @client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&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:0x0000557f3a036740 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3a034828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a02fb70 @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a02df50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a02d870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a02c768 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a01aae0 @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:0x0000557f3a01a888 @client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a034828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3a034828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a02fb70 @client=#&lt;Ably::Rest::Client:0x0000557f3a035b88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a02df50 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a02d870 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a02c768 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a01aae0 @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:0x0000557f3a019d20 @client=#&lt;Ably::Realtime::Client:0x0000557f3a036740 ...&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 custom fallback hosts configured uses the custom provided fallback hosts (#RSC15a)" file="./spec/unit/realtime/client_spec.rb" time="4.014240"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aabac48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3aaba4c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aaba130 @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aab9e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aab9d70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aab9b68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aab99b0 @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:0x0000557f3aab98e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aaba4c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3aaba4c8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aaba130 @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aab9e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aab9d70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aab9b68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aab99b0 @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:0x0000557f3aab97f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&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:0x0000557f3aabac48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3aaba4c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aaba130 @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aab9e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aab9d70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aab9b68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aab99b0 @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:0x0000557f3aab98e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aaba4c8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3aaba4c8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aaba130 @client=#&lt;Ably::Rest::Client:0x0000557f3aabaa68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aab9e60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aab9d70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aab9b68 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aab99b0 @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:0x0000557f3aab97f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aabac48 ...&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="4.014422"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ac79728 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ac791b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac78e40 @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac78c60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac78b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac78af8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac789e0 @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:0x0000557f3ac78968 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac791b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ac791b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac78e40 @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac78c60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac78b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac78af8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac789e0 @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:0x0000557f3ac78918 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&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:0x0000557f3ac79728 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ac791b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac78e40 @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac78c60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac78b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac78af8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac789e0 @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:0x0000557f3ac78968 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac791b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ac791b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac78e40 @client=#&lt;Ably::Rest::Client:0x0000557f3ac795c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac78c60 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac78b98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac78af8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac789e0 @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:0x0000557f3ac78918 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac79728 ...&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 without custom fallback hosts configured sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="4.014356"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ad54e68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ad4fc88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4f788 @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4f4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4f440 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4f3a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4f238 @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:0x0000557f3ad4f1c0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ad4fc88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ad4fc88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4f788 @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4f4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4f440 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4f3a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4f238 @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:0x0000557f3ad4f120 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&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:0x0000557f3ad54e68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ad4fc88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4f788 @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4f4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4f440 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4f3a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4f238 @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:0x0000557f3ad4f1c0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ad4fc88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ad4fc88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4f788 @client=#&lt;Ably::Rest::Client:0x0000557f3ad54940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4f4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4f440 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4f3a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4f238 @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:0x0000557f3ad4f120 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad54e68 ...&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 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="4.014158"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae9e620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae9df18 @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae9dc98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae9dbf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae9db58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae9d9a0 @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:0x0000557f3ae9d928 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae9e620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae9e620 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae9df18 @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae9dc98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae9dbf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae9db58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae9d9a0 @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:0x0000557f3ae9d8d8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&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:0x0000557f3ae9ec88 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae9e620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae9df18 @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae9dc98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae9dbf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae9db58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae9d9a0 @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:0x0000557f3ae9d928 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae9e620 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae9e620 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae9df18 @client=#&lt;Ably::Rest::Client:0x0000557f3ae9eb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae9dc98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae9dbf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae9db58 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae9d9a0 @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:0x0000557f3ae9d8d8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae9ec88 ...&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 uri defaults to production" file="./spec/unit/realtime/client_spec.rb" time="4.014137"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b0054f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b005388 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b004e88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b004b40 @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b004938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b004898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b0047f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b0046e0 @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:0x0000557f3b0045c8 @client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b004e88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b004e88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b004b40 @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b004938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b004898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b0047f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b0046e0 @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:0x0000557f3b004578 @client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&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:0x0000557f3b0054f0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b005388 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b004e88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b004b40 @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b004938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b004898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b0047f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b0046e0 @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:0x0000557f3b0045c8 @client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b004e88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b004e88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b004b40 @client=#&lt;Ably::Rest::Client:0x0000557f3b005388 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b004938 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b004898 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b0047f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b0046e0 @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:0x0000557f3b004578 @client=#&lt;Ably::Realtime::Client:0x0000557f3b0054f0 ...&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="4.017086"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a4adad0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&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:0x0000557f3a497a00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a4950c0 @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a48bef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a48b660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a48ab48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a489d60 @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:0x0000557f3a489978 @client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a497a00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&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:0x0000557f3a497a00 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a4950c0 @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a48bef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a48b660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a48ab48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a489d60 @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:0x0000557f3a489888 @client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&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:0x0000557f3a4adad0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&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:0x0000557f3a497a00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a4950c0 @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a48bef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a48b660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a48ab48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a489d60 @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:0x0000557f3a489978 @client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a497a00 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&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:0x0000557f3a497a00 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a4950c0 @client=#&lt;Ably::Rest::Client:0x0000557f3a4ad5d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a48bef8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a48b660 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a48ab48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a489d60 @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:0x0000557f3a489888 @client=#&lt;Ably::Realtime::Client:0x0000557f3a4adad0 ...&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.001660"></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="4.014063"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3abddc88 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&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:0x0000557f3abdd698 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdd328 @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdd148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdd080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdcfe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdcec8 @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:0x0000557f3abdce28 @client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abdd698 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&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:0x0000557f3abdd698 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdd328 @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdd148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdd080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdcfe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdcec8 @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:0x0000557f3abdcdd8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&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:0x0000557f3abddc88 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&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:0x0000557f3abdd698 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdd328 @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdd148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdd080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdcfe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdcec8 @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:0x0000557f3abdce28 @client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abdd698 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&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:0x0000557f3abdd698 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abdd328 @client=#&lt;Ably::Rest::Client:0x0000557f3abddb20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abdd148 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abdd080 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abdcfe0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abdcec8 @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:0x0000557f3abdcdd8 @client=#&lt;Ably::Realtime::Client:0x0000557f3abddc88 ...&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="4.013947"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ad4f990 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&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:0x0000557f3ad4ec70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4cdd0 @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4cbc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4ca88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4c3f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4c268 @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:0x0000557f3ad4c178 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ad4ec70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&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:0x0000557f3ad4ec70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4cdd0 @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4cbc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4ca88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4c3f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4c268 @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:0x0000557f3ad4c128 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&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:0x0000557f3ad4f990 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&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:0x0000557f3ad4ec70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4cdd0 @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4cbc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4ca88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4c3f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4c268 @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:0x0000557f3ad4c178 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ad4ec70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&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:0x0000557f3ad4ec70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ad4cdd0 @client=#&lt;Ably::Rest::Client:0x0000557f3ad4f698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ad4cbc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ad4ca88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ad4c3f8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ad4c268 @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:0x0000557f3ad4c128 @client=#&lt;Ably::Realtime::Client:0x0000557f3ad4f990 ...&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="4.012918"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ae85530 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae84ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae84b08 @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae84900 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae84860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae847c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae84658 @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:0x0000557f3ae845e0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae84ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae84ec8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae84b08 @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae84900 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae84860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae847c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae84658 @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:0x0000557f3ae84590 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&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:0x0000557f3ae85530 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae84ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae84b08 @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae84900 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae84860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae847c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae84658 @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:0x0000557f3ae845e0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae84ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x0000557f3ae84ec8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae84b08 @client=#&lt;Ably::Rest::Client:0x0000557f3ae853c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae84900 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae84860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae847c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae84658 @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:0x0000557f3ae84590 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae85530 ...&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 tls defaults to TLS" file="./spec/unit/realtime/client_spec.rb" time="4.013064"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3afeed68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afee278 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afedc10 @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afed828 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afed378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afed148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afeccc0 @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:0x0000557f3afecb30 @client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3afee278 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afee278 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afedc10 @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afed828 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afed378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afed148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afeccc0 @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:0x0000557f3afecab8 @client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&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:0x0000557f3afeed68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afee278 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afedc10 @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afed828 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afed378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afed148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afeccc0 @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:0x0000557f3afecb30 @client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3afee278 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afee278 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afedc10 @client=#&lt;Ably::Rest::Client:0x0000557f3afeebb0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afed828 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afed378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afed148 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afeccc0 @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:0x0000557f3afecab8 @client=#&lt;Ably::Realtime::Client:0x0000557f3afeed68 ...&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="4.017058"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a596eb0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&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:0x0000557f3a594c28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a58f520 @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a587f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a587a78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a587208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a585e58 @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:0x0000557f3a585890 @client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a594c28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&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:0x0000557f3a594c28 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a58f520 @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a587f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a587a78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a587208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a585e58 @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:0x0000557f3a5855e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&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:0x0000557f3a596eb0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&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:0x0000557f3a594c28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a58f520 @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a587f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a587a78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a587208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a585e58 @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:0x0000557f3a585890 @client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a594c28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&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:0x0000557f3a594c28 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a58f520 @client=#&lt;Ably::Rest::Client:0x0000557f3a5965c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a587f28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a587a78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a587208 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a585e58 @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:0x0000557f3a5855e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3a596eb0 ...&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="4.014224"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&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:0x0000557f3abc7a78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abc7500 @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abc70c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abc7000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abc6f60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abc6ce0 @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:0x0000557f3abc6c68 @client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abc7a78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&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:0x0000557f3abc7a78 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abc7500 @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abc70c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abc7000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abc6f60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abc6ce0 @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:0x0000557f3abc6c18 @client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&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:0x0000557f3abcc5c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&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:0x0000557f3abc7a78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abc7500 @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abc70c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abc7000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abc6f60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abc6ce0 @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:0x0000557f3abc6c68 @client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3abc7a78 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&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:0x0000557f3abc7a78 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3abc7500 @client=#&lt;Ably::Rest::Client:0x0000557f3abcc2d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3abc70c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3abc7000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3abc6f60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3abc6ce0 @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:0x0000557f3abc6c18 @client=#&lt;Ably::Realtime::Client:0x0000557f3abcc5c8 ...&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 key only connects to the Ably service" file="./spec/unit/realtime/client_spec.rb" time="4.019110"><failure message="expected no Exception, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f...y::Realtime::Client:0x0000557f3ad97f60 ...&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:0x0000557f...y::Realtime::Client:0x0000557f3ad97f60 ...&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 key only uses basic auth" file="./spec/unit/realtime/client_spec.rb" time="4.014296"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebda98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aebd6d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aebd458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aebd390 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aebd2c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aebd1b0 @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:0x0000557f3aebd138 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aebda98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebda98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aebd6d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aebd458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aebd390 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aebd2c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aebd1b0 @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:0x0000557f3aebd0e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&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:0x0000557f3aebe1a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebda98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aebd6d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aebd458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aebd390 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aebd2c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aebd1b0 @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:0x0000557f3aebd138 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aebda98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aebda98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aebd6d8 @client=#&lt;Ably::Rest::Client:0x0000557f3aebe038 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aebd458 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aebd390 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aebd2c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aebd1b0 @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:0x0000557f3aebd0e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aebe1a0 ...&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 rest_host when set with custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="38.113829"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a999fa8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&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:0x0000557f3a993d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a993450 @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a993040 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a992fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a992f00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a992d98 @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:0x0000557f3a992d20 @client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a993d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&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:0x0000557f3a993d38 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a993450 @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a993040 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a992fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a992f00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a992d98 @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:0x0000557f3a992c80 @client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&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:0x0000557f3a999fa8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&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:0x0000557f3a993d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a993450 @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a993040 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a992fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a992f00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a992d98 @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:0x0000557f3a992d20 @client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a993d38 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&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:0x0000557f3a993d38 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a993450 @client=#&lt;Ably::Rest::Client:0x0000557f3a999a80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a993040 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a992fa0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a992f00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a992d98 @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:0x0000557f3a992c80 @client=#&lt;Ably::Realtime::Client:0x0000557f3a999fa8 ...&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 with custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="34.062568"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&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:0x0000557f3ac9b1e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac9ad88 @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac9ab30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac9aa68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac9a978 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac9a540 @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:0x0000557f3ac9a4c8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac9b1e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&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:0x0000557f3ac9b1e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac9ad88 @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac9ab30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac9aa68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac9a978 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac9a540 @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:0x0000557f3ac9a478 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&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:0x0000557f3ac9b7d8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&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:0x0000557f3ac9b1e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac9ad88 @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac9ab30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac9aa68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac9a978 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac9a540 @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:0x0000557f3ac9a4c8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac9b1e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&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:0x0000557f3ac9b1e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac9ad88 @client=#&lt;Ably::Rest::Client:0x0000557f3ac9b620 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac9ab30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac9aa68 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac9a978 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac9a540 @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:0x0000557f3ac9a478 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac9b7d8 ...&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 environment and without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="33.688564"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&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:0x0000557f3aedc510 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aedc038 @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aed7d80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aed7cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aed7bf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aed7ad8 @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:0x0000557f3aed7a60 @client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aedc510 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&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:0x0000557f3aedc510 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aedc038 @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aed7d80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aed7cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aed7bf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aed7ad8 @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:0x0000557f3aed7a10 @client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&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:0x0000557f3aedd1b8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&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:0x0000557f3aedc510 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aedc038 @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aed7d80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aed7cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aed7bf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aed7ad8 @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:0x0000557f3aed7a60 @client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aedc510 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&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:0x0000557f3aedc510 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aedc038 @client=#&lt;Ably::Rest::Client:0x0000557f3aedcbf0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aed7d80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aed7cb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aed7bf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aed7ad8 @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:0x0000557f3aed7a10 @client=#&lt;Ably::Realtime::Client:0x0000557f3aedd1b8 ...&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 environment and without custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="32.856403"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3a2f6278 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&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:0x0000557f3a2d66a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a2c79f0 @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a2c61b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a2c5da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a2c50b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a2c4db8 @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:0x0000557f3a2c4d40 @client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a2d66a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&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:0x0000557f3a2d66a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a2c79f0 @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a2c61b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a2c5da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a2c50b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a2c4db8 @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:0x0000557f3a2c4cf0 @client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&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:0x0000557f3a2f6278 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&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:0x0000557f3a2d66a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a2c79f0 @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a2c61b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a2c5da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a2c50b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a2c4db8 @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:0x0000557f3a2c4d40 @client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3a2d66a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&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:0x0000557f3a2d66a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3a2c79f0 @client=#&lt;Ably::Rest::Client:0x0000557f3a2f4220 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3a2c61b8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3a2c5da8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3a2c50b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3a2c4db8 @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:0x0000557f3a2c4cf0 @client=#&lt;Ably::Realtime::Client:0x0000557f3a2f6278 ...&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 sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="33.682489"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ac51818 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&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:0x0000557f3ac51188 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac50df0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac50b20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac50a58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac50990 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac50738 @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:0x0000557f3ac506c0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac51188 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&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:0x0000557f3ac51188 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac50df0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac50b20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac50a58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac50990 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac50738 @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:0x0000557f3ac50648 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&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:0x0000557f3ac51818 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&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:0x0000557f3ac51188 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac50df0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac50b20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac50a58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac50990 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac50738 @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:0x0000557f3ac506c0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac51188 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&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:0x0000557f3ac51188 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac50df0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac515e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac50b20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac50a58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac50990 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac50738 @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:0x0000557f3ac50648 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac51818 ...&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 without custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="33.756787"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&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:0x0000557f3ae35490 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae350a8 @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae34ea0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae34e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae34d60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae34c48 @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:0x0000557f3ae34b58 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae35490 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&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:0x0000557f3ae35490 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae350a8 @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae34ea0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae34e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae34d60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae34c48 @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:0x0000557f3ae34b08 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&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:0x0000557f3ae35ad0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&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:0x0000557f3ae35490 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae350a8 @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae34ea0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae34e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae34d60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae34c48 @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:0x0000557f3ae34b58 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae35490 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&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:0x0000557f3ae35490 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae350a8 @client=#&lt;Ably::Rest::Client:0x0000557f3ae35968 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae34ea0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae34e00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae34d60 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae34c48 @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:0x0000557f3ae34b08 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae35ad0 ...&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 rest_host when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="33.951670"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b02d680 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&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:0x0000557f3b02ce60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b02ca50 @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b02c6e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b02c640 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b02c5a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b02c398 @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:0x0000557f3b02c320 @client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b02ce60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&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:0x0000557f3b02ce60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b02ca50 @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b02c6e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b02c640 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b02c5a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b02c398 @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:0x0000557f3b02c2d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&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:0x0000557f3b02d680 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&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:0x0000557f3b02ce60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b02ca50 @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b02c6e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b02c640 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b02c5a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b02c398 @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:0x0000557f3b02c320 @client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b02ce60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&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:0x0000557f3b02ce60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b02ca50 @client=#&lt;Ably::Rest::Client:0x0000557f3b02d450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b02c6e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b02c640 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b02c5a0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b02c398 @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:0x0000557f3b02c2d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3b02d680 ...&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 realtime_host when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="0.001222"></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.000777"></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="33.328080"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ac580c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac53870 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&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:0x0000557f3ac53438 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac532f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac433d0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac431a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac43100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac43038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac42f20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac4aba8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac4ab30 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac4aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac4a4c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac4a950 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac4a748&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac4a2c0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ac42ea8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac53870 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac53870 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac433d0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac431a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac43100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac43038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac42f20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac4aba8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac4ab30 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac4aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac4a4c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac4a950 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac4a748&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac4a2c0&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:0x0000557f3ac53438 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac532f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ac42e58 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&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:0x0000557f3ac580c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac53870 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&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:0x0000557f3ac53438 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac532f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac433d0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac431a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac43100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac43038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac42f20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac4aba8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac4ab30 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac4aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac4a4c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac4a950 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac4a748&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac4a2c0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3ac42ea8 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ac53870 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ac53870 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ac433d0 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ac431a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ac43100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ac43038 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ac42f20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3ac4aba8 @client=#&lt;Ably::Rest::Client:0x0000557f3ac53f00 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3ac4ab30 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3ac4aa40 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3ac4a4c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3ac4a950 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3ac4a748&gt;, @mon_data_owner_object_id=24620&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3ac4a2c0&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:0x0000557f3ac53438 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3ac532f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3ac42e58 @client=#&lt;Ably::Realtime::Client:0x0000557f3ac580c8 ...&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 logger default uses Ruby Logger" file="./spec/unit/realtime/client_spec.rb" time="33.305301"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ae45250 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae447d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae44198 @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3ffa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3ff08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3fe40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3fd28 @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:0x0000557f3ae3fc88 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae447d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae447d8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae44198 @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3ffa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3ff08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3fe40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3fd28 @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:0x0000557f3ae3fc38 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&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:0x0000557f3ae45250 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae447d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae44198 @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3ffa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3ff08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3fe40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3fd28 @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:0x0000557f3ae3fc88 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ae447d8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3ae447d8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ae44198 @client=#&lt;Ably::Rest::Client:0x0000557f3ae450e8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ae3ffa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ae3ff08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ae3fe40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ae3fd28 @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:0x0000557f3ae3fc38 @client=#&lt;Ably::Realtime::Client:0x0000557f3ae45250 ...&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="34.357015"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b69ced0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b69c868 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b69c520 @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b69c340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b69c2a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b69c200 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b69c0e8 @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:0x0000557f3b69c070 @client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b69c868 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b69c868 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b69c520 @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b69c340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b69c2a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b69c200 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b69c0e8 @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:0x0000557f3b69c020 @client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&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:0x0000557f3b69ced0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b69c868 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b69c520 @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b69c340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b69c2a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b69c200 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b69c0e8 @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:0x0000557f3b69c070 @client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b69c868 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b69c868 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b69c520 @client=#&lt;Ably::Rest::Client:0x0000557f3b69cd68 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b69c340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b69c2a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b69c200 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b69c0e8 @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:0x0000557f3b69c020 @client=#&lt;Ably::Realtime::Client:0x0000557f3b69ced0 ...&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="32.557482"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b863d40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3b863e08 @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:0x0000557f3b863700 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8633b8 @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b8631d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b863138 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b863098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b862f80 @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:0x0000557f3b862f08 @client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b863700 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3b863e08 @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:0x0000557f3b863700 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8633b8 @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b8631d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b863138 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b863098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b862f80 @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:0x0000557f3b862eb8 @client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&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:0x0000557f3b863d40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3b863e08 @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:0x0000557f3b863700 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8633b8 @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b8631d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b863138 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b863098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b862f80 @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:0x0000557f3b862f08 @client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b863700 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3b863e08 @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:0x0000557f3b863700 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8633b8 @client=#&lt;Ably::Rest::Client:0x0000557f3b863bd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b8631d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b863138 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b863098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b862f80 @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:0x0000557f3b862eb8 @client=#&lt;Ably::Realtime::Client:0x0000557f3b863d40 ...&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 uses the custom logger" file="./spec/unit/realtime/client_spec.rb" time="33.702116"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3ba2bfb0 @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:0x0000557f3ba2b8a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ba2b560 @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ba2b380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ba2b2e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ba2b240 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ba2b128 @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:0x0000557f3ba2b0b0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ba2b8a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3ba2bfb0 @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:0x0000557f3ba2b8a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ba2b560 @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ba2b380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ba2b2e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ba2b240 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ba2b128 @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:0x0000557f3ba2b060 @client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&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:0x0000557f3ba2bee8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3ba2bfb0 @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:0x0000557f3ba2b8a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ba2b560 @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ba2b380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ba2b2e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ba2b240 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ba2b128 @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:0x0000557f3ba2b0b0 @client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3ba2b8a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x0000557f3ba2bfb0 @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:0x0000557f3ba2b8a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3ba2b560 @client=#&lt;Ably::Rest::Client:0x0000557f3ba2bd80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3ba2b380 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3ba2b2e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3ba2b240 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3ba2b128 @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:0x0000557f3ba2b060 @client=#&lt;Ably::Realtime::Client:0x0000557f3ba2bee8 ...&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="33.698759"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bbf3208 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x0000557f3bbf2d30&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:0x0000557f3bbf2bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bbf2880 @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bbf26a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bbf2600 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bbf2560 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bbf2448 @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:0x0000557f3bbf23d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bbf2bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x0000557f3bbf2d30&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:0x0000557f3bbf2bc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bbf2880 @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bbf26a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bbf2600 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bbf2560 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bbf2448 @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:0x0000557f3bbf2380 @client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&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:0x0000557f3bbf3208 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x0000557f3bbf2d30&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:0x0000557f3bbf2bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bbf2880 @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bbf26a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bbf2600 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bbf2560 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bbf2448 @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:0x0000557f3bbf23d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bbf2bc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x0000557f3bbf2d30&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:0x0000557f3bbf2bc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bbf2880 @client=#&lt;Ably::Rest::Client:0x0000557f3bbf30a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bbf26a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bbf2600 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bbf2560 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bbf2448 @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:0x0000557f3bbf2380 @client=#&lt;Ably::Realtime::Client:0x0000557f3bbf3208 ...&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 custom port when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="33.218272"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&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:0x0000557f3bdb5910 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bdb55c8 @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bdb53e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bdb5348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bdb52a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bdb5190 @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:0x0000557f3bdb5118 @client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bdb5910 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&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:0x0000557f3bdb5910 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bdb55c8 @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bdb53e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bdb5348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bdb52a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bdb5190 @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:0x0000557f3bdb50c8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&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:0x0000557f3bdb5e60 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&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:0x0000557f3bdb5910 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bdb55c8 @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bdb53e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bdb5348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bdb52a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bdb5190 @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:0x0000557f3bdb5118 @client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bdb5910 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&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:0x0000557f3bdb5910 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bdb55c8 @client=#&lt;Ably::Rest::Client:0x0000557f3bdb5cf8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bdb53e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bdb5348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bdb52a8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bdb5190 @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:0x0000557f3bdb50c8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bdb5e60 ...&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 with a string token key instead of options hash sets the token" file="./spec/unit/realtime/client_spec.rb" time="34.537068"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bfa4618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&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:0x0000557f3bfa4398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bfa42d0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bfb79e8 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bfb7808 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bfb7768 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bfb76c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bfb75b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bfae0a0 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bfae028 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bfadf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bfadd80 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bfade70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bfade20&gt;, @mon_data_owner_object_id=24800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bfadbf0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bfb7538 @client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bfa4618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bfa4618 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bfb79e8 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bfb7808 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bfb7768 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bfb76c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bfb75b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bfae0a0 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bfae028 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bfadf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bfadd80 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bfade70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bfade20&gt;, @mon_data_owner_object_id=24800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bfadbf0&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:0x0000557f3bfa4398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bfa42d0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3bfb74e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&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:0x0000557f3bfa4cd0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bfa4618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&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:0x0000557f3bfa4398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bfa42d0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bfb79e8 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bfb7808 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bfb7768 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bfb76c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bfb75b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bfae0a0 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bfae028 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bfadf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bfadd80 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bfade70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bfade20&gt;, @mon_data_owner_object_id=24800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bfadbf0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bfb7538 @client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bfa4618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bfa4618 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bfb79e8 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bfb7808 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bfb7768 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bfb76c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bfb75b0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bfae0a0 @client=#&lt;Ably::Rest::Client:0x0000557f3bfa4af0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bfae028 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bfadf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bfadd80 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bfade70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bfade20&gt;, @mon_data_owner_object_id=24800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bfadbf0&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:0x0000557f3bfa4398 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bfa42d0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3bfb74e8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bfa4cd0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:114:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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="33.390817"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa3cf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&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:0x0000557f3aaa3610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa34f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90f38 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90ad8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90948 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa90830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa906a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa9ab50 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa9a948 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa9a6f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa9a330 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa9a628 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa9a560&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa99e30&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa905d8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aaa3cf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa3cf0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90f38 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90ad8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90948 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa90830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa906a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa9ab50 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa9a948 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa9a6f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa9a330 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa9a628 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa9a560&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa99e30&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:0x0000557f3aaa3610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa34f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aa90448 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&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:0x0000557f3aaa8b38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa3cf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&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:0x0000557f3aaa3610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa34f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90f38 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90ad8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90948 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa90830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa906a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa9ab50 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa9a948 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa9a6f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa9a330 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa9a628 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa9a560&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa99e30&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3aa905d8 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3aaa3cf0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3aaa3cf0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3aa90f38 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3aa90ad8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3aa90948 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3aa90830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3aa906a0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3aa9ab50 @client=#&lt;Ably::Rest::Client:0x0000557f3aaa8930 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3aa9a948 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3aa9a6f0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3aa9a330 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3aa9a628 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3aa9a560&gt;, @mon_data_owner_object_id=24980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3aa99e30&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:0x0000557f3aaa3610 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3aaa34f8 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3aa90448 @client=#&lt;Ably::Realtime::Client:0x0000557f3aaa8b38 ...&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 with a string key instead of options hash sets the key_name" file="./spec/unit/realtime/client_spec.rb" time="32.649264"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adb5470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 ...&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:0x0000557f3adb5060 @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb4d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb4cc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb4c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb4a70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3adb49d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3adb5470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adb5470 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adb5060 @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb4d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb4cc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb4c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb4a70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3adb4980 @client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&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:0x0000557f3adb5cb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adb5470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 ...&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:0x0000557f3adb5060 @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb4d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb4cc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb4c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb4a70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3adb49d0 @client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3adb5470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3adb5470 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3adb5060 @client=#&lt;Ably::Rest::Client:0x0000557f3adb59c0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3adb4d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3adb4cc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3adb4c00 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3adb4a70 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3adb4980 @client=#&lt;Ably::Realtime::Client:0x0000557f3adb5cb8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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.456931"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3afcef68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3afced38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afce7e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 ...&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:0x0000557f3afce3b0 @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afce130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afce068 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afcdf78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afcdde8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3afcdcd0 @client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3afce7e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afce7e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afce3b0 @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afce130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afce068 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afcdf78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afcdde8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3afcdc30 @client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&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:0x0000557f3afcef68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3afced38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afce7e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 ...&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:0x0000557f3afce3b0 @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afce130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afce068 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afcdf78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afcdde8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3afcdcd0 @client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3afce7e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3afce7e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3afce3b0 @client=#&lt;Ably::Rest::Client:0x0000557f3afced38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3afce130 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3afce068 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3afcdf78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3afcdde8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3afcdc30 @client=#&lt;Ably::Realtime::Client:0x0000557f3afcef68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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="34.126123"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b7d3560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 ...&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:0x0000557f3b7d31c8 @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b7d2fe8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b7d2f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7d2ea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7d2d90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3b7d2d18 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b7d3560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b7d3560 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b7d31c8 @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b7d2fe8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b7d2f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7d2ea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7d2d90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3b7d2cc8 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&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:0x0000557f3b7d3c68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b7d3560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 ...&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:0x0000557f3b7d31c8 @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b7d2fe8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b7d2f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7d2ea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7d2d90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3b7d2d18 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b7d3560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b7d3560 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b7d31c8 @client=#&lt;Ably::Rest::Client:0x0000557f3b7d3a38 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b7d2fe8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b7d2f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7d2ea8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7d2d90 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3b7d2cc8 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7d3c68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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.405004"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b972358 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b972128 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b971c50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 ...&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:0x0000557f3b971908 @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b971728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b971688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b9715e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b9714d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3b971458 @client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b971c50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b971c50 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b971908 @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b971728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b971688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b9715e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b9714d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3b971408 @client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&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:0x0000557f3b972358 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b972128 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b971c50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 ...&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:0x0000557f3b971908 @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b971728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b971688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b9715e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b9714d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3b971458 @client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b971c50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b971c50 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b971908 @client=#&lt;Ably::Rest::Client:0x0000557f3b972128 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b971728 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b971688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b9715e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b9714d0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3b971408 @client=#&lt;Ably::Realtime::Client:0x0000557f3b972358 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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="38.626850"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bb7a100 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb79a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb79868 @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb79688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb795e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb79548 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb79430 @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:0x0000557f3bb793b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bb79a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb79a70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb79868 @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb79688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb795e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb79548 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb79430 @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:0x0000557f3bb79368 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&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:0x0000557f3bb7a100 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb79a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb79868 @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb79688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb795e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb79548 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb79430 @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:0x0000557f3bb793b8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bb79a70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb79a70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb79868 @client=#&lt;Ably::Rest::Client:0x0000557f3bb79f98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb79688 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb795e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb79548 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb79430 @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:0x0000557f3bb79368 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb7a100 ...&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_details sets the token" file="./spec/unit/realtime/client_spec.rb" time="35.516629"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bd73448 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x0000557f3bd72de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd5beb0 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd5bcd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd5bc30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd5bb90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd5ba78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bd72570 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bd724d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bd723e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bd72228 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bd72318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bd722c8&gt;, @mon_data_owner_object_id=25160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bd72098&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bd5ba00 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bd72de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x0000557f3bd72de0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd5beb0 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd5bcd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd5bc30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd5bb90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd5ba78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bd72570 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bd724d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bd723e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bd72228 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bd72318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bd722c8&gt;, @mon_data_owner_object_id=25160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bd72098&gt;&gt;&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3bd5b9b0 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&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:0x0000557f3bd73448 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x0000557f3bd72de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd5beb0 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd5bcd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd5bc30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd5bb90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd5ba78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bd72570 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bd724d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bd723e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bd72228 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bd72318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bd722c8&gt;, @mon_data_owner_object_id=25160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bd72098&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=false, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bd5ba00 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bd72de0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x0000557f3bd72de0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd5beb0 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd5bcd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd5bc30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd5bb90 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd5ba78 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x0000557f3bd72570 @client=#&lt;Ably::Rest::Client:0x0000557f3bd732e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x0000557f3bd724d0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x0000557f3bd723e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x0000557f3bd72228 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x0000557f3bd72318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x0000557f3bd722c8&gt;, @mon_data_owner_object_id=25160&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x0000557f3bd72098&gt;&gt;&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x0000557f3bd81098 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x0000557f3bd80fd0 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x0000557f3bd5b9b0 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd73448 ...&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 push #push returns a Push object" file="./spec/unit/realtime/client_spec.rb" time="33.871337"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bf86730 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bf860f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bf85da8 @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bf85bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bf85b28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bf85a88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bf85970 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bf858f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bf860f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bf860f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bf85da8 @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bf85bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bf85b28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bf85a88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bf85970 @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:0x0000557f3bf858a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&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:0x0000557f3bf86730 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bf860f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bf85da8 @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bf85bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bf85b28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bf85a88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bf85970 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bf858f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bf860f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bf860f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bf85da8 @client=#&lt;Ably::Rest::Client:0x0000557f3bf865c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bf85bc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bf85b28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bf85a88 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bf85970 @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:0x0000557f3bf858a8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bf86730 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:52:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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 #device is not supported and raises an exception" file="./spec/unit/realtime/client_spec.rb" time="34.765454"><failure message="expected Ably::Exceptions::PushNotificationsNotSupported, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f...y::Realtime::Client:0x0000557f3aa56b30 ...&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:0x0000557f...y::Realtime::Client:0x0000557f3aa56b30 ...&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 delegation to the REST Client passes on the options to the initializer" file="./spec/unit/realtime/client_spec.rb" time="34.283224"><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 #custom_host" file="./spec/unit/realtime/client_spec.rb" time="34.389222"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3af57940 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af57210 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af56d88 @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af56b80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af56ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af56a40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af56900 @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:0x0000557f3af56888 @client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af57210 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af57210 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af56d88 @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af56b80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af56ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af56a40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af56900 @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:0x0000557f3af56838 @client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&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:0x0000557f3af57940 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af57210 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af56d88 @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af56b80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af56ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af56a40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af56900 @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:0x0000557f3af56888 @client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3af57210 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3af57210 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3af56d88 @client=#&lt;Ably::Rest::Client:0x0000557f3af577b0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3af56b80 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3af56ae0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3af56a40 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3af56900 @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:0x0000557f3af56838 @client=#&lt;Ably::Realtime::Client:0x0000557f3af57940 ...&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.563324"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b7992e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b799180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b798c58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b798910 @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b798730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b798690 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7985f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7984d8 @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:0x0000557f3b798460 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b798c58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b798c58 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b798910 @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b798730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b798690 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7985f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7984d8 @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:0x0000557f3b798410 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&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:0x0000557f3b7992e8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b799180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b798c58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b798910 @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b798730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b798690 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7985f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7984d8 @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:0x0000557f3b798460 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b798c58 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b798c58 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b798910 @client=#&lt;Ably::Rest::Client:0x0000557f3b799180 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b798730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b798690 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b7985f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b7984d8 @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:0x0000557f3b798410 @client=#&lt;Ably::Realtime::Client:0x0000557f3b7992e8 ...&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="35.098625"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b8fc450 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8fc108 @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b98bec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b98be20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b98bd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b98bc68 @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:0x0000557f3b98bbf0 @client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b8fc450 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b8fc450 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8fc108 @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b98bec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b98be20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b98bd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b98bc68 @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:0x0000557f3b98bba0 @client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&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:0x0000557f3b8fcab8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b8fc450 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8fc108 @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b98bec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b98be20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b98bd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b98bc68 @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:0x0000557f3b98bbf0 @client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3b8fc450 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3b8fc450 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3b8fc108 @client=#&lt;Ably::Rest::Client:0x0000557f3b8fc950 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3b98bec0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3b98be20 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3b98bd80 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3b98bc68 @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:0x0000557f3b98bba0 @client=#&lt;Ably::Realtime::Client:0x0000557f3b8fcab8 ...&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 #environment" file="./spec/unit/realtime/client_spec.rb" time="34.156837"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb23440 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb230f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb22f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb22e78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb22dd8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb22cc0 @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:0x0000557f3bb22c48 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bb23440 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb23440 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb230f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb22f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb22e78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb22dd8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb22cc0 @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:0x0000557f3bb22bf8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&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:0x0000557f3bb23aa8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb23440 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb230f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb22f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb22e78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb22dd8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb22cc0 @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:0x0000557f3bb22c48 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bb23440 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bb23440 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bb230f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bb23940 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bb22f18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bb22e78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bb22dd8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bb22cc0 @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:0x0000557f3bb22bf8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bb23aa8 ...&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 when :transport_params option is passed converts options to strings" file="./spec/unit/realtime/client_spec.rb" time="33.839070"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x0000557f3bd17170 @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:0x0000557f3bd16f18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd16a40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd166f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd16518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd16478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd163d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd162c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bd16248 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bd16a40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd16a40 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd166f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd16518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd16478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd163d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd162c0 @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:0x0000557f3bd161f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&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:0x0000557f3bd17170 @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:0x0000557f3bd16f18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd16a40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd166f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd16518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd16478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd163d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd162c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x0000557f3bd16248 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x0000557f3bd16a40 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 @agent=&quot;ably-ruby/1.2.7 ruby/3.0.7&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-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:0x0000557f3bd16a40 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x0000557f3bd166f8 @client=#&lt;Ably::Rest::Client:0x0000557f3bd16f18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x0000557f3bd16518 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x0000557f3bd16478 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x0000557f3bd163d8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x0000557f3bd162c0 @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:0x0000557f3bd161f8 @client=#&lt;Ably::Realtime::Client:0x0000557f3bd17170 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:40:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.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.channels_spec" name="Ably::Realtime::Channels#fetch calls the block if channel is missing" file="./spec/unit/realtime/channels_spec.rb" time="0.001313"></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.001273"></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.001398"></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.001268"></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.001066"></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.001240"></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.000968"></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.001144"></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.003961"></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.000919"></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.001201"></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.000656"></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.001263"></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.000605"></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.001275"></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.001207"></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.000786"></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.001570"></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.000754"></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.000913"></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.000698"></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.000681"></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.000618"></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.000883"></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.000733"></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.000822"></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.000821"></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.000861"></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.000874"></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.000768"></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.000776"></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.000897"></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.000695"></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.000783"></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.000720"></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.000604"></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.000827"></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.000978"></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.000652"></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.000841"></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.000833"></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.000839"></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.000751"></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.000802"></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.000897"></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.000673"></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.000743"></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.000849"></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.000907"></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.000768"></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.001035"></testcase>
<testcase classname="spec.unit.models.idiomatic_ruby_wrapper_spec" name="Ably::Models::IdiomaticRubyWrapper non standard mixedCaseData lower_case_symbol allows access to non conformant keys but prefers correct mixedCaseSyntax" file="./spec/unit/models/idiomatic_ruby_wrapper_spec.rb" time="0.000762"></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.000634"></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.001007"></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.000575"></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.000587"></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.001109"></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.000623"></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.000888"></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.000673"></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.000578"></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.000846"></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.000715"></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.000796"></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.000812"></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.000769"></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.003175"></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.000845"></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.000845"></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.000746"></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.000902"></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.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.000679"></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.000778"></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.000713"></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.000778"></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.000732"></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.000793"></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.000714"></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.000614"></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.000809"></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.000779"></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.000758"></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.000765"></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.000782"></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.000836"></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.000804"></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.000714"></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.000703"></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.000594"></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.000779"></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.000964"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence msgbus supports messages" file="./spec/unit/realtime/presence_spec.rb" time="0.001274"></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.000836"></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.000882"></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.001325"></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.001170"></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.001189"></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.001135"></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.001113"></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.000771"></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.001569"></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.001149"></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.001122"></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.001069"></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.001277"></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.000957"></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.000963"></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.001087"></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.000654"></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.000821"></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.000984"></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.001160"></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.001066"></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.000988"></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.000978"></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.000772"></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.000792"></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.000995"></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.000772"></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.001337"></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.001130"></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.000888"></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.001278"></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.001156"></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.001197"></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.001104"></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.001169"></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.000673"></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.000842"></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.001184"></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.001120"></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.001046"></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.001090"></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.001128"></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.000641"></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.000731"></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.000678"></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.000808"></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.000704"></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.000631"></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.000730"></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.000741"></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.000726"></testcase>
<testcase classname="spec.unit.models.channel_state_change_spec" name="Ably::Models::ChannelStateChange#current (#TH1) is an attribute" file="./spec/unit/models/channel_state_change_spec.rb" time="0.000634"></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.000560"></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.000736"></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.000768"></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.000683"></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.000767"></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.000712"></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.000680"></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.001160"></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.000734"></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.001010"></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.000773"></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.000677"></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.000994"></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.000870"></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.000870"></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.000755"></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.000725"></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.000832"></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.000876"></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.000833"></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.000848"></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.000871"></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.000883"></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.000970"></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.000992"></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.000811"></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.000828"></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.000797"></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.003181"></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.000913"></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.000912"></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.000843"></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.000802"></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.000834"></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.000866"></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.000739"></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.000835"></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.000869"></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.000838"></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.000837"></testcase>
</testsuite>
