<testsuite name="rspec1" tests="609" skipped="0" failures="77" errors="0" time="1722.252844" timestamp="2025-01-31T13:29:21+00:00" hostname="fv-az1392-340">
<properties>
<property name="seed" value="21813"/>
</properties>
<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.014417"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99097178a8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909636a60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909972da0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909939c08 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909939a28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099398c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909939780 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909939028 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909175198 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909175148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909729670 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909728e00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d5d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097294b8&gt;, @mon_data_owner_object_id=15180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909728a68&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f9909938fd8 @client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909972da0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909972da0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909939c08 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909939a28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099398c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909939780 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909939028 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909175198 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909175148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909729670 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909728e00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d5d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097294b8&gt;, @mon_data_owner_object_id=15180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909728a68&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909938fb0 @client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f99091750a8 @client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909175058 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097289c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909728568 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d538 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909728748&gt;, @mon_data_owner_object_id=15200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909728298&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:0x00007f99097178a8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909636a60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909972da0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909939c08 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909939a28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099398c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909939780 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909939028 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909175198 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909175148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909729670 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909728e00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d5d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097294b8&gt;, @mon_data_owner_object_id=15180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909728a68&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f9909938fd8 @client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909972da0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909972da0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909939c08 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909939a28 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099398c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909939780 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909939028 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909175198 @client=#&lt;Ably::Rest::Client:0x00007f9909636a60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909175148 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909729670 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909728e00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d5d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097294b8&gt;, @mon_data_owner_object_id=15180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909728a68&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909938fb0 @client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f99091750a8 @client=#&lt;Ably::Realtime::Client:0x00007f99097178a8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909175058 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097289c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909728568 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d538 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909728748&gt;, @mon_data_owner_object_id=15200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909728298&gt;&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:395:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer delegators delegates :auth_options to .auth" file="./spec/unit/realtime/client_spec.rb" time="4.009285"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909712448 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99096203c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f990968e1c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098ee438 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098ee320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ee078 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098ee000 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098ede48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174bf8 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174ba8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909720610 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909720458 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d218 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909720598&gt;, @mon_data_owner_object_id=15300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097202f0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99098eddd0 @client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968e1c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f990968e1c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098ee438 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098ee320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ee078 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098ee000 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098ede48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174bf8 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174ba8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909720610 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909720458 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d218 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909720598&gt;, @mon_data_owner_object_id=15300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097202f0&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99098edd80 @client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909174b08 @client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174ab8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909720250 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990973ff38 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d178 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097201d8&gt;, @mon_data_owner_object_id=15320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990973fd08&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:0x00007f9909712448 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99096203c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f990968e1c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098ee438 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098ee320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ee078 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098ee000 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098ede48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174bf8 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174ba8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909720610 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909720458 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d218 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909720598&gt;, @mon_data_owner_object_id=15300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097202f0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99098eddd0 @client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968e1c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f990968e1c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098ee438 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098ee320 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ee078 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098ee000 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098ede48 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174bf8 @client=#&lt;Ably::Rest::Client:0x00007f99096203c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174ba8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909720610 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909720458 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d218 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909720598&gt;, @mon_data_owner_object_id=15300&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097202f0&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99098edd80 @client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909174b08 @client=#&lt;Ably::Realtime::Client:0x00007f9909712448 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174ab8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909720250 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990973ff38 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8d178 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097201d8&gt;, @mon_data_owner_object_id=15320&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990973fd08&gt;&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:395:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger with custom logger and log_level uses the custom logger" file="./spec/unit/realtime/client_spec.rb" time="4.008887"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909744e20 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909609380 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096d75a0 @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:0x00007f990968a020 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609380 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d6b50 @client=#&lt;Ably::Rest::Client:0x00007f9909609380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d69c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096d68f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096d6830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096d6740 @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:0x00007f99096d66a0 @client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968a020 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609380 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096d75a0 @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:0x00007f990968a020 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d6b50 @client=#&lt;Ably::Rest::Client:0x00007f9909609380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d69c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096d68f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096d6830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096d6740 @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:0x00007f99096d6678 @client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&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:0x00007f9909744e20 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909609380 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096d75a0 @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:0x00007f990968a020 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609380 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d6b50 @client=#&lt;Ably::Rest::Client:0x00007f9909609380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d69c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096d68f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096d6830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096d6740 @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:0x00007f99096d66a0 @client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968a020 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609380 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096d75a0 @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:0x00007f990968a020 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d6b50 @client=#&lt;Ably::Rest::Client:0x00007f9909609380 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d69c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096d68f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096d6830 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096d6740 @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:0x00007f99096d6678 @client=#&lt;Ably::Realtime::Client:0x00007f9909744e20 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger with custom logger and log_level sets the custom log level" file="./spec/unit/realtime/client_spec.rb" time="4.032444"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990978f330 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096a4ba0 @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:0x00007f99096866f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096a4470 @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096a4358 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096a42e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096a4268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096a4178 @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:0x00007f99096a4128 @client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096866f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096a4ba0 @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:0x00007f99096866f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096a4470 @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096a4358 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096a42e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096a4268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096a4178 @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:0x00007f99096a4100 @client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&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:0x00007f990978f330 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096a4ba0 @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:0x00007f99096866f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096a4470 @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096a4358 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096a42e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096a4268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096a4178 @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:0x00007f99096a4128 @client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096866f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=0, @custom_logger=#&lt;TestLogger:0x00007f99096a4ba0 @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:0x00007f99096866f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096a4470 @client=#&lt;Ably::Rest::Client:0x00007f99095f2bd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096a4358 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096a42e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096a4268 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096a4178 @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:0x00007f99096a4100 @client=#&lt;Ably::Realtime::Client:0x00007f990978f330 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger default uses Ruby Logger" file="./spec/unit/realtime/client_spec.rb" time="4.008646"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909805008 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990b1722c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a3db68 @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a3d988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a3d780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a3d4b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a3d190 @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:0x00007f9909a3d000 @client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990b1722c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990b1722c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a3db68 @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a3d988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a3d780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a3d4b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a3d190 @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:0x00007f9909a3cf60 @client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&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:0x00007f9909805008 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990b1722c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a3db68 @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a3d988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a3d780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a3d4b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a3d190 @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:0x00007f9909a3d000 @client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990b1722c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990b1722c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a3db68 @client=#&lt;Ably::Rest::Client:0x00007f990960bcc0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a3d988 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a3d780 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a3d4b0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a3d190 @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:0x00007f9909a3cf60 @client=#&lt;Ably::Realtime::Client:0x00007f9909805008 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger default specifies Logger::WARN log level" file="./spec/unit/realtime/client_spec.rb" time="4.008891"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096eb050 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909614b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990968cdc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909908bd0 @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909908798 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909908630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909908298 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909908158 @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:0x00007f99099080b8 @client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968cdc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990968cdc0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909908bd0 @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909908798 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909908630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909908298 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909908158 @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:0x00007f9909907ff0 @client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&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:0x00007f99096eb050 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909614b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990968cdc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909908bd0 @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909908798 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909908630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909908298 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909908158 @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:0x00007f99099080b8 @client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968cdc0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990968cdc0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909908bd0 @client=#&lt;Ably::Rest::Client:0x00007f9909614b18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909908798 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909908630 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909908298 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909908158 @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:0x00007f9909907ff0 @client=#&lt;Ably::Realtime::Client:0x00007f99096eb050 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments logger with log_level :none silences all logging with a NilLogger" file="./spec/unit/realtime/client_spec.rb" time="4.008695"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096e35d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990963dae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007f990976bf48&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:0x00007f9909688a90 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990976b980 @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990976b840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990976b610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990976b598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990976b430 @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:0x00007f990976b3e0 @client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909688a90 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007f990976bf48&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:0x00007f9909688a90 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990976b980 @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990976b840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990976b610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990976b598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990976b430 @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:0x00007f990976b3b8 @client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&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:0x00007f99096e35d0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990963dae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007f990976bf48&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:0x00007f9909688a90 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990976b980 @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990976b840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990976b610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990976b598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990976b430 @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:0x00007f990976b3e0 @client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909688a90 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=:none, @custom_logger=#&lt;Ably::Models::NilLogger:0x00007f990976bf48&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:0x00007f9909688a90 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990976b980 @client=#&lt;Ably::Rest::Client:0x00007f990963dae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990976b840 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990976b610 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990976b598 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990976b430 @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:0x00007f990976b3b8 @client=#&lt;Ably::Realtime::Client:0x00007f99096e35d0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:225:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments realtime_host when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="0.002980"></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.001278"></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.007606"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909717268 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99097f4898 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&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:0x00007f99096fc580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990967ae18 @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990967ad00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990967ac88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990967ac10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990967ab20 @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:0x00007f990967aad0 @client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096fc580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&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:0x00007f99096fc580 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990967ae18 @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990967ad00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990967ac88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990967ac10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990967ab20 @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:0x00007f990967aaa8 @client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&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:0x00007f9909717268 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99097f4898 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&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:0x00007f99096fc580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990967ae18 @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990967ad00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990967ac88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990967ac10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990967ab20 @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:0x00007f990967aad0 @client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096fc580 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&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:0x00007f99096fc580 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990967ae18 @client=#&lt;Ably::Rest::Client:0x00007f99097f4898 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990967ad00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990967ac88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990967ac10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990967ab20 @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:0x00007f990967aaa8 @client=#&lt;Ably::Realtime::Client:0x00007f9909717268 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:387:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with fallback_hosts_use_default sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="4.008756"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909710e68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f6770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097bf120 @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097bf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097beef0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097bee50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097bed88 @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:0x00007f99097bed38 @client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096f6770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f6770 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097bf120 @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097bf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097beef0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097bee50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097bed88 @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:0x00007f99097bed10 @client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&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:0x00007f9909710e68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f6770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097bf120 @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097bf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097beef0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097bee50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097bed88 @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:0x00007f99097bed38 @client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096f6770 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f6770 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097bf120 @client=#&lt;Ably::Rest::Client:0x00007f99095da8c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097bf030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097beef0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097bee50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097bed88 @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:0x00007f99097bed10 @client=#&lt;Ably::Realtime::Client:0x00007f9909710e68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:297:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with fallback_hosts_use_default uses the production default fallback hosts (#RTN17b)" file="./spec/unit/realtime/client_spec.rb" time="4.008756"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909742120 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c4258 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f3110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095ad800 @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99095ad710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095ad698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99095ad620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095ad558 @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:0x00007f99095ad508 @client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096f3110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f3110 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095ad800 @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99095ad710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095ad698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99095ad620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095ad558 @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:0x00007f99095ad4e0 @client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&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:0x00007f9909742120 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c4258 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f3110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095ad800 @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99095ad710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095ad698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99095ad620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095ad558 @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:0x00007f99095ad508 @client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096f3110 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99096f3110 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095ad800 @client=#&lt;Ably::Rest::Client:0x00007f99095c4258 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99095ad710 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095ad698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99095ad620 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095ad558 @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:0x00007f99095ad4e0 @client=#&lt;Ably::Realtime::Client:0x00007f9909742120 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:301:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set without custom fallback hosts configured sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="4.008551"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990978b550 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990955d850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990975f6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990955d850 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909564650 @client=#&lt;Ably::Rest::Client:0x00007f990955d850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909564560 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095644e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909564470 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095643a8 @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:0x00007f9909564358 @client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990975f6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990955d850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990975f6a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909564650 @client=#&lt;Ably::Rest::Client:0x00007f990955d850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909564560 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095644e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909564470 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095643a8 @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:0x00007f9909564330 @client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&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:0x00007f990978b550 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990955d850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990975f6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990955d850 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909564650 @client=#&lt;Ably::Rest::Client:0x00007f990955d850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909564560 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095644e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909564470 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095643a8 @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:0x00007f9909564358 @client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990975f6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990955d850 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990975f6a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909564650 @client=#&lt;Ably::Rest::Client:0x00007f990955d850 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909564560 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99095644e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909564470 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99095643a8 @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:0x00007f9909564330 @client=#&lt;Ably::Realtime::Client:0x00007f990978b550 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:268:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments 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.011741"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99097c8900 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909550c90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990b174a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990cbae3a0 @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990cbae238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990cbae030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990cbadb08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990cbad5e0 @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:0x00007f990cbad3d8 @client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990b174a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990b174a20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990cbae3a0 @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990cbae238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990cbae030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990cbadb08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990cbad5e0 @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:0x00007f990cbad180 @client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&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:0x00007f99097c8900 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909550c90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990b174a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990cbae3a0 @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990cbae238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990cbae030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990cbadb08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990cbad5e0 @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:0x00007f990cbad3d8 @client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990b174a20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990b174a20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990cbae3a0 @client=#&lt;Ably::Rest::Client:0x00007f9909550c90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990cbae238 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990cbae030 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990cbadb08 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990cbad5e0 @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:0x00007f990cbad180 @client=#&lt;Ably::Realtime::Client:0x00007f99097c8900 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:272:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with custom fallback hosts configured uses the custom provided fallback hosts (#RSC15a)" file="./spec/unit/realtime/client_spec.rb" time="4.008858"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096ef650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990968d130 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098c4688 @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098c4340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098c41b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098c3ee0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098c3d78 @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:0x00007f99098c3c38 @client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968d130 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990968d130 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098c4688 @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098c4340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098c41b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098c3ee0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098c3d78 @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:0x00007f99098c3c10 @client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&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:0x00007f99096ef650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990968d130 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098c4688 @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098c4340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098c41b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098c3ee0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098c3d78 @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:0x00007f99098c3c38 @client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990968d130 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f990968d130 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098c4688 @client=#&lt;Ably::Rest::Client:0x00007f99095c9ed8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098c4340 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098c41b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098c3ee0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098c3d78 @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:0x00007f99098c3c10 @client=#&lt;Ably::Realtime::Client:0x00007f99096ef650 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:286:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments environment when set with custom fallback hosts configured sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="4.007662"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096e4610 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d3488 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f9909688d60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097ef730 @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097ef3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097ef348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097ef280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ef190 @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:0x00007f99097ef140 @client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909688d60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f9909688d60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097ef730 @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097ef3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097ef348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097ef280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ef190 @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:0x00007f99097ef118 @client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&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:0x00007f99096e4610 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d3488 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f9909688d60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097ef730 @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097ef3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097ef348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097ef280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ef190 @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:0x00007f99097ef140 @client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909688d60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f9909688d60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097ef730 @client=#&lt;Ably::Rest::Client:0x00007f99095d3488 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097ef3c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097ef348 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097ef280 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ef190 @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:0x00007f99097ef118 @client=#&lt;Ably::Realtime::Client:0x00007f99096e4610 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:282:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments key_name and key_secret constructs a key" file="./spec/unit/realtime/client_spec.rb" time="4.008436"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096e00b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095fc590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909684800 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990969d5f8 @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969d4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969d468 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969d3f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969d328 @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:0x00007f990969d260 @client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909684800 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909684800 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990969d5f8 @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969d4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969d468 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969d3f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969d328 @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:0x00007f990969d238 @client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&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:0x00007f99096e00b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095fc590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909684800 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;id&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990969d5f8 @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969d4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969d468 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969d3f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969d328 @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:0x00007f990969d260 @client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909684800 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909684800 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990969d5f8 @client=#&lt;Ably::Rest::Client:0x00007f99095fc590 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969d4e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969d468 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969d3f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969d328 @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:0x00007f990969d238 @client=#&lt;Ably::Realtime::Client:0x00007f99096e00b0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:84:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments custom port when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="4.008193"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909716a48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909605140 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&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:0x00007f99096802f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909605140 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095963f8 @client=#&lt;Ably::Rest::Client:0x00007f9909605140 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909596308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909596290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909596218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909596150 @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:0x00007f9909596100 @client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096802f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909605140 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&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:0x00007f99096802f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095963f8 @client=#&lt;Ably::Rest::Client:0x00007f9909605140 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909596308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909596290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909596218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909596150 @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:0x00007f99095960d8 @client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&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:0x00007f9909716a48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909605140 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&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:0x00007f99096802f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909605140 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095963f8 @client=#&lt;Ably::Rest::Client:0x00007f9909605140 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909596308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909596290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909596218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909596150 @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:0x00007f9909596100 @client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096802f0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909605140 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&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:0x00007f99096802f0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99095963f8 @client=#&lt;Ably::Rest::Client:0x00007f9909605140 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909596308 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909596290 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909596218 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909596150 @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:0x00007f99095960d8 @client=#&lt;Ably::Realtime::Client:0x00007f9909716a48 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:376:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with token sets the token" file="./spec/unit/realtime/client_spec.rb" time="4.009710"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909742760 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990962c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99096f79e0 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99096f7990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096798d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909679770 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909742620 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909679860&gt;, @mon_data_owner_object_id=14360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909679298&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99097426c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&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:0x00007f990967d028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990967cf88 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909671430 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909671250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096711d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909670ff8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909670f08 @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:0x00007f9909670d78 @client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99097426c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990962c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99096f79e0 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99096f7990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096798d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909679770 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909742620 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909679860&gt;, @mon_data_owner_object_id=14360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909679298&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99097426c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909671430 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909671250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096711d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909670ff8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909670f08 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990967d028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990967cf88 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909670d28 @client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&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:0x00007f9909742760 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990962c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99096f79e0 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99096f7990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096798d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909679770 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909742620 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909679860&gt;, @mon_data_owner_object_id=14360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909679298&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99097426c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&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:0x00007f990967d028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990967cf88 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909671430 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909671250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096711d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909670ff8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909670f08 @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:0x00007f9909670d78 @client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99097426c0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990962c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99096f79e0 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99096f7990 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096798d8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909679770 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909742620 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909679860&gt;, @mon_data_owner_object_id=14360&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909679298&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99097426c0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909671430 @client=#&lt;Ably::Rest::Client:0x00007f990962c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909671250 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096711d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909670ff8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909670f08 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990967d028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990967cf88 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909670d28 @client=#&lt;Ably::Realtime::Client:0x00007f9909742760 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:128:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash sets the key_secret" file="./spec/unit/realtime/client_spec.rb" time="4.010318"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909805648 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909805468 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&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:0x00007f9909a730d8 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a72ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a72d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a72c78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a72a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174658 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174608 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097389e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097387b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909738968&gt;, @mon_data_owner_object_id=15420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909738670&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f9909a72908 @client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909805468 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909805468 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a730d8 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a72ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a72d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a72c78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a72a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174658 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174608 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097389e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097387b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909738968&gt;, @mon_data_owner_object_id=15420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909738670&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909a727a0 @client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909174568 @client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174518 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909738620 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909738490 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8cdb8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909738580&gt;, @mon_data_owner_object_id=15440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097382b0&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:0x00007f9909805648 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909805468 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&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:0x00007f9909a730d8 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a72ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a72d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a72c78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a72a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174658 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174608 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097389e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097387b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909738968&gt;, @mon_data_owner_object_id=15420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909738670&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f9909a72908 @client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909805468 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9909805468 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a730d8 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a72ed0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a72d90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a72c78 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a72a20 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909174658 @client=#&lt;Ably::Rest::Client:0x00007f9909634ee0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174608 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097389e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097387b0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ce58 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909738968&gt;, @mon_data_owner_object_id=15420&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909738670&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909a727a0 @client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909174568 @client=#&lt;Ably::Realtime::Client:0x00007f9909805648 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909174518 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909738620 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909738490 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8cdb8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909738580&gt;, @mon_data_owner_object_id=15440&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097382b0&gt;&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash uses basic auth" file="./spec/unit/realtime/client_spec.rb" time="4.008269"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99097c4f80 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909588e88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99097c4ee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&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:0x00007f99099ea828 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099e9220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099e8fc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099e8d48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099e8140 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173f78 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173f28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909734340 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909734098 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ca98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909734278&gt;, @mon_data_owner_object_id=15540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097339e0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99099e7f10 @client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99097c4ee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99097c4ee0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99099ea828 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099e9220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099e8fc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099e8d48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099e8140 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173f78 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173f28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909734340 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909734098 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ca98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909734278&gt;, @mon_data_owner_object_id=15540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097339e0&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99099e7d58 @client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909173e88 @client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173e38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097335a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909732e28 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c9f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097330f8&gt;, @mon_data_owner_object_id=15560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909732ce8&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:0x00007f99097c4f80 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909588e88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99097c4ee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&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:0x00007f99099ea828 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099e9220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099e8fc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099e8d48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099e8140 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173f78 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173f28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909734340 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909734098 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ca98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909734278&gt;, @mon_data_owner_object_id=15540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097339e0&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99099e7f10 @client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99097c4ee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99097c4ee0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99099ea828 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099e9220 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099e8fc8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099e8d48 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099e8140 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173f78 @client=#&lt;Ably::Rest::Client:0x00007f9909588e88 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173f28 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909734340 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909734098 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8ca98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909734278&gt;, @mon_data_owner_object_id=15540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097339e0&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99099e7d58 @client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909173e88 @client=#&lt;Ably::Realtime::Client:0x00007f99097c4f80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173e38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097335a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909732e28 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c9f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097330f8&gt;, @mon_data_owner_object_id=15560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909732ce8&gt;&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash sets the key" file="./spec/unit/realtime/client_spec.rb" time="4.008639"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096e87b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c2098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e7bd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&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:0x00007f99097ebe50 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097eb950 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097eb450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097eaeb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ea2a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f99091739d8 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976e6f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976e388 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c6d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976e680&gt;, @mon_data_owner_object_id=15660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976e068&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99097e9fb0 @client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096e7bd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e7bd0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097ebe50 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097eb950 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097eb450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097eaeb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ea2a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f99091739d8 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976e6f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976e388 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c6d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976e680&gt;, @mon_data_owner_object_id=15660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976e068&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99097e9f88 @client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f99091738e8 @client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173898 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976e018 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976de60 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c638 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976dfa0&gt;, @mon_data_owner_object_id=15680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976dc58&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:0x00007f99096e87b0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c2098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e7bd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&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:0x00007f99097ebe50 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097eb950 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097eb450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097eaeb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ea2a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f99091739d8 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976e6f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976e388 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c6d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976e680&gt;, @mon_data_owner_object_id=15660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976e068&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99097e9fb0 @client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096e7bd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e7bd0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097ebe50 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097eb950 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097eb450 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097eaeb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097ea2a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f99091739d8 @client=#&lt;Ably::Rest::Client:0x00007f99095c2098 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976e6f8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976e388 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c6d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976e680&gt;, @mon_data_owner_object_id=15660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976e068&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99097e9f88 @client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f99091738e8 @client=#&lt;Ably::Realtime::Client:0x00007f99096e87b0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173898 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976e018 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976de60 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c638 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976dfa0&gt;, @mon_data_owner_object_id=15680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976dc58&gt;&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string key instead of options hash sets the key_name" file="./spec/unit/realtime/client_spec.rb" time="4.008603"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096e0650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e05b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&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:0x00007f990972f890 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990972f548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990972f408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990972f278 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990972ee68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173438 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99091733e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909762da8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097626c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909762d30&gt;, @mon_data_owner_object_id=15780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909762380&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f990972ed00 @client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096e05b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e05b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990972f890 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990972f548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990972f408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990972f278 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990972ee68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173438 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99091733e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909762da8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097626c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909762d30&gt;, @mon_data_owner_object_id=15780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909762380&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990972ecd8 @client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909173348 @client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99091732f8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909762330 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909762150 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c278 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909762290&gt;, @mon_data_owner_object_id=15800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909761ea8&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:0x00007f99096e0650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e05b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&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:0x00007f990972f890 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990972f548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990972f408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990972f278 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990972ee68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173438 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99091733e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909762da8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097626c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909762d30&gt;, @mon_data_owner_object_id=15780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909762380&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f990972ed00 @client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096e05b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f99096e05b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990972f890 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990972f548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990972f408 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990972f278 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990972ee68 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909173438 @client=#&lt;Ably::Rest::Client:0x00007f99095eb2e0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99091733e8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909762da8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097626c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c318 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909762d30&gt;, @mon_data_owner_object_id=15780&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909762380&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;App.k3y&quot;, @key_secret=&quot;sec-r3t&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990972ecd8 @client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909173348 @client=#&lt;Ably::Realtime::Client:0x00007f99096e0650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99091732f8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909762330 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909762150 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c278 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909762290&gt;, @mon_data_owner_object_id=15800&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909761ea8&gt;&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:90:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments key only uses basic auth" file="./spec/unit/realtime/client_spec.rb" time="4.008560"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99097158c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095f4110 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9909715828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909690b78 @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909690a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096909e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909690970 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909690880 @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:0x00007f9909690808 @client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909715828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9909715828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909690b78 @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909690a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096909e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909690970 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909690880 @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:0x00007f99096907e0 @client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&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:0x00007f99097158c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095f4110 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9909715828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909690b78 @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909690a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096909e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909690970 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909690880 @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:0x00007f9909690808 @client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909715828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9909715828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909690b78 @client=#&lt;Ably::Rest::Client:0x00007f99095f4110 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909690a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096909e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909690970 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909690880 @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:0x00007f99096907e0 @client=#&lt;Ably::Realtime::Client:0x00007f99097158c8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:76:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments key only connects to the Ably service" file="./spec/unit/realtime/client_spec.rb" time="4.018565"><failure message="expected no Exception, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f99099f3540 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/shared/client_initializer_behaviour.rb:72:in `block (5 levels) in &lt;top (required)&gt;&apos;
  # ./spec/shared/client_initializer_behaviour.rb:72:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected no Exception, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f99099f3540 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/shared/client_initializer_behaviour.rb:72:in `block (5 levels) in &lt;top (required)&gt;&apos;
    # ./spec/shared/client_initializer_behaviour.rb:72:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/shared/client_initializer_behaviour.rb:72:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with token_details sets the token" file="./spec/unit/realtime/client_spec.rb" time="4.011908"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990978a010 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909557a90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b1764b0 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b176460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909a78038 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909a77e30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909789e30 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909a77f70&gt;, @mon_data_owner_object_id=14540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909a77b38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909789f70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a71f08 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a706f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a8fe90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a8fdf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a8fcb0 @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:0x00007f9909a8fc60 @client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909789f70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b1764b0 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b176460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909a78038 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909a77e30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909789e30 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909a77f70&gt;, @mon_data_owner_object_id=14540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909a77b38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909789f70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a71f08 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a706f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a8fe90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a8fdf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a8fcb0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909a8fc38 @client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&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:0x00007f990978a010 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909557a90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b1764b0 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b176460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909a78038 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909a77e30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909789e30 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909a77f70&gt;, @mon_data_owner_object_id=14540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909a77b38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909789f70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a71f08 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a706f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a8fe90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a8fdf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a8fcb0 @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:0x00007f9909a8fc60 @client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909789f70 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.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:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b1764b0 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b176460 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909a78038 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909a77e30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909789e30 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909a77f70&gt;, @mon_data_owner_object_id=14540&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909a77b38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909789f70 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a71f08 @client=#&lt;Ably::Rest::Client:0x00007f9909557a90 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a706f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a8fe90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a8fdf0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a8fcb0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token_details=&gt;#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;}, @token_params={}, @token_option=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909a7e8c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909a7e820 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909a8fc38 @client=#&lt;Ably::Realtime::Client:0x00007f990978a010 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:136:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with a string token key instead of options hash sets the token" file="./spec/unit/realtime/client_spec.rb" time="4.009828"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99096ea650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909580288 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968b970 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909883778 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99098835c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99096ea3d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909883700&gt;, @mon_data_owner_object_id=14720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99098833b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99096ea470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&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:0x00007f9909889a38 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99098899c0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880988 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098806e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909880398 @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:0x00007f9909880348 @client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096ea470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909580288 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968b970 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909883778 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99098835c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99096ea3d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909883700&gt;, @mon_data_owner_object_id=14720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99098833b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99096ea470 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880988 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098806e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909880398 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @token_params={}, @token_option=&quot;app.kjhkasjhdsakdh127g7g1271&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909889a38 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99098899c0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909880320 @client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909173078 @client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173028 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977ecd8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977eb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c098 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977ec60&gt;, @mon_data_owner_object_id=15860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977e968&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:0x00007f99096ea650 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909580288 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968b970 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909883778 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99098835c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99096ea3d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909883700&gt;, @mon_data_owner_object_id=14720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99098833b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99096ea470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&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:0x00007f9909889a38 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99098899c0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880988 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098806e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909880398 @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:0x00007f9909880348 @client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99096ea470 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909580288 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968b970 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909883778 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99098835c0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99096ea3d0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909883700&gt;, @mon_data_owner_object_id=14720&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99098833b8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99096ea470 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880988 @client=#&lt;Ably::Rest::Client:0x00007f9909580288 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098806e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880668 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909880398 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @token_params={}, @token_option=&quot;app.kjhkasjhdsakdh127g7g1271&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909889a38 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99098899c0 @attributes={:token=&gt;&quot;app.kjhkasjhdsakdh127g7g1271&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909880320 @client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909173078 @client=#&lt;Ably::Realtime::Client:0x00007f99096ea650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909173028 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977ecd8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977eb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8c098 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977ec60&gt;, @mon_data_owner_object_id=15860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977e968&gt;&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:114:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri defaults to production" file="./spec/unit/realtime/client_spec.rb" time="4.007698"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990971dd48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990971dca8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909708218 @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097080b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909707f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909707cc8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909707a98 @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:0x00007f9909707a48 @client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990971dca8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990971dca8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909708218 @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097080b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909707f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909707cc8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909707a98 @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:0x00007f9909707a20 @client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&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:0x00007f990971dd48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990971dca8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909708218 @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097080b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909707f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909707cc8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909707a98 @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:0x00007f9909707a48 @client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990971dca8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f990971dca8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909708218 @client=#&lt;Ably::Rest::Client:0x00007f99095d8c08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097080b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909707f48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909707cc8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909707a98 @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:0x00007f9909707a20 @client=#&lt;Ably::Realtime::Client:0x00007f990971dd48 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with port option and non-TLS connections uses the custom port for non-TLS requests" file="./spec/unit/realtime/client_spec.rb" time="4.008485"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909711d68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&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:0x00007f9909711cc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909692450 @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096922e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909692270 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096920e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909691ed8 @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:0x00007f9909691e38 @client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909711cc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&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:0x00007f9909711cc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909692450 @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096922e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909692270 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096920e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909691ed8 @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:0x00007f9909691e10 @client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&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:0x00007f9909711d68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&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:0x00007f9909711cc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909692450 @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096922e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909692270 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096920e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909691ed8 @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:0x00007f9909691e38 @client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909711cc8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&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:0x00007f9909711cc8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909692450 @client=#&lt;Ably::Rest::Client:0x00007f99095e17e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096922e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909692270 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096920e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909691ed8 @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:0x00007f9909691e10 @client=#&lt;Ably::Realtime::Client:0x00007f9909711d68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with environment option uses an alternate uri" file="./spec/unit/realtime/client_spec.rb" time="4.010554"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99097c3f40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909609d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99097c3c20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990956cb98 @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990956caa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990956ca30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990956c9b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990956c8f0 @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:0x00007f990956c8a0 @client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99097c3c20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99097c3c20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990956cb98 @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990956caa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990956ca30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990956c9b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990956c8f0 @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:0x00007f990956c878 @client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&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:0x00007f99097c3f40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909609d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99097c3c20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990956cb98 @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990956caa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990956ca30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990956c9b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990956c8f0 @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:0x00007f990956c8a0 @client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99097c3c20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_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:0x00007f99097c3c20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990956cb98 @client=#&lt;Ably::Rest::Client:0x00007f9909609d80 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990956caa8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990956ca30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990956c9b8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990956c8f0 @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:0x00007f990956c878 @client=#&lt;Ably::Realtime::Client:0x00007f99097c3f40 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with tls_port option and a TLS connection uses the custom port for TLS requests" file="./spec/unit/realtime/client_spec.rb" time="4.032334"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990984f658 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909612098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&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:0x00007f990984f518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909612098 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097daf38 @client=#&lt;Ably::Rest::Client:0x00007f9909612098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097dae48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097dadd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097dad30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097dac68 @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:0x00007f99097dac18 @client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990984f518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909612098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&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:0x00007f990984f518 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097daf38 @client=#&lt;Ably::Rest::Client:0x00007f9909612098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097dae48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097dadd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097dad30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097dac68 @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:0x00007f99097dabf0 @client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&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:0x00007f990984f658 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909612098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&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:0x00007f990984f518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909612098 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097daf38 @client=#&lt;Ably::Rest::Client:0x00007f9909612098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097dae48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097dadd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097dad30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097dac68 @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:0x00007f99097dac18 @client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990984f518 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909612098 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&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:0x00007f990984f518 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99097daf38 @client=#&lt;Ably::Rest::Client:0x00007f9909612098 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99097dae48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99097dadd0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097dad30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99097dac68 @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:0x00007f99097dabf0 @client=#&lt;Ably::Realtime::Client:0x00007f990984f658 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with rest_host option uses an alternate uri for REST clients" file="./spec/unit/realtime/client_spec.rb" time="4.009070"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909789c50 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990958c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&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:0x00007f9909789bb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990958c948 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909921ef0 @client=#&lt;Ably::Rest::Client:0x00007f990958c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909921db0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909921c48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909921bd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909921ae0 @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:0x00007f99099219f0 @client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909789bb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990958c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&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:0x00007f9909789bb0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909921ef0 @client=#&lt;Ably::Rest::Client:0x00007f990958c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909921db0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909921c48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909921bd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909921ae0 @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:0x00007f99099219c8 @client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&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:0x00007f9909789c50 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990958c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&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:0x00007f9909789bb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990958c948 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909921ef0 @client=#&lt;Ably::Rest::Client:0x00007f990958c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909921db0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909921c48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909921bd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909921ae0 @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:0x00007f99099219f0 @client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909789bb0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990958c948 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&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:0x00007f9909789bb0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909921ef0 @client=#&lt;Ably::Rest::Client:0x00007f990958c948 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909921db0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909921c48 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909921bd0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909921ae0 @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:0x00007f99099219c8 @client=#&lt;Ably::Realtime::Client:0x00007f9909789c50 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:151:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments uri with realtime_host option uses an alternate uri for Realtime clients" file="./spec/unit/realtime/client_spec.rb" time="0.001271"></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="37.183544"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990984ae78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&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:0x00007f990984add8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990973d508 @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990973d3c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990973d2d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990973d238 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990973d008 @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:0x00007f990973cd88 @client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990984add8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&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:0x00007f990984add8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990973d508 @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990973d3c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990973d2d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990973d238 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990973d008 @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:0x00007f990973cd60 @client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&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:0x00007f990984ae78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&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:0x00007f990984add8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990973d508 @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990973d3c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990973d2d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990973d238 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990973d008 @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:0x00007f990973cd88 @client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990984add8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&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:0x00007f990984add8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990973d508 @client=#&lt;Ably::Rest::Client:0x00007f99095d9d88 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990973d3c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990973d2d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990973d238 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990973d008 @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:0x00007f990973cd60 @client=#&lt;Ably::Realtime::Client:0x00007f990984ae78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:348:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="33.072824"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909861880 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095fa650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&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:0x00007f9909861600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909590278 @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909590188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909590110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909590098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990954ff48 @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:0x00007f990954fef8 @client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909861600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&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:0x00007f9909861600 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909590278 @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909590188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909590110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909590098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990954ff48 @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:0x00007f990954fed0 @client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&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:0x00007f9909861880 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095fa650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&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:0x00007f9909861600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909590278 @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909590188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909590110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909590098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990954ff48 @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:0x00007f990954fef8 @client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909861600 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&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:0x00007f9909861600 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909590278 @client=#&lt;Ably::Rest::Client:0x00007f99095fa650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909590188 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909590110 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909590098 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990954ff48 @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:0x00007f990954fed0 @client=#&lt;Ably::Realtime::Client:0x00007f9909861880 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:344:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set without custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="33.503191"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909a21f58 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909619d98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&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:0x00007f9909a21878 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990952ecf8 @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990952ec08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990952eb90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990952eb18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990952ea50 @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:0x00007f990952ea00 @client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909a21878 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&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:0x00007f9909a21878 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990952ecf8 @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990952ec08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990952eb90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990952eb18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990952ea50 @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:0x00007f990952e9d8 @client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&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:0x00007f9909a21f58 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909619d98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&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:0x00007f9909a21878 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990952ecf8 @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990952ec08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990952eb90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990952eb18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990952ea50 @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:0x00007f990952ea00 @client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909a21878 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&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:0x00007f9909a21878 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990952ecf8 @client=#&lt;Ably::Rest::Client:0x00007f9909619d98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990952ec08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990952eb90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990952eb18 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990952ea50 @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:0x00007f990952e9d8 @client=#&lt;Ably::Realtime::Client:0x00007f9909a21f58 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:312:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="34.210337"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990b52ad40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990963a520 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&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:0x00007f990b52aca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963a520 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d6a30 @client=#&lt;Ably::Rest::Client:0x00007f990963a520 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d6940 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d68c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d6850 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d6788 @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:0x00007f99094d6738 @client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990b52aca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963a520 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&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:0x00007f990b52aca0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d6a30 @client=#&lt;Ably::Rest::Client:0x00007f990963a520 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d6940 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d68c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d6850 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d6788 @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:0x00007f99094d6710 @client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&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:0x00007f990b52ad40 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990963a520 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&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:0x00007f990b52aca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963a520 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d6a30 @client=#&lt;Ably::Rest::Client:0x00007f990963a520 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d6940 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d68c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d6850 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d6788 @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:0x00007f99094d6738 @client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990b52aca0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963a520 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&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:0x00007f990b52aca0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d6a30 @client=#&lt;Ably::Rest::Client:0x00007f990963a520 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d6940 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d68c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d6850 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d6788 @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:0x00007f99094d6710 @client=#&lt;Ably::Realtime::Client:0x00007f990b52ad40 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:316:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with environment and without custom fallback hosts configured sets the custom_host attribute" file="./spec/unit/realtime/client_spec.rb" time="33.323242"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990947c3a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990946e390 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&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:0x00007f990947c300 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946e390 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945d928 @client=#&lt;Ably::Rest::Client:0x00007f990946e390 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945d838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945d7c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945d748 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945d680 @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:0x00007f990945d630 @client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990947c300 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946e390 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&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:0x00007f990947c300 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945d928 @client=#&lt;Ably::Rest::Client:0x00007f990946e390 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945d838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945d7c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945d748 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945d680 @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:0x00007f990945d608 @client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&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:0x00007f990947c3a0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990946e390 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&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:0x00007f990947c300 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946e390 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945d928 @client=#&lt;Ably::Rest::Client:0x00007f990946e390 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945d838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945d7c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945d748 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945d680 @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:0x00007f990945d630 @client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990947c300 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946e390 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&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:0x00007f990947c300 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945d928 @client=#&lt;Ably::Rest::Client:0x00007f990946e390 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945d838 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945d7c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945d748 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945d680 @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:0x00007f990945d608 @client=#&lt;Ably::Realtime::Client:0x00007f990947c3a0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:330:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with environment and without custom fallback hosts configured sets the environment attribute" file="./spec/unit/realtime/client_spec.rb" time="34.068485"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99091e8350 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909420500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&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:0x00007f99091e82b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909420500 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99091c5468 @client=#&lt;Ably::Rest::Client:0x00007f9909420500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091c5378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99091c5300 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091c5288 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99091c51c0 @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:0x00007f99091c5170 @client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99091e82b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909420500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&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:0x00007f99091e82b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99091c5468 @client=#&lt;Ably::Rest::Client:0x00007f9909420500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091c5378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99091c5300 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091c5288 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99091c51c0 @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:0x00007f99091c5148 @client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&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:0x00007f99091e8350 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909420500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&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:0x00007f99091e82b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909420500 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99091c5468 @client=#&lt;Ably::Rest::Client:0x00007f9909420500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091c5378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99091c5300 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091c5288 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99091c51c0 @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:0x00007f99091c5170 @client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99091e82b0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909420500 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&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:0x00007f99091e82b0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99091c5468 @client=#&lt;Ably::Rest::Client:0x00007f9909420500 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091c5378 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99091c5300 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091c5288 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99091c51c0 @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:0x00007f99091c5148 @client=#&lt;Ably::Realtime::Client:0x00007f99091e8350 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:326:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments rest_host when set with environment and without custom fallback hosts configured has no default fallback hosts" file="./spec/unit/realtime/client_spec.rb" time="33.530750"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909164398 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909142450 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&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:0x00007f99091642f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909142450 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990912d0f0 @client=#&lt;Ably::Rest::Client:0x00007f9909142450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990912d000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990912cf88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990912cf10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990912ce48 @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:0x00007f990912cdf8 @client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99091642f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909142450 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&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:0x00007f99091642f8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990912d0f0 @client=#&lt;Ably::Rest::Client:0x00007f9909142450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990912d000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990912cf88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990912cf10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990912ce48 @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:0x00007f990912cdd0 @client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&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:0x00007f9909164398 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909142450 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&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:0x00007f99091642f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909142450 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990912d0f0 @client=#&lt;Ably::Rest::Client:0x00007f9909142450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990912d000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990912cf88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990912cf10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990912ce48 @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:0x00007f990912cdf8 @client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99091642f8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909142450 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&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:0x00007f99091642f8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990912d0f0 @client=#&lt;Ably::Rest::Client:0x00007f9909142450 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990912d000 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990912cf88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990912cf10 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990912ce48 @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:0x00007f990912cdd0 @client=#&lt;Ably::Realtime::Client:0x00007f9909164398 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:334:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments with token_params configures default_token_params" file="./spec/unit/realtime/client_spec.rb" time="34.109415"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990907e2f8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990908c308 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990908c2b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909069010 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909068ea8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907e1b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909068f98&gt;, @mon_data_owner_object_id=14980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909068d68&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907e258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&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:0x00007f990906b180 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990906b108 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909067670 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909067580 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909067508 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909067490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090673c8 @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:0x00007f9909067378 @client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990907e258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990908c308 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990908c2b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909069010 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909068ea8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907e1b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909068f98&gt;, @mon_data_owner_object_id=14980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909068d68&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907e258 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909067670 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909067580 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909067508 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909067490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090673c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={:ttl=&gt;777, :client_id=&gt;&quot;john&quot;}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990906b180 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990906b108 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909067350 @client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&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:0x00007f990907e2f8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990908c308 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990908c2b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909069010 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909068ea8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907e1b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909068f98&gt;, @mon_data_owner_object_id=14980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909068d68&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907e258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&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:0x00007f990906b180 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990906b108 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909067670 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909067580 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909067508 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909067490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090673c8 @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:0x00007f9909067378 @client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990907e258 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;token&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990908c308 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990908c2b8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909069010 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909068ea8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907e1b8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909068f98&gt;, @mon_data_owner_object_id=14980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909068d68&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907e258 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909067670 @client=#&lt;Ably::Rest::Client:0x00007f99090a3fd0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909067580 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909067508 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909067490 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090673c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;token&quot;}, @token_params={:ttl=&gt;777, :client_id=&gt;&quot;john&quot;}, @token_option=&quot;token&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990906b180 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990906b108 @attributes={:token=&gt;&quot;token&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909067350 @client=#&lt;Ably::Realtime::Client:0x00007f990907e2f8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:144:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments tls defaults to TLS" file="./spec/unit/realtime/client_spec.rb" time="34.028974"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908fe9f68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe9ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908fce1f0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908fce100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908fce088 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908fce010 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908fcdf48 @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:0x00007f9908fcdef8 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908fe9ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe9ec8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908fce1f0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908fce100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908fce088 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908fce010 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908fcdf48 @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:0x00007f9908fcded0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&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:0x00007f9908fe9f68 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe9ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908fce1f0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908fce100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908fce088 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908fce010 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908fcdf48 @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:0x00007f9908fcdef8 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908fe9ec8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe9ec8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908fce1f0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff5ca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908fce100 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908fce088 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908fce010 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908fcdf48 @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:0x00007f9908fcded0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe9f68 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:203:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments tls set to false uses HTTP" file="./spec/unit/realtime/client_spec.rb" time="32.221217"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909079e38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&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:0x00007f9909079d98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880eb0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098807a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098bf408 @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:0x00007f99098bdf68 @client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909079d98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&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:0x00007f9909079d98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880eb0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098807a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098bf408 @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:0x00007f99098bd860 @client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&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:0x00007f9909079e38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&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:0x00007f9909079d98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880eb0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098807a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098bf408 @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:0x00007f99098bdf68 @client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909079d98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&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:0x00007f9909079d98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909880eb0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa71e0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909880c58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098807a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909880640 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098bf408 @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:0x00007f99098bd860 @client=#&lt;Ably::Realtime::Client:0x00007f9909079e38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:203:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with valid arguments tls set to false uses plain text" file="./spec/unit/realtime/client_spec.rb" time="32.702839"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99090e4a80 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&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:0x00007f99090e49e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d0200 @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d0098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990970ffb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990970fdb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990970fa18 @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:0x00007f990970f9c8 @client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090e49e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&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:0x00007f99090e49e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d0200 @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d0098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990970ffb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990970fdb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990970fa18 @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:0x00007f990970f950 @client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&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:0x00007f99090e4a80 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&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:0x00007f99090e49e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d0200 @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d0098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990970ffb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990970fdb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990970fa18 @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:0x00007f990970f9c8 @client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090e49e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&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:0x00007f99090e49e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096d0200 @client=#&lt;Ably::Rest::Client:0x00007f9909048ea0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096d0098 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990970ffb8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990970fdb0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990970fa18 @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:0x00007f990970f950 @client=#&lt;Ably::Realtime::Client:0x00007f99090e4a80 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
Shared Example Group: &quot;a client initializer&quot; called from ./spec/unit/realtime/client_spec.rb:10
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/shared/client_initializer_behaviour.rb:203:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client behaves like a client initializer with invalid arguments empty hash raises an exception" file="./spec/unit/realtime/client_spec.rb" time="0.000855"></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.000815"></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.000508"></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.000516"></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.000920"></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.000477"></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.132767"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99091ecc70 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091426d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99091ecbd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d4d98 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d4ca8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d4c30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d4bb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d4af0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909172bc8 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909172b78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977ae30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977ac00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b878 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977adb8&gt;, @mon_data_owner_object_id=15960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977a908&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99094d4aa0 @client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99091ecbd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99091ecbd0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d4d98 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d4ca8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d4c30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d4bb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d4af0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909172bc8 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909172b78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977ae30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977ac00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b878 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977adb8&gt;, @mon_data_owner_object_id=15960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977a908&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094d4a78 @client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909172ad8 @client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909172a88 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977a840 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977a610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b7d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977a700&gt;, @mon_data_owner_object_id=15980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977a458&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:0x00007f99091ecc70 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091426d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99091ecbd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d4d98 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d4ca8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d4c30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d4bb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d4af0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909172bc8 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909172b78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977ae30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977ac00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b878 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977adb8&gt;, @mon_data_owner_object_id=15960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977a908&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f99094d4aa0 @client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99091ecbd0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99091ecbd0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094d4d98 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094d4ca8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094d4c30 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094d4bb8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094d4af0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909172bc8 @client=#&lt;Ably::Rest::Client:0x00007f99091426d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909172b78 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977ae30 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977ac00 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b878 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977adb8&gt;, @mon_data_owner_object_id=15960&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977a908&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094d4a78 @client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909172ad8 @client=#&lt;Ably::Realtime::Client:0x00007f99091ecc70 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909172a88 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990977a840 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990977a610 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b7d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990977a700&gt;, @mon_data_owner_object_id=15980&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990977a458&gt;&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:52:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client push #device is not supported and raises an exception" file="./spec/unit/realtime/client_spec.rb" time="34.065012"><failure message="expected Ably::Exceptions::PushNotificationsNotSupported, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f9909848e98 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
  # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/client_spec.rb:48:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/client_spec.rb:48:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected Ably::Exceptions::PushNotificationsNotSupported, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f9909848e98 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `new&apos;
    # ./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/client_spec.rb:48:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/client_spec.rb:48:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/client_spec.rb:48:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.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.144567"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99099cde80 @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:0x00007f99095dbf48 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99099cdde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909099030 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909098f40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909098ec8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909098e50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909098d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909171f98 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909171f48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096bdc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096bda38 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b0f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096bdba0&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096bd8f8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f9909098d38 @client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99099cdde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99099cdde0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909099030 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909098f40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909098ec8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909098e50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909098d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909171f98 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909171f48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096bdc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096bda38 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b0f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096bdba0&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096bd8f8&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909098d10 @client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909171ea8 @client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909171e58 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096bd8a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096bd718 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b058 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096bd808&gt;, @mon_data_owner_object_id=16220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096bd5b0&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:0x00007f99099cde80 @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:0x00007f99095dbf48 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99099cdde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909099030 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909098f40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909098ec8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909098e50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909098d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909171f98 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909171f48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096bdc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096bda38 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b0f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096bdba0&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096bd8f8&gt;&gt;&gt;, @echo_messages=true, @queue_messages=true, @custom_realtime_host=nil, @auto_connect=true, @recover=&quot;&quot;, @auth=#&lt;Ably::Realtime::Auth:0x00007f9909098d38 @client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99099cdde0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&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:0x00007f99099cdde0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909099030 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909098f40 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909098ec8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909098e50 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909098d88 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;], @logger=#&lt;Ably::Logger:0x00007f9909171f98 @client=#&lt;Ably::Rest::Client:0x00007f99095dbf48 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909171f48 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096bdc18 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096bda38 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b0f8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096bdba0&gt;, @mon_data_owner_object_id=16200&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096bd8f8&gt;&gt;&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909098d10 @client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;, @logger=#&lt;Ably::Logger:0x00007f9909171ea8 @client=#&lt;Ably::Realtime::Client:0x00007f99099cde80 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909171e58 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096bd8a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096bd718 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f8b058 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096bd808&gt;, @mon_data_owner_object_id=16220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096bd5b0&gt;&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:40:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client passes on the options to the initializer" file="./spec/unit/realtime/client_spec.rb" time="33.700008"><failure message="the Ably::Rest::Client class does not implement the instance method: environment" type="RSpec::Mocks::MockExpectationError">Failure/Error: rest_client = instance_double(&apos;Ably::Rest::Client&apos;, auth: instance_double(&apos;Ably::Auth&apos;), options: client_options, environment: &apos;production&apos;, use_tls?: true, custom_tls_port: nil)
  the Ably::Rest::Client class does not implement the instance method: environment
./spec/unit/realtime/client_spec.rb:16:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #log_level" file="./spec/unit/realtime/client_spec.rb" time="33.913968"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908fecb28 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990961b698 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908feca88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990961b698 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990918d950 @client=#&lt;Ably::Rest::Client:0x00007f990961b698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990918d860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990918d7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990918d770 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990918d6a8 @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:0x00007f990918d658 @client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908feca88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990961b698 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908feca88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990918d950 @client=#&lt;Ably::Rest::Client:0x00007f990961b698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990918d860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990918d7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990918d770 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990918d6a8 @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:0x00007f990918d630 @client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&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:0x00007f9908fecb28 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990961b698 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908feca88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990961b698 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990918d950 @client=#&lt;Ably::Rest::Client:0x00007f990961b698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990918d860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990918d7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990918d770 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990918d6a8 @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:0x00007f990918d658 @client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908feca88 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990961b698 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908feca88 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990918d950 @client=#&lt;Ably::Rest::Client:0x00007f990961b698 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990918d860 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990918d7e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990918d770 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990918d6a8 @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:0x00007f990918d630 @client=#&lt;Ably::Realtime::Client:0x00007f9908fecb28 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #environment" file="./spec/unit/realtime/client_spec.rb" time="33.191295"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f9e748 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990963bba0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f9e6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e1638 @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e1548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e14d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e1458 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e1390 @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:0x00007f99094e1340 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f9e6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f9e6a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e1638 @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e1548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e14d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e1458 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e1390 @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:0x00007f99094e1318 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&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:0x00007f9908f9e748 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990963bba0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f9e6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e1638 @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e1548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e14d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e1458 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e1390 @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:0x00007f99094e1340 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f9e6a8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f9e6a8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e1638 @client=#&lt;Ably::Rest::Client:0x00007f990963bba0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e1548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e14d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e1458 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e1390 @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:0x00007f99094e1318 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9e748 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #use_tls?" file="./spec/unit/realtime/client_spec.rb" time="33.220765"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f8a838 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990946f790 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f8a798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946f790 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f736b0 @client=#&lt;Ably::Rest::Client:0x00007f990946f790 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f735c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f73548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f734d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f73408 @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:0x00007f9908f733b8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f8a798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946f790 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f8a798 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f736b0 @client=#&lt;Ably::Rest::Client:0x00007f990946f790 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f735c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f73548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f734d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f73408 @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:0x00007f9908f73390 @client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&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:0x00007f9908f8a838 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990946f790 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f8a798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946f790 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f736b0 @client=#&lt;Ably::Rest::Client:0x00007f990946f790 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f735c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f73548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f734d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f73408 @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:0x00007f9908f733b8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f8a798 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990946f790 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908f8a798 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f736b0 @client=#&lt;Ably::Rest::Client:0x00007f990946f790 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f735c0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f73548 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f734d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f73408 @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:0x00007f9908f73390 @client=#&lt;Ably::Realtime::Client:0x00007f9908f8a838 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.client_spec" name="Ably::Realtime::Client delegation to the REST Client for attribute #custom_host" file="./spec/unit/realtime/client_spec.rb" time="32.523986"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908fe4c48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe4ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098cd558 @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098cd0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ccba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098cc5e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098cc478 @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:0x00007f99098cbdc0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908fe4ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe4ba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098cd558 @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098cd0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ccba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098cc5e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098cc478 @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:0x00007f99098cb1e0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&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:0x00007f9908fe4c48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe4ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;appid.keyuid&quot;, @key_secret=&quot;keysecret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098cd558 @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098cd0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ccba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098cc5e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098cc478 @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:0x00007f99098cbdc0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908fe4ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:key=&gt;&quot;appid.keyuid:keysecret&quot;, :auto_connect=&gt;false, :fallback_retry_timeout=&gt;600}, @auth=#&lt;Ably::Auth:0x00007f9908fe4ba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098cd558 @client=#&lt;Ably::Rest::Client:0x00007f9908fa52a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99098cd0d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99098ccba8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99098cc5e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098cc478 @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:0x00007f99098cb1e0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe4c48 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/client_spec.rb:7:in `new&apos;
./spec/unit/realtime/client_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/client_spec.rb:24:in `block (5 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.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.215484"></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.201602"></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.102603"></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.101954"></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.101575"></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.301970"></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.101741"></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.001662"></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.101514"></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.002555"></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.000903"></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.000940"></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.000893"></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.000906"></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.000754"></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.000733"></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.000739"></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.000763"></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.004282"></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.001375"></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.001059"></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.001067"></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.001275"></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.001257"></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.001119"></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.001228"></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.001264"></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.000707"></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.000894"></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.000772"></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.000905"></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.000757"></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.000858"></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.000878"></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.000781"></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.000935"></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.000782"></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.000900"></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.000760"></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.000840"></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.000695"></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.000807"></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.000714"></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.000896"></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.001213"></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.000727"></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.000863"></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.000699"></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.000833"></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.000843"></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.000738"></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.001936"></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.002182"></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.001735"></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.000792"></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.000891"></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.000721"></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.000802"></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.000661"></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.000604"></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.000579"></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.000548"></testcase>
<testcase classname="spec.unit.models.message_encoders.cipher_spec" name="Ably::Models::MessageEncoders::Cipher#encode with channel set up for AES-128-CBC with encrypted set to true 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.000606"></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.000927"></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.000794"></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.002692"></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.001182"></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.001392"></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.001037"></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.000900"></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.000966"></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.000788"></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.000937"></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.000939"></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.000960"></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.000958"></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.000982"></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.000569"></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.000583"></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.000977"></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.000997"></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.000983"></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.000980"></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.000583"></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.000874"></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.000865"></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.000710"></testcase>
<testcase classname="spec.unit.realtime.presence_spec" name="Ably::Realtime::Presence msgbus supports messages" file="./spec/unit/realtime/presence_spec.rb" time="0.001040"></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.000696"></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.000989"></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.001059"></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.001006"></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.001430"></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.000914"></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.000933"></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.000934"></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.000948"></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.000940"></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.000640"></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.000639"></testcase>
<testcase classname="spec.unit.rest.channels_spec" name="Ably::Rest::Channels [] creates a channel" file="./spec/unit/rest/channels_spec.rb" time="0.000790"></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.000669"></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.000862"></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.002457"></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.001046"></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.001192"></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.000546"></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.000778"></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.000629"></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.000733"></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.000833"></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.000633"></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.000672"></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.000664"></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.000753"></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.000569"></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.000595"></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.000766"></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.000667"></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.000743"></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.000619"></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.001229"></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.000695"></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.000661"></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.000737"></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.000623"></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.001079"></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.001032"></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.001634"></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.000950"></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.000834"></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.000913"></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.000666"></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.000707"></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.000611"></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.000639"></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.000598"></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.000606"></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.000581"></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.000568"></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.002583"></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.001163"></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.001185"></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.000906"></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.000931"></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.000847"></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.000775"></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.001352"></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.000672"></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.000731"></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.000596"></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.000684"></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.000708"></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.000546"></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.000735"></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.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.000800"></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.000880"></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.000700"></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.000700"></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.000575"></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.000593"></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.000681"></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.001241"></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.000661"></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.000613"></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.000580"></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.000635"></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.000600"></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.000602"></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.000622"></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.000586"></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.000646"></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.000593"></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.000605"></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.000612"></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.001729"></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.000672"></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.000928"></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.000842"></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.000669"></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.000591"></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.000757"></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.000707"></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.000591"></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.000670"></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.000726"></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.000673"></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.000589"></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.000712"></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.002101"></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.000792"></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.000679"></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.000687"></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.000673"></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.000716"></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.000661"></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.000623"></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.000700"></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.000652"></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.000543"></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.000653"></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.000615"></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.000696"></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.000667"></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.000549"></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.000601"></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.000578"></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.000504"></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.000532"></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.000541"></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.000506"></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.000625"></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.000499"></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.000511"></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.000478"></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.000509"></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.001709"></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.000511"></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with no event name specified subscribes the provided block to all events" file="./spec/unit/realtime/channel_spec.rb" time="33.025317"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f4ec48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909083de8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909083d98 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976d2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976ca60 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f4eb08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976d078&gt;, @mon_data_owner_object_id=21500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976c3d0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f4eba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909736140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097360a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909760cd8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909760698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909760558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097603c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909760288 @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:0x00007f9909760238 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f4eba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909083de8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909083d98 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976d2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976ca60 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f4eb08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976d078&gt;, @mon_data_owner_object_id=21500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976c3d0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f4eba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909760cd8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909760698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909760558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097603c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909760288 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909736140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097360a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909760210 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&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:0x00007f9908f4ec48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909083de8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909083d98 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976d2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976ca60 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f4eb08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976d078&gt;, @mon_data_owner_object_id=21500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976c3d0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f4eba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909736140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097360a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909760cd8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909760698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909760558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097603c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909760288 @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:0x00007f9909760238 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f4eba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909083de8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909083d98 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990976d2a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990976ca60 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f4eb08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990976d078&gt;, @mon_data_owner_object_id=21500&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990976c3d0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f4eba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909760cd8 @client=#&lt;Ably::Rest::Client:0x00007f9908fa20a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909760698 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909760558 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99097603c8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909760288 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909736140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097360a0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909760210 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4ec48 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with a multiple duplicate event name arguments subscribes that block to all of those unique event names once" file="./spec/unit/realtime/channel_spec.rb" time="34.185363"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f85e78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909042be0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909177f88 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909177f38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99095214e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909521378 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85c98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909521468&gt;, @mon_data_owner_object_id=21680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909521238&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85dd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99095239c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909523920 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990953f940 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990953f850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990953f7b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990953f738 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990953f670 @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:0x00007f990953f620 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f85dd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909177f88 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909177f38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99095214e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909521378 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85c98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909521468&gt;, @mon_data_owner_object_id=21680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909521238&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85dd8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990953f940 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990953f850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990953f7b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990953f738 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990953f670 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99095239c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909523920 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990953f5f8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&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:0x00007f9908f85e78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909042be0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909177f88 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909177f38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99095214e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909521378 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85c98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909521468&gt;, @mon_data_owner_object_id=21680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909521238&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85dd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99095239c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909523920 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990953f940 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990953f850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990953f7b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990953f738 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990953f670 @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:0x00007f990953f620 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f85dd8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909177f88 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909177f38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99095214e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909521378 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85c98 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909521468&gt;, @mon_data_owner_object_id=21680&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909521238&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85dd8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990953f940 @client=#&lt;Ably::Rest::Client:0x00007f9909042be0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990953f850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990953f7b0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990953f738 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990953f670 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99095239c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909523920 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990953f5f8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85e78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe without a block raises an invalid ArgumentError" file="./spec/unit/realtime/channel_spec.rb" time="33.778394"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99090ed220 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aaf68 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097aaec8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990945ed00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990945eb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ed0e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990945ec60&gt;, @mon_data_owner_object_id=21860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990945ea30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ed180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909441390 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909441318 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945b8d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945b858 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945b7e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945b718 @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:0x00007f990945b6c8 @client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090ed180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aaf68 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097aaec8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990945ed00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990945eb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ed0e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990945ec60&gt;, @mon_data_owner_object_id=21860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990945ea30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ed180 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945b8d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945b858 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945b7e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945b718 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909441390 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909441318 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990945b678 @client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&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:0x00007f99090ed220 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aaf68 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097aaec8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990945ed00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990945eb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ed0e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990945ec60&gt;, @mon_data_owner_object_id=21860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990945ea30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ed180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909441390 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909441318 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945b8d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945b858 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945b7e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945b718 @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:0x00007f990945b6c8 @client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090ed180 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aaf68 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097aaec8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990945ed00 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990945eb70 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ed0e0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990945ec60&gt;, @mon_data_owner_object_id=21860&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990945ea30&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ed180 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990945b9c0 @client=#&lt;Ably::Rest::Client:0x00007f9909113fd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990945b8d0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990945b858 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990945b7e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990945b718 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909441390 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909441318 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990945b678 @client=#&lt;Ably::Realtime::Client:0x00007f99090ed220 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with a multiple event name arguments subscribes that block to all of those event names" file="./spec/unit/realtime/channel_spec.rb" time="38.328565"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909165518 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99099d8178 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99099d8128 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090f91b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090f9020 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99091653d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090f9138&gt;, @mon_data_owner_object_id=22040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090f8ee0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909165478 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090fbaa0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090fba28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090f6c80 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090f6b90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090f6b18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090f6aa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090f69d8 @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:0x00007f99090f6988 @client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909165478 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99099d8178 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99099d8128 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090f91b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090f9020 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99091653d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090f9138&gt;, @mon_data_owner_object_id=22040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090f8ee0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909165478 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090f6c80 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090f6b90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090f6b18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090f6aa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090f69d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090fbaa0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090fba28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99090f6960 @client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&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:0x00007f9909165518 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99099d8178 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99099d8128 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090f91b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090f9020 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99091653d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090f9138&gt;, @mon_data_owner_object_id=22040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090f8ee0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909165478 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090fbaa0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090fba28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090f6c80 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090f6b90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090f6b18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090f6aa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090f69d8 @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:0x00007f99090f6988 @client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909165478 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99099d8178 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99099d8128 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090f91b0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090f9020 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99091653d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090f9138&gt;, @mon_data_owner_object_id=22040&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090f8ee0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909165478 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090f6c80 @client=#&lt;Ably::Rest::Client:0x00007f99091b4c58 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090f6b90 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090f6b18 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090f6aa0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090f69d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090fbaa0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090fba28 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99090f6960 @client=#&lt;Ably::Realtime::Client:0x00007f9909165518 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #subscribe with a single event name subscribes that block to matching events" file="./spec/unit/realtime/channel_spec.rb" time="34.311202"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990947cf80 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b179660 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b1795c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f6c298 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f6be88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990947ce40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f6c180&gt;, @mon_data_owner_object_id=22220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f6bb40&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990947cee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908fb0240 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908fb01c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f69610 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f69520 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f694a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f693e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f69318 @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:0x00007f9908f692c8 @client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990947cee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b179660 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b1795c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f6c298 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f6be88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990947ce40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f6c180&gt;, @mon_data_owner_object_id=22220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f6bb40&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990947cee0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f69610 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f69520 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f694a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f693e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f69318 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908fb0240 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908fb01c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9908f692a0 @client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&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:0x00007f990947cf80 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b179660 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b1795c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f6c298 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f6be88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990947ce40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f6c180&gt;, @mon_data_owner_object_id=22220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f6bb40&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990947cee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908fb0240 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908fb01c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f69610 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f69520 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f694a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f693e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f69318 @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:0x00007f9908f692c8 @client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990947cee0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b179660 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b1795c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f6c298 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f6be88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990947ce40 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f6c180&gt;, @mon_data_owner_object_id=22220&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f6bb40&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990947cee0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f69610 @client=#&lt;Ably::Rest::Client:0x00007f9909584ec8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f69520 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f694a8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f693e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f69318 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908fb0240 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908fb01c8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9908f692a0 @client=#&lt;Ably::Realtime::Client:0x00007f990947cf80 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:166:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with no event name specified unsubscribes that block from all events" file="./spec/unit/realtime/channel_spec.rb" time="33.925204"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990980af08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4aa410 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4aa370 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094802e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094bee30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990980aa08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909480220&gt;, @mon_data_owner_object_id=22400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094be2f0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990980ad28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909483e70 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909483df8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094b9110 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094b8ee0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094b8cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094b8be8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094b8968 @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:0x00007f99094b8788 @client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990980ad28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4aa410 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4aa370 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094802e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094bee30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990980aa08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909480220&gt;, @mon_data_owner_object_id=22400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094be2f0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990980ad28 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094b9110 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094b8ee0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094b8cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094b8be8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094b8968 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909483e70 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909483df8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094b8760 @client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&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:0x00007f990980af08 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4aa410 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4aa370 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094802e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094bee30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990980aa08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909480220&gt;, @mon_data_owner_object_id=22400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094be2f0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990980ad28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909483e70 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909483df8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094b9110 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094b8ee0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094b8cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094b8be8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094b8968 @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:0x00007f99094b8788 @client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990980ad28 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4aa410 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4aa370 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094802e8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094bee30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990980aa08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909480220&gt;, @mon_data_owner_object_id=22400&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094be2f0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990980ad28 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094b9110 @client=#&lt;Ably::Rest::Client:0x00007f99095d4b08 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094b8ee0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094b8cb0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094b8be8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094b8968 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909483e70 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909483df8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094b8760 @client=#&lt;Ably::Realtime::Client:0x00007f990980af08 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with a non-matching event name argument has no effect" file="./spec/unit/realtime/channel_spec.rb" time="33.511941"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909783df0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909554750 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097abd28 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097abc38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099e40e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099e2e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909783b70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099e3208&gt;, @mon_data_owner_object_id=22580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099e2330&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909783d50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99099b72c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99099b70b8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a1a8e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a1a730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a1a578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a1a410 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a1a320 @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:0x00007f9909a1a2d0 @client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909783d50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554750 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097abd28 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097abc38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099e40e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099e2e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909783b70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099e3208&gt;, @mon_data_owner_object_id=22580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099e2330&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909783d50 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a1a8e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a1a730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a1a578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a1a410 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a1a320 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99099b72c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99099b70b8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909a1a280 @client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&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:0x00007f9909783df0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909554750 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097abd28 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097abc38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099e40e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099e2e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909783b70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099e3208&gt;, @mon_data_owner_object_id=22580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099e2330&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909783d50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99099b72c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99099b70b8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a1a8e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a1a730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a1a578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a1a410 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a1a320 @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:0x00007f9909a1a2d0 @client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909783d50 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554750 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097abd28 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097abc38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099e40e0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099e2e20 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909783b70 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099e3208&gt;, @mon_data_owner_object_id=22580&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099e2330&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909783d50 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909a1a8e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554750 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909a1a730 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909a1a578 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909a1a410 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909a1a320 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99099b72c0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99099b70b8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909a1a280 @client=#&lt;Ably::Realtime::Client:0x00007f9909783df0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with a single event name argument unsubscribes the provided block with the matching event name" file="./spec/unit/realtime/channel_spec.rb" time="33.529691"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f87458 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910f230 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910f1e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909598068 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909597e88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f87278 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909597ff0&gt;, @mon_data_owner_object_id=22760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909597cf8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f873b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990959ca28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990959c938 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909592050 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909591ee8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909591e70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909591df8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909591d08 @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:0x00007f9909591cb8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f873b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910f230 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910f1e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909598068 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909597e88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f87278 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909597ff0&gt;, @mon_data_owner_object_id=22760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909597cf8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f873b8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909592050 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909591ee8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909591e70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909591df8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909591d08 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990959ca28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990959c938 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909591c90 @client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&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:0x00007f9908f87458 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910f230 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910f1e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909598068 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909597e88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f87278 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909597ff0&gt;, @mon_data_owner_object_id=22760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909597cf8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f873b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990959ca28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990959c938 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909592050 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909591ee8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909591e70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909591df8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909591d08 @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:0x00007f9909591cb8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f873b8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910f230 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910f1e0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909598068 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909597e88 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f87278 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909597ff0&gt;, @mon_data_owner_object_id=22760&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909597cf8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f873b8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909592050 @client=#&lt;Ably::Rest::Client:0x00007f9908ff48a0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909591ee8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909591e70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909591df8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909591d08 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990959ca28 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990959c938 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909591c90 @client=#&lt;Ably::Realtime::Client:0x00007f9908f87458 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with no block argument unsubscribes all blocks for the event name argument" file="./spec/unit/realtime/channel_spec.rb" time="33.834805"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990907bc38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968d770 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968d720 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492f10 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492d58 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907baf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909492e70&gt;, @mon_data_owner_object_id=22940&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492c18&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907bb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094966d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909490968 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909490850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094907d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909490760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909490698 @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:0x00007f9909490648 @client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990907bb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968d770 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968d720 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492f10 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492d58 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907baf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909492e70&gt;, @mon_data_owner_object_id=22940&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492c18&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907bb98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909490968 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909490850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094907d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909490760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909490698 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094966d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909490620 @client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&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:0x00007f990907bc38 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968d770 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968d720 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492f10 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492d58 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907baf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909492e70&gt;, @mon_data_owner_object_id=22940&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492c18&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907bb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094966d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909490968 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909490850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094907d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909490760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909490698 @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:0x00007f9909490648 @client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990907bb98 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990968d770 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990968d720 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492f10 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492d58 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990907baf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909492e70&gt;, @mon_data_owner_object_id=22940&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492c18&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990907bb98 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909490968 @client=#&lt;Ably::Rest::Client:0x00007f99090a58d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909490850 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094907d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909490760 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909490698 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496750 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094966d8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909490620 @client=#&lt;Ably::Realtime::Client:0x00007f990907bc38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel subscriptions #unsubscribe with multiple event name arguments unsubscribes each of those matching event names with the provided block" file="./spec/unit/realtime/channel_spec.rb" time="33.207334"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99090e2000 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091462d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909821910 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99098218c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909134d50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909133900 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090e1ec0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909134710&gt;, @mon_data_owner_object_id=23120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99091335e0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090e1f60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909139800 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909139760 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909131448 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091312e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909131268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091311f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909131128 @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:0x00007f99091310d8 @client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090e1f60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909821910 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99098218c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909134d50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909133900 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090e1ec0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909134710&gt;, @mon_data_owner_object_id=23120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99091335e0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090e1f60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909131448 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091312e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909131268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091311f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909131128 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909139800 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909139760 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99091310b0 @client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&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:0x00007f99090e2000 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091462d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909821910 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99098218c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909134d50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909133900 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090e1ec0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909134710&gt;, @mon_data_owner_object_id=23120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99091335e0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090e1f60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909139800 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909139760 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909131448 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091312e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909131268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091311f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909131128 @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:0x00007f99091310d8 @client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090e1f60 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909821910 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99098218c0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909134d50 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909133900 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090e1ec0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909134710&gt;, @mon_data_owner_object_id=23120&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99091335e0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090e1f60 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909131448 @client=#&lt;Ably::Rest::Client:0x00007f99091462d0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99091312e0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909131268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99091311f0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909131128 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909139800 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909139760 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99091310b0 @client=#&lt;Ably::Realtime::Client:0x00007f99090e2000 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:211:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel callbacks fail with unacceptable STATE event names" file="./spec/unit/realtime/channel_spec.rb" time="33.337174"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f9909800968 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:128:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:128:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f9909800968 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:128:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:128:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/channel_spec.rb:128:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel callbacks are supported for valid STATE events" file="./spec/unit/realtime/channel_spec.rb" time="33.837641"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909a2e938 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4c8b18 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4c8988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094cd2c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094cd160 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909a2e4d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094cd250&gt;, @mon_data_owner_object_id=23480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094ccff8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909a2e618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094cf870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094cf640 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094cb680 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094cb590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094cb400 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094cb388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094cb220 @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:0x00007f99094cb180 @client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909a2e618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4c8b18 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4c8988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094cd2c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094cd160 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909a2e4d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094cd250&gt;, @mon_data_owner_object_id=23480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094ccff8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909a2e618 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094cb680 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094cb590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094cb400 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094cb388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094cb220 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094cf870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094cf640 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094cb068 @client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&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:0x00007f9909a2e938 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4c8b18 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4c8988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094cd2c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094cd160 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909a2e4d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094cd250&gt;, @mon_data_owner_object_id=23480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094ccff8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909a2e618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094cf870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094cf640 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094cb680 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094cb590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094cb400 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094cb388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094cb220 @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:0x00007f99094cb180 @client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9909a2e618 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b4c8b18 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b4c8988 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094cd2c8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094cd160 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909a2e4d8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094cd250&gt;, @mon_data_owner_object_id=23480&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094ccff8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9909a2e618 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094cb680 @client=#&lt;Ably::Rest::Client:0x00007f99095db7c8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094cb590 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094cb400 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094cb388 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094cb220 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094cf870 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094cf640 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094cb068 @client=#&lt;Ably::Realtime::Client:0x00007f9909a2e938 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:123:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as ASCII_8BIT string gets converted to UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="34.044212"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f89a78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909554c50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aba08 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097ab968 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099a77d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099a7320 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f89898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099a7488&gt;, @mon_data_owner_object_id=23660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099a7028&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f89938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909989938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909988fb0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99099bc7e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099bbf78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099bbe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099bbca8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099bb0c8 @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:0x00007f99099badf8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f89938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aba08 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097ab968 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099a77d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099a7320 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f89898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099a7488&gt;, @mon_data_owner_object_id=23660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099a7028&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f89938 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99099bc7e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099bbf78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099bbe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099bbca8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099bb0c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909989938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909988fb0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99099badd0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&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:0x00007f9908f89a78 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909554c50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aba08 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097ab968 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099a77d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099a7320 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f89898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099a7488&gt;, @mon_data_owner_object_id=23660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099a7028&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f89938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909989938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909988fb0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99099bc7e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099bbf78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099bbe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099bbca8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099bb0c8 @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:0x00007f99099badf8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f89938 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097aba08 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097ab968 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99099a77d0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99099a7320 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f89898 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99099a7488&gt;, @mon_data_owner_object_id=23660&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99099a7028&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f89938 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99099bc7e8 @client=#&lt;Ably::Rest::Client:0x00007f9909554c50 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99099bbf78 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99099bbe10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99099bbca8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99099bb0c8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909989938 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909988fb0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99099badd0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f89a78 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:44:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as ASCII_8BIT string is compatible with original encoding" file="./spec/unit/realtime/channel_spec.rb" time="33.447250"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910e8d0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910e880 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990966c0c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990966ba08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f9a788 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990966bf30&gt;, @mon_data_owner_object_id=23840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909669550&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f9a828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909650028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990966ff90 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909666580 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909666490 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096663c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909666300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096661c0 @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:0x00007f9909666170 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f9a828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910e8d0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910e880 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990966c0c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990966ba08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f9a788 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990966bf30&gt;, @mon_data_owner_object_id=23840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909669550&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f9a828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909666580 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909666490 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096663c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909666300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096661c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909650028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990966ff90 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909666148 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&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:0x00007f9908f9a8c8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910e8d0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910e880 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990966c0c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990966ba08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f9a788 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990966bf30&gt;, @mon_data_owner_object_id=23840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909669550&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f9a828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909650028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990966ff90 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909666580 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909666490 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096663c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909666300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096661c0 @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:0x00007f9909666170 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f9a828 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910e8d0 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910e880 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990966c0c0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990966ba08 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f9a788 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990966bf30&gt;, @mon_data_owner_object_id=23840&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909669550&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f9a828 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909666580 @client=#&lt;Ably::Rest::Client:0x00007f9908ff4b20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909666490 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096663c8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909666300 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096661c0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909650028 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990966ff90 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9909666148 @client=#&lt;Ably::Realtime::Client:0x00007f9908f9a8c8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:48:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as Nil raises an argument error" file="./spec/unit/realtime/channel_spec.rb" time="33.685596"><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:0x00007f99...y::Realtime::Client:0x00007f990916e898 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:64:in `block (5 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:64:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

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

  expected ArgumentError with message matching /must be a String/, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f99098a47e8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:56:in `block (5 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:56:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/channel_spec.rb:56:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as UTF_8 string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="34.493635"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990feb03c0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b3f1550 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b3f14b0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090c5ba8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090c59c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f5fe80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090c5b30&gt;, @mon_data_owner_object_id=24380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090c5540&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f5ff20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090c8830 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090c8790 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090c3bf0 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090c3b00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090c3a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090c39c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090c38a8 @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:0x00007f99090c3858 @client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f5ff20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b3f1550 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b3f14b0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090c5ba8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090c59c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f5fe80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090c5b30&gt;, @mon_data_owner_object_id=24380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090c5540&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f5ff20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090c3bf0 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090c3b00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090c3a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090c39c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090c38a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090c8830 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090c8790 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99090c3830 @client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&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:0x00007f990feb03c0 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b3f1550 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b3f14b0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090c5ba8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090c59c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f5fe80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090c5b30&gt;, @mon_data_owner_object_id=24380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090c5540&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f5ff20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090c8830 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090c8790 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090c3bf0 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090c3b00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090c3a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090c39c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090c38a8 @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:0x00007f99090c3858 @client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f5ff20 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b3f1550 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b3f14b0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090c5ba8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99090c59c8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f5fe80 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99090c5b30&gt;, @mon_data_owner_object_id=24380&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090c5540&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f5ff20 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090c3bf0 @client=#&lt;Ably::Rest::Client:0x00007f99095cfa18 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090c3b00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090c3a88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090c39c0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090c38a8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99090c8830 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99090c8790 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99090c3830 @client=#&lt;Ably::Realtime::Client:0x00007f990feb03c0 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:20:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as UTF_8 string remains as UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="35.913262"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990fed1688 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095eec60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990fec00b8 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990fec0068 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096dc708 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096dc1e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990fed1548 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096dc690&gt;, @mon_data_owner_object_id=24560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096dbf10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990fed15e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909672d30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909672cb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990983ece0 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990983eb00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990983e9e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990983e948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990983e830 @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:0x00007f990983e7e0 @client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990fed15e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990fec00b8 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990fec0068 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096dc708 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096dc1e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990fed1548 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096dc690&gt;, @mon_data_owner_object_id=24560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096dbf10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990fed15e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990983ece0 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990983eb00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990983e9e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990983e948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990983e830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909672d30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909672cb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990983e7b8 @client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&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:0x00007f990fed1688 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095eec60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990fec00b8 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990fec0068 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096dc708 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096dc1e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990fed1548 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096dc690&gt;, @mon_data_owner_object_id=24560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096dbf10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990fed15e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909672d30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909672cb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990983ece0 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990983eb00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990983e9e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990983e948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990983e830 @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:0x00007f990983e7e0 @client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990fed15e8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990fec00b8 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990fec0068 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99096dc708 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99096dc1e0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990fed1548 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99096dc690&gt;, @mon_data_owner_object_id=24560&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99096dbf10&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990fed15e8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990983ece0 @client=#&lt;Ably::Rest::Client:0x00007f99095eec60 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990983eb00 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990983e9e8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990983e948 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990983e830 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909672d30 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909672cb8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990983e7b8 @client=#&lt;Ably::Realtime::Client:0x00007f990fed1688 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:24:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as SHIFT_JIS string gets converted to UTF-8" file="./spec/unit/realtime/channel_spec.rb" time="34.766442"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f45828 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909089e28 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909089dd8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097e2940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097e2620 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f456e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097e28c8&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097e2288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f45788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99097d0b00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097d0a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098107a0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969ff38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969fe98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969fe20 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969fd58 @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:0x00007f990969fd08 @client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f45788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909089e28 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909089dd8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097e2940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097e2620 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f456e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097e28c8&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097e2288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f45788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098107a0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969ff38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969fe98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969fe20 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969fd58 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99097d0b00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097d0a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990969fce0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&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:0x00007f9908f45828 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909089e28 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909089dd8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097e2940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097e2620 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f456e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097e28c8&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097e2288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f45788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99097d0b00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097d0a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098107a0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969ff38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969fe98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969fe20 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969fd58 @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:0x00007f990969fd08 @client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f45788 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909089e28 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909089dd8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99097e2940 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99097e2620 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f456e8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99097e28c8&gt;, @mon_data_owner_object_id=24740&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99097e2288&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f45788 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99098107a0 @client=#&lt;Ably::Rest::Client:0x00007f9908fa3ae0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990969ff38 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990969fe98 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990969fe20 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990969fd58 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99097d0b00 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99097d0a88 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990969fce0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f45828 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:32:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#initializer as SHIFT_JIS string is compatible with original encoding" file="./spec/unit/realtime/channel_spec.rb" time="34.411604"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f99c48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909043c20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99091002d0 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909100280 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094e6098 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094e5f30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f99b08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094e6020&gt;, @mon_data_owner_object_id=24920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094e5dc8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f99ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094e91d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094e9158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e3f78 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e3e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e3e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e3d98 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e3be0 @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:0x00007f99094e3b40 @client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f99ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99091002d0 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909100280 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094e6098 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094e5f30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f99b08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094e6020&gt;, @mon_data_owner_object_id=24920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094e5dc8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f99ba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e3f78 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e3e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e3e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e3d98 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e3be0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094e91d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094e9158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094e3a78 @client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&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:0x00007f9908f99c48 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909043c20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99091002d0 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909100280 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094e6098 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094e5f30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f99b08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094e6020&gt;, @mon_data_owner_object_id=24920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094e5dc8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f99ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094e91d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094e9158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e3f78 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e3e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e3e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e3d98 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e3be0 @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:0x00007f99094e3b40 @client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f99ba8 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99091002d0 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909100280 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99094e6098 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f99094e5f30 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f99b08 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094e6020&gt;, @mon_data_owner_object_id=24920&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99094e5dc8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f99ba8 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094e3f78 @client=#&lt;Ably::Rest::Client:0x00007f9909043c20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094e3e88 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094e3e10 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094e3d98 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094e3be0 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f99094e91d0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094e9158 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094e3a78 @client=#&lt;Ably::Realtime::Client:0x00007f9908f99c48 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:36:in `block (4 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel msgbus fail with unacceptable STATE event names" file="./spec/unit/realtime/channel_spec.rb" time="34.277896"><failure message="expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f990916bc38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
  # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
  # ./lib/ably/realtime/client.rb:309:in `uri&apos;
  # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
  # ./lib/ably/realtime/client.rb:133:in `new&apos;
  # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
  # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:141:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:150:in `block (4 levels) in &lt;top (required)&gt;&apos;
  # ./spec/unit/realtime/channel_spec.rb:150:in `block (3 levels) in &lt;top (required)&gt;&apos;
  # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
  # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;" type="RSpec::Expectations::ExpectationNotMetError">Failure/Error: orig_handle_failure(*args, &amp;block)

  expected KeyError, got #&lt;NameError: undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99...y::Realtime::Client:0x00007f990916bc38 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;&gt; with backtrace:
    # ./lib/ably/realtime/client.rb:302:in `hostname&apos;
    # ./lib/ably/realtime/client.rb:309:in `uri&apos;
    # ./lib/ably/realtime/connection.rb:176:in `initialize&apos;
    # ./lib/ably/realtime/client.rb:133:in `new&apos;
    # ./lib/ably/realtime/client.rb:133:in `initialize&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
    # ./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:141:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:150:in `block (4 levels) in &lt;top (required)&gt;&apos;
    # ./spec/unit/realtime/channel_spec.rb:150:in `block (3 levels) in &lt;top (required)&gt;&apos;
    # ./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
    # ./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/event_machine_helper.rb:156:in `handle_failure&apos;
./spec/unit/realtime/channel_spec.rb:150:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel msgbus supports messages" file="./spec/unit/realtime/channel_spec.rb" time="33.638149"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f990986be20 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909428340 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990cb829f8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990cb82958 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f69f20 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f69db8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990986bce0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f69ea8&gt;, @mon_data_owner_object_id=25280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f69c50&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990986bd80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908f6dcb0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908f6dc38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f668e8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f667f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f66758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f666e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f66618 @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:0x00007f9908f66550 @client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990986bd80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909428340 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990cb829f8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990cb82958 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f69f20 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f69db8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990986bce0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f69ea8&gt;, @mon_data_owner_object_id=25280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f69c50&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990986bd80 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f668e8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f667f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f66758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f666e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f66618 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908f6dcb0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908f6dc38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9908f66500 @client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&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:0x00007f990986be20 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909428340 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990cb829f8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990cb82958 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f69f20 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f69db8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990986bce0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f69ea8&gt;, @mon_data_owner_object_id=25280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f69c50&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990986bd80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908f6dcb0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908f6dc38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f668e8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f667f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f66758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f666e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f66618 @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:0x00007f9908f66550 @client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f990986bd80 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909428340 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990cb829f8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990cb82958 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9908f69f20 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9908f69db8 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f990986bce0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9908f69ea8&gt;, @mon_data_owner_object_id=25280&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9908f69c50&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f990986bd80 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9908f668e8 @client=#&lt;Ably::Rest::Client:0x00007f9909428340 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9908f667f8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9908f66758 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9908f666e0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9908f66618 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9908f6dcb0 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9908f6dc38 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f9908f66500 @client=#&lt;Ably::Realtime::Client:0x00007f990986be20 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:141:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:145:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as ASCII_8BIT string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="33.915931"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99099fb880 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b47d0c8 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b47cf38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492628 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492470 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99099fb380 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094925b0&gt;, @mon_data_owner_object_id=25460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492268&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99099fb560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094961b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094dd650 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094dcae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094dca70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094dc9d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094dc908 @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:0x00007f99094dc8b8 @client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99099fb560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b47d0c8 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b47cf38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492628 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492470 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99099fb380 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094925b0&gt;, @mon_data_owner_object_id=25460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492268&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99099fb560 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094dd650 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094dcae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094dca70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094dc9d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094dc908 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094961b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094dc868 @client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&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:0x00007f99099fb880 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b47d0c8 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b47cf38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492628 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492470 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99099fb380 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094925b0&gt;, @mon_data_owner_object_id=25460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492268&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99099fb560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094961b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094dd650 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094dcae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094dca70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094dc9d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094dc908 @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:0x00007f99094dc8b8 @client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99099fb560 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990b47d0c8 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990b47cf38 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909492628 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909492470 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99099fb380 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f99094925b0&gt;, @mon_data_owner_object_id=25460&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909492268&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99099fb560 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99094dd650 @client=#&lt;Ably::Rest::Client:0x00007f99095c6b98 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99094dcae8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99094dca70 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99094dc9d0 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99094dc908 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909496228 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99094961b0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99094dc868 @client=#&lt;Ably::Realtime::Client:0x00007f99099fb880 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as Integer raises an argument error" file="./spec/unit/realtime/channel_spec.rb" time="34.695086"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9909473340 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909550650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097a81c8 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097a7fe8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990987d788 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990987d530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909473200 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990987d6c0&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990987cfe0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99094732a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909853140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909852fd8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909878fd0 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909878ad0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909878a08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909878940 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098787d8 @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:0x00007f9909878530 @client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99094732a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097a81c8 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097a7fe8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990987d788 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990987d530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909473200 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990987d6c0&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990987cfe0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99094732a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909878fd0 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909878ad0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909878a08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909878940 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098787d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909853140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909852fd8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99098784e0 @client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&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:0x00007f9909473340 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9909550650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097a81c8 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097a7fe8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990987d788 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990987d530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909473200 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990987d6c0&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990987cfe0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99094732a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909853140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909852fd8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909878fd0 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909878ad0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909878a08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909878940 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098787d8 @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:0x00007f9909878530 @client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99094732a0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9909550650 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f99097a81c8 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f99097a7fe8 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990987d788 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990987d530 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9909473200 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990987d6c0&gt;, @mon_data_owner_object_id=25640&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990987cfe0&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99094732a0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909878fd0 @client=#&lt;Ably::Rest::Client:0x00007f9909550650 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909878ad0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909878a08 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909878940 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99098787d8 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909853140 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909852fd8 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99098784e0 @client=#&lt;Ably::Realtime::Client:0x00007f9909473340 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as UTF_8 string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="34.004539"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f85fb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990904fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910bef0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910bea0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909546fb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909546c90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85bf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909546f10&gt;, @mon_data_owner_object_id=25820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909546a38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909530558 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99095304e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909544ad0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909544260 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909543bf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909543b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909543568 @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:0x00007f99095434f0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f85f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910bef0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910bea0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909546fb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909546c90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85bf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909546f10&gt;, @mon_data_owner_object_id=25820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909546a38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85f18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909544ad0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909544260 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909543bf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909543b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909543568 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909530558 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99095304e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99095434c8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&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:0x00007f9908f85fb8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f990904fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910bef0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910bea0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909546fb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909546c90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85bf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909546f10&gt;, @mon_data_owner_object_id=25820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909546a38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909530558 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99095304e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909544ad0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909544260 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909543bf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909543b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909543568 @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:0x00007f99095434f0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f85f18 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f990910bef0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f990910bea0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f9909546fb0 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909546c90 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908f85bf8 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909546f10&gt;, @mon_data_owner_object_id=25820&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f9909546a38&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908f85f18 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f9909544ad0 @client=#&lt;Ably::Rest::Client:0x00007f990904fca0 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f9909544260 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f9909543bf8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f9909543b30 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f9909543568 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909530558 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f99095304e0 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99095434c8 @client=#&lt;Ably::Realtime::Client:0x00007f9908f85fb8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as SHIFT_JIS string is permitted" file="./spec/unit/realtime/channel_spec.rb" time="33.043412"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908fe7da8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99090a0290 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909686e70 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909686e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990944cf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990944cdd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908fe7c68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990944cec0&gt;, @mon_data_owner_object_id=26000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990944cc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908fe7d08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990944f3c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990944f350 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990944b390 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990944b278 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990944b200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990944b160 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990944b048 @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:0x00007f990944aff8 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908fe7d08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909686e70 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909686e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990944cf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990944cdd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908fe7c68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990944cec0&gt;, @mon_data_owner_object_id=26000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990944cc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908fe7d08 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990944b390 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990944b278 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990944b200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990944b160 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990944b048 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990944f3c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990944f350 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990944afd0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&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:0x00007f9908fe7da8 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99090a0290 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909686e70 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909686e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990944cf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990944cdd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908fe7c68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990944cec0&gt;, @mon_data_owner_object_id=26000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990944cc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908fe7d08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990944f3c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990944f350 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990944b390 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990944b278 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990944b200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990944b160 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990944b048 @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:0x00007f990944aff8 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908fe7d08 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909686e70 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909686e20 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f990944cf38 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f990944cdd0 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f9908fe7c68 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f990944cec0&gt;, @mon_data_owner_object_id=26000&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f990944cc90&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f9908fe7d08 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f990944b390 @client=#&lt;Ably::Rest::Client:0x00007f99090a0290 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f990944b278 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f990944b200 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f990944b160 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f990944b048 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f990944f3c8 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f990944f350 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f990944afd0 @client=#&lt;Ably::Realtime::Client:0x00007f9908fe7da8 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.realtime.channel_spec" name="Ably::Realtime::Channel#publish name argument as Nil is permitted" file="./spec/unit/realtime/channel_spec.rb" time="32.723657"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f99090ea480 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909971f40 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909971ef0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090904a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909090318 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ea340 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909090408&gt;, @mon_data_owner_object_id=26180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090901d8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ea3e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909092910 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909092898 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090be3a8 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090be268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090be1a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090be128 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090be060 @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:0x00007f99090bdfc0 @client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090ea3e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909971f40 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909971ef0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090904a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909090318 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ea340 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909090408&gt;, @mon_data_owner_object_id=26180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090901d8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ea3e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090be3a8 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090be268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090be1a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090be128 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090be060 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909092910 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909092898 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99090bdf98 @client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&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:0x00007f99090ea480 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909971f40 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909971ef0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090904a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909090318 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ea340 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909090408&gt;, @mon_data_owner_object_id=26180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090901d8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ea3e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909092910 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909092898 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090be3a8 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090be268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090be1a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090be128 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090be060 @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:0x00007f99090bdfc0 @client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f99090ea3e0 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @http_defaults={:open_timeout=&gt;4, :request_timeout=&gt;10, :max_retry_duration=&gt;15, :max_retry_count=&gt;3}, @options={:token=&gt;&quot;valid&quot;, :fallback_retry_timeout=&gt;600}, @logger=#&lt;Ably::Logger:0x00007f9909971f40 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @custom_logger=nil, @logger=#&lt;Logger:0x00007f9909971ef0 @level=2, @progname=nil, @default_formatter=#&lt;Logger::Formatter:0x00007f99090904a8 @datetime_format=nil&gt;, @formatter=#&lt;Proc:0x00007f9909090318 /home/runner/work/ably-ruby/ably-ruby/lib/ably/logger.rb:91 (lambda)&gt;, @logdev=#&lt;Logger::LogDevice:0x00007f99090ea340 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#&lt;IO:&lt;STDOUT&gt;&gt;, @binmode=false, @reraise_write_errors=[], @mon_data=#&lt;Monitor:0x00007f9909090408&gt;, @mon_data_owner_object_id=26180&gt;, @level_override={}&gt;, @log_level=2, @log_mutex=#&lt;Thread::Mutex:0x00007f99090901d8&gt;&gt;, @auth=#&lt;Ably::Auth:0x00007f99090ea3e0 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99090be3a8 @client=#&lt;Ably::Rest::Client:0x00007f99091bfdd8 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99090be268 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99090be1a0 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99090be128 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99090be060 @client=Ably::Models::MessageEncoders, @options={:binary_protocol=&gt;true}&gt;]&gt;, @options={:token=&gt;&quot;valid&quot;}, @token_params={}, @token_option=&quot;valid&quot;, @key_name=nil, @key_secret=nil, @current_token_details=#&lt;Ably::Models::TokenDetails:0x00007f9909092910 @hash_object=#&lt;Ably::Models::IdiomaticRubyWrapper:0x00007f9909092898 @attributes={:token=&gt;&quot;valid&quot;}, @stop_at={}&gt;&gt;&gt;&gt;, @channels=#&lt;Ably::Realtime::Channels:0x00007f99090bdf98 @client=#&lt;Ably::Realtime::Client:0x00007f99090ea480 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./spec/unit/realtime/channel_spec.rb:6:in `new&apos;
./spec/unit/realtime/channel_spec.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:10:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/unit/realtime/channel_spec.rb:74:in `block (3 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.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.001564"></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.000952"></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.001154"></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.000858"></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.000812"></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.000775"></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.000798"></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.000684"></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.000795"></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.000766"></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.000703"></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.000772"></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="33.667280"><failure message="undefined local variable or method `root_domain&apos; for #&lt;Ably::Realtime::Client:0x00007f9908f4d708 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9908f4d668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096dee40 @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096dea58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096de7d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096de6e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096de328 @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:0x00007f99096de2b0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f4d668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9908f4d668 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096dee40 @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096dea58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096de7d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096de6e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096de328 @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:0x00007f99096de288 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&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:0x00007f9908f4d708 @transport_params={}, @rest_client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9908f4d668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 ...&gt;, @options={}, @token_params={}, @token_option=nil, @key_name=&quot;app.key&quot;, @key_secret=&quot;secret&quot;&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096dee40 @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096dea58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096de7d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096de6e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096de328 @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:0x00007f99096de2b0 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&gt;, @auth_sync=#&lt;Ably::Auth:0x00007f9908f4d668 @client_id=nil, @client_id_validated=nil, @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 @agent=&quot;ably-ruby/1.2.7 ruby/3.2.6&quot;, @realtime_client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&gt;, @tls=true, @protocol=:msgpack, @debug_http=nil, @log_level=2, @custom_logger=nil, @custom_host=nil, @custom_port=nil, @custom_tls_port=nil, @add_request_ids=nil, @log_retries_as_info=nil, @max_message_size=65536, @max_frame_size=524288, @idempotent_rest_publishing=true, @environment=nil, @endpoint=&quot;main&quot;, @fallback_hosts=[&quot;main..a.fallback.ably-realtime.com&quot;, &quot;main..b.fallback.ably-realtime.com&quot;, &quot;main..c.fallback.ably-realtime.com&quot;, &quot;main..d.fallback.ably-realtime.com&quot;, &quot;main..e.fallback.ably-realtime.com&quot;], @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:0x00007f9908f4d668 ...&gt;, @channels=#&lt;Ably::Rest::Channels:0x00007f99096dee40 @client=#&lt;Ably::Rest::Client:0x00007f9908fa5a20 ...&gt;, @channel_klass=Ably::Rest::Channel, @channels={}&gt;, @encoders=[#&lt;Ably::Models::MessageEncoders::Utf8:0x00007f99096dea58 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Json:0x00007f99096de7d8 @client=Ably::Models::MessageEncoders, @options={}&gt;, #&lt;Ably::Models::MessageEncoders::Cipher:0x00007f99096de6e8 @client=Ably::Models::MessageEncoders, @options={}, @cryptos={}&gt;, #&lt;Ably::Models::MessageEncoders::Base64:0x00007f99096de328 @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:0x00007f99096de288 @client=#&lt;Ably::Realtime::Client:0x00007f9908f4d708 ...&gt;, @channel_klass=Ably::Realtime::Channel, @channels={}&gt;&gt;
./lib/ably/realtime/client.rb:302:in `hostname&apos;
./lib/ably/realtime/client.rb:309:in `uri&apos;
./lib/ably/realtime/connection.rb:176:in `initialize&apos;
./lib/ably/realtime/client.rb:133:in `new&apos;
./lib/ably/realtime/client.rb:133:in `initialize&apos;
./lib/ably/realtime.rb:57:in `new&apos;
./lib/ably/realtime.rb:57:in `new&apos;
./spec/unit/realtime/realtime_spec.rb:7:in `block (2 levels) in &lt;top (required)&gt;&apos;
./spec/support/rest_testapp_before_retry.rb:6:in `block (2 levels) in &lt;top (required)&gt;&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:124:in `block in run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `loop&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:110:in `run&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry&apos;
./vendor/bundle/ruby/3.2.0/gems/rspec-retry-0.6.2/lib/rspec/retry.rb:37:in `block (2 levels) in setup&apos;
./vendor/bundle/ruby/3.2.0/gems/webmock-3.24.0/lib/webmock/rspec.rb:39:in `block (2 levels) in &lt;top (required)&gt;&apos;</failure></testcase>
<testcase classname="spec.unit.models.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.000836"></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.000910"></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.000867"></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.000531"></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.000733"></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.000538"></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.000654"></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.000604"></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.000858"></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.000616"></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.000498"></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.000763"></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.000559"></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.000803"></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.000537"></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.000842"></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.000544"></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.000668"></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.000570"></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.000868"></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.000538"></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.000653"></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.000550"></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.000588"></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.000640"></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.000714"></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.000672"></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.000875"></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.002809"></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.000996"></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.001137"></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.000913"></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.000757"></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.000825"></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.000694"></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.000962"></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.000964"></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.000618"></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.000748"></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.000721"></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.000796"></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.000645"></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.000737"></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.000757"></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.000708"></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.000643"></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.000738"></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.000682"></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.000534"></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.000510"></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.000563"></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.000523"></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.000502"></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.000567"></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.000951"></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.000571"></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.002184"></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.000745"></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.000595"></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.000683"></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.000547"></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.000758"></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.000599"></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.000722"></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.000761"></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.000611"></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.000619"></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.000684"></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.000632"></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.000625"></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.000650"></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.000520"></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.000534"></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.000497"></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.000543"></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.000487"></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.000653"></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.000524"></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.000603"></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.000498"></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.000617"></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.000492"></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.000707"></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.000570"></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.000642"></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.000505"></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.000564"></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.000544"></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.000495"></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.000525"></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.000582"></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.000494"></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.000542"></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.002377"></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.000799"></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.000969"></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.000902"></testcase>
<testcase classname="spec.unit.realtime.push_channel_spec" name="Ably::Realtime::Channel::PushChannel is constructed with a channel" file="./spec/unit/realtime/push_channel_spec.rb" time="0.000668"></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.000830"></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.000815"></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.000660"></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.000855"></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.000692"></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.000703"></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.000568"></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.000651"></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.000638"></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.000521"></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.000564"></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.000657"></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.000526"></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.000490"></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.000657"></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.000499"></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.000656"></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.000521"></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.000553"></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.000679"></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.000517"></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.000616"></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.000558"></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.000567"></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.004562"></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.007354"></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.003812"></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.004935"></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.004970"></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.005473"></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.002729"></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.000543"></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.001847"></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.001029"></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.000537"></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.000764"></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.001498"></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.000990"></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.000557"></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.001045"></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.000925"></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.000527"></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.001145"></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.001029"></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.000545"></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.001015"></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.001040"></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.000636"></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.000640"></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.000923"></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.001075"></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.001039"></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.000904"></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.001050"></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.000694"></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.000556"></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.000916"></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.000639"></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.000763"></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.000716"></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.000655"></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.000716"></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.000647"></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.000604"></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.000590"></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.000581"></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.000646"></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.000648"></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.000671"></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.000649"></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.000600"></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.000662"></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.000625"></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.000646"></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.000652"></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.002179"></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.000733"></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.000487"></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.000829"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#on (#RTE3) with event specified catches exceptions in the provided block, logs the error and continues" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000829"></testcase>
<testcase classname="spec.unit.modules.event_emitter_spec" name="Ably::Modules::EventEmitter#on (#RTE3) with no event specified catches exceptions in the provided block, logs the error and continues" file="./spec/unit/modules/event_emitter_spec.rb" time="0.000796"></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.000610"></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.000640"></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.000681"></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.000838"></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.000797"></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.000751"></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.000701"></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.000707"></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.000662"></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.000646"></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.000615"></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.000599"></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.000634"></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.000604"></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.000661"></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.000563"></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.000654"></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.000609"></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.000603"></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.000557"></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.000659"></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.000537"></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.000656"></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.000546"></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.000531"></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.000507"></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.000704"></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.000596"></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.000713"></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.000504"></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.000583"></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.000677"></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.000571"></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.000521"></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.000522"></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.000523"></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.000476"></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.000505"></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.000475"></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.000460"></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.000530"></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.000557"></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.000485"></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.002292"></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.000656"></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.000596"></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.000910"></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.000694"></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.000699"></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.000508"></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.000488"></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.000483"></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.000692"></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.000525"></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.000576"></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.000638"></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.000514"></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.000509"></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.000775"></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.000594"></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.000673"></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.000518"></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.000775"></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.000510"></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.000664"></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.000766"></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.000534"></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.000579"></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.000723"></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.000473"></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.000619"></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.000760"></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.000504"></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.000581"></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.000547"></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.000777"></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.000540"></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.000727"></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.000805"></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.000620"></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.000467"></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.000517"></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.000472"></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.000523"></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.000513"></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.000541"></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.000512"></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.002172"></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.000702"></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.000547"></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.000856"></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.000485"></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.000659"></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.000777"></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.000714"></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.000567"></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.001295"></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.000764"></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.000576"></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.000700"></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.000476"></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.000648"></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.000576"></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.000667"></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.000517"></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.000625"></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.000521"></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.000673"></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.000525"></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.000608"></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.000522"></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.000626"></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.000516"></testcase>
</testsuite>
