split 3.4.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.github/dependabot.yml +7 -0
- data/.github/workflows/ci.yml +71 -0
- data/.rubocop.yml +177 -1
- data/.rubocop_todo.yml +40 -493
- data/CHANGELOG.md +41 -0
- data/Gemfile +1 -0
- data/README.md +26 -6
- data/Rakefile +1 -0
- data/gemfiles/{4.2.gemfile → 6.1.gemfile} +1 -1
- data/gemfiles/7.0.gemfile +9 -0
- data/lib/split/algorithms/block_randomization.rb +1 -0
- data/lib/split/algorithms/weighted_sample.rb +2 -1
- data/lib/split/algorithms/whiplash.rb +3 -2
- data/lib/split/alternative.rb +1 -0
- data/lib/split/cache.rb +28 -0
- data/lib/split/combined_experiments_helper.rb +1 -0
- data/lib/split/configuration.rb +8 -12
- data/lib/split/dashboard/helpers.rb +1 -0
- data/lib/split/dashboard/pagination_helpers.rb +1 -0
- data/lib/split/dashboard/paginator.rb +1 -0
- data/lib/split/dashboard/public/dashboard.js +10 -0
- data/lib/split/dashboard/public/style.css +5 -0
- data/lib/split/dashboard/views/_controls.erb +13 -0
- data/lib/split/dashboard.rb +17 -2
- data/lib/split/encapsulated_helper.rb +3 -2
- data/lib/split/engine.rb +5 -4
- data/lib/split/exceptions.rb +1 -0
- data/lib/split/experiment.rb +82 -60
- data/lib/split/experiment_catalog.rb +1 -3
- data/lib/split/extensions/string.rb +1 -0
- data/lib/split/goals_collection.rb +1 -0
- data/lib/split/helper.rb +26 -7
- data/lib/split/metric.rb +2 -1
- data/lib/split/persistence/cookie_adapter.rb +6 -1
- data/lib/split/persistence/redis_adapter.rb +5 -0
- data/lib/split/persistence/session_adapter.rb +1 -0
- data/lib/split/persistence.rb +4 -2
- data/lib/split/redis_interface.rb +8 -28
- data/lib/split/trial.rb +20 -10
- data/lib/split/user.rb +15 -3
- data/lib/split/version.rb +2 -4
- data/lib/split/zscore.rb +1 -0
- data/lib/split.rb +9 -3
- data/spec/alternative_spec.rb +1 -1
- data/spec/cache_spec.rb +88 -0
- data/spec/configuration_spec.rb +17 -15
- data/spec/dashboard_spec.rb +45 -5
- data/spec/encapsulated_helper_spec.rb +1 -1
- data/spec/experiment_spec.rb +78 -13
- data/spec/goals_collection_spec.rb +1 -1
- data/spec/helper_spec.rb +68 -32
- data/spec/persistence/cookie_adapter_spec.rb +1 -1
- data/spec/persistence/redis_adapter_spec.rb +9 -0
- data/spec/redis_interface_spec.rb +0 -69
- data/spec/spec_helper.rb +5 -6
- data/spec/trial_spec.rb +45 -19
- data/spec/user_spec.rb +34 -3
- data/split.gemspec +7 -7
- metadata +27 -35
- data/.travis.yml +0 -60
@@ -29,75 +29,6 @@ describe Split::RedisInterface do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
describe '#add_to_list' do
|
33
|
-
subject(:add_to_list) do
|
34
|
-
interface.add_to_list(list_name, 'y')
|
35
|
-
interface.add_to_list(list_name, 'z')
|
36
|
-
end
|
37
|
-
|
38
|
-
specify do
|
39
|
-
add_to_list
|
40
|
-
expect(Split.redis.lindex(list_name, 0)).to eq 'y'
|
41
|
-
expect(Split.redis.lindex(list_name, 1)).to eq 'z'
|
42
|
-
expect(Split.redis.llen(list_name)).to eq 2
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe '#set_list_index' do
|
47
|
-
subject(:set_list_index) do
|
48
|
-
interface.add_to_list(list_name, 'y')
|
49
|
-
interface.add_to_list(list_name, 'z')
|
50
|
-
interface.set_list_index(list_name, 0, 'a')
|
51
|
-
end
|
52
|
-
|
53
|
-
specify do
|
54
|
-
set_list_index
|
55
|
-
expect(Split.redis.lindex(list_name, 0)).to eq 'a'
|
56
|
-
expect(Split.redis.lindex(list_name, 1)).to eq 'z'
|
57
|
-
expect(Split.redis.llen(list_name)).to eq 2
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '#list_length' do
|
62
|
-
subject(:list_length) do
|
63
|
-
interface.add_to_list(list_name, 'y')
|
64
|
-
interface.add_to_list(list_name, 'z')
|
65
|
-
interface.list_length(list_name)
|
66
|
-
end
|
67
|
-
|
68
|
-
specify do
|
69
|
-
expect(list_length).to eq 2
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe '#remove_last_item_from_list' do
|
74
|
-
subject(:remove_last_item_from_list) do
|
75
|
-
interface.add_to_list(list_name, 'y')
|
76
|
-
interface.add_to_list(list_name, 'z')
|
77
|
-
interface.remove_last_item_from_list(list_name)
|
78
|
-
end
|
79
|
-
|
80
|
-
specify do
|
81
|
-
remove_last_item_from_list
|
82
|
-
expect(Split.redis.lindex(list_name, 0)).to eq 'y'
|
83
|
-
expect(Split.redis.llen(list_name)).to eq 1
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe '#make_list_length' do
|
88
|
-
subject(:make_list_length) do
|
89
|
-
interface.add_to_list(list_name, 'y')
|
90
|
-
interface.add_to_list(list_name, 'z')
|
91
|
-
interface.make_list_length(list_name, 1)
|
92
|
-
end
|
93
|
-
|
94
|
-
specify do
|
95
|
-
make_list_length
|
96
|
-
expect(Split.redis.lindex(list_name, 0)).to eq 'y'
|
97
|
-
expect(Split.redis.llen(list_name)).to eq 1
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
32
|
describe '#add_to_set' do
|
102
33
|
subject(:add_to_set) do
|
103
34
|
interface.add_to_set(set_name, 'something')
|
data/spec/spec_helper.rb
CHANGED
@@ -13,17 +13,16 @@ require 'yaml'
|
|
13
13
|
|
14
14
|
Dir['./spec/support/*.rb'].each { |f| require f }
|
15
15
|
|
16
|
-
require "fakeredis"
|
17
|
-
|
18
|
-
G_fakeredis = Redis.new
|
19
|
-
|
20
16
|
module GlobalSharedContext
|
21
17
|
extend RSpec::SharedContext
|
22
18
|
let(:mock_user){ Split::User.new(double(session: {})) }
|
19
|
+
|
23
20
|
before(:each) do
|
24
21
|
Split.configuration = Split::Configuration.new
|
25
|
-
Split.redis =
|
26
|
-
Split.redis.
|
22
|
+
Split.redis = Redis.new
|
23
|
+
Split.redis.select(10)
|
24
|
+
Split.redis.flushdb
|
25
|
+
Split::Cache.clear
|
27
26
|
@ab_user = mock_user
|
28
27
|
params = nil
|
29
28
|
end
|
data/spec/trial_spec.rb
CHANGED
@@ -198,42 +198,68 @@ describe Split::Trial do
|
|
198
198
|
expect(trial.alternative.name).to_not be_empty
|
199
199
|
Split.configuration.on_trial_choose = nil
|
200
200
|
end
|
201
|
+
|
202
|
+
it "assigns user to an alternative" do
|
203
|
+
trial.choose! context
|
204
|
+
|
205
|
+
expect(alternatives).to include(user[experiment.name])
|
206
|
+
end
|
207
|
+
|
208
|
+
context "when cohorting is disabled" do
|
209
|
+
before(:each) { allow(experiment).to receive(:cohorting_disabled?).and_return(true) }
|
210
|
+
|
211
|
+
it "picks the control and does not run on_trial callbacks" do
|
212
|
+
Split.configuration.on_trial = :on_trial_callback
|
213
|
+
|
214
|
+
expect(experiment).to_not receive(:next_alternative)
|
215
|
+
expect(context).not_to receive(:on_trial_callback)
|
216
|
+
expect_alternative(trial, 'basket')
|
217
|
+
|
218
|
+
Split.configuration.enabled = true
|
219
|
+
Split.configuration.on_trial = nil
|
220
|
+
end
|
221
|
+
|
222
|
+
it "user is not assigned an alternative" do
|
223
|
+
trial.choose! context
|
224
|
+
|
225
|
+
expect(user[experiment]).to eq(nil)
|
226
|
+
end
|
227
|
+
end
|
201
228
|
end
|
202
229
|
end
|
203
230
|
|
204
231
|
describe "#complete!" do
|
205
|
-
let(:trial) { Split::Trial.new(:user => user, :experiment => experiment) }
|
206
232
|
context 'when there are no goals' do
|
233
|
+
let(:trial) { Split::Trial.new(:user => user, :experiment => experiment) }
|
207
234
|
it 'should complete the trial' do
|
208
235
|
trial.choose!
|
209
236
|
old_completed_count = trial.alternative.completed_count
|
210
237
|
trial.complete!
|
211
|
-
expect(trial.alternative.completed_count).to
|
238
|
+
expect(trial.alternative.completed_count).to eq(old_completed_count + 1)
|
212
239
|
end
|
213
240
|
end
|
214
241
|
|
215
|
-
context
|
216
|
-
let(:goals) { [
|
242
|
+
context "when there are many goals" do
|
243
|
+
let(:goals) { [ "goal1", "goal2" ] }
|
217
244
|
let(:trial) { Split::Trial.new(:user => user, :experiment => experiment, :goals => goals) }
|
218
|
-
shared_examples_for "goal completion" do
|
219
|
-
it 'should not complete the trial' do
|
220
|
-
trial.choose!
|
221
|
-
old_completed_count = trial.alternative.completed_count
|
222
|
-
trial.complete!(goal)
|
223
|
-
expect(trial.alternative.completed_count).to_not be(old_completed_count+1)
|
224
|
-
end
|
225
|
-
end
|
226
245
|
|
227
|
-
|
228
|
-
|
229
|
-
|
246
|
+
it "increments the completed count corresponding to the goals" do
|
247
|
+
trial.choose!
|
248
|
+
old_completed_counts = goals.map{ |goal| [goal, trial.alternative.completed_count(goal)] }.to_h
|
249
|
+
trial.complete!
|
250
|
+
goals.each { | goal | expect(trial.alternative.completed_count(goal)).to eq(old_completed_counts[goal] + 1) }
|
230
251
|
end
|
252
|
+
end
|
231
253
|
|
232
|
-
|
233
|
-
|
234
|
-
|
254
|
+
context "when there is 1 goal of type string" do
|
255
|
+
let(:goal) { "goal" }
|
256
|
+
let(:trial) { Split::Trial.new(:user => user, :experiment => experiment, :goals => goal) }
|
257
|
+
it "increments the completed count corresponding to the goal" do
|
258
|
+
trial.choose!
|
259
|
+
old_completed_count = trial.alternative.completed_count(goal)
|
260
|
+
trial.complete!
|
261
|
+
expect(trial.alternative.completed_count(goal)).to eq(old_completed_count + 1)
|
235
262
|
end
|
236
|
-
|
237
263
|
end
|
238
264
|
end
|
239
265
|
|
data/spec/user_spec.rb
CHANGED
@@ -17,11 +17,25 @@ describe Split::User do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
context '#cleanup_old_versions!' do
|
20
|
-
let(:
|
20
|
+
let(:experiment_version) { "#{experiment.name}:1" }
|
21
|
+
let(:second_experiment_version) { "#{experiment.name}_another:1" }
|
22
|
+
let(:third_experiment_version) { "variation_of_#{experiment.name}:1" }
|
23
|
+
let(:user_keys) do
|
24
|
+
{
|
25
|
+
experiment_version => 'blue',
|
26
|
+
second_experiment_version => 'red',
|
27
|
+
third_experiment_version => 'yellow'
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
before(:each) { @subject.cleanup_old_versions!(experiment) }
|
21
32
|
|
22
33
|
it 'removes key if old experiment is found' do
|
23
|
-
@subject.
|
24
|
-
|
34
|
+
expect(@subject.keys).not_to include(experiment_version)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'does not remove other keys' do
|
38
|
+
expect(@subject.keys).to include(second_experiment_version, third_experiment_version)
|
25
39
|
end
|
26
40
|
end
|
27
41
|
|
@@ -72,6 +86,23 @@ describe Split::User do
|
|
72
86
|
end
|
73
87
|
end
|
74
88
|
|
89
|
+
context 'allows user to be loaded from adapter' do
|
90
|
+
it 'loads user from adapter (RedisAdapter)' do
|
91
|
+
user = Split::Persistence::RedisAdapter.new(nil, 112233)
|
92
|
+
user['foo'] = 'bar'
|
93
|
+
|
94
|
+
ab_user = Split::User.find(112233, :redis)
|
95
|
+
|
96
|
+
expect(ab_user['foo']).to eql('bar')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'returns nil if adapter does not implement a finder method' do
|
100
|
+
ab_user = Split::User.find(112233, :dual_adapter)
|
101
|
+
expect(ab_user).to be_nil
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
75
106
|
context "instantiated with custom adapter" do
|
76
107
|
let(:custom_adapter) { double(:persistence_adapter) }
|
77
108
|
|
data/split.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
# frozen_string_literal: true
|
3
|
+
|
3
4
|
$:.push File.expand_path("../lib", __FILE__)
|
4
5
|
require "split/version"
|
5
6
|
|
@@ -22,23 +23,22 @@ Gem::Specification.new do |s|
|
|
22
23
|
"mailing_list_uri" => "https://groups.google.com/d/forum/split-ruby"
|
23
24
|
}
|
24
25
|
|
25
|
-
s.required_ruby_version = '>=
|
26
|
+
s.required_ruby_version = '>= 2.5.0'
|
26
27
|
s.required_rubygems_version = '>= 2.0.0'
|
27
28
|
|
28
29
|
s.files = `git ls-files`.split("\n")
|
29
30
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
30
31
|
s.require_paths = ["lib"]
|
31
32
|
|
32
|
-
s.add_dependency 'redis', '>= 2
|
33
|
+
s.add_dependency 'redis', '>= 4.2'
|
33
34
|
s.add_dependency 'sinatra', '>= 1.2.6'
|
34
|
-
s.add_dependency '
|
35
|
+
s.add_dependency 'rubystats', '>= 0.3.0'
|
35
36
|
|
36
37
|
s.add_development_dependency 'bundler', '>= 1.17'
|
37
38
|
s.add_development_dependency 'simplecov', '~> 0.15'
|
38
|
-
s.add_development_dependency 'rack-test', '~>
|
39
|
-
s.add_development_dependency 'rake', '~>
|
39
|
+
s.add_development_dependency 'rack-test', '~> 1.1'
|
40
|
+
s.add_development_dependency 'rake', '~> 13'
|
40
41
|
s.add_development_dependency 'rspec', '~> 3.7'
|
41
42
|
s.add_development_dependency 'pry', '~> 0.10'
|
42
|
-
s.add_development_dependency '
|
43
|
-
s.add_development_dependency 'rails', '>= 4.2'
|
43
|
+
s.add_development_dependency 'rails', '>= 5.0'
|
44
44
|
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:
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Nesbitt
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2
|
19
|
+
version: '4.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '2
|
26
|
+
version: '4.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sinatra
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.2.6
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rubystats
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.3.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.3.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,28 +86,28 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '1.1'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '1.1'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '13'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '13'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,35 +136,21 @@ dependencies:
|
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0.10'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: fakeredis
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0.7'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0.7'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: rails
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
156
142
|
requirements:
|
157
143
|
- - ">="
|
158
144
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
145
|
+
version: '5.0'
|
160
146
|
type: :development
|
161
147
|
prerelease: false
|
162
148
|
version_requirements: !ruby/object:Gem::Requirement
|
163
149
|
requirements:
|
164
150
|
- - ">="
|
165
151
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
167
|
-
description:
|
152
|
+
version: '5.0'
|
153
|
+
description:
|
168
154
|
email:
|
169
155
|
- andrewnez@gmail.com
|
170
156
|
executables: []
|
@@ -175,12 +161,14 @@ files:
|
|
175
161
|
- ".csslintrc"
|
176
162
|
- ".eslintignore"
|
177
163
|
- ".eslintrc"
|
164
|
+
- ".github/FUNDING.yml"
|
178
165
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
166
|
+
- ".github/dependabot.yml"
|
167
|
+
- ".github/workflows/ci.yml"
|
179
168
|
- ".gitignore"
|
180
169
|
- ".rspec"
|
181
170
|
- ".rubocop.yml"
|
182
171
|
- ".rubocop_todo.yml"
|
183
|
-
- ".travis.yml"
|
184
172
|
- Appraisals
|
185
173
|
- CHANGELOG.md
|
186
174
|
- CODE_OF_CONDUCT.md
|
@@ -189,16 +177,18 @@ files:
|
|
189
177
|
- LICENSE
|
190
178
|
- README.md
|
191
179
|
- Rakefile
|
192
|
-
- gemfiles/4.2.gemfile
|
193
180
|
- gemfiles/5.0.gemfile
|
194
181
|
- gemfiles/5.1.gemfile
|
195
182
|
- gemfiles/5.2.gemfile
|
196
183
|
- gemfiles/6.0.gemfile
|
184
|
+
- gemfiles/6.1.gemfile
|
185
|
+
- gemfiles/7.0.gemfile
|
197
186
|
- lib/split.rb
|
198
187
|
- lib/split/algorithms/block_randomization.rb
|
199
188
|
- lib/split/algorithms/weighted_sample.rb
|
200
189
|
- lib/split/algorithms/whiplash.rb
|
201
190
|
- lib/split/alternative.rb
|
191
|
+
- lib/split/cache.rb
|
202
192
|
- lib/split/combined_experiments_helper.rb
|
203
193
|
- lib/split/configuration.rb
|
204
194
|
- lib/split/dashboard.rb
|
@@ -238,6 +228,7 @@ files:
|
|
238
228
|
- spec/algorithms/weighted_sample_spec.rb
|
239
229
|
- spec/algorithms/whiplash_spec.rb
|
240
230
|
- spec/alternative_spec.rb
|
231
|
+
- spec/cache_spec.rb
|
241
232
|
- spec/combined_experiments_helper_spec.rb
|
242
233
|
- spec/configuration_spec.rb
|
243
234
|
- spec/dashboard/pagination_helpers_spec.rb
|
@@ -272,7 +263,7 @@ metadata:
|
|
272
263
|
bug_tracker_uri: https://github.com/splitrb/split/issues
|
273
264
|
wiki_uri: https://github.com/splitrb/split/wiki
|
274
265
|
mailing_list_uri: https://groups.google.com/d/forum/split-ruby
|
275
|
-
post_install_message:
|
266
|
+
post_install_message:
|
276
267
|
rdoc_options: []
|
277
268
|
require_paths:
|
278
269
|
- lib
|
@@ -280,15 +271,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
280
271
|
requirements:
|
281
272
|
- - ">="
|
282
273
|
- !ruby/object:Gem::Version
|
283
|
-
version:
|
274
|
+
version: 2.5.0
|
284
275
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
276
|
requirements:
|
286
277
|
- - ">="
|
287
278
|
- !ruby/object:Gem::Version
|
288
279
|
version: 2.0.0
|
289
280
|
requirements: []
|
290
|
-
rubygems_version: 3.
|
291
|
-
signing_key:
|
281
|
+
rubygems_version: 3.2.27
|
282
|
+
signing_key:
|
292
283
|
specification_version: 4
|
293
284
|
summary: Rack based split testing framework
|
294
285
|
test_files:
|
@@ -296,6 +287,7 @@ test_files:
|
|
296
287
|
- spec/algorithms/weighted_sample_spec.rb
|
297
288
|
- spec/algorithms/whiplash_spec.rb
|
298
289
|
- spec/alternative_spec.rb
|
290
|
+
- spec/cache_spec.rb
|
299
291
|
- spec/combined_experiments_helper_spec.rb
|
300
292
|
- spec/configuration_spec.rb
|
301
293
|
- spec/dashboard/pagination_helpers_spec.rb
|
data/.travis.yml
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 1.9.3
|
4
|
-
- 2.0
|
5
|
-
- 2.1.10
|
6
|
-
- 2.2.2
|
7
|
-
- 2.3.8
|
8
|
-
- 2.4.9
|
9
|
-
- 2.5.7
|
10
|
-
- 2.6.5
|
11
|
-
|
12
|
-
gemfile:
|
13
|
-
- gemfiles/4.2.gemfile
|
14
|
-
- gemfiles/5.0.gemfile
|
15
|
-
- gemfiles/5.1.gemfile
|
16
|
-
- gemfiles/5.2.gemfile
|
17
|
-
- gemfiles/6.0.gemfile
|
18
|
-
|
19
|
-
matrix:
|
20
|
-
exclude:
|
21
|
-
- rvm: 1.9.3
|
22
|
-
gemfile: gemfiles/5.0.gemfile
|
23
|
-
- rvm: 1.9.3
|
24
|
-
gemfile: gemfiles/5.1.gemfile
|
25
|
-
- rvm: 1.9.3
|
26
|
-
gemfile: gemfiles/5.2.gemfile
|
27
|
-
- rvm: 1.9.3
|
28
|
-
gemfile: gemfiles/6.0.gemfile
|
29
|
-
- rvm: 2.0
|
30
|
-
gemfile: gemfiles/5.0.gemfile
|
31
|
-
- rvm: 2.0
|
32
|
-
gemfile: gemfiles/5.1.gemfile
|
33
|
-
- rvm: 2.0
|
34
|
-
gemfile: gemfiles/5.2.gemfile
|
35
|
-
- rvm: 2.0
|
36
|
-
gemfile: gemfiles/6.0.gemfile
|
37
|
-
- rvm: 2.1.10
|
38
|
-
gemfile: gemfiles/5.0.gemfile
|
39
|
-
- rvm: 2.1.10
|
40
|
-
gemfile: gemfiles/5.1.gemfile
|
41
|
-
- rvm: 2.1.10
|
42
|
-
gemfile: gemfiles/5.2.gemfile
|
43
|
-
- rvm: 2.1.10
|
44
|
-
gemfile: gemfiles/6.0.gemfile
|
45
|
-
- rvm: 2.2.2
|
46
|
-
gemfile: gemfiles/6.0.gemfile
|
47
|
-
- rvm: 2.3.8
|
48
|
-
gemfile: gemfiles/6.0.gemfile
|
49
|
-
- rvm: 2.4.9
|
50
|
-
gemfile: gemfiles/6.0.gemfile
|
51
|
-
|
52
|
-
before_install:
|
53
|
-
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
54
|
-
- gem install bundler --version=1.17.3
|
55
|
-
|
56
|
-
script:
|
57
|
-
- RAILS_ENV=test bundle exec rake spec && bundle exec codeclimate-test-reporter
|
58
|
-
|
59
|
-
cache: bundler
|
60
|
-
sudo: false
|