split 3.3.2 → 4.0.5

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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc +1 -1
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +24 -0
  5. data/.github/dependabot.yml +7 -0
  6. data/.github/workflows/ci.yml +63 -0
  7. data/.rspec +1 -0
  8. data/.rubocop.yml +67 -1043
  9. data/CHANGELOG.md +121 -0
  10. data/CODE_OF_CONDUCT.md +3 -3
  11. data/CONTRIBUTING.md +1 -1
  12. data/Gemfile +6 -1
  13. data/README.md +51 -21
  14. data/Rakefile +6 -5
  15. data/lib/split/algorithms/block_randomization.rb +7 -6
  16. data/lib/split/algorithms/weighted_sample.rb +2 -1
  17. data/lib/split/algorithms/whiplash.rb +17 -18
  18. data/lib/split/algorithms.rb +14 -0
  19. data/lib/split/alternative.rb +25 -25
  20. data/lib/split/cache.rb +27 -0
  21. data/lib/split/combined_experiments_helper.rb +5 -4
  22. data/lib/split/configuration.rb +94 -96
  23. data/lib/split/dashboard/helpers.rb +7 -7
  24. data/lib/split/dashboard/pagination_helpers.rb +56 -57
  25. data/lib/split/dashboard/paginator.rb +1 -0
  26. data/lib/split/dashboard/public/dashboard.js +10 -0
  27. data/lib/split/dashboard/public/style.css +10 -2
  28. data/lib/split/dashboard/views/_controls.erb +13 -0
  29. data/lib/split/dashboard/views/_experiment.erb +2 -1
  30. data/lib/split/dashboard/views/index.erb +19 -4
  31. data/lib/split/dashboard/views/layout.erb +1 -1
  32. data/lib/split/dashboard.rb +46 -21
  33. data/lib/split/encapsulated_helper.rb +15 -8
  34. data/lib/split/engine.rb +7 -4
  35. data/lib/split/exceptions.rb +1 -0
  36. data/lib/split/experiment.rb +160 -122
  37. data/lib/split/experiment_catalog.rb +7 -8
  38. data/lib/split/extensions/string.rb +2 -1
  39. data/lib/split/goals_collection.rb +10 -10
  40. data/lib/split/helper.rb +52 -24
  41. data/lib/split/metric.rb +6 -6
  42. data/lib/split/persistence/cookie_adapter.rb +47 -44
  43. data/lib/split/persistence/dual_adapter.rb +53 -12
  44. data/lib/split/persistence/redis_adapter.rb +8 -4
  45. data/lib/split/persistence/session_adapter.rb +1 -2
  46. data/lib/split/persistence.rb +8 -6
  47. data/lib/split/redis_interface.rb +16 -29
  48. data/lib/split/trial.rb +44 -35
  49. data/lib/split/user.rb +30 -15
  50. data/lib/split/version.rb +2 -4
  51. data/lib/split/zscore.rb +2 -3
  52. data/lib/split.rb +35 -28
  53. data/spec/algorithms/block_randomization_spec.rb +6 -5
  54. data/spec/algorithms/weighted_sample_spec.rb +6 -5
  55. data/spec/algorithms/whiplash_spec.rb +4 -5
  56. data/spec/alternative_spec.rb +35 -36
  57. data/spec/cache_spec.rb +84 -0
  58. data/spec/combined_experiments_helper_spec.rb +18 -17
  59. data/spec/configuration_spec.rb +41 -45
  60. data/spec/dashboard/pagination_helpers_spec.rb +71 -67
  61. data/spec/dashboard/paginator_spec.rb +10 -9
  62. data/spec/dashboard_helpers_spec.rb +19 -18
  63. data/spec/dashboard_spec.rb +153 -48
  64. data/spec/encapsulated_helper_spec.rb +47 -23
  65. data/spec/experiment_catalog_spec.rb +14 -13
  66. data/spec/experiment_spec.rb +224 -111
  67. data/spec/goals_collection_spec.rb +18 -16
  68. data/spec/helper_spec.rb +531 -424
  69. data/spec/metric_spec.rb +14 -14
  70. data/spec/persistence/cookie_adapter_spec.rb +26 -11
  71. data/spec/persistence/dual_adapter_spec.rb +158 -66
  72. data/spec/persistence/redis_adapter_spec.rb +35 -27
  73. data/spec/persistence/session_adapter_spec.rb +2 -3
  74. data/spec/persistence_spec.rb +1 -2
  75. data/spec/redis_interface_spec.rb +25 -82
  76. data/spec/spec_helper.rb +38 -24
  77. data/spec/split_spec.rb +11 -11
  78. data/spec/support/cookies_mock.rb +1 -2
  79. data/spec/trial_spec.rb +102 -75
  80. data/spec/user_spec.rb +69 -27
  81. data/split.gemspec +26 -23
  82. metadata +68 -42
  83. data/.travis.yml +0 -66
  84. data/Appraisals +0 -19
  85. data/gemfiles/4.2.gemfile +0 -9
  86. data/gemfiles/5.0.gemfile +0 -9
  87. data/gemfiles/5.1.gemfile +0 -9
  88. data/gemfiles/5.2.gemfile +0 -9
  89. data/gemfiles/6.0.gemfile +0 -9
data/spec/user_spec.rb CHANGED
@@ -1,57 +1,73 @@
1
- require 'spec_helper'
2
- require 'split/experiment_catalog'
3
- require 'split/experiment'
4
- require 'split/user'
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+ require "split/experiment_catalog"
5
+ require "split/experiment"
6
+ require "split/user"
5
7
 
6
8
  describe Split::User do
7
- let(:user_keys) { { 'link_color' => 'blue' } }
8
- let(:context) { double(:session => { split: user_keys }) }
9
- let(:experiment) { Split::Experiment.new('link_color') }
9
+ let(:user_keys) { { "link_color" => "blue" } }
10
+ let(:context) { double(session: { split: user_keys }) }
11
+ let(:experiment) { Split::Experiment.new("link_color") }
10
12
 
11
13
  before(:each) do
12
14
  @subject = described_class.new(context)
13
15
  end
14
16
 
15
- it 'delegates methods correctly' do
16
- expect(@subject['link_color']).to eq(@subject.user['link_color'])
17
+ it "delegates methods correctly" do
18
+ expect(@subject["link_color"]).to eq(@subject.user["link_color"])
17
19
  end
18
20
 
19
- context '#cleanup_old_versions!' do
20
- let(:user_keys) { { 'link_color:1' => 'blue' } }
21
+ context "#cleanup_old_versions!" do
22
+ let(:experiment_version) { "#{experiment.name}:1" }
23
+ let(:second_experiment_version) { "#{experiment.name}_another:1" }
24
+ let(:third_experiment_version) { "variation_of_#{experiment.name}:1" }
25
+ let(:user_keys) do
26
+ {
27
+ experiment_version => "blue",
28
+ second_experiment_version => "red",
29
+ third_experiment_version => "yellow"
30
+ }
31
+ end
21
32
 
22
- it 'removes key if old experiment is found' do
23
- @subject.cleanup_old_versions!(experiment)
24
- expect(@subject.keys).to be_empty
33
+ before(:each) { @subject.cleanup_old_versions!(experiment) }
34
+
35
+ it "removes key if old experiment is found" do
36
+ expect(@subject.keys).not_to include(experiment_version)
25
37
  end
26
- end
27
38
 
28
- context '#cleanup_old_experiments!' do
29
- it 'removes key if experiment is not found' do
39
+ it "does not remove other keys" do
40
+ expect(@subject.keys).to include(second_experiment_version, third_experiment_version)
41
+ end
42
+ end
43
+
44
+ context "#cleanup_old_experiments!" do
45
+ it "removes key if experiment is not found" do
30
46
  @subject.cleanup_old_experiments!
31
47
  expect(@subject.keys).to be_empty
32
48
  end
33
49
 
34
- it 'removes key if experiment has a winner' do
35
- allow(Split::ExperimentCatalog).to receive(:find).with('link_color').and_return(experiment)
50
+ it "removes key if experiment has a winner" do
51
+ allow(Split::ExperimentCatalog).to receive(:find).with("link_color").and_return(experiment)
36
52
  allow(experiment).to receive(:start_time).and_return(Date.today)
37
53
  allow(experiment).to receive(:has_winner?).and_return(true)
38
54
  @subject.cleanup_old_experiments!
39
55
  expect(@subject.keys).to be_empty
40
56
  end
41
57
 
42
- it 'removes key if experiment has not started yet' do
43
- allow(Split::ExperimentCatalog).to receive(:find).with('link_color').and_return(experiment)
58
+ it "removes key if experiment has not started yet" do
59
+ allow(Split::ExperimentCatalog).to receive(:find).with("link_color").and_return(experiment)
44
60
  allow(experiment).to receive(:has_winner?).and_return(false)
45
61
  @subject.cleanup_old_experiments!
46
62
  expect(@subject.keys).to be_empty
47
63
  end
48
64
 
49
- context 'with finished key' do
50
- let(:user_keys) { { 'link_color' => 'blue', 'link_color:finished' => true } }
65
+ context "with finished key" do
66
+ let(:user_keys) { { "link_color" => "blue", "link_color:finished" => true } }
51
67
 
52
- it 'does not remove finished key for experiment without a winner' do
53
- allow(Split::ExperimentCatalog).to receive(:find).with('link_color').and_return(experiment)
54
- allow(Split::ExperimentCatalog).to receive(:find).with('link_color:finished').and_return(nil)
68
+ it "does not remove finished key for experiment without a winner" do
69
+ allow(Split::ExperimentCatalog).to receive(:find).with("link_color").and_return(experiment)
70
+ allow(Split::ExperimentCatalog).to receive(:find).with("link_color:finished").and_return(nil)
55
71
  allow(experiment).to receive(:start_time).and_return(Date.today)
56
72
  allow(experiment).to receive(:has_winner?).and_return(false)
57
73
  @subject.cleanup_old_experiments!
@@ -59,6 +75,33 @@ describe Split::User do
59
75
  expect(@subject.keys).to include("link_color:finished")
60
76
  end
61
77
  end
78
+
79
+ context "when already cleaned up" do
80
+ before do
81
+ @subject.cleanup_old_experiments!
82
+ end
83
+
84
+ it "does not clean up again" do
85
+ expect(@subject).to_not receive(:keys_without_finished)
86
+ @subject.cleanup_old_experiments!
87
+ end
88
+ end
89
+ end
90
+
91
+ context "allows user to be loaded from adapter" do
92
+ it "loads user from adapter (RedisAdapter)" do
93
+ user = Split::Persistence::RedisAdapter.new(nil, 112233)
94
+ user["foo"] = "bar"
95
+
96
+ ab_user = Split::User.find(112233, :redis)
97
+
98
+ expect(ab_user["foo"]).to eql("bar")
99
+ end
100
+
101
+ it "returns nil if adapter does not implement a finder method" do
102
+ ab_user = Split::User.find(112233, :dual_adapter)
103
+ expect(ab_user).to be_nil
104
+ end
62
105
  end
63
106
 
64
107
  context "instantiated with custom adapter" do
@@ -72,5 +115,4 @@ describe Split::User do
72
115
  expect(@subject.user).to eq(custom_adapter)
73
116
  end
74
117
  end
75
-
76
118
  end
data/split.gemspec CHANGED
@@ -1,4 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
2
4
  $:.push File.expand_path("../lib", __FILE__)
3
5
  require "split/version"
4
6
 
@@ -7,39 +9,40 @@ Gem::Specification.new do |s|
7
9
  s.version = Split::VERSION
8
10
  s.platform = Gem::Platform::RUBY
9
11
  s.authors = ["Andrew Nesbitt"]
10
- s.licenses = ['MIT']
12
+ s.licenses = ["MIT"]
11
13
  s.email = ["andrewnez@gmail.com"]
12
14
  s.homepage = "https://github.com/splitrb/split"
13
15
  s.summary = "Rack based split testing framework"
14
16
 
15
17
  s.metadata = {
16
- "homepage_uri" => "https://github.com/splitrb/split",
17
- "changelog_uri" => "https://github.com/splitrb/split/blob/master/CHANGELOG.md",
18
- "source_code_uri" => "https://github.com/splitrb/split",
19
- "bug_tracker_uri" => "https://github.com/splitrb/split/issues",
20
- "wiki_uri" => "https://github.com/splitrb/split/wiki",
21
- "mailing_list_uri" => "https://groups.google.com/d/forum/split-ruby"
22
- }
23
-
24
- s.required_ruby_version = '>= 1.9.3'
25
- s.required_rubygems_version = '>= 2.0.0'
18
+ "homepage_uri" => "https://github.com/splitrb/split",
19
+ "changelog_uri" => "https://github.com/splitrb/split/blob/main/CHANGELOG.md",
20
+ "source_code_uri" => "https://github.com/splitrb/split",
21
+ "bug_tracker_uri" => "https://github.com/splitrb/split/issues",
22
+ "wiki_uri" => "https://github.com/splitrb/split/wiki",
23
+ "mailing_list_uri" => "https://groups.google.com/d/forum/split-ruby",
24
+ "funding_uri" => "https://opencollective.com/split"
25
+ }
26
26
 
27
- s.rubyforge_project = "split"
27
+ s.required_ruby_version = ">= 2.7.0"
28
+ s.required_rubygems_version = ">= 2.0.0"
28
29
 
29
30
  s.files = `git ls-files`.split("\n")
30
31
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
32
  s.require_paths = ["lib"]
32
33
 
33
- s.add_dependency 'redis', '>= 2.1'
34
- s.add_dependency 'sinatra', '>= 1.2.6'
35
- s.add_dependency 'simple-random', '>= 0.9.3'
34
+ s.add_dependency "redis", ">= 4.2"
35
+ s.add_dependency "sinatra", ">= 1.2.6"
36
+ s.add_dependency "rubystats", ">= 0.3.0"
37
+ s.add_dependency "matrix"
38
+ s.add_dependency "bigdecimal"
39
+ s.add_dependency "cgi"
36
40
 
37
- s.add_development_dependency 'bundler', '>= 1.17'
38
- s.add_development_dependency 'simplecov', '~> 0.15'
39
- s.add_development_dependency 'rack-test', '~> 0.6'
40
- s.add_development_dependency 'rake', '~> 12'
41
- s.add_development_dependency 'rspec', '~> 3.7'
42
- s.add_development_dependency 'pry', '~> 0.10'
43
- s.add_development_dependency 'fakeredis', '~> 0.7'
44
- s.add_development_dependency 'rails', '>= 4.2'
41
+ s.add_development_dependency "bundler", ">= 1.17"
42
+ s.add_development_dependency "simplecov", "~> 0.15"
43
+ s.add_development_dependency "rack-test", "~> 2.0"
44
+ s.add_development_dependency "rake", "~> 13"
45
+ s.add_development_dependency "rspec", "~> 3.7"
46
+ s.add_development_dependency "pry", "~> 0.10"
47
+ s.add_development_dependency "rails", ">= 5.0"
45
48
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: split
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.2
4
+ version: 4.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-04-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: redis
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '2.1'
18
+ version: '4.2'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '2.1'
25
+ version: '4.2'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: sinatra
29
28
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +38,61 @@ dependencies:
39
38
  - !ruby/object:Gem::Version
40
39
  version: 1.2.6
41
40
  - !ruby/object:Gem::Dependency
42
- name: simple-random
41
+ name: rubystats
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.3.0
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.3.0
54
+ - !ruby/object:Gem::Dependency
55
+ name: matrix
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: bigdecimal
43
70
  requirement: !ruby/object:Gem::Requirement
44
71
  requirements:
45
72
  - - ">="
46
73
  - !ruby/object:Gem::Version
47
- version: 0.9.3
74
+ version: '0'
48
75
  type: :runtime
49
76
  prerelease: false
50
77
  version_requirements: !ruby/object:Gem::Requirement
51
78
  requirements:
52
79
  - - ">="
53
80
  - !ruby/object:Gem::Version
54
- version: 0.9.3
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: cgi
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
55
96
  - !ruby/object:Gem::Dependency
56
97
  name: bundler
57
98
  requirement: !ruby/object:Gem::Requirement
@@ -86,28 +127,28 @@ dependencies:
86
127
  requirements:
87
128
  - - "~>"
88
129
  - !ruby/object:Gem::Version
89
- version: '0.6'
130
+ version: '2.0'
90
131
  type: :development
91
132
  prerelease: false
92
133
  version_requirements: !ruby/object:Gem::Requirement
93
134
  requirements:
94
135
  - - "~>"
95
136
  - !ruby/object:Gem::Version
96
- version: '0.6'
137
+ version: '2.0'
97
138
  - !ruby/object:Gem::Dependency
98
139
  name: rake
99
140
  requirement: !ruby/object:Gem::Requirement
100
141
  requirements:
101
142
  - - "~>"
102
143
  - !ruby/object:Gem::Version
103
- version: '12'
144
+ version: '13'
104
145
  type: :development
105
146
  prerelease: false
106
147
  version_requirements: !ruby/object:Gem::Requirement
107
148
  requirements:
108
149
  - - "~>"
109
150
  - !ruby/object:Gem::Version
110
- version: '12'
151
+ version: '13'
111
152
  - !ruby/object:Gem::Dependency
112
153
  name: rspec
113
154
  requirement: !ruby/object:Gem::Requirement
@@ -136,35 +177,20 @@ dependencies:
136
177
  - - "~>"
137
178
  - !ruby/object:Gem::Version
138
179
  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
180
  - !ruby/object:Gem::Dependency
154
181
  name: rails
155
182
  requirement: !ruby/object:Gem::Requirement
156
183
  requirements:
157
184
  - - ">="
158
185
  - !ruby/object:Gem::Version
159
- version: '4.2'
186
+ version: '5.0'
160
187
  type: :development
161
188
  prerelease: false
162
189
  version_requirements: !ruby/object:Gem::Requirement
163
190
  requirements:
164
191
  - - ">="
165
192
  - !ruby/object:Gem::Version
166
- version: '4.2'
167
- description:
193
+ version: '5.0'
168
194
  email:
169
195
  - andrewnez@gmail.com
170
196
  executables: []
@@ -175,10 +201,13 @@ files:
175
201
  - ".csslintrc"
176
202
  - ".eslintignore"
177
203
  - ".eslintrc"
204
+ - ".github/FUNDING.yml"
205
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
206
+ - ".github/dependabot.yml"
207
+ - ".github/workflows/ci.yml"
178
208
  - ".gitignore"
209
+ - ".rspec"
179
210
  - ".rubocop.yml"
180
- - ".travis.yml"
181
- - Appraisals
182
211
  - CHANGELOG.md
183
212
  - CODE_OF_CONDUCT.md
184
213
  - CONTRIBUTING.md
@@ -186,16 +215,13 @@ files:
186
215
  - LICENSE
187
216
  - README.md
188
217
  - Rakefile
189
- - gemfiles/4.2.gemfile
190
- - gemfiles/5.0.gemfile
191
- - gemfiles/5.1.gemfile
192
- - gemfiles/5.2.gemfile
193
- - gemfiles/6.0.gemfile
194
218
  - lib/split.rb
219
+ - lib/split/algorithms.rb
195
220
  - lib/split/algorithms/block_randomization.rb
196
221
  - lib/split/algorithms/weighted_sample.rb
197
222
  - lib/split/algorithms/whiplash.rb
198
223
  - lib/split/alternative.rb
224
+ - lib/split/cache.rb
199
225
  - lib/split/combined_experiments_helper.rb
200
226
  - lib/split/configuration.rb
201
227
  - lib/split/dashboard.rb
@@ -235,6 +261,7 @@ files:
235
261
  - spec/algorithms/weighted_sample_spec.rb
236
262
  - spec/algorithms/whiplash_spec.rb
237
263
  - spec/alternative_spec.rb
264
+ - spec/cache_spec.rb
238
265
  - spec/combined_experiments_helper_spec.rb
239
266
  - spec/configuration_spec.rb
240
267
  - spec/dashboard/pagination_helpers_spec.rb
@@ -264,12 +291,12 @@ licenses:
264
291
  - MIT
265
292
  metadata:
266
293
  homepage_uri: https://github.com/splitrb/split
267
- changelog_uri: https://github.com/splitrb/split/blob/master/CHANGELOG.md
294
+ changelog_uri: https://github.com/splitrb/split/blob/main/CHANGELOG.md
268
295
  source_code_uri: https://github.com/splitrb/split
269
296
  bug_tracker_uri: https://github.com/splitrb/split/issues
270
297
  wiki_uri: https://github.com/splitrb/split/wiki
271
298
  mailing_list_uri: https://groups.google.com/d/forum/split-ruby
272
- post_install_message:
299
+ funding_uri: https://opencollective.com/split
273
300
  rdoc_options: []
274
301
  require_paths:
275
302
  - lib
@@ -277,16 +304,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
277
304
  requirements:
278
305
  - - ">="
279
306
  - !ruby/object:Gem::Version
280
- version: 1.9.3
307
+ version: 2.7.0
281
308
  required_rubygems_version: !ruby/object:Gem::Requirement
282
309
  requirements:
283
310
  - - ">="
284
311
  - !ruby/object:Gem::Version
285
312
  version: 2.0.0
286
313
  requirements: []
287
- rubyforge_project: split
288
- rubygems_version: 2.7.6
289
- signing_key:
314
+ rubygems_version: 3.7.0.dev
290
315
  specification_version: 4
291
316
  summary: Rack based split testing framework
292
317
  test_files:
@@ -294,6 +319,7 @@ test_files:
294
319
  - spec/algorithms/weighted_sample_spec.rb
295
320
  - spec/algorithms/whiplash_spec.rb
296
321
  - spec/alternative_spec.rb
322
+ - spec/cache_spec.rb
297
323
  - spec/combined_experiments_helper_spec.rb
298
324
  - spec/configuration_spec.rb
299
325
  - spec/dashboard/pagination_helpers_spec.rb
data/.travis.yml DELETED
@@ -1,66 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0
5
- - 2.1.10
6
- - 2.2.0
7
- - 2.2.2
8
- - 2.4.5
9
- - 2.5.3
10
- - 2.6.0
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
-
20
- matrix:
21
- exclude:
22
- - rvm: 1.9.3
23
- gemfile: gemfiles/5.0.gemfile
24
- - rvm: 1.9.3
25
- gemfile: gemfiles/5.1.gemfile
26
- - rvm: 1.9.3
27
- gemfile: gemfiles/5.2.gemfile
28
- - rvm: 1.9.3
29
- gemfile: gemfiles/6.0.gemfile
30
- - rvm: 2.0
31
- gemfile: gemfiles/5.0.gemfile
32
- - rvm: 2.0
33
- gemfile: gemfiles/5.1.gemfile
34
- - rvm: 2.0
35
- gemfile: gemfiles/5.2.gemfile
36
- - rvm: 2.0
37
- gemfile: gemfiles/6.0.gemfile
38
- - rvm: 2.1.10
39
- gemfile: gemfiles/5.0.gemfile
40
- - rvm: 2.1.10
41
- gemfile: gemfiles/5.1.gemfile
42
- - rvm: 2.1.10
43
- gemfile: gemfiles/5.2.gemfile
44
- - rvm: 2.1.10
45
- gemfile: gemfiles/6.0.gemfile
46
- - rvm: 2.2.0
47
- gemfile: gemfiles/5.0.gemfile
48
- - rvm: 2.2.0
49
- gemfile: gemfiles/5.1.gemfile
50
- - rvm: 2.2.0
51
- gemfile: gemfiles/5.2.gemfile
52
- - rvm: 2.2.0
53
- gemfile: gemfiles/6.0.gemfile
54
- - rvm: 2.2.2
55
- gemfile: gemfiles/6.0.gemfile
56
- - rvm: 2.4.5
57
- gemfile: gemfiles/6.0.gemfile
58
-
59
- before_install:
60
- - gem install bundler --version=1.17.3
61
-
62
- script:
63
- - RAILS_ENV=test bundle exec rake spec && bundle exec codeclimate-test-reporter
64
-
65
- cache: bundler
66
- sudo: false
data/Appraisals DELETED
@@ -1,19 +0,0 @@
1
- appraise "4.2" do
2
- gem "rails", "~> 4.2"
3
- end
4
-
5
- appraise "5.0" do
6
- gem "rails", "~> 5.0"
7
- end
8
-
9
- appraise "5.1" do
10
- gem "rails", "~> 5.1"
11
- end
12
-
13
- appraise "5.2" do
14
- gem "rails", "~> 5.2"
15
- end
16
-
17
- appraise "6.0" do
18
- gem 'rails', '~> 6.0.0.beta3'
19
- end
data/gemfiles/4.2.gemfile DELETED
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "codeclimate-test-reporter"
7
- gem "rails", "~> 4.2"
8
-
9
- gemspec path: "../"
data/gemfiles/5.0.gemfile DELETED
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "codeclimate-test-reporter"
7
- gem "rails", "~> 5.0"
8
-
9
- gemspec path: "../"
data/gemfiles/5.1.gemfile DELETED
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "codeclimate-test-reporter"
7
- gem "rails", "~> 5.1"
8
-
9
- gemspec path: "../"
data/gemfiles/5.2.gemfile DELETED
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "codeclimate-test-reporter"
7
- gem "rails", "~> 5.2"
8
-
9
- gemspec path: "../"
data/gemfiles/6.0.gemfile DELETED
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "codeclimate-test-reporter"
7
- gem "rails", "~> 6.0.0.beta3"
8
-
9
- gemspec path: "../"