split 3.2.0 → 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 (87) hide show
  1. checksums.yaml +5 -5
  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 +174 -0
  10. data/CODE_OF_CONDUCT.md +3 -3
  11. data/CONTRIBUTING.md +1 -1
  12. data/Gemfile +6 -1
  13. data/README.md +79 -33
  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 +6 -5
  22. data/lib/split/configuration.rb +94 -91
  23. data/lib/split/dashboard/helpers.rb +9 -9
  24. data/lib/split/dashboard/pagination_helpers.rb +86 -0
  25. data/lib/split/dashboard/paginator.rb +17 -0
  26. data/lib/split/dashboard/public/dashboard.js +10 -0
  27. data/lib/split/dashboard/public/style.css +19 -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 +24 -5
  31. data/lib/split/dashboard/views/layout.erb +1 -1
  32. data/lib/split/dashboard.rb +47 -20
  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 +56 -24
  41. data/lib/split/metric.rb +6 -6
  42. data/lib/split/persistence/cookie_adapter.rb +52 -15
  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 -31
  48. data/lib/split/trial.rb +48 -41
  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 +39 -25
  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 +202 -0
  61. data/spec/dashboard/paginator_spec.rb +38 -0
  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 +539 -419
  69. data/spec/metric_spec.rb +14 -14
  70. data/spec/persistence/cookie_adapter_spec.rb +105 -27
  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 +18 -18
  78. data/spec/support/cookies_mock.rb +1 -2
  79. data/spec/trial_spec.rb +117 -70
  80. data/spec/user_spec.rb +69 -27
  81. data/split.gemspec +26 -22
  82. metadata +85 -37
  83. data/.travis.yml +0 -41
  84. data/Appraisals +0 -13
  85. data/gemfiles/4.2.gemfile +0 -9
  86. data/gemfiles/5.0.gemfile +0 -10
  87. data/gemfiles/5.1.gemfile +0 -10
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,38 +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.14'
38
- s.add_development_dependency 'simplecov', '~> 0.12'
39
- s.add_development_dependency 'rack-test', '~> 0.6'
40
- s.add_development_dependency 'rake', '~> 12'
41
- s.add_development_dependency 'rspec', '~> 3.4'
42
- s.add_development_dependency 'pry', '~> 0.10'
43
- s.add_development_dependency 'fakeredis', '~> 0.6.0'
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"
44
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.2.0
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: 2017-09-21 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,89 +38,131 @@ 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
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
46
45
  - !ruby/object:Gem::Version
47
- version: 0.9.3
46
+ version: 0.3.0
48
47
  type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - ">="
53
52
  - !ruby/object:Gem::Version
54
- version: 0.9.3
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
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
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
58
99
  requirements:
59
- - - "~>"
100
+ - - ">="
60
101
  - !ruby/object:Gem::Version
61
- version: '1.14'
102
+ version: '1.17'
62
103
  type: :development
63
104
  prerelease: false
64
105
  version_requirements: !ruby/object:Gem::Requirement
65
106
  requirements:
66
- - - "~>"
107
+ - - ">="
67
108
  - !ruby/object:Gem::Version
68
- version: '1.14'
109
+ version: '1.17'
69
110
  - !ruby/object:Gem::Dependency
70
111
  name: simplecov
71
112
  requirement: !ruby/object:Gem::Requirement
72
113
  requirements:
73
114
  - - "~>"
74
115
  - !ruby/object:Gem::Version
75
- version: '0.12'
116
+ version: '0.15'
76
117
  type: :development
77
118
  prerelease: false
78
119
  version_requirements: !ruby/object:Gem::Requirement
79
120
  requirements:
80
121
  - - "~>"
81
122
  - !ruby/object:Gem::Version
82
- version: '0.12'
123
+ version: '0.15'
83
124
  - !ruby/object:Gem::Dependency
84
125
  name: rack-test
85
126
  requirement: !ruby/object:Gem::Requirement
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
114
155
  requirements:
115
156
  - - "~>"
116
157
  - !ruby/object:Gem::Version
117
- version: '3.4'
158
+ version: '3.7'
118
159
  type: :development
119
160
  prerelease: false
120
161
  version_requirements: !ruby/object:Gem::Requirement
121
162
  requirements:
122
163
  - - "~>"
123
164
  - !ruby/object:Gem::Version
124
- version: '3.4'
165
+ version: '3.7'
125
166
  - !ruby/object:Gem::Dependency
126
167
  name: pry
127
168
  requirement: !ruby/object:Gem::Requirement
@@ -137,20 +178,19 @@ dependencies:
137
178
  - !ruby/object:Gem::Version
138
179
  version: '0.10'
139
180
  - !ruby/object:Gem::Dependency
140
- name: fakeredis
181
+ name: rails
141
182
  requirement: !ruby/object:Gem::Requirement
142
183
  requirements:
143
- - - "~>"
184
+ - - ">="
144
185
  - !ruby/object:Gem::Version
145
- version: 0.6.0
186
+ version: '5.0'
146
187
  type: :development
147
188
  prerelease: false
148
189
  version_requirements: !ruby/object:Gem::Requirement
149
190
  requirements:
150
- - - "~>"
191
+ - - ">="
151
192
  - !ruby/object:Gem::Version
152
- version: 0.6.0
153
- description:
193
+ version: '5.0'
154
194
  email:
155
195
  - andrewnez@gmail.com
156
196
  executables: []
@@ -161,10 +201,13 @@ files:
161
201
  - ".csslintrc"
162
202
  - ".eslintignore"
163
203
  - ".eslintrc"
204
+ - ".github/FUNDING.yml"
205
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
206
+ - ".github/dependabot.yml"
207
+ - ".github/workflows/ci.yml"
164
208
  - ".gitignore"
209
+ - ".rspec"
165
210
  - ".rubocop.yml"
166
- - ".travis.yml"
167
- - Appraisals
168
211
  - CHANGELOG.md
169
212
  - CODE_OF_CONDUCT.md
170
213
  - CONTRIBUTING.md
@@ -172,18 +215,19 @@ files:
172
215
  - LICENSE
173
216
  - README.md
174
217
  - Rakefile
175
- - gemfiles/4.2.gemfile
176
- - gemfiles/5.0.gemfile
177
- - gemfiles/5.1.gemfile
178
218
  - lib/split.rb
219
+ - lib/split/algorithms.rb
179
220
  - lib/split/algorithms/block_randomization.rb
180
221
  - lib/split/algorithms/weighted_sample.rb
181
222
  - lib/split/algorithms/whiplash.rb
182
223
  - lib/split/alternative.rb
224
+ - lib/split/cache.rb
183
225
  - lib/split/combined_experiments_helper.rb
184
226
  - lib/split/configuration.rb
185
227
  - lib/split/dashboard.rb
186
228
  - lib/split/dashboard/helpers.rb
229
+ - lib/split/dashboard/pagination_helpers.rb
230
+ - lib/split/dashboard/paginator.rb
187
231
  - lib/split/dashboard/public/dashboard-filtering.js
188
232
  - lib/split/dashboard/public/dashboard.js
189
233
  - lib/split/dashboard/public/jquery-1.11.1.min.js
@@ -217,8 +261,11 @@ files:
217
261
  - spec/algorithms/weighted_sample_spec.rb
218
262
  - spec/algorithms/whiplash_spec.rb
219
263
  - spec/alternative_spec.rb
264
+ - spec/cache_spec.rb
220
265
  - spec/combined_experiments_helper_spec.rb
221
266
  - spec/configuration_spec.rb
267
+ - spec/dashboard/pagination_helpers_spec.rb
268
+ - spec/dashboard/paginator_spec.rb
222
269
  - spec/dashboard_helpers_spec.rb
223
270
  - spec/dashboard_spec.rb
224
271
  - spec/encapsulated_helper_spec.rb
@@ -244,12 +291,12 @@ licenses:
244
291
  - MIT
245
292
  metadata:
246
293
  homepage_uri: https://github.com/splitrb/split
247
- changelog_uri: https://github.com/splitrb/split/blob/master/CHANGELOG.md
294
+ changelog_uri: https://github.com/splitrb/split/blob/main/CHANGELOG.md
248
295
  source_code_uri: https://github.com/splitrb/split
249
296
  bug_tracker_uri: https://github.com/splitrb/split/issues
250
297
  wiki_uri: https://github.com/splitrb/split/wiki
251
298
  mailing_list_uri: https://groups.google.com/d/forum/split-ruby
252
- post_install_message:
299
+ funding_uri: https://opencollective.com/split
253
300
  rdoc_options: []
254
301
  require_paths:
255
302
  - lib
@@ -257,16 +304,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
257
304
  requirements:
258
305
  - - ">="
259
306
  - !ruby/object:Gem::Version
260
- version: 1.9.3
307
+ version: 2.7.0
261
308
  required_rubygems_version: !ruby/object:Gem::Requirement
262
309
  requirements:
263
310
  - - ">="
264
311
  - !ruby/object:Gem::Version
265
312
  version: 2.0.0
266
313
  requirements: []
267
- rubyforge_project: split
268
- rubygems_version: 2.6.4
269
- signing_key:
314
+ rubygems_version: 3.7.0.dev
270
315
  specification_version: 4
271
316
  summary: Rack based split testing framework
272
317
  test_files:
@@ -274,8 +319,11 @@ test_files:
274
319
  - spec/algorithms/weighted_sample_spec.rb
275
320
  - spec/algorithms/whiplash_spec.rb
276
321
  - spec/alternative_spec.rb
322
+ - spec/cache_spec.rb
277
323
  - spec/combined_experiments_helper_spec.rb
278
324
  - spec/configuration_spec.rb
325
+ - spec/dashboard/pagination_helpers_spec.rb
326
+ - spec/dashboard/paginator_spec.rb
279
327
  - spec/dashboard_helpers_spec.rb
280
328
  - spec/dashboard_spec.rb
281
329
  - spec/encapsulated_helper_spec.rb
data/.travis.yml DELETED
@@ -1,41 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0
5
- - 2.1
6
- - 2.2.0
7
- - 2.2.2
8
- - 2.4.2
9
-
10
- gemfile:
11
- - gemfiles/4.2.gemfile
12
- - gemfiles/5.0.gemfile
13
- - gemfiles/5.1.gemfile
14
-
15
- matrix:
16
- exclude:
17
- - rvm: 1.9.3
18
- gemfile: gemfiles/5.0.gemfile
19
- - rvm: 1.9.3
20
- gemfile: gemfiles/5.1.gemfile
21
- - rvm: 2.0
22
- gemfile: gemfiles/5.0.gemfile
23
- - rvm: 2.0
24
- gemfile: gemfiles/5.1.gemfile
25
- - rvm: 2.1
26
- gemfile: gemfiles/5.0.gemfile
27
- - rvm: 2.1
28
- gemfile: gemfiles/5.1.gemfile
29
- - rvm: 2.2.0
30
- gemfile: gemfiles/5.0.gemfile
31
- - rvm: 2.2.0
32
- gemfile: gemfiles/5.1.gemfile
33
-
34
- before_install:
35
- - gem update --system && gem install bundler
36
-
37
- script:
38
- - RAILS_ENV=test bundle exec rake spec && bundle exec codeclimate-test-reporter
39
-
40
- cache: bundler
41
- sudo: false
data/Appraisals DELETED
@@ -1,13 +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
- gem "sinatra", git: "https://github.com/sinatra/sinatra"
8
- end
9
-
10
- appraise "5.1" do
11
- gem "rails", "~> 5.1"
12
- gem "sinatra", git: "https://github.com/sinatra/sinatra"
13
- 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,10 +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
- gem "sinatra", git: "https://github.com/sinatra/sinatra"
9
-
10
- gemspec path: "../"
data/gemfiles/5.1.gemfile DELETED
@@ -1,10 +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
- gem "sinatra", git: "https://github.com/sinatra/sinatra"
9
-
10
- gemspec path: "../"