@@ -32,9 +32,7 @@ def initialize(log, config)
3232 polling = init_config [ :polling ]
3333 next unless polling
3434
35- opts [ :base_uri ] = polling [ :baseUri ] if polling [ :baseUri ]
36- set_optional_time_prop ( polling , :pollIntervalMs , opts , :poll_interval )
37- initializers << LaunchDarkly ::DataSystem . polling_ds_builder
35+ initializers << build_polling_ds_builder ( polling )
3836 end
3937 data_system . initializers ( initializers )
4038 end
@@ -44,41 +42,13 @@ def initialize(log, config)
4442 primary = sync_config [ :primary ]
4543 secondary = sync_config [ :secondary ]
4644
47- primary_builder = nil
48- secondary_builder = nil
49-
50- if primary
51- streaming = primary [ :streaming ]
52- if streaming
53- opts [ :stream_uri ] = streaming [ :baseUri ] if streaming [ :baseUri ]
54- set_optional_time_prop ( streaming , :initialRetryDelayMs , opts , :initial_reconnect_delay )
55- primary_builder = LaunchDarkly ::DataSystem . streaming_ds_builder
56- elsif primary [ :polling ]
57- polling = primary [ :polling ]
58- opts [ :base_uri ] = polling [ :baseUri ] if polling [ :baseUri ]
59- set_optional_time_prop ( polling , :pollIntervalMs , opts , :poll_interval )
60- primary_builder = LaunchDarkly ::DataSystem . polling_ds_builder
61- end
62- end
63-
64- if secondary
65- streaming = secondary [ :streaming ]
66- if streaming
67- opts [ :stream_uri ] = streaming [ :baseUri ] if streaming [ :baseUri ]
68- set_optional_time_prop ( streaming , :initialRetryDelayMs , opts , :initial_reconnect_delay )
69- secondary_builder = LaunchDarkly ::DataSystem . streaming_ds_builder
70- elsif secondary [ :polling ]
71- polling = secondary [ :polling ]
72- opts [ :base_uri ] = polling [ :baseUri ] if polling [ :baseUri ]
73- set_optional_time_prop ( polling , :pollIntervalMs , opts , :poll_interval )
74- secondary_builder = LaunchDarkly ::DataSystem . polling_ds_builder
75- end
76- end
45+ primary_builder = build_synchronizer_builder ( primary )
46+ secondary_builder = build_synchronizer_builder ( secondary )
7747
7848 data_system . synchronizers ( primary_builder , secondary_builder ) if primary_builder
7949
8050 if primary_builder || secondary_builder
81- fallback_builder = LaunchDarkly :: DataSystem . fdv1_fallback_ds_builder
51+ fallback_builder = build_fdv1_fallback_builder ( primary , secondary )
8252 data_system . fdv1_compatible_synchronizer ( fallback_builder )
8353 end
8454 end
@@ -313,6 +283,69 @@ def close
313283 LaunchDarkly ::LDContext . create ( context )
314284 end
315285
286+ #
287+ # Builds a synchronizer builder from the contract test configuration.
288+ #
289+ # @param sync_config [Hash, nil] The synchronizer configuration (primary or secondary)
290+ # @return [Object, nil] Returns the configured builder or nil
291+ #
292+ private def build_synchronizer_builder ( sync_config )
293+ return nil unless sync_config
294+
295+ streaming = sync_config [ :streaming ]
296+ if streaming
297+ build_streaming_ds_builder ( streaming )
298+ elsif sync_config [ :polling ]
299+ build_polling_ds_builder ( sync_config [ :polling ] )
300+ end
301+ end
302+
303+ #
304+ # Builds a streaming data source builder with the configured parameters.
305+ #
306+ # @param streaming_config [Hash] The streaming configuration
307+ # @return [Object] Returns the configured streaming builder
308+ #
309+ private def build_streaming_ds_builder ( streaming_config )
310+ builder = LaunchDarkly ::DataSystem . streaming_ds_builder
311+ builder . base_uri ( streaming_config [ :baseUri ] ) if streaming_config [ :baseUri ]
312+ builder . initial_reconnect_delay ( streaming_config [ :initialRetryDelayMs ] / 1_000.0 ) if streaming_config [ :initialRetryDelayMs ]
313+ builder
314+ end
315+
316+ #
317+ # Builds a polling data source builder with the configured parameters.
318+ #
319+ # @param polling_config [Hash] The polling configuration
320+ # @return [Object] Returns the configured polling builder
321+ #
322+ private def build_polling_ds_builder ( polling_config )
323+ builder = LaunchDarkly ::DataSystem . polling_ds_builder
324+ builder . base_uri ( polling_config [ :baseUri ] ) if polling_config [ :baseUri ]
325+ builder . poll_interval ( polling_config [ :pollIntervalMs ] / 1_000.0 ) if polling_config [ :pollIntervalMs ]
326+ builder
327+ end
328+
329+ #
330+ # Builds an FDv1 fallback polling data source builder using the first available config.
331+ #
332+ # @param primary [Hash, nil] The primary synchronizer configuration
333+ # @param secondary [Hash, nil] The secondary synchronizer configuration
334+ # @return [Object] Returns the configured FDv1 fallback builder
335+ #
336+ private def build_fdv1_fallback_builder ( primary , secondary )
337+ builder = LaunchDarkly ::DataSystem . fdv1_fallback_ds_builder
338+
339+ # Use the first available polling config for the fallback base_uri
340+ polling_config = primary &.dig ( :polling ) || secondary &.dig ( :polling )
341+ if polling_config
342+ builder . base_uri ( polling_config [ :baseUri ] ) if polling_config [ :baseUri ]
343+ builder . poll_interval ( polling_config [ :pollIntervalMs ] / 1_000.0 ) if polling_config [ :pollIntervalMs ]
344+ end
345+
346+ builder
347+ end
348+
316349 #
317350 # Builds a persistent data store from the contract test configuration.
318351 #
0 commit comments