From 919bb8e427e156026cadcfb997e7ded52175cef2 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Mon, 2 Mar 2026 13:00:30 -0800 Subject: [PATCH] added firing sdk ready event --- lib/splitclient-rb/engine/status_manager.rb | 7 ++++++- spec/engine/status_manager_spec.rb | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/splitclient-rb/engine/status_manager.rb b/lib/splitclient-rb/engine/status_manager.rb index c0115ffe..bfe35f9b 100644 --- a/lib/splitclient-rb/engine/status_manager.rb +++ b/lib/splitclient-rb/engine/status_manager.rb @@ -3,9 +3,10 @@ module SplitIoClient module Engine class StatusManager - def initialize(config) + def initialize(config, internal_events_queue) @config = config @sdk_ready = Concurrent::CountDownLatch.new(1) + @internal_events_queue = internal_events_queue end def ready? @@ -19,6 +20,10 @@ def ready! @sdk_ready.count_down @config.logger.info('SplitIO SDK is ready') + @internal_events_queue.push( + SplitIoClient::Engine::Models::SdkInternalEventNotification.new( + SplitIoClient::Engine::Models::SdkInternalEvent::SDK_READY, nil) + ) end def wait_until_ready(seconds = nil) diff --git a/spec/engine/status_manager_spec.rb b/spec/engine/status_manager_spec.rb index 3805a21a..c7a6a62d 100644 --- a/spec/engine/status_manager_spec.rb +++ b/spec/engine/status_manager_spec.rb @@ -6,15 +6,16 @@ subject { SplitIoClient::Engine::StatusManager } let(:config) { SplitIoClient::SplitConfig.new(logger: Logger.new(StringIO.new)) } + let(:queue) {Queue.new} it 'check if sdk is ready - should return false' do - status_manager = subject.new(config) + status_manager = subject.new(config, queue) expect(status_manager.ready?).to eq(false) end it 'check if sdk is ready - should return true' do - status_manager = subject.new(config) + status_manager = subject.new(config, queue) expect(status_manager.ready?).to eq(false) @@ -23,11 +24,23 @@ end it 'wait until ready - should return false' do - status_manager = subject.new(config) + status_manager = subject.new(config, queue) expect { status_manager.wait_until_ready(0.5) }.to raise_error(SplitIoClient::SplitIoError, 'SDK start up timeout expired') status_manager.ready! expect { status_manager.wait_until_ready(0) }.not_to raise_error end + + it 'check if sdk is ready - should fire ready event' do + status_manager = subject.new(config, queue) + + expect(status_manager.ready?).to eq(false) + + status_manager.ready! + expect(status_manager.ready?).to eq(true) + event = queue.pop + expect(event.internal_event).to be(SplitIoClient::Engine::Models::SdkInternalEvent::SDK_READY) + expect(event.metadata).to be(nil) + end end