split 1.7.0 → 2.0.0
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/CHANGELOG.md +7 -0
 - data/README.md +1 -1
 - data/lib/split/encapsulated_helper.rb +1 -6
 - data/lib/split/helper.rb +4 -14
 - data/lib/split/version.rb +2 -2
 - data/spec/goals_collection_spec.rb +2 -2
 - data/spec/helper_spec.rb +14 -8
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 979183911b308ee1272e4d98e1bd0b8c87be732d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8a4e49e77326cd94165f551b5e2080eaff78f053
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: a990656f1a7342d069565c5ed6723577b915f77df5000e2d2fd8623105f060d2e079af2ded60d9b3b46120316db35a2c2ed1d88a68218e68784797ae83c4b9e1
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 8c8ce0354d575b9b212c997753200b00e22eb9d379617303e3b95e14717a118182d238bd4141c0a1c9e4411e3066f503174462bac5253a35c8e19960d408f120
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -136,7 +136,7 @@ You can do this by passing it as a parameter in the url. 
     | 
|
| 
       136 
136 
     | 
    
         | 
| 
       137 
137 
     | 
    
         
             
            If you have an experiment called `button_color` with alternatives called `red` and `blue` used on your homepage, a url such as:
         
     | 
| 
       138 
138 
     | 
    
         | 
| 
       139 
     | 
    
         
            -
                http://myawesomesite.com?button_color=red
         
     | 
| 
      
 139 
     | 
    
         
            +
                http://myawesomesite.com?ab_test[button_color]=red
         
     | 
| 
       140 
140 
     | 
    
         | 
| 
       141 
141 
     | 
    
         
             
            will always have red buttons. This won't be stored in your session or count towards to results, unless you set the `store_override` configuration option.
         
     | 
| 
       142 
142 
     | 
    
         | 
| 
         @@ -15,7 +15,7 @@ module Split 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                class ContextShim
         
     | 
| 
       17 
17 
     | 
    
         
             
                  include Split::Helper
         
     | 
| 
       18 
     | 
    
         
            -
                  public :ab_test, : 
     | 
| 
      
 18 
     | 
    
         
            +
                  public :ab_test, :ab_finished
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
                  def initialize(context)
         
     | 
| 
       21 
21 
     | 
    
         
             
                    @context = context
         
     | 
| 
         @@ -43,11 +43,6 @@ module Split 
     | 
|
| 
       43 
43 
     | 
    
         
             
                  end
         
     | 
| 
       44 
44 
     | 
    
         
             
                end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                def ab_test_finished(*arguments)
         
     | 
| 
       47 
     | 
    
         
            -
                  warn 'DEPRECATION WARNING: ab_test_finished is deprecated and will be removed from Split 2.0.0'
         
     | 
| 
       48 
     | 
    
         
            -
                  split_context_shim.finished *arguments
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
46 
     | 
    
         
             
                private
         
     | 
| 
       52 
47 
     | 
    
         | 
| 
       53 
48 
     | 
    
         
             
                # instantiate and memoize a context shim in case of multiple ab_test* calls
         
     | 
    
        data/lib/split/helper.rb
    CHANGED
    
    | 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         
             
            module Split
         
     | 
| 
       3 
3 
     | 
    
         
             
              module Helper
         
     | 
| 
      
 4 
     | 
    
         
            +
                OVERRIDE_PARAM_NAME = "ab_test"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       4 
6 
     | 
    
         
             
                module_function
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
       6 
8 
     | 
    
         
             
                def ab_test(metric_descriptor, control = nil, *alternatives)
         
     | 
| 
         @@ -74,30 +76,18 @@ module Split 
     | 
|
| 
       74 
76 
     | 
    
         
             
                  Split.configuration.db_failover_on_db_error.call(e)
         
     | 
| 
       75 
77 
     | 
    
         
             
                end
         
     | 
| 
       76 
78 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
                def finished(metric_descriptor, options = {:reset => true})
         
     | 
| 
       78 
     | 
    
         
            -
                  warn 'DEPRECATION WARNING: finished method was renamed to ab_finished and will be removed in Split 2.0.0'
         
     | 
| 
       79 
     | 
    
         
            -
                  ab_finished(metric_descriptor, options)
         
     | 
| 
       80 
     | 
    
         
            -
                end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
79 
     | 
    
         
             
                def override_present?(experiment_name)
         
     | 
| 
       83 
     | 
    
         
            -
                   
     | 
| 
      
 80 
     | 
    
         
            +
                  override_alternative(experiment_name)
         
     | 
| 
       84 
81 
     | 
    
         
             
                end
         
     | 
| 
       85 
82 
     | 
    
         | 
| 
       86 
83 
     | 
    
         
             
                def override_alternative(experiment_name)
         
     | 
| 
       87 
     | 
    
         
            -
                  params[ 
     | 
| 
      
 84 
     | 
    
         
            +
                  defined?(params) && params[OVERRIDE_PARAM_NAME] && params[OVERRIDE_PARAM_NAME][experiment_name]
         
     | 
| 
       88 
85 
     | 
    
         
             
                end
         
     | 
| 
       89 
86 
     | 
    
         | 
| 
       90 
87 
     | 
    
         
             
                def split_generically_disabled?
         
     | 
| 
       91 
88 
     | 
    
         
             
                  defined?(params) && params['SPLIT_DISABLE']
         
     | 
| 
       92 
89 
     | 
    
         
             
                end
         
     | 
| 
       93 
90 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
                def begin_experiment(experiment, alternative_name = nil)
         
     | 
| 
       95 
     | 
    
         
            -
                  warn 'DEPRECATION WARNING: begin_experiment is deprecated and will be removed from Split 2.0.0'
         
     | 
| 
       96 
     | 
    
         
            -
                  alternative_name ||= experiment.control.name
         
     | 
| 
       97 
     | 
    
         
            -
                  ab_user[experiment.key] = alternative_name
         
     | 
| 
       98 
     | 
    
         
            -
                  alternative_name
         
     | 
| 
       99 
     | 
    
         
            -
                end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
91 
     | 
    
         
             
                def ab_user
         
     | 
| 
       102 
92 
     | 
    
         
             
                  @ab_user ||= User.new(self)
         
     | 
| 
       103 
93 
     | 
    
         
             
                end
         
     | 
    
        data/lib/split/version.rb
    CHANGED
    
    
| 
         @@ -24,7 +24,7 @@ describe Split::GoalsCollection do 
     | 
|
| 
       24 
24 
     | 
    
         
             
              describe "#validate!" do
         
     | 
| 
       25 
25 
     | 
    
         
             
                it "should't raise ArgumentError if @goals is nil?" do
         
     | 
| 
       26 
26 
     | 
    
         
             
                  goals_collection = Split::GoalsCollection.new('experiment_name')
         
     | 
| 
       27 
     | 
    
         
            -
                  expect { goals_collection.validate! }.not_to raise_error 
     | 
| 
      
 27 
     | 
    
         
            +
                  expect { goals_collection.validate! }.not_to raise_error
         
     | 
| 
       28 
28 
     | 
    
         
             
                end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                it "should raise ArgumentError if @goals is not an Array" do
         
     | 
| 
         @@ -36,7 +36,7 @@ describe Split::GoalsCollection do 
     | 
|
| 
       36 
36 
     | 
    
         
             
                it "should't raise ArgumentError if @goals is an array" do
         
     | 
| 
       37 
37 
     | 
    
         
             
                  goals_collection = Split::GoalsCollection.
         
     | 
| 
       38 
38 
     | 
    
         
             
                    new('experiment_name', ['an array'])
         
     | 
| 
       39 
     | 
    
         
            -
                  expect { goals_collection.validate! }.not_to raise_error 
     | 
| 
      
 39 
     | 
    
         
            +
                  expect { goals_collection.validate! }.not_to raise_error
         
     | 
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
       41 
41 
     | 
    
         
             
              end
         
     | 
| 
       42 
42 
     | 
    
         | 
    
        data/spec/helper_spec.rb
    CHANGED
    
    | 
         @@ -89,27 +89,33 @@ describe Split::Helper do 
     | 
|
| 
       89 
89 
     | 
    
         
             
                  expect(ab_test('link_color', 'blue', 'red')).to eq('orange')
         
     | 
| 
       90 
90 
     | 
    
         
             
                end
         
     | 
| 
       91 
91 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
                it "should allow the alternative to be  
     | 
| 
       93 
     | 
    
         
            -
                   
     | 
| 
      
 92 
     | 
    
         
            +
                it "should allow the alternative to be forced by passing it in the params" do
         
     | 
| 
      
 93 
     | 
    
         
            +
                  # ?ab_test[link_color]=blue
         
     | 
| 
      
 94 
     | 
    
         
            +
                  @params = { 'ab_test' => { 'link_color' => 'blue' } }
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
       94 
96 
     | 
    
         
             
                  alternative = ab_test('link_color', 'blue', 'red')
         
     | 
| 
       95 
97 
     | 
    
         
             
                  expect(alternative).to eq('blue')
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
       96 
99 
     | 
    
         
             
                  alternative = ab_test('link_color', {'blue' => 1}, 'red' => 5)
         
     | 
| 
       97 
100 
     | 
    
         
             
                  expect(alternative).to eq('blue')
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  @params = { 'ab_test' => { 'link_color' => 'red' } }
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
       99 
104 
     | 
    
         
             
                  alternative = ab_test('link_color', 'blue', 'red')
         
     | 
| 
       100 
105 
     | 
    
         
             
                  expect(alternative).to eq('red')
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
       101 
107 
     | 
    
         
             
                  alternative = ab_test('link_color', {'blue' => 5}, 'red' => 1)
         
     | 
| 
       102 
108 
     | 
    
         
             
                  expect(alternative).to eq('red')
         
     | 
| 
       103 
109 
     | 
    
         
             
                end
         
     | 
| 
       104 
110 
     | 
    
         | 
| 
       105 
111 
     | 
    
         
             
                it "should not allow an arbitrary alternative" do
         
     | 
| 
       106 
     | 
    
         
            -
                  @params = {'link_color' => 'pink'}
         
     | 
| 
      
 112 
     | 
    
         
            +
                  @params = { 'ab_test' => { 'link_color' => 'pink' } }
         
     | 
| 
       107 
113 
     | 
    
         
             
                  alternative = ab_test('link_color', 'blue')
         
     | 
| 
       108 
114 
     | 
    
         
             
                  expect(alternative).to eq('blue')
         
     | 
| 
       109 
115 
     | 
    
         
             
                end
         
     | 
| 
       110 
116 
     | 
    
         | 
| 
       111 
117 
     | 
    
         
             
                it "should not store the split when a param forced alternative" do
         
     | 
| 
       112 
     | 
    
         
            -
                  @params = {'link_color' => 'blue'}
         
     | 
| 
      
 118 
     | 
    
         
            +
                  @params = { 'ab_test' => { 'link_color' => 'blue' } }
         
     | 
| 
       113 
119 
     | 
    
         
             
                  expect(ab_user).not_to receive(:[]=)
         
     | 
| 
       114 
120 
     | 
    
         
             
                  ab_test('link_color', 'blue', 'red')
         
     | 
| 
       115 
121 
     | 
    
         
             
                end
         
     | 
| 
         @@ -136,7 +142,7 @@ describe Split::Helper do 
     | 
|
| 
       136 
142 
     | 
    
         
             
                  before { Split.configuration.store_override = true }
         
     | 
| 
       137 
143 
     | 
    
         | 
| 
       138 
144 
     | 
    
         
             
                  it "should store the forced alternative" do
         
     | 
| 
       139 
     | 
    
         
            -
                    @params = {'link_color' => 'blue'}
         
     | 
| 
      
 145 
     | 
    
         
            +
                    @params = { 'ab_test' => { 'link_color' => 'blue' } }
         
     | 
| 
       140 
146 
     | 
    
         
             
                    expect(ab_user).to receive(:[]=).with('link_color', 'blue')
         
     | 
| 
       141 
147 
     | 
    
         
             
                    ab_test('link_color', 'blue', 'red')
         
     | 
| 
       142 
148 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -232,7 +238,7 @@ describe Split::Helper do 
     | 
|
| 
       232 
238 
     | 
    
         
             
                end
         
     | 
| 
       233 
239 
     | 
    
         | 
| 
       234 
240 
     | 
    
         
             
                it 'should be passed to helper block' do
         
     | 
| 
       235 
     | 
    
         
            -
                  @params = {'my_experiment' => 'one'}
         
     | 
| 
      
 241 
     | 
    
         
            +
                  @params = { 'ab_test' => { 'my_experiment' => 'one' } }
         
     | 
| 
       236 
242 
     | 
    
         
             
                  expect(ab_test('my_experiment')).to eq 'one'
         
     | 
| 
       237 
243 
     | 
    
         
             
                  expect(ab_test('my_experiment') do |alternative, meta|
         
     | 
| 
       238 
244 
     | 
    
         
             
                    meta
         
     | 
| 
         @@ -790,7 +796,7 @@ describe Split::Helper do 
     | 
|
| 
       790 
796 
     | 
    
         | 
| 
       791 
797 
     | 
    
         
             
                      context 'and given an override parameter' do
         
     | 
| 
       792 
798 
     | 
    
         
             
                        it 'should use given override instead of the first alternative' do
         
     | 
| 
       793 
     | 
    
         
            -
                          @params = {'link_color' => 'red'}
         
     | 
| 
      
 799 
     | 
    
         
            +
                          @params = { 'ab_test' => { 'link_color' => 'red' } }
         
     | 
| 
       794 
800 
     | 
    
         
             
                          expect(ab_test('link_color', 'blue', 'red')).to eq('red')
         
     | 
| 
       795 
801 
     | 
    
         
             
                          expect(ab_test('link_color', 'blue', 'red', 'green')).to eq('red')
         
     | 
| 
       796 
802 
     | 
    
         
             
                          expect(ab_test('link_color', {'blue' => 0.01}, 'red' => 0.2)).to eq('red')
         
     | 
    
        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: 2.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Andrew Nesbitt
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-07-17 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: redis
         
     |