launchdarkly-server-sdk 6.2.5 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/lib/ldclient-rb/config.rb +203 -43
  4. data/lib/ldclient-rb/context.rb +487 -0
  5. data/lib/ldclient-rb/evaluation_detail.rb +85 -26
  6. data/lib/ldclient-rb/events.rb +185 -146
  7. data/lib/ldclient-rb/flags_state.rb +25 -14
  8. data/lib/ldclient-rb/impl/big_segments.rb +117 -0
  9. data/lib/ldclient-rb/impl/context.rb +96 -0
  10. data/lib/ldclient-rb/impl/context_filter.rb +145 -0
  11. data/lib/ldclient-rb/impl/diagnostic_events.rb +9 -10
  12. data/lib/ldclient-rb/impl/evaluator.rb +428 -132
  13. data/lib/ldclient-rb/impl/evaluator_bucketing.rb +40 -41
  14. data/lib/ldclient-rb/impl/evaluator_helpers.rb +50 -0
  15. data/lib/ldclient-rb/impl/evaluator_operators.rb +26 -55
  16. data/lib/ldclient-rb/impl/event_sender.rb +6 -6
  17. data/lib/ldclient-rb/impl/event_summarizer.rb +68 -0
  18. data/lib/ldclient-rb/impl/event_types.rb +78 -0
  19. data/lib/ldclient-rb/impl/integrations/consul_impl.rb +7 -7
  20. data/lib/ldclient-rb/impl/integrations/dynamodb_impl.rb +92 -28
  21. data/lib/ldclient-rb/impl/integrations/file_data_source.rb +212 -0
  22. data/lib/ldclient-rb/impl/integrations/redis_impl.rb +165 -32
  23. data/lib/ldclient-rb/impl/integrations/test_data/test_data_source.rb +40 -0
  24. data/lib/ldclient-rb/impl/model/clause.rb +39 -0
  25. data/lib/ldclient-rb/impl/model/feature_flag.rb +213 -0
  26. data/lib/ldclient-rb/impl/model/preprocessed_data.rb +64 -0
  27. data/lib/ldclient-rb/impl/model/segment.rb +126 -0
  28. data/lib/ldclient-rb/impl/model/serialization.rb +54 -44
  29. data/lib/ldclient-rb/impl/repeating_task.rb +47 -0
  30. data/lib/ldclient-rb/impl/store_data_set_sorter.rb +2 -2
  31. data/lib/ldclient-rb/impl/unbounded_pool.rb +1 -1
  32. data/lib/ldclient-rb/impl/util.rb +62 -1
  33. data/lib/ldclient-rb/in_memory_store.rb +2 -2
  34. data/lib/ldclient-rb/integrations/consul.rb +9 -2
  35. data/lib/ldclient-rb/integrations/dynamodb.rb +47 -2
  36. data/lib/ldclient-rb/integrations/file_data.rb +108 -0
  37. data/lib/ldclient-rb/integrations/redis.rb +43 -3
  38. data/lib/ldclient-rb/integrations/test_data/flag_builder.rb +594 -0
  39. data/lib/ldclient-rb/integrations/test_data.rb +213 -0
  40. data/lib/ldclient-rb/integrations/util/store_wrapper.rb +14 -9
  41. data/lib/ldclient-rb/integrations.rb +2 -51
  42. data/lib/ldclient-rb/interfaces.rb +151 -1
  43. data/lib/ldclient-rb/ldclient.rb +175 -133
  44. data/lib/ldclient-rb/memoized_value.rb +1 -1
  45. data/lib/ldclient-rb/non_blocking_thread_pool.rb +1 -1
  46. data/lib/ldclient-rb/polling.rb +22 -41
  47. data/lib/ldclient-rb/reference.rb +274 -0
  48. data/lib/ldclient-rb/requestor.rb +7 -7
  49. data/lib/ldclient-rb/stream.rb +9 -9
  50. data/lib/ldclient-rb/util.rb +11 -17
  51. data/lib/ldclient-rb/version.rb +1 -1
  52. data/lib/ldclient-rb.rb +2 -4
  53. metadata +49 -23
  54. data/lib/ldclient-rb/event_summarizer.rb +0 -55
  55. data/lib/ldclient-rb/file_data_source.rb +0 -314
  56. data/lib/ldclient-rb/impl/event_factory.rb +0 -126
  57. data/lib/ldclient-rb/newrelic.rb +0 -17
  58. data/lib/ldclient-rb/redis_store.rb +0 -88
  59. data/lib/ldclient-rb/user_filter.rb +0 -52
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f1b216e5ae2518b79aae9613ecd04b02ed525ea2d25084df805eae7d92cb219
4
- data.tar.gz: 317db7e14a292968b245e39e3cd4be33206fd8085c8ebd04be43f1c987434228
3
+ metadata.gz: e189d76d654dbf73dc95e9cea758b81bc0df93d9012ebb6560d0994e6dff227c
4
+ data.tar.gz: fc8bdc8b9affee0e51ef233c217cfa4a3c7fbdbceb4694c38c5a2e90155205ed
5
5
  SHA512:
6
- metadata.gz: 5d9182ccde6530f67df30fd8a238e9b510e89dc235cf76c45140cb6eaa36b8e342a44a98595b8c86f171c8f6f1cc74291f3c2ebf11ac274f2a1e46d64798318c
7
- data.tar.gz: 4b54fc711795c06e3bdabb9dd593af8499aa8e8c28eec1f9db508a5a6c5288cd0268b7ce9d324c892425ffcf080f0ad21e78060a74e0186f19998bd40f076943
6
+ metadata.gz: 7fb89d48c3185f7019cd170f36f571b1ca2f7de130c624d6301fbfd30d46a0ae7a986494393ab290fa23b66511ce676b660533e1ad23d3a9e01fb037e20db6c4
7
+ data.tar.gz: 7e706747d2fcd1ab299a76eca7bf26908dbe97972b8c1ea74cfae6bc6aaffe866ddfc157b26675eb44fb22044c74efff88e7c5c4bf8dc0e75fa93dfe0ddbea8a
data/README.md CHANGED
@@ -3,8 +3,7 @@ LaunchDarkly Server-side SDK for Ruby
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/launchdarkly-server-sdk.svg)](http://badge.fury.io/rb/launchdarkly-server-sdk)
5
5
 
6
- [![Circle CI](https://circleci.com/gh/launchdarkly/ruby-server-sdk/tree/master.svg?style=svg)](https://circleci.com/gh/launchdarkly/ruby-server-sdk/tree/master)
7
- [![Security](https://hakiri.io/github/launchdarkly/ruby-server-sdk/master.svg)](https://hakiri.io/github/launchdarkly/ruby-server-sdk/master)
6
+ [![Circle CI](https://circleci.com/gh/launchdarkly/ruby-server-sdk/tree/main.svg?style=svg)](https://circleci.com/gh/launchdarkly/ruby-server-sdk/tree/main)
8
7
  [![RubyDoc](https://img.shields.io/static/v1?label=docs+-+all+versions&message=reference&color=00add8)](https://www.rubydoc.info/gems/launchdarkly-server-sdk)
9
8
  [![GitHub Pages](https://img.shields.io/static/v1?label=docs+-+latest&message=reference&color=00add8)](https://launchdarkly.github.io/ruby-server-sdk)
10
9
 
@@ -13,6 +13,18 @@ module LaunchDarkly
13
13
  #
14
14
  # Constructor for creating custom LaunchDarkly configurations.
15
15
  #
16
+ # `user_keys_capacity` and `user_keys_flush_interval` are deprecated
17
+ # configuration options. They exist to maintain backwards compatibility
18
+ # with previous configurations. Newer code should prefer their replacement
19
+ # options -- `context_keys_capacity` and `context_keys_flush_interval`.
20
+ #
21
+ # In the event both the user and context variations are provided, the
22
+ # context specific configuration option will take precedence.
23
+ #
24
+ # Similarly, `private_attribute_names` is deprecated. Newer code should
25
+ # prefer `private_attributes`. If both are provided, `private_attributes`
26
+ # will take precedence.
27
+ #
16
28
  # @param opts [Hash] the configuration options
17
29
  # @option opts [Logger] :logger See {#logger}.
18
30
  # @option opts [String] :base_uri ("https://sdk.launchdarkly.com") See {#base_uri}.
@@ -21,6 +33,7 @@ module LaunchDarkly
21
33
  # @option opts [Integer] :capacity (10000) See {#capacity}.
22
34
  # @option opts [Float] :flush_interval (30) See {#flush_interval}.
23
35
  # @option opts [Float] :read_timeout (10) See {#read_timeout}.
36
+ # @option opts [Float] :initial_reconnect_delay (1) See {#initial_reconnect_delay}.
24
37
  # @option opts [Float] :connect_timeout (2) See {#connect_timeout}.
25
38
  # @option opts [Object] :cache_store See {#cache_store}.
26
39
  # @option opts [Object] :feature_store See {#feature_store}.
@@ -30,18 +43,20 @@ module LaunchDarkly
30
43
  # @option opts [Boolean] :stream (true) See {#stream?}.
31
44
  # @option opts [Boolean] all_attributes_private (false) See {#all_attributes_private}.
32
45
  # @option opts [Array] :private_attribute_names See {#private_attribute_names}.
46
+ # @option opts [Array] :private_attributes See {#private_attributes}.
33
47
  # @option opts [Boolean] :send_events (true) See {#send_events}.
34
48
  # @option opts [Integer] :user_keys_capacity (1000) See {#user_keys_capacity}.
49
+ # @option opts [Integer] :context_keys_capacity (1000) See {#context_keys_capacity}.
35
50
  # @option opts [Float] :user_keys_flush_interval (300) See {#user_keys_flush_interval}.
36
- # @option opts [Boolean] :inline_users_in_events (false) See {#inline_users_in_events}.
51
+ # @option opts [Float] :context_keys_flush_interval (300) See {#context_keys_flush_interval}.
37
52
  # @option opts [Object] :data_source See {#data_source}.
38
- # @option opts [Object] :update_processor Obsolete synonym for `data_source`.
39
- # @option opts [Object] :update_processor_factory Obsolete synonym for `data_source`.
40
53
  # @option opts [Boolean] :diagnostic_opt_out (false) See {#diagnostic_opt_out?}.
41
54
  # @option opts [Float] :diagnostic_recording_interval (900) See {#diagnostic_recording_interval}.
42
55
  # @option opts [String] :wrapper_name See {#wrapper_name}.
43
56
  # @option opts [String] :wrapper_version See {#wrapper_version}.
44
57
  # @option opts [#open] :socket_factory See {#socket_factory}.
58
+ # @option opts [BigSegmentsConfig] :big_segments See {#big_segments}.
59
+ # @option opts [Hash] :application See {#application}
45
60
  #
46
61
  def initialize(opts = {})
47
62
  @base_uri = (opts[:base_uri] || Config.default_base_uri).chomp("/")
@@ -53,26 +68,26 @@ module LaunchDarkly
53
68
  @flush_interval = opts[:flush_interval] || Config.default_flush_interval
54
69
  @connect_timeout = opts[:connect_timeout] || Config.default_connect_timeout
55
70
  @read_timeout = opts[:read_timeout] || Config.default_read_timeout
71
+ @initial_reconnect_delay = opts[:initial_reconnect_delay] || Config.default_initial_reconnect_delay
56
72
  @feature_store = opts[:feature_store] || Config.default_feature_store
57
73
  @stream = opts.has_key?(:stream) ? opts[:stream] : Config.default_stream
58
74
  @use_ldd = opts.has_key?(:use_ldd) ? opts[:use_ldd] : Config.default_use_ldd
59
75
  @offline = opts.has_key?(:offline) ? opts[:offline] : Config.default_offline
60
76
  @poll_interval = opts.has_key?(:poll_interval) && opts[:poll_interval] > Config.default_poll_interval ? opts[:poll_interval] : Config.default_poll_interval
61
77
  @all_attributes_private = opts[:all_attributes_private] || false
62
- @private_attribute_names = opts[:private_attribute_names] || []
78
+ @private_attributes = opts[:private_attributes] || opts[:private_attribute_names] || []
63
79
  @send_events = opts.has_key?(:send_events) ? opts[:send_events] : Config.default_send_events
64
- @user_keys_capacity = opts[:user_keys_capacity] || Config.default_user_keys_capacity
65
- @user_keys_flush_interval = opts[:user_keys_flush_interval] || Config.default_user_keys_flush_interval
66
- @inline_users_in_events = opts[:inline_users_in_events] || false
67
- @data_source = opts[:data_source] || opts[:update_processor] || opts[:update_processor_factory]
68
- @update_processor = opts[:update_processor]
69
- @update_processor_factory = opts[:update_processor_factory]
80
+ @context_keys_capacity = opts[:context_keys_capacity] || opts[:user_keys_capacity] || Config.default_context_keys_capacity
81
+ @context_keys_flush_interval = opts[:context_keys_flush_interval] || opts[:user_keys_flush_interval] || Config.default_user_keys_flush_interval
82
+ @data_source = opts[:data_source]
70
83
  @diagnostic_opt_out = opts.has_key?(:diagnostic_opt_out) && opts[:diagnostic_opt_out]
71
84
  @diagnostic_recording_interval = opts.has_key?(:diagnostic_recording_interval) && opts[:diagnostic_recording_interval] > Config.minimum_diagnostic_recording_interval ?
72
85
  opts[:diagnostic_recording_interval] : Config.default_diagnostic_recording_interval
73
86
  @wrapper_name = opts[:wrapper_name]
74
87
  @wrapper_version = opts[:wrapper_version]
75
88
  @socket_factory = opts[:socket_factory]
89
+ @big_segments = opts[:big_segments] || BigSegmentsConfig.new(store: nil)
90
+ @application = LaunchDarkly::Impl::Util.validate_application_info(opts[:application] || {}, @logger)
76
91
  end
77
92
 
78
93
  #
@@ -120,7 +135,7 @@ module LaunchDarkly
120
135
  def use_ldd?
121
136
  @use_ldd
122
137
  end
123
-
138
+
124
139
  #
125
140
  # Whether the client should be initialized in offline mode. In offline mode, default values are
126
141
  # returned for all flags and no remote network requests are made.
@@ -178,6 +193,13 @@ module LaunchDarkly
178
193
  #
179
194
  attr_reader :read_timeout
180
195
 
196
+ #
197
+ # The initial delay before reconnecting after an error in the SSE client.
198
+ # This only applies to the streaming connection.
199
+ # @return [Float]
200
+ #
201
+ attr_reader :initial_reconnect_delay
202
+
181
203
  #
182
204
  # The connect timeout for network connections in seconds.
183
205
  # @return [Float]
@@ -196,28 +218,37 @@ module LaunchDarkly
196
218
  attr_reader :feature_store
197
219
 
198
220
  #
199
- # True if all user attributes (other than the key) should be considered private. This means
221
+ # True if all context attributes (other than the key) should be considered private. This means
200
222
  # that the attribute values will not be sent to LaunchDarkly in analytics events and will not
201
223
  # appear on the LaunchDarkly dashboard.
202
224
  # @return [Boolean]
203
- # @see #private_attribute_names
225
+ # @see #private_attributes
204
226
  #
205
227
  attr_reader :all_attributes_private
206
228
 
207
229
  #
208
- # A list of user attribute names that should always be considered private. This means that the
230
+ # A list of context attribute names that should always be considered private. This means that the
209
231
  # attribute values will not be sent to LaunchDarkly in analytics events and will not appear on
210
232
  # the LaunchDarkly dashboard.
211
233
  #
212
- # You can also specify the same behavior for an individual flag evaluation by storing an array
213
- # of attribute names in the `:privateAttributeNames` property (note camelcase name) of the
214
- # user object.
234
+ # You can also specify the same behavior for an individual flag evaluation
235
+ # by providing the context object with a list of private attributes.
236
+ #
237
+ # @see https://docs.launchdarkly.com/sdk/features/user-context-config#using-private-attributes
215
238
  #
216
239
  # @return [Array<String>]
217
240
  # @see #all_attributes_private
218
241
  #
219
- attr_reader :private_attribute_names
220
-
242
+ attr_reader :private_attributes
243
+
244
+ #
245
+ # @deprecated Backwards compatibility alias for #private_attributes.
246
+ #
247
+ # @return [Integer]
248
+ # @see #private_attributes
249
+ #
250
+ alias :private_attribute_names :private_attributes
251
+
221
252
  #
222
253
  # Whether to send events back to LaunchDarkly. This differs from {#offline?} in that it affects
223
254
  # only the sending of client-side events, not streaming or polling for events from the server.
@@ -226,27 +257,35 @@ module LaunchDarkly
226
257
  attr_reader :send_events
227
258
 
228
259
  #
229
- # The number of user keys that the event processor can remember at any one time. This reduces the
230
- # amount of duplicate user details sent in analytics events.
260
+ # The number of context keys that the event processor can remember at any one time. This reduces the
261
+ # amount of duplicate context details sent in analytics events.
262
+ # @return [Integer]
263
+ # @see #context_keys_flush_interval
264
+ #
265
+ attr_reader :context_keys_capacity
266
+
267
+ #
268
+ # @deprecated Backwards compatibility alias for #context_keys_capacity.
269
+ #
231
270
  # @return [Integer]
232
- # @see #user_keys_flush_interval
271
+ # @see #context_keys_flush_interval
233
272
  #
234
- attr_reader :user_keys_capacity
273
+ alias :user_keys_capacity :context_keys_capacity
235
274
 
236
275
  #
237
- # The interval in seconds at which the event processor will reset its set of known user keys.
276
+ # The interval in seconds at which the event processor will reset its set of known context keys.
238
277
  # @return [Float]
239
- # @see #user_keys_capacity
278
+ # @see #context_keys_capacity
240
279
  #
241
- attr_reader :user_keys_flush_interval
280
+ attr_reader :context_keys_flush_interval
242
281
 
243
282
  #
244
- # Whether to include full user details in every analytics event. By default, events will only
245
- # include the user key, except for one "index" event that provides the full details for the user.
246
- # The only reason to change this is if you are using the Analytics Data Stream.
247
- # @return [Boolean]
283
+ # @deprecated Backwards compatibility alias for #context_keys_flush_interval.
248
284
  #
249
- attr_reader :inline_users_in_events
285
+ # @return [Integer]
286
+ # @see #context_keys_flush_interval
287
+ #
288
+ alias :user_keys_flush_interval :context_keys_flush_interval
250
289
 
251
290
  #
252
291
  # An object that is responsible for receiving feature flag data from LaunchDarkly. By default,
@@ -258,15 +297,38 @@ module LaunchDarkly
258
297
  # object.
259
298
  #
260
299
  # @return [LaunchDarkly::Interfaces::DataSource|lambda]
261
- # @see FileDataSource
300
+ # @see LaunchDarkly::Integrations::FileData
301
+ # @see LaunchDarkly::Integrations::TestData
262
302
  #
263
303
  attr_reader :data_source
264
304
 
265
- # @deprecated This is replaced by {#data_source}.
266
- attr_reader :update_processor
267
-
268
- # @deprecated This is replaced by {#data_source}.
269
- attr_reader :update_processor_factory
305
+ #
306
+ # Configuration options related to Big Segments.
307
+ #
308
+ # Big Segments are a specific type of segments. For more information, read the LaunchDarkly
309
+ # documentation: https://docs.launchdarkly.com/home/users/big-segments
310
+ #
311
+ # @return [BigSegmentsConfig]
312
+ #
313
+ attr_reader :big_segments
314
+
315
+ #
316
+ # An object that allows configuration of application metadata.
317
+ #
318
+ # Application metadata may be used in LaunchDarkly analytics or other product features, but does not affect feature flag evaluations.
319
+ #
320
+ # If you want to set non-default values for any of these fields, provide the appropriately configured hash to the {Config} object.
321
+ #
322
+ # @example Configuring application information
323
+ # opts[:application] = {
324
+ # id: "MY APPLICATION ID",
325
+ # version: "MY APPLICATION VERSION"
326
+ # }
327
+ # config = LDConfig.new(opts)
328
+ #
329
+ # @return [Hash]
330
+ #
331
+ attr_reader :application
270
332
 
271
333
  #
272
334
  # Set to true to opt out of sending diagnostics data.
@@ -382,6 +444,14 @@ module LaunchDarkly
382
444
  10
383
445
  end
384
446
 
447
+ #
448
+ # The default value for {#initial_reconnect_delay}.
449
+ # @return [Float] 1
450
+ #
451
+ def self.default_initial_reconnect_delay
452
+ 1
453
+ end
454
+
385
455
  #
386
456
  # The default value for {#connect_timeout}.
387
457
  # @return [Float] 10
@@ -396,8 +466,8 @@ module LaunchDarkly
396
466
  #
397
467
  def self.default_logger
398
468
  if defined?(Rails) && Rails.respond_to?(:logger)
399
- Rails.logger
400
- else
469
+ Rails.logger
470
+ else
401
471
  log = ::Logger.new($stdout)
402
472
  log.level = ::Logger::WARN
403
473
  log
@@ -453,21 +523,33 @@ module LaunchDarkly
453
523
  end
454
524
 
455
525
  #
456
- # The default value for {#user_keys_capacity}.
526
+ # The default value for {#context_keys_capacity}.
457
527
  # @return [Integer] 1000
458
528
  #
459
- def self.default_user_keys_capacity
529
+ def self.default_context_keys_capacity
460
530
  1000
461
531
  end
462
532
 
463
533
  #
464
- # The default value for {#user_keys_flush_interval}.
534
+ # The default value for {#context_keys_flush_interval}.
465
535
  # @return [Float] 300
466
536
  #
467
- def self.default_user_keys_flush_interval
537
+ def self.default_context_keys_flush_interval
468
538
  300
469
539
  end
470
540
 
541
+ class << self
542
+ #
543
+ # @deprecated Backwards compatibility alias for #default_context_keys_capacity
544
+ #
545
+ alias :default_user_keys_capacity :default_context_keys_capacity
546
+
547
+ #
548
+ # @deprecated Backwards compatibility alias for #default_context_keys_flush_interval
549
+ #
550
+ alias :default_user_keys_flush_interval :default_context_keys_flush_interval
551
+ end
552
+
471
553
  #
472
554
  # The default value for {#diagnostic_recording_interval}.
473
555
  # @return [Float] 900
@@ -484,4 +566,82 @@ module LaunchDarkly
484
566
  60
485
567
  end
486
568
  end
569
+
570
+ #
571
+ # Configuration options related to Big Segments.
572
+ #
573
+ # Big Segments are a specific type of segments. For more information, read the LaunchDarkly
574
+ # documentation: https://docs.launchdarkly.com/home/users/big-segments
575
+ #
576
+ # If your application uses Big Segments, you will need to create a `BigSegmentsConfig` that at a
577
+ # minimum specifies what database integration to use, and then pass the `BigSegmentsConfig`
578
+ # object as the `big_segments` parameter when creating a {Config}.
579
+ #
580
+ # @example Configuring Big Segments with Redis
581
+ # store = LaunchDarkly::Integrations::Redis::new_big_segments_store(redis_url: "redis://my-server")
582
+ # config = LaunchDarkly::Config.new(big_segments:
583
+ # LaunchDarkly::BigSegmentsConfig.new(store: store))
584
+ # client = LaunchDarkly::LDClient.new(my_sdk_key, config)
585
+ #
586
+ class BigSegmentsConfig
587
+ DEFAULT_CONTEXT_CACHE_SIZE = 1000
588
+ DEFAULT_CONTEXT_CACHE_TIME = 5
589
+ DEFAULT_STATUS_POLL_INTERVAL = 5
590
+ DEFAULT_STALE_AFTER = 2 * 60
591
+
592
+ #
593
+ # Constructor for setting Big Segments options.
594
+ #
595
+ # @param store [LaunchDarkly::Interfaces::BigSegmentStore] the data store implementation
596
+ # @param context_cache_size [Integer] See {#context_cache_size}.
597
+ # @param context_cache_time [Float] See {#context_cache_time}.
598
+ # @param status_poll_interval [Float] See {#status_poll_interval}.
599
+ # @param stale_after [Float] See {#stale_after}.
600
+ #
601
+ def initialize(store:, context_cache_size: nil, context_cache_time: nil, status_poll_interval: nil, stale_after: nil)
602
+ @store = store
603
+ @context_cache_size = context_cache_size.nil? ? DEFAULT_CONTEXT_CACHE_SIZE : context_cache_size
604
+ @context_cache_time = context_cache_time.nil? ? DEFAULT_CONTEXT_CACHE_TIME : context_cache_time
605
+ @status_poll_interval = status_poll_interval.nil? ? DEFAULT_STATUS_POLL_INTERVAL : status_poll_interval
606
+ @stale_after = stale_after.nil? ? DEFAULT_STALE_AFTER : stale_after
607
+ end
608
+
609
+ # The implementation of {LaunchDarkly::Interfaces::BigSegmentStore} that will be used to
610
+ # query the Big Segments database.
611
+ # @return [LaunchDarkly::Interfaces::BigSegmentStore]
612
+ attr_reader :store
613
+
614
+ # The maximum number of contexts whose Big Segment state will be cached by the SDK at any given time.
615
+ # @return [Integer]
616
+ attr_reader :context_cache_size
617
+
618
+ #
619
+ # @deprecated Backwards compatibility alias for #context_cache_size
620
+ #
621
+ # @return [Integer]
622
+ #
623
+ alias :user_cache_size :context_cache_size
624
+
625
+ # The maximum length of time (in seconds) that the Big Segment state for a context will be cached
626
+ # by the SDK.
627
+ # @return [Float]
628
+ attr_reader :context_cache_time
629
+
630
+ #
631
+ # @deprecated Backwards compatibility alias for #context_cache_time
632
+ #
633
+ # @return [Float]
634
+ #
635
+ alias :user_cache_time :context_cache_time
636
+
637
+ # The interval (in seconds) at which the SDK will poll the Big Segment store to make sure it is
638
+ # available and to determine how long ago it was updated.
639
+ # @return [Float]
640
+ attr_reader :status_poll_interval
641
+
642
+ # The maximum length of time between updates of the Big Segments data before the data is
643
+ # considered out of date.
644
+ # @return [Float]
645
+ attr_reader :stale_after
646
+ end
487
647
  end