Skip to content

Commit f06b16b

Browse files
committed
Added user qualification functionality
1 parent f9fc878 commit f06b16b

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

Diff for: lib/split/helper.rb

+13-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ def ab_test(metric_descriptor, control = nil, *alternatives)
1111
alternative = if Split.configuration.enabled && !exclude_visitor?
1212
experiment.save
1313
raise(Split::InvalidExperimentsFormatError) unless (Split.configuration.experiments || {}).fetch(experiment.name.to_sym, {})[:combined_experiments].nil?
14-
trial = Trial.new(:user => ab_user, :experiment => experiment,
15-
:override => override_alternative(experiment.name), :exclude => exclude_visitor?,
16-
:disabled => split_generically_disabled?)
14+
trial = Trial.new(
15+
:user => ab_user,
16+
:experiment => experiment,
17+
:override => override_alternative(experiment.name),
18+
:exclude => !is_qualified?,
19+
:disabled => split_generically_disabled?
20+
)
1721
alt = trial.choose!(self)
1822
alt ? alt.name : nil
1923
else
@@ -161,5 +165,11 @@ def normalize_metric(metric_descriptor)
161165
def control_variable(control)
162166
Hash === control ? control.keys.first.to_s : control.to_s
163167
end
168+
169+
private
170+
171+
def is_qualified?
172+
self.respond_to?(:ab_test_user_qualified?, true) ? self.send(:ab_test_user_qualified?) : true
173+
end
164174
end
165175
end

Diff for: spec/helper_spec.rb

+24
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,30 @@
274274
ab_test('link_color', 'blue', 'red')
275275
expect(ab_user).to eq(finished_session)
276276
end
277+
278+
context "with ab_test_user_qualified is set" do
279+
context "ab_test_user_qualified returns true" do
280+
def ab_test_user_qualified?
281+
true
282+
end
283+
284+
it "user is qualified to participate in experiment" do
285+
ab_test('link_color', 'blue', 'red')
286+
expect(['red', 'blue']).to include(ab_user['link_color'])
287+
end
288+
end
289+
290+
context "ab_test_user_qualified returns false" do
291+
def ab_test_user_qualified?
292+
false
293+
end
294+
295+
it "user is not qualified to participate in experiment" do
296+
ab_test('link_color', 'blue', 'red')
297+
expect(ab_user['link_color']).to eq(nil)
298+
end
299+
end
300+
end
277301
end
278302

279303
describe 'metadata' do

0 commit comments

Comments
 (0)