split 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acc9cc61f2fbaacd23c4101ce3533baad6fc2f5e
4
- data.tar.gz: 0f1608e29221a58215ee240ac01ac921256e8466
3
+ metadata.gz: b771c2496cd674b0512e956fcdb3bf67768ba4a8
4
+ data.tar.gz: cd3ac62720dbaa5968d58be74ebc689854fd0fac
5
5
  SHA512:
6
- metadata.gz: 5e4cd8b3e649929c5c3a9f406a8a587c7cc23121146f0c0002ff05d6c86b7c61e508a05acab5d70172864d73f4c544263e72d1476a8d5afe134deb34b6012172
7
- data.tar.gz: f9be6dc468f3fe7941e07b3734d1fae28a4a05209501cb093769d8f14001ec596d5b3627f808444523b303fe4d44de0946a328e04a1b9afe64434ba5c54c0493
6
+ metadata.gz: f94c6eca1509241995790fefc2407ae8cdc546ceae8aad2a4fa4975c47dd4370f5cc835b630a9c91a1cd7682a24bf49c34af422a31f576af70162003717f396e
7
+ data.tar.gz: 9e47de4c77fa41c39d525c2c79448c3d1e5fdc564dfa340d00857a91cedd11517fc3e871b7f4bb208eab9a5dfe29e2a026dcd40139569d471e146d68bfbc982c
@@ -1,11 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.5
3
+ - 2.2.0
4
4
 
5
5
  gemfile:
6
6
  - gemfiles/3.2.gemfile
7
7
  - gemfiles/4.0.gemfile
8
8
  - gemfiles/4.1.gemfile
9
+ - gemfiles/4.2.gemfile
9
10
 
10
11
  services:
11
12
  - redis-server
data/Appraisals CHANGED
@@ -1,11 +1,15 @@
1
1
  appraise "3.2" do
2
- gem "rails", "~> 3.2.13"
2
+ gem "rails", "~> 3.2.21"
3
3
  end
4
4
 
5
5
  appraise "4.0" do
6
- gem "rails", "~> 4.0.12"
6
+ gem "rails", "~> 4.0.13"
7
7
  end
8
8
 
9
9
  appraise "4.1" do
10
- gem "rails", "~> 4.1.8"
10
+ gem "rails", "~> 4.1.10"
11
+ end
12
+
13
+ appraise "4.2" do
14
+ gem "rails", "~> 4.2.1"
11
15
  end
@@ -1,3 +1,23 @@
1
+ ## 1.2.1 (May 17th, 2015)
2
+
3
+ Features
4
+
5
+ - Handle redis DNS resolution failures gracefully (@fusion2004, #310)
6
+ - Push metadata to ab_test block (@ekorneeff, #296)
7
+ - Helper methods are now private when included in controllers (@ipoval, #303)
8
+
9
+ Bugfixes:
10
+
11
+ - Return an empty hash as metadata when Split is disabled (@tomasdundacek, #313)
12
+ - Don't use capture helper from ActionView (@tomasdundacek, #312)
13
+
14
+ Misc:
15
+
16
+ - Remove body "max-width" from dashboard (@xicreative, #299)
17
+ - fix private for class methods (@ipoval, #301)
18
+ - minor memoization fix in spec (@ipoval, #304)
19
+ - Minor documentation fixes (#295, #297, #305, #308)
20
+
1
21
  ## 1.2.0 (January 24th, 2015)
2
22
 
3
23
  Features
@@ -11,6 +31,11 @@ Bugfixes:
11
31
 
12
32
  ## 1.1.0 (January 9th, 2015)
13
33
 
34
+ Changes:
35
+
36
+ - Public class methods on `Split::Experiment` (e.g., `find_or_create`)
37
+ have been moved to `Split::ExperimentCatalog`.
38
+
14
39
  Features:
15
40
 
16
41
  - Decouple trial from Split::Helper (@joshdover, #286)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Split
1
+ # [Split](http://libraries.io/rubygems/split)
2
2
 
3
3
  Split is a rack based ab testing framework designed to work with Rails, Sinatra or any other rack based app.
4
4
 
@@ -7,10 +7,10 @@ Split is heavily inspired by the Abingo and Vanity rails ab testing plugins and
7
7
  Split is designed to be hacker friendly, allowing for maximum customisation and extensibility.
8
8
 
9
9
  [![Gem Version](https://badge.fury.io/rb/split.svg)](http://badge.fury.io/rb/split)
10
- [![Build Status](https://secure.travis-ci.org/andrew/split.svg?branch=master)](http://travis-ci.org/andrew/split)
11
- [![Dependency Status](https://gemnasium.com/andrew/split.svg)](https://gemnasium.com/andrew/split)
12
- [![Code Climate](https://codeclimate.com/github/andrew/split.svg)](https://codeclimate.com/github/andrew/split)
13
- [![Coverage Status](http://img.shields.io/coveralls/andrew/split.svg)](https://coveralls.io/r/andrew/split)
10
+ [![Build Status](https://secure.travis-ci.org/splitrb/split.svg?branch=master)](http://travis-ci.org/splitrb/split)
11
+ [![Dependency Status](https://gemnasium.com/splitrb/split.svg)](https://gemnasium.com/splitrb/split)
12
+ [![Code Climate](https://codeclimate.com/github/splitrb/split.svg)](https://codeclimate.com/github/splitrb/split)
13
+ [![Coverage Status](http://img.shields.io/coveralls/splitrb/split.svg)](https://coveralls.io/r/splitrb/split)
14
14
 
15
15
  ## Requirements
16
16
 
@@ -87,7 +87,7 @@ Example: View
87
87
 
88
88
  ```erb
89
89
  <% ab_test("login_button", "/images/button1.jpg", "/images/button2.jpg") do |button_file| %>
90
- <%= img_tag(button_file, :alt => "Login!") %>
90
+ <%= image_tag(button_file, :alt => "Login!") %>
91
91
  <% end %>
92
92
  ```
93
93
 
@@ -115,7 +115,7 @@ Example: Conversion tracking (in a view)
115
115
  Thanks for signing up, dude! <% finished("signup_page_redesign") %>
116
116
  ```
117
117
 
118
- You can find more examples, tutorials and guides on the [wiki](https://github.com/andrew/split/wiki).
118
+ You can find more examples, tutorials and guides on the [wiki](https://github.com/splitrb/split/wiki).
119
119
 
120
120
  ## Statistical Validity
121
121
 
@@ -250,7 +250,7 @@ For example:
250
250
 
251
251
  ``` ruby
252
252
  Split.configure do |config|
253
- config.on_trial_choose = :log_trial_choice
253
+ config.on_trial_choose = :log_trial_choose
254
254
  config.on_trial_complete = :log_trial_complete
255
255
  end
256
256
  ```
@@ -455,8 +455,8 @@ my_first_experiment:
455
455
  meta:
456
456
  a:
457
457
  text: "Have a fantastic day"
458
- b:
459
- text: "Don't get hit by a bus"
458
+ b:
459
+ text: "Don't get hit by a bus"
460
460
  ```
461
461
 
462
462
  This allows for some advanced experiment configuration using methods like:
@@ -467,6 +467,15 @@ trial.alternative.name # => "a"
467
467
  trial.metadata['text'] # => "Have a fantastic day"
468
468
  ```
469
469
 
470
+ or in views:
471
+
472
+ ```erb
473
+ <% ab_test("my_first_experiment") do |alternative, meta| %>
474
+ <%= alternative %>
475
+ <small><%= meta['text'] %></small>
476
+ <% end %>
477
+ ```
478
+
470
479
  #### Metrics
471
480
 
472
481
  You might wish to track generic metrics, such as conversions, and use
@@ -605,7 +614,7 @@ conduct experiments that are not tied to a web session.
605
614
 
606
615
  ```ruby
607
616
  # create a new experiment
608
- experiment = Split::Experiment.find_or_create('color', 'red', 'blue')
617
+ experiment = Split::ExperimentCatalog.find_or_create('color', 'red', 'blue')
609
618
  # create a new trial
610
619
  trial = Split::Trial.new(:experiment => experiment)
611
620
  # run trial
@@ -641,8 +650,8 @@ end
641
650
 
642
651
  ## Extensions
643
652
 
644
- - [Split::Export](http://github.com/andrew/split-export) - easily export ab test data out of Split
645
- - [Split::Analytics](http://github.com/andrew/split-analytics) - push test data to google analytics
653
+ - [Split::Export](http://github.com/splitrb/split-export) - easily export ab test data out of Split
654
+ - [Split::Analytics](http://github.com/splitrb/split-analytics) - push test data to google analytics
646
655
  - [Split::Mongoid](https://github.com/MongoHQ/split-mongoid) - store experiment data in mongoid (still uses redis)
647
656
  - [Split::Cacheable](https://github.com/harrystech/split_cacheable) - automatically create cache buckets per test
648
657
  - [Split::Counters](https://github.com/bernardkroes/split-counters) - add counters per experiment and alternative
@@ -659,12 +668,12 @@ Ryan bates has produced an excellent 10 minute screencast about split on the Rai
659
668
 
660
669
  ## Contributors
661
670
 
662
- Over 70 different people have contributed to the project, you can see them all here: https://github.com/andrew/split/graphs/contributors
671
+ Over 70 different people have contributed to the project, you can see them all here: https://github.com/splitrb/split/graphs/contributors
663
672
 
664
673
  ## Development
665
674
 
666
- Source hosted at [GitHub](http://github.com/andrew/split).
667
- Report Issues/Feature requests on [GitHub Issues](http://github.com/andrew/split/issues).
675
+ Source hosted at [GitHub](http://github.com/splitrb/split).
676
+ Report Issues/Feature requests on [GitHub Issues](http://github.com/splitrb/split/issues).
668
677
  Discussion at [Google Groups](https://groups.google.com/d/forum/split-ruby)
669
678
 
670
679
  Tests can be ran with `rake spec`
@@ -682,4 +691,4 @@ Tests can be ran with `rake spec`
682
691
 
683
692
  ## Copyright
684
693
 
685
- Copyright (c) 2015 Andrew Nesbitt. See [LICENSE](https://github.com/andrew/split/blob/master/LICENSE) for details.
694
+ Copyright (c) 2015 Andrew Nesbitt. See [LICENSE](https://github.com/splitrb/split/blob/master/LICENSE) for details.
@@ -3,6 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "appraisal"
6
- gem "rails", "~> 3.2.13"
6
+ gem "rails", "~> 3.2.21"
7
7
 
8
8
  gemspec :path => "../"
@@ -3,6 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "appraisal"
6
- gem "rails", "~> 4.0.12"
6
+ gem "rails", "~> 4.0.13"
7
7
 
8
8
  gemspec :path => "../"
@@ -3,6 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "appraisal"
6
- gem "rails", "~> 4.1.8"
6
+ gem "rails", "~> 4.1.10"
7
7
 
8
8
  gemspec :path => "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal"
6
+ gem "rails", "~> 4.2.1"
7
+
8
+ gemspec :path => "../"
@@ -5,30 +5,32 @@ require 'simple-random'
5
5
  module Split
6
6
  module Algorithms
7
7
  module Whiplash
8
- def self.choose_alternative(experiment)
9
- experiment[best_guess(experiment.alternatives)]
10
- end
8
+ class << self
9
+ def choose_alternative(experiment)
10
+ experiment[best_guess(experiment.alternatives)]
11
+ end
11
12
 
12
- private
13
+ private
13
14
 
14
- def self.arm_guess(participants, completions)
15
- a = [participants, 0].max
16
- b = [participants-completions, 0].max
17
- s = SimpleRandom.new; s.set_seed; s.beta(a+fairness_constant, b+fairness_constant)
18
- end
15
+ def arm_guess(participants, completions)
16
+ a = [participants, 0].max
17
+ b = [participants-completions, 0].max
18
+ s = SimpleRandom.new; s.set_seed; s.beta(a+fairness_constant, b+fairness_constant)
19
+ end
19
20
 
20
- def self.best_guess(alternatives)
21
- guesses = {}
22
- alternatives.each do |alternative|
23
- guesses[alternative.name] = arm_guess(alternative.participant_count, alternative.all_completed_count)
21
+ def best_guess(alternatives)
22
+ guesses = {}
23
+ alternatives.each do |alternative|
24
+ guesses[alternative.name] = arm_guess(alternative.participant_count, alternative.all_completed_count)
25
+ end
26
+ gmax = guesses.values.max
27
+ best = guesses.keys.select { |name| guesses[name] == gmax }
28
+ best.sample
24
29
  end
25
- gmax = guesses.values.max
26
- best = guesses.keys.select {|name| guesses[name] == gmax }
27
- return best.sample
28
- end
29
30
 
30
- def self.fairness_constant
31
- 7
31
+ def fairness_constant
32
+ 7
33
+ end
32
34
  end
33
35
  end
34
36
  end
@@ -7,7 +7,6 @@ html {
7
7
  body {
8
8
  padding: 0 10px;
9
9
  margin: 10px auto 0;
10
- max-width:800px;
11
10
  }
12
11
 
13
12
  .header {
@@ -13,5 +13,5 @@
13
13
  <% end %>
14
14
  <% else %>
15
15
  <p class="intro">No experiments have started yet, you need to define them in your code and introduce them to your users.</p>
16
- <p class="intro">Check out the <a href='https://github.com/andrew/split#readme'>Readme</a> for more help getting started.</p>
16
+ <p class="intro">Check out the <a href='https://github.com/splitrb/split#readme'>Readme</a> for more help getting started.</p>
17
17
  <% end %>
@@ -20,7 +20,7 @@
20
20
  </div>
21
21
 
22
22
  <div id="footer">
23
- <p>Powered by <a href="http://github.com/andrew/split">Split</a> v<%=Split::VERSION %></p>
23
+ <p>Powered by <a href="http://github.com/splitrb/split">Split</a> v<%=Split::VERSION %></p>
24
24
  </div>
25
25
  </body>
26
26
  </html>
@@ -2,7 +2,7 @@
2
2
  # mix into our model classes.
3
3
  #
4
4
  # This module exposes only two methods
5
- # - ab_test and
5
+ # - ab_test and
6
6
  # - ab_test_finished
7
7
  # that can safely be mixed into any class.
8
8
  #
@@ -14,9 +14,12 @@ module Split
14
14
 
15
15
  class ContextShim
16
16
  include Split::Helper
17
+ public :ab_test, :finished
18
+
17
19
  def initialize(context)
18
20
  @context = context
19
21
  end
22
+
20
23
  def ab_user
21
24
  @ab_user ||= Split::Persistence.adapter.new(@context)
22
25
  end
@@ -12,13 +12,8 @@ module Split
12
12
  end
13
13
 
14
14
  def self.find(name)
15
- if Split.redis.exists(name)
16
- obj = Experiment.new name
17
- obj.load_from_redis
18
- else
19
- obj = nil
20
- end
21
- obj
15
+ return unless Split.redis.exists(name)
16
+ Experiment.new(name).tap { |exp| exp.load_from_redis }
22
17
  end
23
18
 
24
19
  def self.find_or_initialize(metric_descriptor, control = nil, *alternatives)
@@ -39,8 +34,6 @@ module Split
39
34
  experiment.save
40
35
  end
41
36
 
42
- private
43
-
44
37
  def self.normalize_experiment(metric_descriptor)
45
38
  if Hash === metric_descriptor
46
39
  experiment_name = metric_descriptor.keys.first
@@ -51,6 +44,7 @@ module Split
51
44
  end
52
45
  return experiment_name, goals
53
46
  end
47
+ private_class_method :normalize_experiment
54
48
 
55
49
  end
56
50
  end
@@ -1,5 +1,6 @@
1
1
  module Split
2
2
  module Helper
3
+ module_function
3
4
 
4
5
  def ab_test(metric_descriptor, control = nil, *alternatives)
5
6
  begin
@@ -15,7 +16,7 @@ module Split
15
16
  else
16
17
  control_variable(experiment.control)
17
18
  end
18
- rescue Errno::ECONNREFUSED, Redis::CannotConnectError => e
19
+ rescue Errno::ECONNREFUSED, Redis::CannotConnectError, SocketError => e
19
20
  raise(e) unless Split.configuration.db_failover
20
21
  Split.configuration.db_failover_on_db_error.call(e)
21
22
 
@@ -28,13 +29,8 @@ module Split
28
29
  end
29
30
 
30
31
  if block_given?
31
- if defined?(capture) # a block in a rails view
32
- block = Proc.new { yield(alternative) }
33
- concat(capture(alternative, &block))
34
- false
35
- else
36
- yield(alternative)
37
- end
32
+ metadata = trial ? trial.metadata : {}
33
+ yield(alternative, metadata)
38
34
  else
39
35
  alternative
40
36
  end
@@ -63,7 +59,6 @@ module Split
63
59
  end
64
60
  end
65
61
 
66
-
67
62
  def finished(metric_descriptor, options = {:reset => true})
68
63
  return if exclude_visitor? || Split.configuration.disabled?
69
64
  metric_descriptor, goals = normalize_metric(metric_descriptor)
@@ -130,8 +125,6 @@ module Split
130
125
  return experiment_pairs
131
126
  end
132
127
 
133
- protected
134
-
135
128
  def normalize_metric(metric_descriptor)
136
129
  if Hash === metric_descriptor
137
130
  experiment_name = metric_descriptor.keys.first
@@ -84,8 +84,6 @@ module Split
84
84
  end
85
85
  end
86
86
 
87
- private
88
-
89
87
  def self.normalize_metric(label)
90
88
  if Hash === label
91
89
  metric_name = label.keys.first
@@ -96,5 +94,7 @@ module Split
96
94
  end
97
95
  return metric_name, goals
98
96
  end
97
+ private_class_method :normalize_metric
98
+
99
99
  end
100
100
  end
@@ -7,22 +7,19 @@ module Split
7
7
  ADAPTERS = {
8
8
  :cookie => Split::Persistence::CookieAdapter,
9
9
  :session => Split::Persistence::SessionAdapter
10
- }
10
+ }.freeze
11
11
 
12
12
  def self.adapter
13
13
  if persistence_config.is_a?(Symbol)
14
- adapter_class = ADAPTERS[persistence_config]
15
- raise Split::InvalidPersistenceAdapterError unless adapter_class
14
+ ADAPTERS.fetch(persistence_config) { raise Split::InvalidPersistenceAdapterError }
16
15
  else
17
- adapter_class = persistence_config
16
+ persistence_config
18
17
  end
19
- adapter_class
20
18
  end
21
19
 
22
- private
23
-
24
20
  def self.persistence_config
25
21
  Split.configuration.persistence
26
22
  end
23
+ private_class_method :persistence_config
27
24
  end
28
25
  end
@@ -15,7 +15,7 @@ module Split
15
15
  end
16
16
 
17
17
  def metadata
18
- @metadata ||= experiment.metadata[alternative.name]
18
+ @metadata ||= experiment.metadata[alternative.name] if experiment.metadata
19
19
  end
20
20
 
21
21
  def alternative
@@ -1,6 +1,6 @@
1
1
  module Split
2
2
  MAJOR = 1
3
3
  MINOR = 2
4
- PATCH = 0
4
+ PATCH = 1
5
5
  VERSION = [MAJOR, MINOR, PATCH].join('.')
6
6
  end
@@ -34,7 +34,7 @@ module Split
34
34
 
35
35
  # Formula for pooled error of the difference of the means: root(π*(1-π)*(1/na+1/nc)
36
36
  # π = (xa + xc) / (na + nc)
37
- pi = (p_1*n_1 + p_2*n_2)/(n_1 + n_2)
37
+ pi = (p_1*n_1 + p_2*n_2)/(n_1 + n_2)
38
38
  s_p = Math.sqrt(pi*(1-pi)*(1/n_1 + 1/n_2))
39
39
 
40
40
  # Formula for unpooled error of the difference of the means: root(sa**2/na + sc**2/nc)
@@ -198,6 +198,37 @@ describe Split::Helper do
198
198
  end
199
199
  end
200
200
 
201
+ describe 'metadata' do
202
+ before do
203
+ Split.configuration.experiments = {
204
+ :my_experiment => {
205
+ :alternatives => ["one", "two"],
206
+ :resettable => false,
207
+ :metadata => { 'one' => 'Meta1', 'two' => 'Meta2' }
208
+ }
209
+ }
210
+ end
211
+
212
+ it 'should be passed to helper block' do
213
+ @params = {'my_experiment' => 'one'}
214
+ expect(ab_test('my_experiment')).to eq 'one'
215
+ expect(ab_test('my_experiment') do |alternative, meta|
216
+ meta
217
+ end).to eq('Meta1')
218
+ end
219
+
220
+ it 'should pass empty hash to helper block if library disabled' do
221
+ Split.configure do |config|
222
+ config.enabled = false
223
+ end
224
+
225
+ expect(ab_test('my_experiment')).to eq 'one'
226
+ expect(ab_test('my_experiment') do |_, meta|
227
+ meta
228
+ end).to eq({})
229
+ end
230
+ end
231
+
201
232
  describe 'finished' do
202
233
  before(:each) do
203
234
  @experiment_name = 'link_color'
@@ -32,8 +32,10 @@ def params
32
32
  end
33
33
 
34
34
  def request(ua = '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')
35
- r = OpenStruct.new
36
- r.user_agent = ua
37
- r.ip = '192.168.1.1'
38
- @request ||= r
35
+ @request ||= begin
36
+ r = OpenStruct.new
37
+ r.user_agent = ua
38
+ r.ip = '192.168.1.1'
39
+ r
40
+ end
39
41
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.authors = ["Andrew Nesbitt"]
10
10
  s.licenses = ['MIT']
11
11
  s.email = ["andrewnez@gmail.com"]
12
- s.homepage = "https://github.com/andrew/split"
12
+ s.homepage = "https://github.com/splitrb/split"
13
13
  s.summary = %q{Rack based split testing framework}
14
14
 
15
15
  s.required_ruby_version = '>= 1.9.2'
@@ -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 'bundler', '~> 1.6'
28
+ s.add_development_dependency 'bundler', '~> 1.7'
29
29
  s.add_development_dependency 'coveralls'
30
30
  s.add_development_dependency 'rack-test'
31
31
  s.add_development_dependency 'rake'
32
- s.add_development_dependency 'rspec', '~> 3.0'
32
+ s.add_development_dependency 'rspec', '~> 3.1.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.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-24 00:00:00.000000000 Z
11
+ date: 2015-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.6'
75
+ version: '1.7'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.6'
82
+ version: '1.7'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: coveralls
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '3.0'
131
+ version: 3.1.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '3.0'
138
+ version: 3.1.0
139
139
  description:
140
140
  email:
141
141
  - andrewnez@gmail.com
@@ -155,6 +155,7 @@ files:
155
155
  - gemfiles/3.2.gemfile
156
156
  - gemfiles/4.0.gemfile
157
157
  - gemfiles/4.1.gemfile
158
+ - gemfiles/4.2.gemfile
158
159
  - lib/split.rb
159
160
  - lib/split/algorithms.rb
160
161
  - lib/split/algorithms/weighted_sample.rb
@@ -208,7 +209,7 @@ files:
208
209
  - spec/support/cookies_mock.rb
209
210
  - spec/trial_spec.rb
210
211
  - split.gemspec
211
- homepage: https://github.com/andrew/split
212
+ homepage: https://github.com/splitrb/split
212
213
  licenses:
213
214
  - MIT
214
215
  metadata: {}