Skip to content

Commit 473de38

Browse files
committed
allow flag tracker to be created by calling code
The datasystem doesn't use the flagTracker. Instead of creating and being responsible for something it doesn't use, provide access to the broadcaster so the calling code can create a tracker however it needs.
1 parent 2763e07 commit 473de38

File tree

4 files changed

+16
-79
lines changed

4 files changed

+16
-79
lines changed

lib/ldclient-rb/impl/datasystem.rb

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,15 @@ def data_store_status_provider
6666
end
6767

6868
#
69-
# Returns an interface for tracking changes in feature flag configurations.
69+
# Returns the broadcaster for flag change notifications.
7070
#
71-
# @return [LaunchDarkly::Interfaces::FlagTracker]
71+
# Consumers can use this broadcaster to build their own flag tracker
72+
# or listen for flag changes directly.
7273
#
73-
def flag_tracker
74-
raise NotImplementedError, "#{self.class} must implement #flag_tracker"
74+
# @return [LaunchDarkly::Impl::Broadcaster]
75+
#
76+
def flag_change_broadcaster
77+
raise NotImplementedError, "#{self.class} must implement #flag_change_broadcaster"
7578
end
7679

7780
#
@@ -101,21 +104,6 @@ def store
101104
raise NotImplementedError, "#{self.class} must implement #store"
102105
end
103106

104-
#
105-
# Injects the flag value evaluation function used by the flag tracker to
106-
# compute FlagValueChange events. The function signature should be
107-
# (key, context) -> value.
108-
#
109-
# This method must be called after initialization to enable the flag tracker
110-
# to compute value changes for flag change listeners.
111-
#
112-
# @param eval_fn [Proc] The evaluation function
113-
# @return [void]
114-
#
115-
def set_flag_value_eval_fn(eval_fn)
116-
raise NotImplementedError, "#{self.class} must implement #set_flag_value_eval_fn"
117-
end
118-
119107
#
120108
# Sets the diagnostic accumulator for streaming initialization metrics.
121109
# This should be called before start() to ensure metrics are collected.

lib/ldclient-rb/impl/datasystem/fdv1.rb

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
require 'ldclient-rb/impl/data_source'
44
require 'ldclient-rb/impl/data_store'
55
require 'ldclient-rb/impl/datasource/null_processor'
6-
require 'ldclient-rb/impl/flag_tracker'
76
require 'ldclient-rb/impl/broadcaster'
87

98
module LaunchDarkly
@@ -51,10 +50,6 @@ def initialize(sdk_key, config)
5150
# Set up data source plumbing
5251
@data_source_broadcaster = LaunchDarkly::Impl::Broadcaster.new(@shared_executor, @config.logger)
5352
@flag_change_broadcaster = LaunchDarkly::Impl::Broadcaster.new(@shared_executor, @config.logger)
54-
@flag_tracker_impl = LaunchDarkly::Impl::FlagTracker.new(
55-
@flag_change_broadcaster,
56-
lambda { |_key, _context| nil } # Replaced by client to use its evaluation method
57-
)
5853
@data_source_update_sink = LaunchDarkly::Impl::DataSource::UpdateSink.new(
5954
@store_wrapper,
6055
@data_source_broadcaster,
@@ -105,18 +100,6 @@ def store
105100
@store_wrapper
106101
end
107102

108-
#
109-
# Injects the flag value evaluation function used by the flag tracker to
110-
# compute FlagValueChange events. The function signature should be
111-
# (key, context) -> value.
112-
#
113-
# @param eval_fn [Proc] The evaluation function
114-
# @return [void]
115-
#
116-
def set_flag_value_eval_fn(eval_fn)
117-
@flag_tracker_impl = LaunchDarkly::Impl::FlagTracker.new(@flag_change_broadcaster, eval_fn)
118-
end
119-
120103
#
121104
# Sets the diagnostic accumulator for streaming initialization metrics.
122105
# This should be called before start() to ensure metrics are collected.
@@ -147,12 +130,12 @@ def data_store_status_provider
147130
end
148131

149132
#
150-
# Returns the flag tracker.
133+
# Returns the broadcaster for flag change notifications.
151134
#
152-
# @return [LaunchDarkly::Interfaces::FlagTracker]
135+
# @return [LaunchDarkly::Impl::Broadcaster]
153136
#
154-
def flag_tracker
155-
@flag_tracker_impl
137+
def flag_change_broadcaster
138+
@flag_change_broadcaster
156139
end
157140

158141
#

spec/impl/datasystem/fdv1_spec.rb

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,6 @@ module DataSystem
1111
subject { FDv1.new(sdk_key, config) }
1212

1313
describe "#initialize" do
14-
it "creates data store status provider" do
15-
expect(subject.data_store_status_provider).to be_a(LaunchDarkly::Impl::DataStore::StatusProvider)
16-
end
17-
18-
it "creates data source status provider" do
19-
expect(subject.data_source_status_provider).to be_a(LaunchDarkly::Impl::DataSource::StatusProvider)
20-
end
21-
22-
it "creates flag tracker" do
23-
expect(subject.flag_tracker).to be_a(LaunchDarkly::Impl::FlagTracker)
24-
end
25-
26-
it "creates store wrapper" do
27-
expect(subject.store).to be_a(LaunchDarkly::Impl::FeatureStoreClientWrapper)
28-
end
29-
3014
it "injects data_source_update_sink into config" do
3115
subject # Force creation of FDv1 instance
3216
expect(config.data_source_update_sink).to be_a(LaunchDarkly::Impl::DataSource::UpdateSink)
@@ -139,20 +123,6 @@ module DataSystem
139123
end
140124
end
141125

142-
describe "#set_flag_value_eval_fn" do
143-
it "updates the flag tracker with the evaluation function" do
144-
eval_fn = ->(key, context) { "value" }
145-
original_tracker = subject.flag_tracker
146-
147-
subject.set_flag_value_eval_fn(eval_fn)
148-
149-
# Should have created a new flag tracker with the eval function
150-
expect(subject.flag_tracker).to be_a(LaunchDarkly::Impl::FlagTracker)
151-
# The tracker should be different (new instance with eval_fn)
152-
expect(subject.flag_tracker.object_id).not_to eq(original_tracker.object_id)
153-
end
154-
end
155-
156126
describe "#set_diagnostic_accumulator" do
157127
it "stores the diagnostic accumulator" do
158128
diagnostic_accumulator = double("DiagnosticAccumulator")
@@ -172,9 +142,9 @@ module DataSystem
172142
end
173143
end
174144

175-
describe "#flag_tracker" do
176-
it "returns the flag tracker" do
177-
expect(subject.flag_tracker).to be_a(LaunchDarkly::Impl::FlagTracker)
145+
describe "#flag_change_broadcaster" do
146+
it "returns the flag change broadcaster" do
147+
expect(subject.flag_change_broadcaster).to be_a(LaunchDarkly::Impl::Broadcaster)
178148
end
179149
end
180150

spec/impl/datasystem_spec.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ module Impl
2828
expect { test_instance.data_store_status_provider }.to raise_error(NotImplementedError, /must implement #data_store_status_provider/)
2929
end
3030

31-
it "flag_tracker raises NotImplementedError" do
32-
expect { test_instance.flag_tracker }.to raise_error(NotImplementedError, /must implement #flag_tracker/)
31+
it "flag_change_broadcaster raises NotImplementedError" do
32+
expect { test_instance.flag_change_broadcaster }.to raise_error(NotImplementedError, /must implement #flag_change_broadcaster/)
3333
end
3434

3535
it "data_availability raises NotImplementedError" do
@@ -44,10 +44,6 @@ module Impl
4444
expect { test_instance.store }.to raise_error(NotImplementedError, /must implement #store/)
4545
end
4646

47-
it "set_flag_value_eval_fn raises NotImplementedError" do
48-
expect { test_instance.set_flag_value_eval_fn(nil) }.to raise_error(NotImplementedError, /must implement #set_flag_value_eval_fn/)
49-
end
50-
5147
it "set_diagnostic_accumulator raises NotImplementedError" do
5248
accumulator = double("DiagnosticAccumulator")
5349
expect { test_instance.set_diagnostic_accumulator(accumulator) }.to raise_error(NotImplementedError, /must implement #set_diagnostic_accumulator/)

0 commit comments

Comments
 (0)