Skip to content

Commit dc598f8

Browse files
committed
address feedback and attempt to fix contract tests
1 parent 1d78cc6 commit dc598f8

2 files changed

Lines changed: 68 additions & 37 deletions

File tree

contract-tests/client_entity.rb

Lines changed: 67 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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
#

lib/ldclient-rb/impl/data_system/data_source_builder_common.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,14 @@ def connect_timeout(timeout)
5656
self
5757
end
5858

59-
private
60-
6159
#
6260
# Builds an HttpConfigOptions instance from the current builder settings.
6361
# Uses self.class::DEFAULT_BASE_URI if base_uri was not explicitly set.
6462
# Read/connect timeouts default to HttpConfigOptions defaults if not set.
6563
#
6664
# @return [HttpConfigOptions]
6765
#
68-
def build_http_config
66+
private def build_http_config
6967
HttpConfigOptions.new(
7068
base_uri: @base_uri || self.class::DEFAULT_BASE_URI,
7169
socket_factory: @socket_factory,

0 commit comments

Comments
 (0)