Skip to content

Commit 488a90d

Browse files
authored
chore: Create FDv2 polling and fallback data source (#348)
1 parent 713995f commit 488a90d

9 files changed

Lines changed: 1856 additions & 13 deletions

File tree

lib/ldclient-rb/data_system.rb

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require 'ldclient-rb/interfaces/data_system'
44
require 'ldclient-rb/config'
5+
require 'ldclient-rb/impl/data_system/polling'
56

67
module LaunchDarkly
78
#
@@ -97,23 +98,39 @@ def build
9798
end
9899
end
99100

100-
# @private
101+
#
102+
# Returns a builder proc for creating a polling data source.
103+
# This is a building block that can be used with {ConfigBuilder#initializers}
104+
# or {ConfigBuilder#synchronizers} to create custom data system configurations.
105+
#
106+
# @return [Proc] A proc that takes (sdk_key, config) and returns a polling data source
107+
#
101108
def self.polling_ds_builder
102-
# TODO(fdv2): Implement polling data source builder
103-
lambda do |_sdk_key, _config|
104-
raise NotImplementedError, "Polling data source not yet implemented for FDv2"
109+
lambda do |sdk_key, config|
110+
LaunchDarkly::Impl::DataSystem::PollingDataSourceBuilder.new(sdk_key, config).build
105111
end
106112
end
107113

108-
# @private
114+
#
115+
# Returns a builder proc for creating an FDv1 fallback polling data source.
116+
# This is a building block that can be used with {ConfigBuilder#fdv1_compatible_synchronizer}
117+
# to provide FDv1 compatibility in custom data system configurations.
118+
#
119+
# @return [Proc] A proc that takes (sdk_key, config) and returns an FDv1 polling data source
120+
#
109121
def self.fdv1_fallback_ds_builder
110-
# TODO(fdv2): Implement FDv1 fallback polling data source builder
111-
lambda do |_sdk_key, _config|
112-
raise NotImplementedError, "FDv1 fallback data source not yet implemented for FDv2"
122+
lambda do |sdk_key, config|
123+
LaunchDarkly::Impl::DataSystem::FDv1PollingDataSourceBuilder.new(sdk_key, config).build
113124
end
114125
end
115126

116-
# @private
127+
#
128+
# Returns a builder proc for creating a streaming data source.
129+
# This is a building block that can be used with {ConfigBuilder#synchronizers}
130+
# to create custom data system configurations.
131+
#
132+
# @return [Proc] A proc that takes (sdk_key, config) and returns a streaming data source
133+
#
117134
def self.streaming_ds_builder
118135
# TODO(fdv2): Implement streaming data source builder
119136
lambda do |_sdk_key, _config|

lib/ldclient-rb/impl/data_source/polling.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def poll
9797
#
9898
private def stop_with_error_info(error_info = nil)
9999
@task.stop
100+
@requestor.stop if @requestor.respond_to?(:stop)
100101
@config.logger.info { "[LDClient] Polling connection stopped" }
101102
@config.data_source_update_sink&.update_status(LaunchDarkly::Interfaces::DataSource::Status::OFF, error_info)
102103
end

0 commit comments

Comments
 (0)