Skip to content

Commit 6280e3b

Browse files
authored
prepare 5.5.4 release (#130)
1 parent 72ba633 commit 6280e3b

File tree

8 files changed

+64
-30
lines changed

8 files changed

+64
-30
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ require 'ldclient-rb'
3333
client = LaunchDarkly::LDClient.new("your_sdk_key")
3434
```
3535

36+
*NOTE: Please refer to [our documentation](https://docs.launchdarkly.com/docs/ruby-sdk-reference#section-initializing-ldclient-using-spring-unicorn-or-puma) for additional instructions on how to use LaunchDarkly with [Spring](https://github.com/rails/spring), [Unicorn](https://bogomips.org/unicorn/), or [Puma](https://github.com/puma/puma).*
37+
3638
### Ruby on Rails
3739

3840
1. Add `gem 'ldclient-rb'` to your Gemfile and `bundle install`

lib/ldclient-rb/evaluation.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ def check_prerequisites(flag, user, store, events, logger)
263263
event = {
264264
kind: "feature",
265265
key: prereq_key,
266+
user: user,
266267
variation: prereq_res.variation_index,
267268
value: prereq_res.value,
268269
version: prereq_flag[:version],
@@ -272,7 +273,7 @@ def check_prerequisites(flag, user, store, events, logger)
272273
}
273274
events.push(event)
274275
rescue => exn
275-
Util.log_exception(logger, "Error evaluating prerequisite flag \"#{prereq_key}\" for flag \"{flag[:key]}\"", exn)
276+
Util.log_exception(logger, "Error evaluating prerequisite flag \"#{prereq_key}\" for flag \"#{flag[:key]}\"", exn)
276277
prereq_ok = false
277278
end
278279
end

lib/ldclient-rb/ldclient.rb

+8
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ def variation_detail(key, user, default)
211211
# @return [void]
212212
#
213213
def identify(user)
214+
if !user || user[:key].nil?
215+
@config.logger.warn("Identify called with nil user or nil user key!")
216+
return
217+
end
214218
sanitize_user(user)
215219
@event_processor.add_event(kind: "identify", key: user[:key], user: user)
216220
end
@@ -229,6 +233,10 @@ def identify(user)
229233
# @return [void]
230234
#
231235
def track(event_name, user, data)
236+
if !user || user[:key].nil?
237+
@config.logger.warn("Track called with nil user or nil user key!")
238+
return
239+
end
232240
sanitize_user(user)
233241
@event_processor.add_event(kind: "custom", key: event_name, user: user, data: data)
234242
end

lib/ldclient-rb/util.rb

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require "net/http"
12
require "uri"
23

34
module LaunchDarkly

spec/evaluation_spec.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def boolean_flag_with_clauses(clauses)
127127
detail = LaunchDarkly::EvaluationDetail.new('b', 1,
128128
{ kind: 'PREREQUISITE_FAILED', prerequisiteKey: 'feature1' })
129129
events_should_be = [{
130-
kind: 'feature', key: 'feature1', variation: nil, value: nil, version: 2, prereqOf: 'feature0',
130+
kind: 'feature', key: 'feature1', user: user, variation: nil, value: nil, version: 2, prereqOf: 'feature0',
131131
trackEvents: nil, debugEventsUntilDate: nil
132132
}]
133133
result = evaluate(flag, user, features, logger)
@@ -159,7 +159,7 @@ def boolean_flag_with_clauses(clauses)
159159
detail = LaunchDarkly::EvaluationDetail.new('b', 1,
160160
{ kind: 'PREREQUISITE_FAILED', prerequisiteKey: 'feature1' })
161161
events_should_be = [{
162-
kind: 'feature', key: 'feature1', variation: 1, value: 'e', version: 2, prereqOf: 'feature0',
162+
kind: 'feature', key: 'feature1', user: user, variation: 1, value: 'e', version: 2, prereqOf: 'feature0',
163163
trackEvents: nil, debugEventsUntilDate: nil
164164
}]
165165
result = evaluate(flag, user, features, logger)
@@ -189,7 +189,7 @@ def boolean_flag_with_clauses(clauses)
189189
detail = LaunchDarkly::EvaluationDetail.new('b', 1,
190190
{ kind: 'PREREQUISITE_FAILED', prerequisiteKey: 'feature1' })
191191
events_should_be = [{
192-
kind: 'feature', key: 'feature1', variation: 0, value: 'd', version: 2, prereqOf: 'feature0',
192+
kind: 'feature', key: 'feature1', user: user, variation: 0, value: 'd', version: 2, prereqOf: 'feature0',
193193
trackEvents: nil, debugEventsUntilDate: nil
194194
}]
195195
result = evaluate(flag, user, features, logger)
@@ -218,7 +218,7 @@ def boolean_flag_with_clauses(clauses)
218218
user = { key: 'x' }
219219
detail = LaunchDarkly::EvaluationDetail.new('a', 0, { kind: 'FALLTHROUGH' })
220220
events_should_be = [{
221-
kind: 'feature', key: 'feature1', variation: 1, value: 'e', version: 2, prereqOf: 'feature0',
221+
kind: 'feature', key: 'feature1', user: user, variation: 1, value: 'e', version: 2, prereqOf: 'feature0',
222222
trackEvents: nil, debugEventsUntilDate: nil
223223
}]
224224
result = evaluate(flag, user, features, logger)

spec/fixtures/numeric_key_user.json

-9
This file was deleted.

spec/fixtures/sanitized_numeric_key_user.json

-9
This file was deleted.

spec/ldclient_spec.rb

+47-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
subject.new("secret", offline_config)
99
end
1010
let(:null_data) { LaunchDarkly::NullUpdateProcessor.new }
11-
let(:config) { LaunchDarkly::Config.new({send_events: false, data_source: null_data}) }
11+
let(:logger) { double().as_null_object }
12+
let(:config) { LaunchDarkly::Config.new({ send_events: false, data_source: null_data, logger: logger }) }
1213
let(:client) do
1314
subject.new("secret", config)
1415
end
@@ -17,16 +18,31 @@
1718
JSON.parse(data, symbolize_names: true)
1819
end
1920
let(:user) do
20-
data = File.read(File.join("spec", "fixtures", "user.json"))
21-
JSON.parse(data, symbolize_names: true)
21+
{
22+
key: "user@test.com",
23+
custom: {
24+
groups: [ "microsoft", "google" ]
25+
}
26+
}
2227
end
2328
let(:numeric_key_user) do
24-
data = File.read(File.join("spec", "fixtures", "numeric_key_user.json"))
25-
JSON.parse(data, symbolize_names: true)
29+
{
30+
key: 33,
31+
custom: {
32+
groups: [ "microsoft", "google" ]
33+
}
34+
}
2635
end
2736
let(:sanitized_numeric_key_user) do
28-
data = File.read(File.join("spec", "fixtures", "sanitized_numeric_key_user.json"))
29-
JSON.parse(data, symbolize_names: true)
37+
{
38+
key: "33",
39+
custom: {
40+
groups: [ "microsoft", "google" ]
41+
}
42+
}
43+
end
44+
let(:user_without_key) do
45+
{ name: "Keyless Joe" }
3046
end
3147

3248
def event_processor
@@ -342,6 +358,18 @@ def event_processor
342358
expect(event_processor).to receive(:add_event).with(hash_including(user: sanitized_numeric_key_user))
343359
client.track("custom_event_name", numeric_key_user, nil)
344360
end
361+
362+
it "does not send an event, and logs a warning, if user is nil" do
363+
expect(event_processor).not_to receive(:add_event)
364+
expect(logger).to receive(:warn)
365+
client.track("custom_event_name", nil, nil)
366+
end
367+
368+
it "does not send an event, and logs a warning, if user key is nil" do
369+
expect(event_processor).not_to receive(:add_event)
370+
expect(logger).to receive(:warn)
371+
client.track("custom_event_name", user_without_key, nil)
372+
end
345373
end
346374

347375
describe '#identify' do
@@ -354,6 +382,18 @@ def event_processor
354382
expect(event_processor).to receive(:add_event).with(hash_including(user: sanitized_numeric_key_user))
355383
client.identify(numeric_key_user)
356384
end
385+
386+
it "does not send an event, and logs a warning, if user is nil" do
387+
expect(event_processor).not_to receive(:add_event)
388+
expect(logger).to receive(:warn)
389+
client.identify(nil)
390+
end
391+
392+
it "does not send an event, and logs a warning, if user key is nil" do
393+
expect(event_processor).not_to receive(:add_event)
394+
expect(logger).to receive(:warn)
395+
client.identify(user_without_key)
396+
end
357397
end
358398

359399
describe 'with send_events: false' do

0 commit comments

Comments
 (0)