launchdarkly-server-sdk 6.0.0 → 6.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -1
- data/CHANGELOG.md +1 -0
- data/Gemfile.lock +2 -2
- data/README.md +0 -1
- data/azure-pipelines.yml +1 -1
- data/lib/ldclient-rb/events.rb +2 -0
- data/lib/ldclient-rb/impl/event_factory.rb +22 -0
- data/lib/ldclient-rb/ldclient.rb +17 -0
- data/lib/ldclient-rb/version.rb +1 -1
- data/spec/events_spec.rb +10 -0
- data/spec/ldclient_spec.rb +50 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 660fcdc21e7d6c74b118c02e180fc0a2a08279d4c936f4d01b45244e2df88732
|
4
|
+
data.tar.gz: 0fc47ce28bb8e66ef1e0c93b06499990366c749adc32250b368d7b25573c971f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c93e00623d1e6f954974a3128bd19c31b669eaa440460d1b14c30f4b9581b5aee2c06cf040f2fcbdd815a38384388d3b606c65834ffc4057ade87a083d1eda3
|
7
|
+
data.tar.gz: ef7d3c86a418ab1bb07e3b444107fc92d0472e9fe1a2ed9ef87a57527d72a2c63ce6007ad39dd5ff22f242ea420c4524bb292d8a9e3e18d8ebadb4042d82e1d5
|
data/.circleci/config.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,7 @@ All notable changes to the LaunchDarkly Ruby SDK will be documented in this file
|
|
10
10
|
- Switched to the `http` gem instead of `socketry` (with a custom http client) for streaming, and instead of `Net::HTTP` for polling / events.
|
11
11
|
- Dropped support for Ruby < version 2.5
|
12
12
|
- Dropped support for JRuby < version 9.2
|
13
|
+
- Switched the default polling domain from `app.launchdarkly.com` to `sdk.launchdarkly.com`.
|
13
14
|
|
14
15
|
## [5.8.2] - 2021-01-19
|
15
16
|
### Fixed:
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
launchdarkly-server-sdk (6.
|
4
|
+
launchdarkly-server-sdk (6.1.0)
|
5
5
|
concurrent-ruby (~> 1.1)
|
6
6
|
http (~> 4.4.1)
|
7
7
|
json (~> 2.3.1)
|
@@ -113,4 +113,4 @@ DEPENDENCIES
|
|
113
113
|
webrick (~> 1.7)
|
114
114
|
|
115
115
|
BUNDLED WITH
|
116
|
-
2.2.
|
116
|
+
2.2.8
|
data/README.md
CHANGED
@@ -55,4 +55,3 @@ About LaunchDarkly
|
|
55
55
|
* [docs.launchdarkly.com](https://docs.launchdarkly.com/ "LaunchDarkly Documentation") for our documentation and SDK reference guides
|
56
56
|
* [apidocs.launchdarkly.com](https://apidocs.launchdarkly.com/ "LaunchDarkly API Documentation") for our API documentation
|
57
57
|
* [blog.launchdarkly.com](https://blog.launchdarkly.com/ "LaunchDarkly Blog Documentation") for the latest product updates
|
58
|
-
* [Feature Flagging Guide](https://github.com/launchdarkly/featureflags/ "Feature Flagging Guide") for best practices and strategies
|
data/azure-pipelines.yml
CHANGED
@@ -45,7 +45,7 @@ jobs:
|
|
45
45
|
workingDirectory: $(System.DefaultWorkingDirectory)
|
46
46
|
script: |
|
47
47
|
ruby -v
|
48
|
-
gem install bundler
|
48
|
+
gem install bundler:2.2.7
|
49
49
|
bundle install
|
50
50
|
mkdir rspec
|
51
51
|
bundle exec rspec --format progress --format RspecJunitFormatter -o ./rspec/rspec.xml spec
|
data/lib/ldclient-rb/events.rb
CHANGED
@@ -439,6 +439,7 @@ module LaunchDarkly
|
|
439
439
|
out[:variation] = event[:variation] if event.has_key?(:variation)
|
440
440
|
out[:version] = event[:version] if event.has_key?(:version)
|
441
441
|
out[:prereqOf] = event[:prereqOf] if event.has_key?(:prereqOf)
|
442
|
+
out[:contextKind] = event[:contextKind] if event.has_key?(:contextKind)
|
442
443
|
if @inline_users || is_debug
|
443
444
|
out[:user] = process_user(event)
|
444
445
|
else
|
@@ -466,6 +467,7 @@ module LaunchDarkly
|
|
466
467
|
out[:userKey] = event[:user].nil? ? nil : event[:user][:key]
|
467
468
|
end
|
468
469
|
out[:metricValue] = event[:metricValue] if event.has_key?(:metricValue)
|
470
|
+
out[:contextKind] = event[:contextKind] if event.has_key?(:contextKind)
|
469
471
|
out
|
470
472
|
when "index"
|
471
473
|
{
|
@@ -28,6 +28,7 @@ module LaunchDarkly
|
|
28
28
|
e[:debugEventsUntilDate] = flag[:debugEventsUntilDate] if flag[:debugEventsUntilDate]
|
29
29
|
e[:prereqOf] = prereq_of_flag[:key] if !prereq_of_flag.nil?
|
30
30
|
e[:reason] = detail.reason if add_experiment_data || @with_reasons
|
31
|
+
e[:contextKind] = context_to_context_kind(user) if !user.nil? && user[:anonymous]
|
31
32
|
e
|
32
33
|
end
|
33
34
|
|
@@ -43,6 +44,7 @@ module LaunchDarkly
|
|
43
44
|
e[:trackEvents] = true if flag[:trackEvents]
|
44
45
|
e[:debugEventsUntilDate] = flag[:debugEventsUntilDate] if flag[:debugEventsUntilDate]
|
45
46
|
e[:reason] = reason if @with_reasons
|
47
|
+
e[:contextKind] = context_to_context_kind(user) if !user.nil? && user[:anonymous]
|
46
48
|
e
|
47
49
|
end
|
48
50
|
|
@@ -55,6 +57,7 @@ module LaunchDarkly
|
|
55
57
|
default: default_value
|
56
58
|
}
|
57
59
|
e[:reason] = reason if @with_reasons
|
60
|
+
e[:contextKind] = context_to_context_kind(user) if !user.nil? && user[:anonymous]
|
58
61
|
e
|
59
62
|
end
|
60
63
|
|
@@ -66,6 +69,16 @@ module LaunchDarkly
|
|
66
69
|
}
|
67
70
|
end
|
68
71
|
|
72
|
+
def new_alias_event(current_context, previous_context)
|
73
|
+
{
|
74
|
+
kind: 'alias',
|
75
|
+
key: current_context[:key],
|
76
|
+
contextKind: context_to_context_kind(current_context),
|
77
|
+
previousKey: previous_context[:key],
|
78
|
+
previousContextKind: context_to_context_kind(previous_context)
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
69
82
|
def new_custom_event(event_name, user, data, metric_value)
|
70
83
|
e = {
|
71
84
|
kind: 'custom',
|
@@ -74,11 +87,20 @@ module LaunchDarkly
|
|
74
87
|
}
|
75
88
|
e[:data] = data if !data.nil?
|
76
89
|
e[:metricValue] = metric_value if !metric_value.nil?
|
90
|
+
e[:contextKind] = context_to_context_kind(user) if !user.nil? && user[:anonymous]
|
77
91
|
e
|
78
92
|
end
|
79
93
|
|
80
94
|
private
|
81
95
|
|
96
|
+
def context_to_context_kind(user)
|
97
|
+
if !user.nil? && user[:anonymous]
|
98
|
+
return "anonymousUser"
|
99
|
+
else
|
100
|
+
return "user"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
82
104
|
def is_experiment(flag, reason)
|
83
105
|
return false if !reason
|
84
106
|
case reason[:kind]
|
data/lib/ldclient-rb/ldclient.rb
CHANGED
@@ -282,6 +282,23 @@ module LaunchDarkly
|
|
282
282
|
@event_processor.add_event(@event_factory_default.new_custom_event(event_name, user, data, metric_value))
|
283
283
|
end
|
284
284
|
|
285
|
+
#
|
286
|
+
# Associates a new and old user object for analytics purposes via an alias event.
|
287
|
+
#
|
288
|
+
# @param current_context [Hash] The current version of a user.
|
289
|
+
# @param previous_context [Hash] The previous version of a user.
|
290
|
+
# @return [void]
|
291
|
+
#
|
292
|
+
def alias(current_context, previous_context)
|
293
|
+
if !current_context || current_context[:key].nil? || !previous_context || previous_context[:key].nil?
|
294
|
+
@config.logger.warn("Alias called with nil user or nil user key!")
|
295
|
+
return
|
296
|
+
end
|
297
|
+
sanitize_user(current_context)
|
298
|
+
sanitize_user(previous_context)
|
299
|
+
@event_processor.add_event(@event_factory_default.new_alias_event(current_context, previous_context))
|
300
|
+
end
|
301
|
+
|
285
302
|
#
|
286
303
|
# Returns all feature flag values for the given user.
|
287
304
|
#
|
data/lib/ldclient-rb/version.rb
CHANGED
data/spec/events_spec.rb
CHANGED
@@ -408,6 +408,16 @@ describe LaunchDarkly::EventProcessor do
|
|
408
408
|
end
|
409
409
|
end
|
410
410
|
|
411
|
+
it "queues alias event" do
|
412
|
+
with_processor_and_sender(default_config) do |ep, sender|
|
413
|
+
e = { kind: "alias", key: "a", contextKind: "user", previousKey: "b", previousContextKind: "user" }
|
414
|
+
ep.add_event(e)
|
415
|
+
|
416
|
+
output = flush_and_get_events(ep, sender)
|
417
|
+
expect(output).to contain_exactly(e)
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
411
421
|
it "treats nil value for custom the same as an empty hash" do
|
412
422
|
with_processor_and_sender(default_config) do |ep, sender|
|
413
423
|
user_with_nil_custom = { key: "userkey", custom: nil }
|
data/spec/ldclient_spec.rb
CHANGED
@@ -25,6 +25,12 @@ describe LaunchDarkly::LDClient do
|
|
25
25
|
}
|
26
26
|
}
|
27
27
|
end
|
28
|
+
let(:user_anonymous) do
|
29
|
+
{
|
30
|
+
key: "anonymous@test.com",
|
31
|
+
anonymous: true
|
32
|
+
}
|
33
|
+
end
|
28
34
|
let(:numeric_key_user) do
|
29
35
|
{
|
30
36
|
key: 33,
|
@@ -155,6 +161,24 @@ describe LaunchDarkly::LDClient do
|
|
155
161
|
client.variation("key", nil, "default")
|
156
162
|
end
|
157
163
|
|
164
|
+
it "queues a feature event for an existing feature when user is anonymous" do
|
165
|
+
config.feature_store.init({ LaunchDarkly::FEATURES => {} })
|
166
|
+
config.feature_store.upsert(LaunchDarkly::FEATURES, feature_with_value)
|
167
|
+
expect(event_processor).to receive(:add_event).with(hash_including(
|
168
|
+
kind: "feature",
|
169
|
+
key: "key",
|
170
|
+
version: 100,
|
171
|
+
contextKind: "anonymousUser",
|
172
|
+
user: user_anonymous,
|
173
|
+
variation: 0,
|
174
|
+
value: "value",
|
175
|
+
default: "default",
|
176
|
+
trackEvents: true,
|
177
|
+
debugEventsUntilDate: 1000
|
178
|
+
))
|
179
|
+
client.variation("key", user_anonymous, "default")
|
180
|
+
end
|
181
|
+
|
158
182
|
it "queues a feature event for an existing feature when user key is nil" do
|
159
183
|
config.feature_store.init({ LaunchDarkly::FEATURES => {} })
|
160
184
|
config.feature_store.upsert(LaunchDarkly::FEATURES, feature_with_value)
|
@@ -455,6 +479,12 @@ describe LaunchDarkly::LDClient do
|
|
455
479
|
client.track("custom_event_name", user, nil, 1.5)
|
456
480
|
end
|
457
481
|
|
482
|
+
it "includes contextKind with anonymous user" do
|
483
|
+
expect(event_processor).to receive(:add_event).with(hash_including(
|
484
|
+
kind: "custom", key: "custom_event_name", user: user_anonymous, metricValue: 2.2, contextKind: "anonymousUser"))
|
485
|
+
client.track("custom_event_name", user_anonymous, nil, 2.2)
|
486
|
+
end
|
487
|
+
|
458
488
|
it "sanitizes the user in the event" do
|
459
489
|
expect(event_processor).to receive(:add_event).with(hash_including(user: sanitized_numeric_key_user))
|
460
490
|
client.track("custom_event_name", numeric_key_user, nil)
|
@@ -473,6 +503,26 @@ describe LaunchDarkly::LDClient do
|
|
473
503
|
end
|
474
504
|
end
|
475
505
|
|
506
|
+
describe '#alias' do
|
507
|
+
it "queues up an alias event" do
|
508
|
+
expect(event_processor).to receive(:add_event).with(hash_including(
|
509
|
+
kind: "alias", key: user[:key], contextKind: "user", previousKey: user_anonymous[:key], previousContextKind: "anonymousUser"))
|
510
|
+
client.alias(user, user_anonymous)
|
511
|
+
end
|
512
|
+
|
513
|
+
it "does not send an event, and logs a warning, if user is nil" do
|
514
|
+
expect(event_processor).not_to receive(:add_event)
|
515
|
+
expect(logger).to receive(:warn)
|
516
|
+
client.alias(nil, nil)
|
517
|
+
end
|
518
|
+
|
519
|
+
it "does not send an event, and logs a warning, if user key is nil" do
|
520
|
+
expect(event_processor).not_to receive(:add_event)
|
521
|
+
expect(logger).to receive(:warn)
|
522
|
+
client.alias(user_without_key, user_without_key)
|
523
|
+
end
|
524
|
+
end
|
525
|
+
|
476
526
|
describe '#identify' do
|
477
527
|
it "queues up an identify event" do
|
478
528
|
expect(event_processor).to receive(:add_event).with(hash_including(kind: "identify", key: user[:key], user: user))
|
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: 6.
|
4
|
+
version: 6.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: 2021-
|
11
|
+
date: 2021-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-dynamodb
|