ab-split 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +30 -0
- data/.csslintrc +2 -0
- data/.eslintignore +1 -0
- data/.eslintrc +213 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +24 -0
- data/.rspec +1 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +679 -0
- data/.travis.yml +60 -0
- data/Appraisals +19 -0
- data/CHANGELOG.md +696 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +62 -0
- data/Gemfile +7 -0
- data/LICENSE +22 -0
- data/README.md +955 -0
- data/Rakefile +9 -0
- data/ab-split.gemspec +44 -0
- data/gemfiles/4.2.gemfile +9 -0
- data/gemfiles/5.0.gemfile +9 -0
- data/gemfiles/5.1.gemfile +9 -0
- data/gemfiles/5.2.gemfile +9 -0
- data/gemfiles/6.0.gemfile +9 -0
- data/lib/split.rb +76 -0
- data/lib/split/algorithms/block_randomization.rb +23 -0
- data/lib/split/algorithms/weighted_sample.rb +18 -0
- data/lib/split/algorithms/whiplash.rb +38 -0
- data/lib/split/alternative.rb +191 -0
- data/lib/split/combined_experiments_helper.rb +37 -0
- data/lib/split/configuration.rb +255 -0
- data/lib/split/dashboard.rb +74 -0
- data/lib/split/dashboard/helpers.rb +45 -0
- data/lib/split/dashboard/pagination_helpers.rb +86 -0
- data/lib/split/dashboard/paginator.rb +16 -0
- data/lib/split/dashboard/public/dashboard-filtering.js +43 -0
- data/lib/split/dashboard/public/dashboard.js +24 -0
- data/lib/split/dashboard/public/jquery-1.11.1.min.js +4 -0
- data/lib/split/dashboard/public/reset.css +48 -0
- data/lib/split/dashboard/public/style.css +328 -0
- data/lib/split/dashboard/views/_controls.erb +18 -0
- data/lib/split/dashboard/views/_experiment.erb +155 -0
- data/lib/split/dashboard/views/_experiment_with_goal_header.erb +8 -0
- data/lib/split/dashboard/views/index.erb +26 -0
- data/lib/split/dashboard/views/layout.erb +27 -0
- data/lib/split/encapsulated_helper.rb +42 -0
- data/lib/split/engine.rb +15 -0
- data/lib/split/exceptions.rb +6 -0
- data/lib/split/experiment.rb +486 -0
- data/lib/split/experiment_catalog.rb +51 -0
- data/lib/split/extensions/string.rb +16 -0
- data/lib/split/goals_collection.rb +45 -0
- data/lib/split/helper.rb +165 -0
- data/lib/split/metric.rb +101 -0
- data/lib/split/persistence.rb +28 -0
- data/lib/split/persistence/cookie_adapter.rb +94 -0
- data/lib/split/persistence/dual_adapter.rb +85 -0
- data/lib/split/persistence/redis_adapter.rb +57 -0
- data/lib/split/persistence/session_adapter.rb +29 -0
- data/lib/split/redis_interface.rb +50 -0
- data/lib/split/trial.rb +117 -0
- data/lib/split/user.rb +69 -0
- data/lib/split/version.rb +7 -0
- data/lib/split/zscore.rb +57 -0
- data/spec/algorithms/block_randomization_spec.rb +32 -0
- data/spec/algorithms/weighted_sample_spec.rb +19 -0
- data/spec/algorithms/whiplash_spec.rb +24 -0
- data/spec/alternative_spec.rb +320 -0
- data/spec/combined_experiments_helper_spec.rb +57 -0
- data/spec/configuration_spec.rb +258 -0
- data/spec/dashboard/pagination_helpers_spec.rb +200 -0
- data/spec/dashboard/paginator_spec.rb +37 -0
- data/spec/dashboard_helpers_spec.rb +42 -0
- data/spec/dashboard_spec.rb +210 -0
- data/spec/encapsulated_helper_spec.rb +52 -0
- data/spec/experiment_catalog_spec.rb +53 -0
- data/spec/experiment_spec.rb +533 -0
- data/spec/goals_collection_spec.rb +80 -0
- data/spec/helper_spec.rb +1111 -0
- data/spec/metric_spec.rb +31 -0
- data/spec/persistence/cookie_adapter_spec.rb +106 -0
- data/spec/persistence/dual_adapter_spec.rb +194 -0
- data/spec/persistence/redis_adapter_spec.rb +90 -0
- data/spec/persistence/session_adapter_spec.rb +32 -0
- data/spec/persistence_spec.rb +34 -0
- data/spec/redis_interface_spec.rb +111 -0
- data/spec/spec_helper.rb +52 -0
- data/spec/split_spec.rb +43 -0
- data/spec/support/cookies_mock.rb +20 -0
- data/spec/trial_spec.rb +299 -0
- data/spec/user_spec.rb +87 -0
- metadata +322 -0
data/.travis.yml
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 1.9.3
|
4
|
+
- 2.0
|
5
|
+
- 2.1.10
|
6
|
+
- 2.2.2
|
7
|
+
- 2.3.8
|
8
|
+
- 2.4.9
|
9
|
+
- 2.5.7
|
10
|
+
- 2.6.5
|
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
|
+
matrix:
|
20
|
+
exclude:
|
21
|
+
- rvm: 1.9.3
|
22
|
+
gemfile: gemfiles/5.0.gemfile
|
23
|
+
- rvm: 1.9.3
|
24
|
+
gemfile: gemfiles/5.1.gemfile
|
25
|
+
- rvm: 1.9.3
|
26
|
+
gemfile: gemfiles/5.2.gemfile
|
27
|
+
- rvm: 1.9.3
|
28
|
+
gemfile: gemfiles/6.0.gemfile
|
29
|
+
- rvm: 2.0
|
30
|
+
gemfile: gemfiles/5.0.gemfile
|
31
|
+
- rvm: 2.0
|
32
|
+
gemfile: gemfiles/5.1.gemfile
|
33
|
+
- rvm: 2.0
|
34
|
+
gemfile: gemfiles/5.2.gemfile
|
35
|
+
- rvm: 2.0
|
36
|
+
gemfile: gemfiles/6.0.gemfile
|
37
|
+
- rvm: 2.1.10
|
38
|
+
gemfile: gemfiles/5.0.gemfile
|
39
|
+
- rvm: 2.1.10
|
40
|
+
gemfile: gemfiles/5.1.gemfile
|
41
|
+
- rvm: 2.1.10
|
42
|
+
gemfile: gemfiles/5.2.gemfile
|
43
|
+
- rvm: 2.1.10
|
44
|
+
gemfile: gemfiles/6.0.gemfile
|
45
|
+
- rvm: 2.2.2
|
46
|
+
gemfile: gemfiles/6.0.gemfile
|
47
|
+
- rvm: 2.3.8
|
48
|
+
gemfile: gemfiles/6.0.gemfile
|
49
|
+
- rvm: 2.4.9
|
50
|
+
gemfile: gemfiles/6.0.gemfile
|
51
|
+
|
52
|
+
before_install:
|
53
|
+
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
54
|
+
- gem install bundler --version=1.17.3
|
55
|
+
|
56
|
+
script:
|
57
|
+
- RAILS_ENV=test bundle exec rake spec && bundle exec codeclimate-test-reporter
|
58
|
+
|
59
|
+
cache: bundler
|
60
|
+
sudo: false
|
data/Appraisals
ADDED
@@ -0,0 +1,19 @@
|
|
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'
|
19
|
+
end
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,696 @@
|
|
1
|
+
## 3.4.1 (November 12th, 2019)
|
2
|
+
|
3
|
+
Bugfixes:
|
4
|
+
- Reference ActionController directly when including split helpers, to avoid breaking Rails API Controllers (@andrehjr, #602)
|
5
|
+
|
6
|
+
## 3.4.0 (November 9th, 2019)
|
7
|
+
|
8
|
+
Features:
|
9
|
+
- Improve DualAdapter (@santib, #588), adds a new configuration for the DualAdapter, making it possible to keep consistency for logged_out/logged_in users. It's a opt-in flag. No Behavior was changed on this release.
|
10
|
+
- Make dashboard pagination default "per" param configurable (@alopatin, #597)
|
11
|
+
|
12
|
+
Bugfixes:
|
13
|
+
- Fix `force_alternative` for experiments with incremented version (@giraffate, #568)
|
14
|
+
- Persist alternative weights (@giraffate, #570)
|
15
|
+
- Combined experiment performance improvements (@gnanou, #575)
|
16
|
+
- Handle correctly case when ab_finished is called before ab_test for a user (@gnanou, #577)
|
17
|
+
- When loading active_experiments, it should not look into user's 'finished' keys (@andrehjr, #582)
|
18
|
+
|
19
|
+
Misc:
|
20
|
+
- Remove `rubyforge_project` from gemspec (@giraffate, #583)
|
21
|
+
- Fix URLs to replace http with https (@giraffate , #584)
|
22
|
+
- Lazily include split helpers in ActionController::Base (@hasghari, #586)
|
23
|
+
- Fix unused variable warnings (@andrehjr, #592)
|
24
|
+
- Fix ruby warnings (@andrehjr, #593)
|
25
|
+
- Update rubocop.yml config (@andrehjr, #594)
|
26
|
+
- Add frozen_string_literal to all files that were missing it (@andrehjr, #595)
|
27
|
+
|
28
|
+
## 3.3.2 (April 12th, 2019)
|
29
|
+
|
30
|
+
Features:
|
31
|
+
- Added uptime robot to configuration.rb (@razel1982, #556)
|
32
|
+
- Check to see if being run in Rails application and run in before_initialize (@husteadrobert, #555)
|
33
|
+
|
34
|
+
Bugfixes:
|
35
|
+
- Fix error message interpolation (@hanibash, #553)
|
36
|
+
- Fix Bigdecimal warnings (@agraves, #551)
|
37
|
+
- Avoid hitting up on redis for robots/excluded users. (@andrehjr, #544)
|
38
|
+
- Checks for defined?(request) on Helper#exclude_visitor?. (@andrehjr)
|
39
|
+
|
40
|
+
Misc:
|
41
|
+
- Update travis to add Rails 6 (@edmilton, #559)
|
42
|
+
- Fix broken specs in developement environment (@dougpetronilio, #557)
|
43
|
+
|
44
|
+
## 3.3.1 (January 11th, 2019)
|
45
|
+
|
46
|
+
Features:
|
47
|
+
- Filter some more bots (@janosch-x, #542)
|
48
|
+
|
49
|
+
Bugfixes:
|
50
|
+
- Fix Dashboard Pagination Helper typo (@cattekin, #541)
|
51
|
+
- Do not storage alternative in cookie if experiment has a winner (@sadhu89, #539)
|
52
|
+
- fix user participating alternative not found (@NaturalHokke, #536)
|
53
|
+
|
54
|
+
Misc:
|
55
|
+
- Tweak RSpec instructions (@eliotsykes, #540)
|
56
|
+
- Improve README regarding rspec usage (@vermaxik, #538)
|
57
|
+
|
58
|
+
## 3.3.0 (August 13th, 2018)
|
59
|
+
|
60
|
+
Features:
|
61
|
+
|
62
|
+
- Added pagination for dashboard (@GeorgeGorbanev, #518)
|
63
|
+
- Add Facebot crawler to list of bots (@pfeiffer, #530)
|
64
|
+
- Ignore previewing requests (@pfeiffer, #531)
|
65
|
+
- Fix binding of ignore_filter (@pfeiffer, #533)
|
66
|
+
|
67
|
+
Bugfixes:
|
68
|
+
|
69
|
+
- Fix cookie header duplication (@andrehjr, #522)
|
70
|
+
|
71
|
+
Performance:
|
72
|
+
|
73
|
+
- Improve performance of RedisInterface#make_list_length by using LTRIM command (@mlovic, #509)
|
74
|
+
|
75
|
+
Misc:
|
76
|
+
|
77
|
+
- Update development dependencies
|
78
|
+
- test rails 5.2 on travis (@lostapathy, #524)
|
79
|
+
- update ruby versions for travis (@lostapathy, #525)
|
80
|
+
|
81
|
+
## 3.2.0 (September 21st, 2017)
|
82
|
+
|
83
|
+
Features:
|
84
|
+
|
85
|
+
- Allow configuration of how often winning alternatives are recalculated (@patbl, #501)
|
86
|
+
|
87
|
+
Bugfixes:
|
88
|
+
|
89
|
+
- Avoid z_score numeric exception for conversion rates >1 (@cmantas, #503)
|
90
|
+
- Fix combined experiments (@semanticart, #502)
|
91
|
+
|
92
|
+
## 3.1.1 (August 30th, 2017)
|
93
|
+
|
94
|
+
Bugfixes:
|
95
|
+
|
96
|
+
- Bring back support for ruby 1.9.3 and greater (rubygems 2.0.0 or greater now required) (@patbl, #498)
|
97
|
+
|
98
|
+
Misc:
|
99
|
+
|
100
|
+
- Document testing with RSpec (@eliotsykes, #495)
|
101
|
+
|
102
|
+
## 3.1.0 (August 14th, 2017)
|
103
|
+
|
104
|
+
Features:
|
105
|
+
|
106
|
+
- Support for combined experiments (@daviddening, #493)
|
107
|
+
- Rewrite CookieAdapter to work with Rack::Request and Rack::Response directly (@andrehjr, #490)
|
108
|
+
- Enumeration of a User's Experiments that Respects the db_failover Option(@MarkRoddy, #487)
|
109
|
+
|
110
|
+
Bugfixes:
|
111
|
+
|
112
|
+
- Blocked a few more common bot user agents (@kylerippey, #485)
|
113
|
+
|
114
|
+
Misc:
|
115
|
+
|
116
|
+
- Repository Audit by Maintainer.io (@RichardLitt, #484)
|
117
|
+
- Update development dependencies
|
118
|
+
- Test on ruby 2.4.1
|
119
|
+
- Test compatibility with rails 5.1
|
120
|
+
- Add uris to metadata section in gemspec
|
121
|
+
|
122
|
+
## 3.0.0 (March 30th, 2017)
|
123
|
+
|
124
|
+
Features:
|
125
|
+
|
126
|
+
- added block randomization algorithm and specs (@hulleywood, #475)
|
127
|
+
- Add ab_record_extra_info to allow record extra info to alternative and display on dashboard. (@tranngocsam, #460)
|
128
|
+
|
129
|
+
Bugfixes:
|
130
|
+
|
131
|
+
- Avoid crashing on Ruby 2.4 for numeric strings (@flori, #470)
|
132
|
+
- Fix issue where redis isn't required (@tomciopp , #466)
|
133
|
+
|
134
|
+
Misc:
|
135
|
+
|
136
|
+
- Avoid variable_size_secure_compare private method (@eliotsykes, #465)
|
137
|
+
|
138
|
+
## 2.2.0 (November 11th, 2016)
|
139
|
+
|
140
|
+
**Backwards incompatible!** Redis keys are renamed. Please make sure all running tests are completed before you upgrade, as they will reset.
|
141
|
+
|
142
|
+
Features:
|
143
|
+
|
144
|
+
- Remove dependency on Redis::Namespace (@bschaeffer, #425)
|
145
|
+
- Make resetting on experiment change optional (@moggyboy, #430)
|
146
|
+
- Add ability to force alternative on dashboard (@ccallebs, #437)
|
147
|
+
|
148
|
+
Bugfixes:
|
149
|
+
|
150
|
+
- Fix variations reset across page loads for multiple=control and improve coverage (@Vasfed, #432)
|
151
|
+
|
152
|
+
Misc:
|
153
|
+
|
154
|
+
- Remove Explicit Return (@BradHudson, #441)
|
155
|
+
- Update Redis config docs (@bschaeffer, #422)
|
156
|
+
- Harden HTTP Basic snippet against timing attacks (@eliotsykes, #443)
|
157
|
+
- Removed a couple old ruby 1.8 hacks (@andrew, #456)
|
158
|
+
- Run tests on rails 5 (@andrew, #457)
|
159
|
+
- Fixed a few codeclimate warnings (@andrew, #458)
|
160
|
+
- Use codeclimate for test coverage (@andrew #455)
|
161
|
+
|
162
|
+
## 2.1.0 (August 8th, 2016)
|
163
|
+
|
164
|
+
Features:
|
165
|
+
|
166
|
+
- Support REDIS_PROVIDER variable used in Heroku (@kartikluke, #426)
|
167
|
+
|
168
|
+
## 2.0.0 (July 17th, 2016)
|
169
|
+
|
170
|
+
Breaking changes:
|
171
|
+
|
172
|
+
- Removed deprecated `finished` and `begin_experiment` methods
|
173
|
+
- Namespaced override param to avoid potential clashes (@henrik, #398)
|
174
|
+
|
175
|
+
## 1.7.0 (June 28th, 2016)
|
176
|
+
|
177
|
+
Features:
|
178
|
+
|
179
|
+
- Running concurrent experiments on same endpoint/view (@karmakaze, #421)
|
180
|
+
|
181
|
+
## 1.6.0 (June 16th, 2016)
|
182
|
+
|
183
|
+
Features:
|
184
|
+
|
185
|
+
- Add Dual Redis(logged-in)/cookie(logged-out) persistence adapter (@karmakaze, #420)
|
186
|
+
|
187
|
+
## 1.5.0 (June 8th, 2016)
|
188
|
+
|
189
|
+
Features:
|
190
|
+
|
191
|
+
- Add `expire_seconds:` TTL option to RedisAdapter (@karmakaze, #409)
|
192
|
+
- Optional custom persistence adapter (@ndelage, #411)
|
193
|
+
|
194
|
+
Misc:
|
195
|
+
|
196
|
+
- Use fakeredis for testing (@andrew, #412)
|
197
|
+
|
198
|
+
## 1.4.5 (June 7th, 2016)
|
199
|
+
|
200
|
+
Bugfixes:
|
201
|
+
|
202
|
+
- FIX Negative numbers on non-finished (@divineforest, #408)
|
203
|
+
- Eliminate extra RedisAdapter hget (@karmakaze, #407)
|
204
|
+
- Remove unecessary code from Experiment class (@pakallis, #391, #392, #393)
|
205
|
+
|
206
|
+
Misc:
|
207
|
+
|
208
|
+
- Simplify Configuration#normalized_experiments (@pakallis, #395)
|
209
|
+
- Clarify test running instructions (@henrik, #397)
|
210
|
+
|
211
|
+
## 1.4.4 (May 9th, 2016)
|
212
|
+
|
213
|
+
Bugfixes:
|
214
|
+
|
215
|
+
- Increment participation if store override is true and no experiment key exists (@spheric, #380)
|
216
|
+
|
217
|
+
Misc:
|
218
|
+
|
219
|
+
- Deprecated `finished` method in favour of `ab_finished` (@andreibondarev, #389)
|
220
|
+
- Added minimum version requirement to simple-random
|
221
|
+
- Clarify finished with first option being a hash in Readme (@henrik, #382)
|
222
|
+
- Refactoring the User abstraction (@andreibondarev, #384)
|
223
|
+
|
224
|
+
## 1.4.3 (April 28th, 2016)
|
225
|
+
|
226
|
+
Features:
|
227
|
+
|
228
|
+
- add on_trial callback whenever a trial is started (@mtyeh411, #375)
|
229
|
+
|
230
|
+
Bugfixes:
|
231
|
+
|
232
|
+
- Allow algorithm configuration at experiment level (@007sumit, #376)
|
233
|
+
|
234
|
+
Misc:
|
235
|
+
|
236
|
+
- only choose override if it exists as valid alternative (@spheric, #377)
|
237
|
+
|
238
|
+
## 1.4.2 (April 25th, 2016)
|
239
|
+
|
240
|
+
Misc:
|
241
|
+
|
242
|
+
- Deprecated some legacy methods (@andreibondarev, #374)
|
243
|
+
|
244
|
+
## 1.4.1 (April 21st, 2016)
|
245
|
+
|
246
|
+
Bugfixes:
|
247
|
+
|
248
|
+
- respect manual start configuration after an experiment has been deleted (@mtyeh411, #372)
|
249
|
+
|
250
|
+
Misc:
|
251
|
+
|
252
|
+
- Introduce goals collection to reduce complexity of Experiment#save (@pakallis, #365)
|
253
|
+
- Revise specs according to http://betterspecs.org/ (@hkliya, #369)
|
254
|
+
|
255
|
+
## 1.4.0 (April 2nd, 2016)
|
256
|
+
|
257
|
+
Features:
|
258
|
+
|
259
|
+
- Added experiment filters to dashboard (@ccallebs, #363, #364)
|
260
|
+
- Added Contributor Covenant Code of Conduct
|
261
|
+
|
262
|
+
## 1.3.2 (January 2nd, 2016)
|
263
|
+
|
264
|
+
Bugfixes:
|
265
|
+
|
266
|
+
- Fix deleting experiments in from the updated dashboard (@craigmcnamara, #352)
|
267
|
+
|
268
|
+
## 1.3.1 (January 1st, 2016)
|
269
|
+
|
270
|
+
Bugfixes:
|
271
|
+
|
272
|
+
- Fix the dashboard for experiments with ‘/‘ in the name. (@craigmcnamara, #349)
|
273
|
+
|
274
|
+
## 1.3.0 (October 20th, 2015)
|
275
|
+
|
276
|
+
Features:
|
277
|
+
|
278
|
+
- allow for custom redis_url different from ENV variable (@davidgrieser, #323)
|
279
|
+
- add ability to change the length of the persistence cookie (@peterylai, #335)
|
280
|
+
|
281
|
+
Bugfixes:
|
282
|
+
|
283
|
+
- Rescue from Redis::BaseError instead of Redis::CannotConnectError (@nfm, #342)
|
284
|
+
- Fix active experiments when experiment is on a later version (@ndrisso, #331)
|
285
|
+
- Fix caching of winning alternative (@nfm, #329)
|
286
|
+
|
287
|
+
Misc:
|
288
|
+
|
289
|
+
- Remove duplication from Experiment#save (@pakallis, #333)
|
290
|
+
- Remove unnecessary argument from Experiment#write_to_alternative (@t4deu, #332)
|
291
|
+
|
292
|
+
## 1.2.1 (May 17th, 2015)
|
293
|
+
|
294
|
+
Features:
|
295
|
+
|
296
|
+
- Handle redis DNS resolution failures gracefully (@fusion2004, #310)
|
297
|
+
- Push metadata to ab_test block (@ekorneeff, #296)
|
298
|
+
- Helper methods are now private when included in controllers (@ipoval, #303)
|
299
|
+
|
300
|
+
Bugfixes:
|
301
|
+
|
302
|
+
- Return an empty hash as metadata when Split is disabled (@tomasdundacek, #313)
|
303
|
+
- Don't use capture helper from ActionView (@tomasdundacek, #312)
|
304
|
+
|
305
|
+
Misc:
|
306
|
+
|
307
|
+
- Remove body "max-width" from dashboard (@xicreative, #299)
|
308
|
+
- fix private for class methods (@ipoval, #301)
|
309
|
+
- minor memoization fix in spec (@ipoval, #304)
|
310
|
+
- Minor documentation fixes (#295, #297, #305, #308)
|
311
|
+
|
312
|
+
## 1.2.0 (January 24th, 2015)
|
313
|
+
|
314
|
+
Features:
|
315
|
+
|
316
|
+
- Configure redis using environment variables if available (@saratovsource , #293)
|
317
|
+
- Store metadata on experiment configuration (@dekz, #291)
|
318
|
+
|
319
|
+
Bugfixes:
|
320
|
+
|
321
|
+
- Revert the Trial#complete! public API to support noargs (@dekz, #292)
|
322
|
+
|
323
|
+
## 1.1.0 (January 9th, 2015)
|
324
|
+
|
325
|
+
Changes:
|
326
|
+
|
327
|
+
- Public class methods on `Split::Experiment` (e.g., `find_or_create`)
|
328
|
+
have been moved to `Split::ExperimentCatalog`.
|
329
|
+
|
330
|
+
Features:
|
331
|
+
|
332
|
+
- Decouple trial from Split::Helper (@joshdover, #286)
|
333
|
+
- Helper method for Active Experiments (@blahblahblah-, #273)
|
334
|
+
|
335
|
+
Misc:
|
336
|
+
|
337
|
+
- Use the new travis container based infrastructure for tests (@andrew, #280)
|
338
|
+
|
339
|
+
## 1.0.0 (October 12th, 2014)
|
340
|
+
|
341
|
+
Changes:
|
342
|
+
|
343
|
+
- Remove support for Ruby 1.8.7 and Rails 2.3 (@qpowell, #271)
|
344
|
+
|
345
|
+
## 0.8.0 (September 25th, 2014)
|
346
|
+
|
347
|
+
Features:
|
348
|
+
|
349
|
+
- Added new way to calculate the probability an alternative is the winner (@caser, #266, #251)
|
350
|
+
- support multiple metrics per experiment (@stevenou, #260)
|
351
|
+
|
352
|
+
Bugfixes:
|
353
|
+
|
354
|
+
- Avoiding call to params in EncapsulatedHelper (@afn, #257)
|
355
|
+
|
356
|
+
## 0.7.3 (September 16th, 2014)
|
357
|
+
|
358
|
+
Features:
|
359
|
+
|
360
|
+
- Disable all split tests via a URL parameter (@hwartig, #263)
|
361
|
+
|
362
|
+
Bugfixes:
|
363
|
+
|
364
|
+
- Correctly escape experiment names on dashboard (@ecaron, #265)
|
365
|
+
- Handle redis connection exception error properly (@andrew, #245)
|
366
|
+
|
367
|
+
## 0.7.2 (June 12th, 2014)
|
368
|
+
|
369
|
+
Features:
|
370
|
+
|
371
|
+
- Show metrics on the dashboard (@swrobel, #241)
|
372
|
+
|
373
|
+
Bugfixes:
|
374
|
+
|
375
|
+
- Avoid nil error with ExperimentCatalog when upgrading (@danielschwartz, #253)
|
376
|
+
- [SECURITY ISSUE] Only allow known alternatives as query param overrides (@ankane, #255)
|
377
|
+
|
378
|
+
## 0.7.1 (March 20th, 2014)
|
379
|
+
|
380
|
+
Features:
|
381
|
+
|
382
|
+
- You can now reopen experiment from the dashboard (@mikezaby, #235)
|
383
|
+
|
384
|
+
Misc:
|
385
|
+
|
386
|
+
- Internal code tidy up (@IanVaughan, #238)
|
387
|
+
|
388
|
+
## 0.7.0 (December 26th, 2013)
|
389
|
+
|
390
|
+
Features:
|
391
|
+
|
392
|
+
- Significantly improved z-score algorithm (@caser ,#221)
|
393
|
+
- Better sorting of Experiments on dashboard (@wadako111, #218)
|
394
|
+
|
395
|
+
Bugfixes:
|
396
|
+
|
397
|
+
- Fixed start button not being displayed in some cases (@vigosan, #219)
|
398
|
+
|
399
|
+
Misc:
|
400
|
+
|
401
|
+
- Experiment#initialize refactoring (@nberger, #224)
|
402
|
+
- Extract ExperimentStore into a seperate class (@nberger, #225)
|
403
|
+
|
404
|
+
## 0.6.6 (October 15th, 2013)
|
405
|
+
|
406
|
+
Features:
|
407
|
+
|
408
|
+
- Sort experiments on Dashboard so "active" ones without a winner appear first (@swrobel, #204)
|
409
|
+
- Starting tests manually (@duksis, #209)
|
410
|
+
|
411
|
+
Bugfixes:
|
412
|
+
|
413
|
+
- Only trigger completion callback with valid Trial (@segfaultAX, #208)
|
414
|
+
- Fixed bug with `resettable` when using `normalize_experiments` (@jonashuckestein, #213)
|
415
|
+
|
416
|
+
Misc:
|
417
|
+
|
418
|
+
- Added more bots to filter list (@lbeder, #214, #215, #216)
|
419
|
+
|
420
|
+
## 0.6.5 (August 23, 2013)
|
421
|
+
|
422
|
+
Features:
|
423
|
+
|
424
|
+
- Added Redis adapter for persisting experiments across sessions (@fengb, #203)
|
425
|
+
|
426
|
+
Misc:
|
427
|
+
|
428
|
+
- Expand upon algorithms section in README (@swrobel, #200)
|
429
|
+
|
430
|
+
## 0.6.4 (August 8, 2013)
|
431
|
+
|
432
|
+
Features:
|
433
|
+
|
434
|
+
- Add hooks for experiment deletion and resetting (@craigmcnamara, #198)
|
435
|
+
- Allow Split::Helper to be used outside of a controller (@nfm, #190)
|
436
|
+
- Show current Rails/Rack Env in dashboard (@rceee, #187)
|
437
|
+
|
438
|
+
Bugfixes:
|
439
|
+
|
440
|
+
- Fix whiplash algorithm when using goals (@swrobel, #193)
|
441
|
+
|
442
|
+
Misc:
|
443
|
+
|
444
|
+
- Refactor dashboard js (@buddhamagnet)
|
445
|
+
|
446
|
+
## 0.6.3 (July 8, 2013)
|
447
|
+
|
448
|
+
Features:
|
449
|
+
|
450
|
+
- Add hooks for Trial#choose! and Trial#complete! (@bmarini, #176)
|
451
|
+
|
452
|
+
Bugfixes:
|
453
|
+
|
454
|
+
- Stores and parses Experiment's start_time as a UNIX integer (@joeroot, #177)
|
455
|
+
|
456
|
+
## 0.6.2 (June 6, 2013)
|
457
|
+
|
458
|
+
Features:
|
459
|
+
|
460
|
+
- Rails 2.3 compatibility (@bhcarpenter, #167)
|
461
|
+
- Adding possibility to store overridden alternative (@duksis, #173)
|
462
|
+
|
463
|
+
Misc:
|
464
|
+
|
465
|
+
- Now testing against multiple versions of rails
|
466
|
+
|
467
|
+
## 0.6.1 (May 4, 2013)
|
468
|
+
|
469
|
+
Bugfixes:
|
470
|
+
|
471
|
+
- Use the specified algorithm for the experiment instead of the default (@woodhull, #165)
|
472
|
+
|
473
|
+
Misc:
|
474
|
+
|
475
|
+
- Ensure experiements are valid when configuring (@ashmckenzie, #159)
|
476
|
+
- Allow arrays to be passed to ab_test (@fenelon, #156)
|
477
|
+
|
478
|
+
## 0.6.0 (April 4, 2013)
|
479
|
+
|
480
|
+
Features:
|
481
|
+
|
482
|
+
- Support for Ruby 2.0.0 (@phoet, #142)
|
483
|
+
- Multiple Goals (@liujin, #109)
|
484
|
+
- Ignoring IPs using Regular Expressions (@waynemoore, #119)
|
485
|
+
- Added ability to add more bots to the default list (@themgt, #140)
|
486
|
+
- Allow custom configuration of user blocking logic (@phoet , #148)
|
487
|
+
|
488
|
+
Bugfixes:
|
489
|
+
|
490
|
+
- Fixed regression in handling of config files (@iangreenleaf, #115)
|
491
|
+
- Fixed completion rate increases for experiments users aren't participating in (@philnash, #67)
|
492
|
+
- Handle exceptions from invalid JSON in cookies (@iangreenleaf, #126)
|
493
|
+
|
494
|
+
Misc:
|
495
|
+
|
496
|
+
- updated minimum json version requirement
|
497
|
+
- Refactor Yaml Configuration (@rtwomey, #124)
|
498
|
+
- Refactoring of Experiments (@iangreenleaf @tamird, #117 #118)
|
499
|
+
- Added more known Bots, including Pingdom, Bing, YandexBot (@julesie, @zinkkrysty, @dimko)
|
500
|
+
- Improved Readme (@iangreenleaf @phoet)
|
501
|
+
|
502
|
+
## 0.5.0 (January 28, 2013)
|
503
|
+
|
504
|
+
Features:
|
505
|
+
|
506
|
+
- Persistence Adapters: Cookies and Session (@patbenatar, #98)
|
507
|
+
- Configure experiments from a hash (@iangreenleaf, #97)
|
508
|
+
- Pluggable sampling algorithms (@woodhull, #105)
|
509
|
+
|
510
|
+
Bugfixes:
|
511
|
+
|
512
|
+
- Fixed negative number of non-finished rates (@philnash, #83)
|
513
|
+
- Fixed behaviour of finished(:reset => false) (@philnash, #88)
|
514
|
+
- Only take into consideration positive z-scores (@thomasmaas, #96)
|
515
|
+
- Amended ab_test method to raise ArgumentError if passed integers or symbols as
|
516
|
+
alternatives (@buddhamagnet, #81)
|
517
|
+
|
518
|
+
## 0.4.6 (October 28, 2012)
|
519
|
+
|
520
|
+
Features:
|
521
|
+
|
522
|
+
- General code quality improvements (@buddhamagnet, #79)
|
523
|
+
|
524
|
+
Bugfixes:
|
525
|
+
|
526
|
+
- Don't increment the experiment counter if user has finished (@dimko, #78)
|
527
|
+
- Fixed an incorrect test (@jaywengrow, #74)
|
528
|
+
|
529
|
+
## 0.4.5 (August 30, 2012)
|
530
|
+
|
531
|
+
Bugfixes:
|
532
|
+
|
533
|
+
- Fixed header gradient in FF/Opera (@philnash, #69)
|
534
|
+
- Fixed reseting of experiment in session (@apsoto, #43)
|
535
|
+
|
536
|
+
## 0.4.4 (August 9, 2012)
|
537
|
+
|
538
|
+
Features:
|
539
|
+
|
540
|
+
- Allow parameter overrides, even without Redis. (@bhcarpenter, #62)
|
541
|
+
|
542
|
+
Bugfixes:
|
543
|
+
|
544
|
+
- Fixes version number always increasing when alternatives are changed (@philnash, #63)
|
545
|
+
- updated guard-rspec to version 1.2
|
546
|
+
|
547
|
+
## 0.4.3 (July 8, 2012)
|
548
|
+
|
549
|
+
Features:
|
550
|
+
|
551
|
+
- redis failover now recovers from all redis-related exceptions
|
552
|
+
|
553
|
+
## 0.4.2 (June 1, 2012)
|
554
|
+
|
555
|
+
Features:
|
556
|
+
|
557
|
+
- Now works with v3.0 of redis gem
|
558
|
+
|
559
|
+
Bugfixes:
|
560
|
+
|
561
|
+
- Fixed redis failover on Rubinius
|
562
|
+
|
563
|
+
## 0.4.1 (April 6, 2012)
|
564
|
+
|
565
|
+
Features:
|
566
|
+
|
567
|
+
- Added configuration option to disable Split testing (@ilyakatz, #45)
|
568
|
+
|
569
|
+
Bugfixes:
|
570
|
+
|
571
|
+
- Fix weights for existing experiments (@andreas, #40)
|
572
|
+
- Fixed dashboard range error (@andrew, #42)
|
573
|
+
|
574
|
+
## 0.4.0 (March 7, 2012)
|
575
|
+
|
576
|
+
**IMPORTANT**
|
577
|
+
|
578
|
+
If using ruby 1.8.x and weighted alternatives you should always pass the control alternative through as the second argument with any other alternatives as a third argument because the order of the hash is not preserved in ruby 1.8, ruby 1.9 users are not affected by this bug.
|
579
|
+
|
580
|
+
Features:
|
581
|
+
|
582
|
+
- Experiments now record when they were started (@vrish88, #35)
|
583
|
+
- Old versions of experiments in sessions are now cleaned up
|
584
|
+
- Avoid users participating in multiple experiments at once (#21)
|
585
|
+
|
586
|
+
Bugfixes:
|
587
|
+
|
588
|
+
- Overriding alternatives doesn't work for weighted alternatives (@layflags, #34)
|
589
|
+
- confidence_level helper should handle tiny z-scores (#23)
|
590
|
+
|
591
|
+
## 0.3.3 (February 16, 2012)
|
592
|
+
|
593
|
+
Bugfixes:
|
594
|
+
|
595
|
+
- Fixed redis failover when a block was passed to ab_test (@layflags, #33)
|
596
|
+
|
597
|
+
## 0.3.2 (February 12, 2012)
|
598
|
+
|
599
|
+
Features:
|
600
|
+
|
601
|
+
- Handle redis errors gracefully (@layflags, #32)
|
602
|
+
|
603
|
+
## 0.3.1 (November 19, 2011)
|
604
|
+
|
605
|
+
Features:
|
606
|
+
|
607
|
+
- General code tidy up (@ryanlecompte, #22, @mocoso, #28)
|
608
|
+
- Lazy loading data from Redis (@lautis, #25)
|
609
|
+
|
610
|
+
Bugfixes:
|
611
|
+
|
612
|
+
- Handle unstarted experiments (@mocoso, #27)
|
613
|
+
- Relaxed Sinatra version requirement (@martinclu, #24)
|
614
|
+
|
615
|
+
|
616
|
+
## 0.3.0 (October 9, 2011)
|
617
|
+
|
618
|
+
Features:
|
619
|
+
|
620
|
+
- Redesigned dashboard (@mrappleton, #17)
|
621
|
+
- Use atomic increments in redis for better concurrency (@lautis, #18)
|
622
|
+
- Weighted alternatives
|
623
|
+
|
624
|
+
Bugfixes:
|
625
|
+
|
626
|
+
- Fix to allow overriding of experiments that aren't on version 1
|
627
|
+
|
628
|
+
|
629
|
+
## 0.2.4 (July 18, 2011)
|
630
|
+
|
631
|
+
Features:
|
632
|
+
|
633
|
+
- Added option to finished to not reset the users session
|
634
|
+
|
635
|
+
Bugfixes:
|
636
|
+
|
637
|
+
- Only allow strings as alternatives, fixes strange errors when passing true/false or symbols
|
638
|
+
|
639
|
+
## 0.2.3 (June 26, 2011)
|
640
|
+
|
641
|
+
Features:
|
642
|
+
|
643
|
+
- Experiments can now be deleted from the dashboard
|
644
|
+
- ab_test helper now accepts a block
|
645
|
+
- Improved dashboard
|
646
|
+
|
647
|
+
Bugfixes:
|
648
|
+
|
649
|
+
- After resetting an experiment, existing users of that experiment will also be reset
|
650
|
+
|
651
|
+
## 0.2.2 (June 11, 2011)
|
652
|
+
|
653
|
+
Features:
|
654
|
+
|
655
|
+
- Updated redis-namespace requirement to 1.0.3
|
656
|
+
- Added a configuration object for changing options
|
657
|
+
- Robot regex can now be changed via a configuration options
|
658
|
+
- Added ability to ignore visits from specified IP addresses
|
659
|
+
- Dashboard now shows percentage improvement of alternatives compared to the control
|
660
|
+
- If the alternatives of an experiment are changed it resets the experiment and uses the new alternatives
|
661
|
+
|
662
|
+
Bugfixes:
|
663
|
+
|
664
|
+
- Saving an experiment multiple times no longer creates duplicate alternatives
|
665
|
+
|
666
|
+
## 0.2.1 (May 29, 2011)
|
667
|
+
|
668
|
+
Bugfixes:
|
669
|
+
|
670
|
+
- Convert legacy sets to lists to avoid exceptions during upgrades from 0.1.x
|
671
|
+
|
672
|
+
## 0.2.0 (May 29, 2011)
|
673
|
+
|
674
|
+
Features:
|
675
|
+
|
676
|
+
- Override an alternative via a url parameter
|
677
|
+
- Experiments can now be reset from the dashboard
|
678
|
+
- The first alternative is now considered the control
|
679
|
+
- General dashboard usability improvements
|
680
|
+
- Robots are ignored and given the control alternative
|
681
|
+
|
682
|
+
Bugfixes:
|
683
|
+
|
684
|
+
- Alternatives are now store in a list rather than a set to ensure consistent ordering
|
685
|
+
- Fixed diving by zero errors
|
686
|
+
|
687
|
+
## 0.1.1 (May 18, 2011)
|
688
|
+
|
689
|
+
Bugfixes:
|
690
|
+
|
691
|
+
- More Robust conversion rate display on dashboard
|
692
|
+
- Ensure `Split::Version` is available everywhere, fixed dashboard
|
693
|
+
|
694
|
+
## 0.1.0 (May 17, 2011)
|
695
|
+
|
696
|
+
Initial Release
|