split 4.0.3 → 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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +23 -36
- data/CHANGELOG.md +21 -1
- data/Gemfile +3 -0
- data/lib/split/dashboard.rb +2 -1
- data/lib/split/encapsulated_helper.rb +8 -0
- data/lib/split/helper.rb +15 -7
- data/lib/split/persistence/cookie_adapter.rb +3 -2
- data/lib/split/redis_interface.rb +1 -1
- data/lib/split/version.rb +1 -1
- data/lib/split.rb +2 -2
- data/spec/encapsulated_helper_spec.rb +38 -12
- data/spec/helper_spec.rb +6 -6
- data/spec/persistence/cookie_adapter_spec.rb +3 -3
- data/spec/spec_helper.rb +20 -8
- data/split.gemspec +5 -2
- metadata +33 -12
- data/gemfiles/5.2.gemfile +0 -7
- data/gemfiles/6.0.gemfile +0 -7
- data/gemfiles/6.1.gemfile +0 -7
- data/gemfiles/7.0.gemfile +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0c7476504dcc3b062af1a156fc7021b65e64bcc64a96d5faeabd9c4bd3fc987
|
4
|
+
data.tar.gz: c8cb8c4335be14da004d94da31a5cb21ee80a13f0b782f7e94c36f698f1765ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bc0b3bbaeef30019bdcf913b8b20c3ac32efec3e025692eef5b3d552a0e7246b67a4dbcb73de7a01dd82d78d985587d21737f5f6cc77dcf4e1540eb067b9655
|
7
|
+
data.tar.gz: 87763ae8d35cf44780362e460c86ef7f818b32b5b7d5f4f1e4ec3c24cedf1b277bf162c2f34daba0cb1477f4acd44c8b4aa2d436be396ec51fbc19d8edcb72de
|
data/.github/workflows/ci.yml
CHANGED
@@ -6,52 +6,40 @@ jobs:
|
|
6
6
|
test:
|
7
7
|
strategy:
|
8
8
|
matrix:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
-
|
26
|
-
ruby:
|
27
|
-
|
28
|
-
|
29
|
-
ruby: '3.0'
|
30
|
-
|
31
|
-
- gemfile: 6.1.gemfile
|
32
|
-
ruby: '3.0'
|
33
|
-
|
34
|
-
- gemfile: 7.0.gemfile
|
35
|
-
ruby: '3.0'
|
36
|
-
|
37
|
-
- gemfile: 7.0.gemfile
|
38
|
-
ruby: '3.1'
|
39
|
-
|
40
|
-
- gemfile: 7.0.gemfile
|
41
|
-
ruby: '3.2'
|
42
|
-
|
9
|
+
ruby: ["3.5.0-preview1", "3.4", "3.3", "3.2", "3.1", "3.0", "2.7"]
|
10
|
+
rails: ["8.0", "7.2", "7.1", "6.1"]
|
11
|
+
exclude:
|
12
|
+
- rails: "6.1"
|
13
|
+
ruby: "3.4"
|
14
|
+
|
15
|
+
- rails: "6.1"
|
16
|
+
ruby: "3.5.0-preview1"
|
17
|
+
|
18
|
+
- rails: "7.2"
|
19
|
+
ruby: "2.7"
|
20
|
+
- rails: "7.2"
|
21
|
+
ruby: "3.0"
|
22
|
+
|
23
|
+
- rails: "8.0"
|
24
|
+
ruby: "2.7"
|
25
|
+
- rails: "8.0"
|
26
|
+
ruby: "3.0"
|
27
|
+
- rails: "8.0"
|
28
|
+
ruby: "3.1"
|
43
29
|
runs-on: ubuntu-latest
|
44
30
|
|
45
31
|
services:
|
46
32
|
redis:
|
47
33
|
image: redis
|
48
|
-
ports: [
|
34
|
+
ports: ["6379:6379"]
|
49
35
|
options: >-
|
50
36
|
--health-cmd "redis-cli ping"
|
51
37
|
--health-interval 10s
|
52
38
|
--health-timeout 5s
|
53
39
|
--health-retries 5
|
54
40
|
|
41
|
+
env:
|
42
|
+
RAILS_VERSION: ${{ matrix.rails }}
|
55
43
|
steps:
|
56
44
|
- uses: actions/checkout@v4
|
57
45
|
|
@@ -61,7 +49,6 @@ jobs:
|
|
61
49
|
|
62
50
|
- name: Install dependencies
|
63
51
|
run: |
|
64
|
-
bundle config set gemfile "${GITHUB_WORKSPACE}/gemfiles/${{ matrix.gemfile }}"
|
65
52
|
bundle install --jobs 4 --retry 3
|
66
53
|
|
67
54
|
- name: Display Ruby version
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,24 @@
|
|
1
|
-
# 4.0.
|
1
|
+
# 4.0.5 (Aug 3rd, 2025)
|
2
|
+
|
3
|
+
Bugfixes:
|
4
|
+
- Handle when Rails is partially loaded as a Gem. (@bjacobs09, #727)
|
5
|
+
- Fix Rack compatibility with versions > 3 (@andrehjr, #729)
|
6
|
+
|
7
|
+
Misc:
|
8
|
+
- Add funding_uri to gemspec (@andrew, #726)
|
9
|
+
- Drop Rails 5.x Support (@andrehjr, #728)
|
10
|
+
- Drop Rails 6.0 and Ruby < 2.6 (@andrehjr, #729)
|
11
|
+
- Add support for Ruby 3.5+ (@andrehjr, #737)
|
12
|
+
|
13
|
+
# 4.0.4 (March 3rd, 2024)
|
14
|
+
|
15
|
+
Bugfixes:
|
16
|
+
- Better integration for EncapsulatedHelper when needing params/request info (@henrique-ft, #721 and #723)
|
17
|
+
|
18
|
+
Misc:
|
19
|
+
- Make specs compatible with newer Rack versions (@andrehjr, #722)
|
20
|
+
|
21
|
+
# 4.0.3 (November 15th, 2023)
|
2
22
|
|
3
23
|
Bugfixes:
|
4
24
|
- Do not throw error if alternativas have data that can lead to negative numbers for probability calculation (@andrehjr, #703)
|
data/Gemfile
CHANGED
data/lib/split/dashboard.rb
CHANGED
@@ -29,7 +29,8 @@ module Split
|
|
29
29
|
if Object.const_defined?("Rails") && Rails.respond_to?(:env)
|
30
30
|
@current_env = Rails.env.titlecase
|
31
31
|
else
|
32
|
-
|
32
|
+
rack_version = Rack.respond_to?(:version) ? Rack.version : Rack.release
|
33
|
+
@current_env = "Rack: #{rack_version}"
|
33
34
|
end
|
34
35
|
erb :index
|
35
36
|
end
|
@@ -23,6 +23,14 @@ module Split
|
|
23
23
|
@context = context
|
24
24
|
end
|
25
25
|
|
26
|
+
def params
|
27
|
+
request.params if request && request.respond_to?(:params)
|
28
|
+
end
|
29
|
+
|
30
|
+
def request
|
31
|
+
@context.request if @context.respond_to?(:request)
|
32
|
+
end
|
33
|
+
|
26
34
|
def ab_user
|
27
35
|
@ab_user ||= Split::User.new(@context)
|
28
36
|
end
|
data/lib/split/helper.rb
CHANGED
@@ -121,11 +121,11 @@ module Split
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def override_alternative_by_params(experiment_name)
|
124
|
-
|
124
|
+
params_present? && params[OVERRIDE_PARAM_NAME] && params[OVERRIDE_PARAM_NAME][experiment_name]
|
125
125
|
end
|
126
126
|
|
127
127
|
def override_alternative_by_cookies(experiment_name)
|
128
|
-
return unless
|
128
|
+
return unless request_present?
|
129
129
|
|
130
130
|
if request.cookies && request.cookies.key?("split_override")
|
131
131
|
experiments = JSON.parse(request.cookies["split_override"]) rescue {}
|
@@ -134,7 +134,7 @@ module Split
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def split_generically_disabled?
|
137
|
-
|
137
|
+
params_present? && params["SPLIT_DISABLE"]
|
138
138
|
end
|
139
139
|
|
140
140
|
def ab_user
|
@@ -142,26 +142,34 @@ module Split
|
|
142
142
|
end
|
143
143
|
|
144
144
|
def exclude_visitor?
|
145
|
-
|
145
|
+
request_present? && (instance_exec(request, &Split.configuration.ignore_filter) || is_ignored_ip_address? || is_robot? || is_preview?)
|
146
146
|
end
|
147
147
|
|
148
148
|
def is_robot?
|
149
|
-
|
149
|
+
request_present? && request.user_agent =~ Split.configuration.robot_regex
|
150
150
|
end
|
151
151
|
|
152
152
|
def is_preview?
|
153
|
-
|
153
|
+
request_present? && defined?(request.headers) && request.headers["x-purpose"] == "preview"
|
154
154
|
end
|
155
155
|
|
156
156
|
def is_ignored_ip_address?
|
157
157
|
return false if Split.configuration.ignore_ip_addresses.empty?
|
158
158
|
|
159
159
|
Split.configuration.ignore_ip_addresses.each do |ip|
|
160
|
-
return true if
|
160
|
+
return true if request_present? && (request.ip == ip || (ip.class == Regexp && request.ip =~ ip))
|
161
161
|
end
|
162
162
|
false
|
163
163
|
end
|
164
164
|
|
165
|
+
def params_present?
|
166
|
+
defined?(params) && params
|
167
|
+
end
|
168
|
+
|
169
|
+
def request_present?
|
170
|
+
defined?(request) && request
|
171
|
+
end
|
172
|
+
|
165
173
|
def active_experiments
|
166
174
|
ab_user.active_experiments
|
167
175
|
end
|
@@ -47,8 +47,9 @@ module Split
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def set_cookie_via_rack(key, value)
|
50
|
-
|
51
|
-
|
50
|
+
headers = @response.respond_to?(:header) ? @response.header : @response.headers
|
51
|
+
delete_cookie_header!(headers, key, value)
|
52
|
+
Rack::Utils.set_cookie_header!(headers, key, value)
|
52
53
|
end
|
53
54
|
|
54
55
|
# Use Rack::Utils#make_delete_cookie_header after Rack 2.0.0
|
data/lib/split/version.rb
CHANGED
data/lib/split.rb
CHANGED
@@ -24,7 +24,7 @@ require "split/trial"
|
|
24
24
|
require "split/user"
|
25
25
|
require "split/version"
|
26
26
|
require "split/zscore"
|
27
|
-
require "split/engine" if defined?(Rails)
|
27
|
+
require "split/engine" if defined?(::Rails::Engine)
|
28
28
|
|
29
29
|
module Split
|
30
30
|
extend self
|
@@ -74,7 +74,7 @@ module Split
|
|
74
74
|
end
|
75
75
|
|
76
76
|
# Check to see if being run in a Rails application. If so, wait until before_initialize to run configuration so Gems that create ENV variables have the chance to initialize first.
|
77
|
-
if defined?(::Rails)
|
77
|
+
if defined?(::Rails::Railtie)
|
78
78
|
class Split::Railtie < Rails::Railtie
|
79
79
|
config.before_initialize { Split.configure { } }
|
80
80
|
end
|
@@ -3,11 +3,7 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
describe Split::EncapsulatedHelper do
|
6
|
-
|
7
|
-
|
8
|
-
def params
|
9
|
-
raise NoMethodError, "This method is not really defined"
|
10
|
-
end
|
6
|
+
let(:context_shim) { Split::EncapsulatedHelper::ContextShim.new(double(request: request)) }
|
11
7
|
|
12
8
|
describe "ab_test" do
|
13
9
|
before do
|
@@ -15,20 +11,15 @@ describe Split::EncapsulatedHelper do
|
|
15
11
|
.and_return(mock_user)
|
16
12
|
end
|
17
13
|
|
18
|
-
it "should not raise an error when params raises an error" do
|
19
|
-
expect { params }.to raise_error(NoMethodError)
|
20
|
-
expect { ab_test("link_color", "blue", "red") }.not_to raise_error
|
21
|
-
end
|
22
|
-
|
23
14
|
it "calls the block with selected alternative" do
|
24
|
-
expect { |block| ab_test("link_color", "red", "red", &block) }.to yield_with_args("red", {})
|
15
|
+
expect { |block| context_shim.ab_test("link_color", "red", "red", &block) }.to yield_with_args("red", {})
|
25
16
|
end
|
26
17
|
|
27
18
|
context "inside a view" do
|
28
19
|
it "works inside ERB" do
|
29
20
|
require "erb"
|
30
21
|
template = ERB.new(<<-ERB.split(/\s+/s).map(&:strip).join(" "), nil, "%")
|
31
|
-
foo <% ab_test(:foo, '1', '2') do |alt, meta| %>
|
22
|
+
foo <% context_shim.ab_test(:foo, '1', '2') do |alt, meta| %>
|
32
23
|
static <%= alt %>
|
33
24
|
<% end %>
|
34
25
|
ERB
|
@@ -43,8 +34,43 @@ describe Split::EncapsulatedHelper do
|
|
43
34
|
include Split::EncapsulatedHelper
|
44
35
|
public :session
|
45
36
|
}.new
|
37
|
+
|
46
38
|
expect(ctx).to receive(:session) { {} }
|
47
39
|
expect { ctx.ab_test("link_color", "blue", "red") }.not_to raise_error
|
48
40
|
end
|
41
|
+
|
42
|
+
context "when request is defined in context of ContextShim" do
|
43
|
+
context "when overriding by params" do
|
44
|
+
it do
|
45
|
+
ctx = Class.new {
|
46
|
+
public :session
|
47
|
+
def request
|
48
|
+
build_request(params: {
|
49
|
+
"ab_test" => { "link_color" => "blue" }
|
50
|
+
})
|
51
|
+
end
|
52
|
+
}.new
|
53
|
+
|
54
|
+
context_shim = Split::EncapsulatedHelper::ContextShim.new(ctx)
|
55
|
+
expect(context_shim.ab_test("link_color", "blue", "red")).to be("blue")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when overriding by cookies" do
|
60
|
+
it do
|
61
|
+
ctx = Class.new {
|
62
|
+
public :session
|
63
|
+
def request
|
64
|
+
build_request(cookies: {
|
65
|
+
"split_override" => '{ "link_color": "red" }'
|
66
|
+
})
|
67
|
+
end
|
68
|
+
}.new
|
69
|
+
|
70
|
+
context_shim = Split::EncapsulatedHelper::ContextShim.new(ctx)
|
71
|
+
expect(context_shim.ab_test("link_color", "blue", "red")).to be("red")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
49
75
|
end
|
50
76
|
end
|
data/spec/helper_spec.rb
CHANGED
@@ -670,7 +670,7 @@ describe Split::Helper do
|
|
670
670
|
|
671
671
|
describe "when user is a robot" do
|
672
672
|
before(:each) do
|
673
|
-
@request =
|
673
|
+
@request = build_request(user_agent: "Googlebot/2.1 (+http://www.google.com/bot.html)")
|
674
674
|
end
|
675
675
|
|
676
676
|
describe "ab_test" do
|
@@ -768,7 +768,7 @@ describe Split::Helper do
|
|
768
768
|
describe "when ip address is ignored" do
|
769
769
|
context "individually" do
|
770
770
|
before(:each) do
|
771
|
-
@request =
|
771
|
+
@request = build_request(ip: "81.19.48.130")
|
772
772
|
Split.configure do |c|
|
773
773
|
c.ignore_ip_addresses << "81.19.48.130"
|
774
774
|
end
|
@@ -779,7 +779,7 @@ describe Split::Helper do
|
|
779
779
|
|
780
780
|
context "for a range" do
|
781
781
|
before(:each) do
|
782
|
-
@request =
|
782
|
+
@request = build_request(ip: "81.19.48.129")
|
783
783
|
Split.configure do |c|
|
784
784
|
c.ignore_ip_addresses << /81\.19\.48\.[0-9]+/
|
785
785
|
end
|
@@ -790,7 +790,7 @@ describe Split::Helper do
|
|
790
790
|
|
791
791
|
context "using both a range and a specific value" do
|
792
792
|
before(:each) do
|
793
|
-
@request =
|
793
|
+
@request = build_request(ip: "81.19.48.128")
|
794
794
|
Split.configure do |c|
|
795
795
|
c.ignore_ip_addresses << "81.19.48.130"
|
796
796
|
c.ignore_ip_addresses << /81\.19\.48\.[0-9]+/
|
@@ -802,7 +802,7 @@ describe Split::Helper do
|
|
802
802
|
|
803
803
|
context "when ignored other address" do
|
804
804
|
before do
|
805
|
-
@request =
|
805
|
+
@request = build_request(ip: "1.1.1.1")
|
806
806
|
Split.configure do |c|
|
807
807
|
c.ignore_ip_addresses << "81.19.48.130"
|
808
808
|
end
|
@@ -819,7 +819,7 @@ describe Split::Helper do
|
|
819
819
|
|
820
820
|
describe "when user is previewing" do
|
821
821
|
before(:each) do
|
822
|
-
@request =
|
822
|
+
@request = build_request(headers: { "x-purpose" => "preview" })
|
823
823
|
end
|
824
824
|
|
825
825
|
it_behaves_like "a disabled test"
|
@@ -67,14 +67,14 @@ describe Split::Persistence::CookieAdapter do
|
|
67
67
|
it "puts multiple experiments in a single cookie" do
|
68
68
|
subject["foo"] = "FOO"
|
69
69
|
subject["bar"] = "BAR"
|
70
|
-
expect(context.response.headers["Set-Cookie"]).to
|
70
|
+
expect(Array(context.response.headers["Set-Cookie"])).to include(/\Asplit=%7B%22foo%22%3A%22FOO%22%2C%22bar%22%3A%22BAR%22%7D; path=\/; expires=[a-zA-Z]{3}, \d{2} [a-zA-Z]{3} \d{4} \d{2}:\d{2}:\d{2} [A-Z]{3}\Z/)
|
71
71
|
end
|
72
72
|
|
73
73
|
it "ensure other added cookies are not overriden" do
|
74
74
|
context.response.set_cookie "dummy", "wow"
|
75
75
|
subject["foo"] = "FOO"
|
76
|
-
expect(context.response.headers["Set-Cookie"]).to include(
|
77
|
-
expect(context.response.headers["Set-Cookie"]).to include(
|
76
|
+
expect(Array(context.response.headers["Set-Cookie"])).to include(/dummy=wow/)
|
77
|
+
expect(Array(context.response.headers["Set-Cookie"])).to include(/split=/)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
data/spec/spec_helper.rb
CHANGED
@@ -9,7 +9,6 @@ require "simplecov"
|
|
9
9
|
SimpleCov.start
|
10
10
|
|
11
11
|
require "split"
|
12
|
-
require "ostruct"
|
13
12
|
require "yaml"
|
14
13
|
require "pry"
|
15
14
|
|
@@ -44,11 +43,24 @@ def params
|
|
44
43
|
@params ||= {}
|
45
44
|
end
|
46
45
|
|
47
|
-
def request
|
48
|
-
@request ||=
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
46
|
+
def request
|
47
|
+
@request ||= build_request
|
48
|
+
end
|
49
|
+
|
50
|
+
DummyRequest = Struct.new(:user_agent, :ip, :params, :cookies, :headers)
|
51
|
+
|
52
|
+
def build_request(
|
53
|
+
user_agent: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
|
54
|
+
ip: "192.168.1.1",
|
55
|
+
params: {},
|
56
|
+
cookies: {},
|
57
|
+
headers: {}
|
58
|
+
)
|
59
|
+
r = DummyRequest.new
|
60
|
+
r.user_agent = user_agent
|
61
|
+
r.ip = ip
|
62
|
+
r.params = params
|
63
|
+
r.cookies = cookies
|
64
|
+
r.headers = headers
|
65
|
+
r
|
54
66
|
end
|
data/split.gemspec
CHANGED
@@ -20,10 +20,11 @@ Gem::Specification.new do |s|
|
|
20
20
|
"source_code_uri" => "https://github.com/splitrb/split",
|
21
21
|
"bug_tracker_uri" => "https://github.com/splitrb/split/issues",
|
22
22
|
"wiki_uri" => "https://github.com/splitrb/split/wiki",
|
23
|
-
"mailing_list_uri" => "https://groups.google.com/d/forum/split-ruby"
|
23
|
+
"mailing_list_uri" => "https://groups.google.com/d/forum/split-ruby",
|
24
|
+
"funding_uri" => "https://opencollective.com/split"
|
24
25
|
}
|
25
26
|
|
26
|
-
s.required_ruby_version = ">= 2.
|
27
|
+
s.required_ruby_version = ">= 2.7.0"
|
27
28
|
s.required_rubygems_version = ">= 2.0.0"
|
28
29
|
|
29
30
|
s.files = `git ls-files`.split("\n")
|
@@ -34,6 +35,8 @@ Gem::Specification.new do |s|
|
|
34
35
|
s.add_dependency "sinatra", ">= 1.2.6"
|
35
36
|
s.add_dependency "rubystats", ">= 0.3.0"
|
36
37
|
s.add_dependency "matrix"
|
38
|
+
s.add_dependency "bigdecimal"
|
39
|
+
s.add_dependency "cgi"
|
37
40
|
|
38
41
|
s.add_development_dependency "bundler", ">= 1.17"
|
39
42
|
s.add_development_dependency "simplecov", "~> 0.15"
|
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: 4.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:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: redis
|
@@ -66,6 +65,34 @@ dependencies:
|
|
66
65
|
- - ">="
|
67
66
|
- !ruby/object:Gem::Version
|
68
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'
|
69
96
|
- !ruby/object:Gem::Dependency
|
70
97
|
name: bundler
|
71
98
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,7 +191,6 @@ dependencies:
|
|
164
191
|
- - ">="
|
165
192
|
- !ruby/object:Gem::Version
|
166
193
|
version: '5.0'
|
167
|
-
description:
|
168
194
|
email:
|
169
195
|
- andrewnez@gmail.com
|
170
196
|
executables: []
|
@@ -189,10 +215,6 @@ files:
|
|
189
215
|
- LICENSE
|
190
216
|
- README.md
|
191
217
|
- Rakefile
|
192
|
-
- gemfiles/5.2.gemfile
|
193
|
-
- gemfiles/6.0.gemfile
|
194
|
-
- gemfiles/6.1.gemfile
|
195
|
-
- gemfiles/7.0.gemfile
|
196
218
|
- lib/split.rb
|
197
219
|
- lib/split/algorithms.rb
|
198
220
|
- lib/split/algorithms/block_randomization.rb
|
@@ -274,7 +296,7 @@ metadata:
|
|
274
296
|
bug_tracker_uri: https://github.com/splitrb/split/issues
|
275
297
|
wiki_uri: https://github.com/splitrb/split/wiki
|
276
298
|
mailing_list_uri: https://groups.google.com/d/forum/split-ruby
|
277
|
-
|
299
|
+
funding_uri: https://opencollective.com/split
|
278
300
|
rdoc_options: []
|
279
301
|
require_paths:
|
280
302
|
- lib
|
@@ -282,15 +304,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
282
304
|
requirements:
|
283
305
|
- - ">="
|
284
306
|
- !ruby/object:Gem::Version
|
285
|
-
version: 2.
|
307
|
+
version: 2.7.0
|
286
308
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
287
309
|
requirements:
|
288
310
|
- - ">="
|
289
311
|
- !ruby/object:Gem::Version
|
290
312
|
version: 2.0.0
|
291
313
|
requirements: []
|
292
|
-
rubygems_version: 3.
|
293
|
-
signing_key:
|
314
|
+
rubygems_version: 3.7.0.dev
|
294
315
|
specification_version: 4
|
295
316
|
summary: Rack based split testing framework
|
296
317
|
test_files:
|
data/gemfiles/5.2.gemfile
DELETED
data/gemfiles/6.0.gemfile
DELETED
data/gemfiles/6.1.gemfile
DELETED