launchdarkly-server-sdk 7.0.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 196e3ec78782e9929809473f79c82acbd38969ad6c24304cc6bcd88e3976ad27
4
- data.tar.gz: '088b4f929f60fc54d87deb703d565dd750e5737470504ae93eff955689d57dd2'
3
+ metadata.gz: 4c7c60035c46d6e2284ad78f0f4e33637f804faf9c90229e09b9d7c5b64c3bf8
4
+ data.tar.gz: 38f330a730ce6459d7a50bf0afec0db47462afafa7f927f09a2978ae3bd1cf18
5
5
  SHA512:
6
- metadata.gz: a3709d4c9e8455f606463b1827b831035b088cfb4c110401d09aee178379a4ff26a874177b579a4e2127bce8ee91d3fb5927493af1e8a110549abeca62715f64
7
- data.tar.gz: ca67d5d1f7b5711762313a5538556b4cafdb2f9745ed7b51cce5c0a22f056cdbf4d78c33c4d980b1d8ddb814e283c4f7d442660be6a324e5c321b42100281013
6
+ metadata.gz: c15f778108d9fdc2d47b51846d068e553be322d4e072498368d9c8cc7161f2e15c8977ccc5dcf8e565a707d727029901bbd6e0a7780bb42c0407f21cbef959ec
7
+ data.tar.gz: c7eca9b4edb6c458b1a034161ca9adaac955d81155308c23f913c434cf02a6479e15a7df35ea9ae4cf4d5e21b288c485a3ef1c380f90d6e4581e8993a7bc1e37
@@ -57,6 +57,7 @@ module LaunchDarkly
57
57
  # @option opts [#open] :socket_factory See {#socket_factory}.
58
58
  # @option opts [BigSegmentsConfig] :big_segments See {#big_segments}.
59
59
  # @option opts [Hash] :application See {#application}
60
+ # @option opts [String] :payload_filter_key See {#payload_filter_key}
60
61
  #
61
62
  def initialize(opts = {})
62
63
  @base_uri = (opts[:base_uri] || Config.default_base_uri).chomp("/")
@@ -88,6 +89,7 @@ module LaunchDarkly
88
89
  @socket_factory = opts[:socket_factory]
89
90
  @big_segments = opts[:big_segments] || BigSegmentsConfig.new(store: nil)
90
91
  @application = LaunchDarkly::Impl::Util.validate_application_info(opts[:application] || {}, @logger)
92
+ @payload_filter_key = opts[:payload_filter_key]
91
93
  end
92
94
 
93
95
  #
@@ -330,6 +332,21 @@ module LaunchDarkly
330
332
  #
331
333
  attr_reader :application
332
334
 
335
+ #
336
+ # LaunchDarkly Server SDKs historically downloaded all flag configuration and segments for a particular environment
337
+ # during initialization.
338
+ #
339
+ # For some customers, this is an unacceptably large amount of data, and has contributed to performance issues within
340
+ # their products.
341
+ #
342
+ # Filtered environments aim to solve this problem. By allowing customers to specify subsets of an environment's
343
+ # flags using a filter key, SDKs will initialize faster and use less memory.
344
+ #
345
+ # This payload filter key only applies to the default streaming and polling data sources. It will not affect TestData or FileData
346
+ # data sources, nor will it be applied to any data source provided through the {#data_source} config property.
347
+ #
348
+ attr_reader :payload_filter_key
349
+
333
350
  #
334
351
  # Set to true to opt out of sending diagnostics data.
335
352
  #
@@ -387,7 +387,7 @@ module LaunchDarkly
387
387
 
388
388
  context = Impl::Context::make_context(context)
389
389
  unless context.valid?
390
- @config.logger.error { "[LDClient] Context was invalid for flag evaluation (#{context.error}); returning default value" }
390
+ @config.logger.error { "[LDClient] Context was invalid for evaluation of flag '#{key}' (#{context.error}); returning default value" }
391
391
  detail = Evaluator.error_result(EvaluationReason::ERROR_USER_NOT_SPECIFIED, default)
392
392
  return detail
393
393
  end
@@ -43,12 +43,10 @@ module LaunchDarkly
43
43
 
44
44
  private
45
45
 
46
- def request_single_item(kind, path)
47
- Impl::Model.deserialize(kind, make_request(path), @config.logger)
48
- end
49
-
50
46
  def make_request(path)
51
- uri = URI(@config.base_uri + path)
47
+ uri = URI(
48
+ Util.add_payload_filter_key(@config.base_uri + path, @config)
49
+ )
52
50
  headers = {}
53
51
  Impl::Util.default_http_headers(@sdk_key, @config).each { |k, v| headers[k] = v }
54
52
  headers["Connection"] = "keep-alive"
@@ -51,7 +51,9 @@ module LaunchDarkly
51
51
  reconnect_time: @config.initial_reconnect_delay,
52
52
  }
53
53
  log_connection_started
54
- @es = SSE::Client.new(@config.stream_uri + "/all", **opts) do |conn|
54
+
55
+ uri = Util.add_payload_filter_key(@config.stream_uri + "/all", @config)
56
+ @es = SSE::Client.new(uri, **opts) do |conn|
55
57
  conn.on_event { |event| process_message(event) }
56
58
  conn.on_error { |err|
57
59
  log_connection_result(false)
@@ -4,6 +4,32 @@ require "http"
4
4
  module LaunchDarkly
5
5
  # @private
6
6
  module Util
7
+ #
8
+ # Append the payload filter key query parameter to the provided URI.
9
+ #
10
+ # @param uri [String]
11
+ # @param config [Config]
12
+ # @return [String]
13
+ #
14
+ def self.add_payload_filter_key(uri, config)
15
+ return uri if config.payload_filter_key.nil?
16
+
17
+ unless config.payload_filter_key.is_a?(String) && !config.payload_filter_key.empty?
18
+ config.logger.warn { "[LDClient] Filter key must be a non-empty string. No filtering will be applied." }
19
+ return uri
20
+ end
21
+
22
+ begin
23
+ parsed = URI.parse(uri)
24
+ new_query_params = URI.decode_www_form(String(parsed.query)) << ["filter", config.payload_filter_key]
25
+ parsed.query = URI.encode_www_form(new_query_params)
26
+ parsed.to_s
27
+ rescue URI::InvalidURIError
28
+ config.logger.warn { "[LDClient] URI could not be parsed. No filtering will be applied." }
29
+ uri
30
+ end
31
+ end
32
+
7
33
  def self.new_http_client(uri_s, config)
8
34
  http_client_options = {}
9
35
  if config.socket_factory
@@ -1,3 +1,3 @@
1
1
  module LaunchDarkly
2
- VERSION = "7.0.3"
2
+ VERSION = "7.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: launchdarkly-server-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.3
4
+ version: 7.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LaunchDarkly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-17 00:00:00.000000000 Z
11
+ date: 2023-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-dynamodb
@@ -338,7 +338,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
338
338
  - !ruby/object:Gem::Version
339
339
  version: '0'
340
340
  requirements: []
341
- rubygems_version: 3.4.8
341
+ rubygems_version: 3.4.12
342
342
  signing_key:
343
343
  specification_version: 4
344
344
  summary: LaunchDarkly SDK for Ruby