split 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/helper_spec.rb CHANGED
@@ -6,7 +6,7 @@ describe Split::Helper do
6
6
  include Split::Helper
7
7
 
8
8
  let(:experiment) {
9
- Split::Experiment.find_or_create('link_color', 'blue', 'red')
9
+ Split::ExperimentCatalog.find_or_create('link_color', 'blue', 'red')
10
10
  }
11
11
 
12
12
  describe "ab_test" do
@@ -53,7 +53,7 @@ describe Split::Helper do
53
53
 
54
54
  it 'should not increment the counter for an experiment that the user is not participating in' do
55
55
  ab_test('link_color', 'blue', 'red')
56
- e = Split::Experiment.find_or_create('button_size', 'small', 'big')
56
+ e = Split::ExperimentCatalog.find_or_create('button_size', 'small', 'big')
57
57
  expect(lambda {
58
58
  # User shouldn't participate in this second experiment
59
59
  ab_test('button_size', 'small', 'big')
@@ -61,7 +61,7 @@ describe Split::Helper do
61
61
  end
62
62
 
63
63
  it 'should not increment the counter for an ended experiment' do
64
- e = Split::Experiment.find_or_create('button_size', 'small', 'big')
64
+ e = Split::ExperimentCatalog.find_or_create('button_size', 'small', 'big')
65
65
  e.winner = 'small'
66
66
  expect(lambda {
67
67
  a = ab_test('button_size', 'small', 'big')
@@ -71,7 +71,7 @@ describe Split::Helper do
71
71
 
72
72
  it 'should not increment the counter for an not started experiment' do
73
73
  expect(Split.configuration).to receive(:start_manually).and_return(true)
74
- e = Split::Experiment.find_or_create('button_size', 'small', 'big')
74
+ e = Split::ExperimentCatalog.find_or_create('button_size', 'small', 'big')
75
75
  expect(lambda {
76
76
  a = ab_test('button_size', 'small', 'big')
77
77
  expect(a).to eq('small')
@@ -162,7 +162,7 @@ describe Split::Helper do
162
162
 
163
163
  it "should allow alternative weighting interface as a single hash" do
164
164
  ab_test('link_color', {'blue' => 0.01}, 'red' => 0.2)
165
- experiment = Split::Experiment.find('link_color')
165
+ experiment = Split::ExperimentCatalog.find('link_color')
166
166
  expect(experiment.alternatives.map(&:name)).to eq(['blue', 'red'])
167
167
  # TODO: persist alternative weights
168
168
  # expect(experiment.alternatives.collect{|a| a.weight}).to eq([0.01, 0.2])
@@ -202,7 +202,7 @@ describe Split::Helper do
202
202
  before(:each) do
203
203
  @experiment_name = 'link_color'
204
204
  @alternatives = ['blue', 'red']
205
- @experiment = Split::Experiment.find_or_create(@experiment_name, *@alternatives)
205
+ @experiment = Split::ExperimentCatalog.find_or_create(@experiment_name, *@alternatives)
206
206
  @alternative_name = ab_test(@experiment_name, *@alternatives)
207
207
  @previous_completion_count = Split::Alternative.new(@alternative_name, @experiment_name).completed_count
208
208
  end
@@ -237,7 +237,7 @@ describe Split::Helper do
237
237
  end
238
238
 
239
239
  it 'should not increment the counter for an ended experiment' do
240
- e = Split::Experiment.find_or_create('button_size', 'small', 'big')
240
+ e = Split::ExperimentCatalog.find_or_create('button_size', 'small', 'big')
241
241
  e.winner = 'small'
242
242
  a = ab_test('button_size', 'small', 'big')
243
243
  expect(a).to eq('small')
@@ -278,12 +278,6 @@ describe Split::Helper do
278
278
  expect(lambda { finished('some_experiment_not_started_by_the_user') }).not_to raise_exception
279
279
  end
280
280
 
281
- it 'should not be doing other tests when it has completed one that has :reset => false' do
282
- ab_user[@experiment.key] = @alternative_name
283
- ab_user[@experiment.finished_key] = true
284
- expect(doing_other_tests?(@experiment.key)).to be false
285
- end
286
-
287
281
  context "when on_trial_complete is set" do
288
282
  before { Split.configuration.on_trial_complete = :some_method }
289
283
  it "should call the method" do
@@ -308,7 +302,7 @@ describe Split::Helper do
308
302
  }
309
303
  }
310
304
  alternative = ab_test(:my_experiment)
311
- experiment = Split::Experiment.find :my_experiment
305
+ experiment = Split::ExperimentCatalog.find :my_experiment
312
306
 
313
307
  finished :my_experiment
314
308
  expect(ab_user).to eq(experiment.key => alternative, experiment.finished_key => true)
@@ -321,7 +315,7 @@ describe Split::Helper do
321
315
 
322
316
  def should_finish_experiment(experiment_name, should_finish=true)
323
317
  alts = Split.configuration.experiments[experiment_name][:alternatives]
324
- experiment = Split::Experiment.find_or_create(experiment_name, *alts)
318
+ experiment = Split::ExperimentCatalog.find_or_create(experiment_name, *alts)
325
319
  alt_name = ab_user[experiment.key] = alts.first
326
320
  alt = double('alternative')
327
321
  expect(alt).to receive(:name).at_most(1).times.and_return(alt_name)
@@ -372,7 +366,7 @@ describe Split::Helper do
372
366
  }
373
367
  }
374
368
  alternative_name = ab_test(:my_exp)
375
- exp = Split::Experiment.find :my_exp
369
+ exp = Split::ExperimentCatalog.find :my_exp
376
370
 
377
371
  finished :my_metric
378
372
  expect(ab_user[exp.key]).to eq(alternative_name)
@@ -387,7 +381,7 @@ describe Split::Helper do
387
381
  }
388
382
  }
389
383
  alternative_name = ab_test(:my_exp)
390
- exp = Split::Experiment.find :my_exp
384
+ exp = Split::ExperimentCatalog.find :my_exp
391
385
 
392
386
  finished :my_metric, :reset => false
393
387
  expect(ab_user[exp.key]).to eq(alternative_name)
@@ -409,6 +403,47 @@ describe Split::Helper do
409
403
  end
410
404
  end
411
405
 
406
+ describe 'active experiments' do
407
+ it 'should show an active test' do
408
+ alternative = ab_test('def', '4', '5', '6')
409
+ expect(active_experiments.count).to eq 1
410
+ expect(active_experiments.first[0]).to eq "def"
411
+ expect(active_experiments.first[1]).to eq alternative
412
+ end
413
+
414
+ it 'should show a finished test' do
415
+ alternative = ab_test('def', '4', '5', '6')
416
+ finished('def', {:reset => false})
417
+ expect(active_experiments.count).to eq 1
418
+ expect(active_experiments.first[0]).to eq "def"
419
+ expect(active_experiments.first[1]).to eq alternative
420
+ end
421
+
422
+ it 'should show multiple tests' do
423
+ Split.configure do |config|
424
+ config.allow_multiple_experiments = true
425
+ end
426
+ alternative = ab_test('def', '4', '5', '6')
427
+ another_alternative = ab_test('ghi', '7', '8', '9')
428
+ expect(active_experiments.count).to eq 2
429
+ expect(active_experiments['def']).to eq alternative
430
+ expect(active_experiments['ghi']).to eq another_alternative
431
+ end
432
+
433
+ it 'should not show tests with winners' do
434
+ Split.configure do |config|
435
+ config.allow_multiple_experiments = true
436
+ end
437
+ e = Split::ExperimentCatalog.find_or_create('def', '4', '5', '6')
438
+ e.winner = '4'
439
+ alternative = ab_test('def', '4', '5', '6')
440
+ another_alternative = ab_test('ghi', '7', '8', '9')
441
+ expect(active_experiments.count).to eq 1
442
+ expect(active_experiments.first[0]).to eq "ghi"
443
+ expect(active_experiments.first[1]).to eq another_alternative
444
+ end
445
+ end
446
+
412
447
  describe 'when user is a robot' do
413
448
  before(:each) do
414
449
  @request = OpenStruct.new(:user_agent => 'Googlebot/2.1 (+http://www.google.com/bot.html)')
@@ -847,7 +882,7 @@ describe Split::Helper do
847
882
  end
848
883
 
849
884
  it 'should handle multiple experiments correctly' do
850
- experiment2 = Split::Experiment.find_or_create('link_color2', 'blue', 'red')
885
+ experiment2 = Split::ExperimentCatalog.find_or_create('link_color2', 'blue', 'red')
851
886
  alternative_name = ab_test('link_color', 'blue', 'red')
852
887
  alternative_name2 = ab_test('link_color2', 'blue', 'red')
853
888
  finished('link_color2')
@@ -861,7 +896,7 @@ describe Split::Helper do
861
896
  before do
862
897
  @experiment = {'link_color' => ["purchase", "refund"]}
863
898
  @alternatives = ['blue', 'red']
864
- @experiment_name, @goals = normalize_experiment(@experiment)
899
+ @experiment_name, @goals = normalize_metric(@experiment)
865
900
  @goal1 = @goals[0]
866
901
  @goal2 = @goals[1]
867
902
  end
@@ -874,7 +909,7 @@ describe Split::Helper do
874
909
  describe "ab_test" do
875
910
  it "should allow experiment goals interface as a single hash" do
876
911
  ab_test(@experiment, *@alternatives)
877
- experiment = Split::Experiment.find('link_color')
912
+ experiment = Split::ExperimentCatalog.find('link_color')
878
913
  expect(experiment.goals).to eq(['purchase', "refund"])
879
914
  end
880
915
  end
data/spec/metric_spec.rb CHANGED
@@ -4,13 +4,13 @@ require 'split/metric'
4
4
  describe Split::Metric do
5
5
  describe 'possible experiments' do
6
6
  it "should load the experiment if there is one, but no metric" do
7
- experiment = Split::Experiment.find_or_create('color', 'red', 'blue')
7
+ experiment = Split::ExperimentCatalog.find_or_create('color', 'red', 'blue')
8
8
  expect(Split::Metric.possible_experiments('color')).to eq([experiment])
9
9
  end
10
10
 
11
11
  it "should load the experiments in a metric" do
12
- experiment1 = Split::Experiment.find_or_create('color', 'red', 'blue')
13
- experiment2 = Split::Experiment.find_or_create('size', 'big', 'small')
12
+ experiment1 = Split::ExperimentCatalog.find_or_create('color', 'red', 'blue')
13
+ experiment2 = Split::ExperimentCatalog.find_or_create('size', 'big', 'small')
14
14
 
15
15
  metric = Split::Metric.new(:name => 'purchase', :experiments => [experiment1, experiment2])
16
16
  metric.save
@@ -18,8 +18,8 @@ describe Split::Metric do
18
18
  end
19
19
 
20
20
  it "should load both the metric experiments and an experiment with the same name" do
21
- experiment1 = Split::Experiment.find_or_create('purchase', 'red', 'blue')
22
- experiment2 = Split::Experiment.find_or_create('size', 'big', 'small')
21
+ experiment1 = Split::ExperimentCatalog.find_or_create('purchase', 'red', 'blue')
22
+ experiment2 = Split::ExperimentCatalog.find_or_create('size', 'big', 'small')
23
23
 
24
24
  metric = Split::Metric.new(:name => 'purchase', :experiments => [experiment2])
25
25
  metric.save
@@ -16,6 +16,15 @@ describe Split::Persistence::RedisAdapter do
16
16
  end
17
17
  end
18
18
 
19
+ context 'config with key' do
20
+ before { Split::Persistence::RedisAdapter.reset_config! }
21
+ subject { Split::Persistence::RedisAdapter.new(context, 'manual') }
22
+
23
+ it 'should be "persistence:manual"' do
24
+ expect(subject.redis_key).to eq('persistence:manual')
25
+ end
26
+ end
27
+
19
28
  context 'config with lookup_by = proc { "block" }' do
20
29
  before { Split::Persistence::RedisAdapter.with_config(:lookup_by => proc{'block'}) }
21
30
 
data/spec/spec_helper.rb CHANGED
@@ -36,4 +36,4 @@ def request(ua = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) Apple
36
36
  r.user_agent = ua
37
37
  r.ip = '192.168.1.1'
38
38
  @request ||= r
39
- end
39
+ end
data/spec/trial_spec.rb CHANGED
@@ -2,61 +2,158 @@ require 'spec_helper'
2
2
  require 'split/trial'
3
3
 
4
4
  describe Split::Trial do
5
+ let(:user) { Split::Persistence.adapter.new(double(session: {})) }
6
+ let(:experiment) do
7
+ Split::Experiment.new('basket_text', :alternatives => ['basket', 'cart']).save
8
+ end
9
+
5
10
  it "should be initializeable" do
6
11
  experiment = double('experiment')
7
12
  alternative = double('alternative', :kind_of? => Split::Alternative)
8
13
  trial = Split::Trial.new(:experiment => experiment, :alternative => alternative)
9
14
  expect(trial.experiment).to eq(experiment)
10
15
  expect(trial.alternative).to eq(alternative)
11
- expect(trial.goals).to eq([])
12
16
  end
13
17
 
14
18
  describe "alternative" do
15
19
  it "should use the alternative if specified" do
16
20
  alternative = double('alternative', :kind_of? => Split::Alternative)
17
- trial = Split::Trial.new(:experiment => experiment = double('experiment'), :alternative => alternative)
21
+ trial = Split::Trial.new(:experiment => experiment = double('experiment'),
22
+ :alternative => alternative, :user => user)
18
23
  expect(trial).not_to receive(:choose)
19
24
  expect(trial.alternative).to eq(alternative)
20
25
  end
21
26
 
22
- it "should populate alternative with a full alternative object after calling choose" do
27
+ it "should load the alternative when the alternative name is set" do
23
28
  experiment = Split::Experiment.new('basket_text', :alternatives => ['basket', 'cart'])
24
29
  experiment.save
25
- trial = Split::Trial.new(:experiment => experiment)
26
- trial.choose
27
- expect(trial.alternative.class).to eq(Split::Alternative)
28
- expect(['basket', 'cart']).to include(trial.alternative.name)
29
- end
30
30
 
31
- it "should populate an alternative when only one option is offerred" do
32
- experiment = Split::Experiment.new('basket_text', :alternatives => ['basket'])
33
- experiment.save
34
- trial = Split::Trial.new(:experiment => experiment)
35
- trial.choose
36
- expect(trial.alternative.class).to eq(Split::Alternative)
31
+ trial = Split::Trial.new(:experiment => experiment, :alternative => 'basket')
37
32
  expect(trial.alternative.name).to eq('basket')
38
33
  end
34
+ end
39
35
 
36
+ describe "#choose!" do
37
+ def expect_alternative(trial, alternative_name)
38
+ 3.times do
39
+ trial.choose!
40
+ expect(trial.alternative.name).to eq(alternative_name)
41
+ end
42
+ end
40
43
 
41
- it "should choose from the available alternatives" do
42
- trial = Split::Trial.new(:experiment => experiment = double('experiment'))
43
- alternative = double('alternative', :kind_of? => Split::Alternative)
44
- expect(experiment).to receive(:next_alternative).and_return(alternative)
45
- expect(alternative).to receive(:increment_participation)
46
- expect(experiment).to receive(:winner).at_most(1).times.and_return(nil)
47
- trial.choose!
44
+ context "when override is present" do
45
+ it "picks the override" do
46
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :override => 'cart')
47
+ expect(experiment).to_not receive(:next_alternative)
48
48
 
49
- expect(trial.alternative).to eq(alternative)
49
+ expect_alternative(trial, 'cart')
50
+ end
50
51
  end
51
- end
52
52
 
53
- describe "alternative_name" do
54
- it "should load the alternative when the alternative name is set" do
55
- experiment = Split::Experiment.new('basket_text', :alternatives => ['basket', "cart"])
56
- experiment.save
53
+ context "when disabled option is true" do
54
+ it "picks the control" do
55
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :disabled => true)
56
+ expect(experiment).to_not receive(:next_alternative)
57
57
 
58
- trial = Split::Trial.new(:experiment => experiment, :alternative => 'basket')
59
- expect(trial.alternative.name).to eq('basket')
58
+ expect_alternative(trial, 'basket')
59
+ end
60
+ end
61
+
62
+ context "when Split is globally disabled" do
63
+ it "picks the control" do
64
+ Split.configuration.enabled = false
65
+ trial = Split::Trial.new(:user => user, :experiment => experiment)
66
+ expect(experiment).to_not receive(:next_alternative)
67
+
68
+ expect_alternative(trial, 'basket')
69
+ Split.configuration.enabled = true
70
+ end
71
+ end
72
+
73
+ context "when experiment has winner" do
74
+ it "picks the winner" do
75
+ trial = Split::Trial.new(:user => user, :experiment => experiment)
76
+ experiment.winner = 'cart'
77
+ expect(experiment).to_not receive(:next_alternative)
78
+
79
+ expect_alternative(trial, 'cart')
80
+ end
81
+ end
82
+
83
+ context "when exclude is true" do
84
+ it "picks the control" do
85
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :exclude => true)
86
+ expect(experiment).to_not receive(:next_alternative)
87
+
88
+ expect_alternative(trial, 'basket')
89
+ end
90
+ end
91
+
92
+ context "when user is already participating" do
93
+ it "picks the same alternative" do
94
+ user[experiment.key] = 'basket'
95
+ trial = Split::Trial.new(:user => user, :experiment => experiment)
96
+ expect(experiment).to_not receive(:next_alternative)
97
+
98
+ expect_alternative(trial, 'basket')
99
+ end
100
+ end
101
+
102
+ context "when user is a new participant" do
103
+ it "picks a new alternative" do
104
+ trial = Split::Trial.new(:user => user, :experiment => experiment)
105
+ expect(experiment).to receive(:next_alternative).and_call_original
106
+
107
+ trial.choose!
108
+ expect(trial.alternative.name).to_not be_empty
109
+ end
110
+ end
111
+
112
+ describe "alternative recording" do
113
+ before(:each) { Split.configuration.store_override = false }
114
+
115
+ context "when override is present" do
116
+ it "stores when store_override is true" do
117
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :override => 'basket')
118
+
119
+ Split.configuration.store_override = true
120
+ expect(user).to receive("[]=")
121
+ trial.choose!
122
+ end
123
+
124
+ it "does not store when store_override is false" do
125
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :override => 'basket')
126
+
127
+ expect(user).to_not receive("[]=")
128
+ trial.choose!
129
+ end
130
+ end
131
+
132
+ context "when disabled is present" do
133
+ it "stores when store_override is true" do
134
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :disabled => true)
135
+
136
+ Split.configuration.store_override = true
137
+ expect(user).to receive("[]=")
138
+ trial.choose!
139
+ end
140
+
141
+ it "does not store when store_override is false" do
142
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :disabled => true)
143
+
144
+ expect(user).to_not receive("[]=")
145
+ trial.choose!
146
+ end
147
+ end
148
+
149
+ context "when exclude is present" do
150
+ it "does not store" do
151
+ trial = Split::Trial.new(:user => user, :experiment => experiment, :exclude => true)
152
+
153
+ expect(user).to_not receive("[]=")
154
+ trial.choose!
155
+ end
156
+ end
60
157
  end
61
158
  end
62
159
  end
data/split.gemspec CHANGED
@@ -25,9 +25,9 @@ Gem::Specification.new do |s|
25
25
  s.add_dependency 'sinatra', '>= 1.2.6'
26
26
  s.add_dependency 'simple-random'
27
27
 
28
- s.add_development_dependency 'rake'
29
28
  s.add_development_dependency 'bundler', '~> 1.6'
30
- s.add_development_dependency 'rspec', '~> 3.0'
31
- s.add_development_dependency 'rack-test'
32
29
  s.add_development_dependency 'coveralls'
30
+ s.add_development_dependency 'rack-test'
31
+ s.add_development_dependency 'rake'
32
+ s.add_development_dependency 'rspec', '~> 3.0'
33
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: split
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-12 00:00:00.000000000 Z
11
+ date: 2015-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: bundler
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -95,19 +81,19 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '1.6'
97
83
  - !ruby/object:Gem::Dependency
98
- name: rspec
84
+ name: coveralls
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - "~>"
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
- version: '3.0'
89
+ version: '0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - "~>"
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
- version: '3.0'
96
+ version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rack-test
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -123,7 +109,7 @@ dependencies:
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
- name: coveralls
112
+ name: rake
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - ">="
@@ -136,6 +122,20 @@ dependencies:
136
122
  - - ">="
137
123
  - !ruby/object:Gem::Version
138
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.0'
139
139
  description:
140
140
  email:
141
141
  - andrewnez@gmail.com
@@ -146,19 +146,15 @@ files:
146
146
  - ".gitignore"
147
147
  - ".travis.yml"
148
148
  - Appraisals
149
- - CHANGELOG.mdown
149
+ - CHANGELOG.md
150
150
  - CONTRIBUTING.md
151
151
  - Gemfile
152
152
  - LICENSE
153
- - README.mdown
153
+ - README.md
154
154
  - Rakefile
155
- - changes.rtf
156
- - gemfiles/3.0.gemfile
157
- - gemfiles/3.0.gemfile.lock
158
- - gemfiles/3.1.gemfile
159
- - gemfiles/3.1.gemfile.lock
160
155
  - gemfiles/3.2.gemfile
161
156
  - gemfiles/4.0.gemfile
157
+ - gemfiles/4.1.gemfile
162
158
  - lib/split.rb
163
159
  - lib/split/algorithms.rb
164
160
  - lib/split/algorithms/weighted_sample.rb
@@ -200,6 +196,7 @@ files:
200
196
  - spec/dashboard_helpers_spec.rb
201
197
  - spec/dashboard_spec.rb
202
198
  - spec/encapsulated_helper_spec.rb
199
+ - spec/experiment_catalog_spec.rb
203
200
  - spec/experiment_spec.rb
204
201
  - spec/helper_spec.rb
205
202
  - spec/metric_spec.rb
@@ -231,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
231
228
  version: '0'
232
229
  requirements: []
233
230
  rubyforge_project: split
234
- rubygems_version: 2.2.2
231
+ rubygems_version: 2.4.5
235
232
  signing_key:
236
233
  specification_version: 4
237
234
  summary: Rack based split testing framework
@@ -243,6 +240,7 @@ test_files:
243
240
  - spec/dashboard_helpers_spec.rb
244
241
  - spec/dashboard_spec.rb
245
242
  - spec/encapsulated_helper_spec.rb
243
+ - spec/experiment_catalog_spec.rb
246
244
  - spec/experiment_spec.rb
247
245
  - spec/helper_spec.rb
248
246
  - spec/metric_spec.rb