Skip to content

Commit 261013c

Browse files
authored
Merge pull request #622 from splitrb/consistent-return-metadata-when-disabled
ab_test must return metadata on error or if split is disabled/excluded user
2 parents 0eab0ae + de61579 commit 261013c

File tree

3 files changed

+54
-24
lines changed

3 files changed

+54
-24
lines changed

lib/split/helper.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ def ab_test(metric_descriptor, control = nil, *alternatives)
3232
end
3333

3434
if block_given?
35-
metadata = trial ? trial.metadata : {}
36-
yield(alternative, metadata)
35+
metadata = experiment.metadata[alternative] if experiment.metadata
36+
yield(alternative, metadata || {})
3737
else
3838
alternative
3939
end

spec/encapsulated_helper_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def params
2121
end
2222

2323
it "calls the block with selected alternative" do
24-
expect{|block| ab_test('link_color', 'red', 'red', &block) }.to yield_with_args('red', nil)
24+
expect{|block| ab_test('link_color', 'red', 'red', &block) }.to yield_with_args('red', {})
2525
end
2626

2727
context "inside a view" do

spec/helper_spec.rb

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -277,33 +277,63 @@
277277
end
278278

279279
describe 'metadata' do
280-
before do
281-
Split.configuration.experiments = {
282-
:my_experiment => {
283-
:alternatives => ["one", "two"],
284-
:resettable => false,
285-
:metadata => { 'one' => 'Meta1', 'two' => 'Meta2' }
280+
context 'is defined' do
281+
before do
282+
Split.configuration.experiments = {
283+
:my_experiment => {
284+
:alternatives => ["one", "two"],
285+
:resettable => false,
286+
:metadata => { 'one' => 'Meta1', 'two' => 'Meta2' }
287+
}
286288
}
287-
}
288-
end
289+
end
290+
291+
it 'should be passed to helper block' do
292+
@params = { 'ab_test' => { 'my_experiment' => 'two' } }
293+
expect(ab_test('my_experiment')).to eq 'two'
294+
expect(ab_test('my_experiment') do |alternative, meta|
295+
meta
296+
end).to eq('Meta2')
297+
end
298+
299+
it 'should pass control metadata helper block if library disabled' do
300+
Split.configure do |config|
301+
config.enabled = false
302+
end
289303

290-
it 'should be passed to helper block' do
291-
@params = { 'ab_test' => { 'my_experiment' => 'one' } }
292-
expect(ab_test('my_experiment')).to eq 'one'
293-
expect(ab_test('my_experiment') do |alternative, meta|
294-
meta
295-
end).to eq('Meta1')
304+
expect(ab_test('my_experiment')).to eq 'one'
305+
expect(ab_test('my_experiment') do |_, meta|
306+
meta
307+
end).to eq('Meta1')
308+
end
296309
end
297310

298-
it 'should pass empty hash to helper block if library disabled' do
299-
Split.configure do |config|
300-
config.enabled = false
311+
context 'is not defined' do
312+
before do
313+
Split.configuration.experiments = {
314+
:my_experiment => {
315+
:alternatives => ["one", "two"],
316+
:resettable => false,
317+
:metadata => nil
318+
}
319+
}
301320
end
302321

303-
expect(ab_test('my_experiment')).to eq 'one'
304-
expect(ab_test('my_experiment') do |_, meta|
305-
meta
306-
end).to eq({})
322+
it 'should be passed to helper block' do
323+
expect(ab_test('my_experiment') do |alternative, meta|
324+
meta
325+
end).to eq({})
326+
end
327+
328+
it 'should pass control metadata helper block if library disabled' do
329+
Split.configure do |config|
330+
config.enabled = false
331+
end
332+
333+
expect(ab_test('my_experiment') do |_, meta|
334+
meta
335+
end).to eq({})
336+
end
307337
end
308338
end
309339

0 commit comments

Comments
 (0)