Bugfixes:
- Better integration for EncapsulatedHelper when needing params/request info (@henrique-ft, #721 and #723)
Misc:
- Make specs compatible with newer Rack versions (@andrehjr, #722)
Bugfixes:
- Do not throw error if alternativas have data that can lead to negative numbers for probability calculation (@andrehjr, #703)
- Do not persist invalid extra_info on ab_record_extra_info. (@trostli @andrehjr, #717)
- CROSSSLOT keys issue fix when using redis cluster (@naveen-chidhambaram, #710)
- Convert value to string before saving it in RedisAdapter (@Jealrock, #714)
- Fix deprecation warning with Redis 4.8.0 (@martingregoire, #701)
Misc:
- Add matrix as a default dependency (@andrehjr, #705)
- Add Ruby 3.2 to Github Actions (@andrehjr, #702)
- Update documentation regarding finding users outside a web session (@andrehjr, #716)
- Update actions/checkout to v4 (@andrehjr, #718)
Bugfixes:
- Stop crashing on non-hash json (@knarewski, #697)
- Handle when Rails is partially loaded as a Gem (@TSMMark, #687)
Features:
- Add support for redis-client, which does not automatically cast types to strings (@knarewski, #696)
- Add ability to initialize experiments (@robin-phung, #673)
Misc:
- Fix default branch name and gem metadata indentation (@ursm, #693)
- Update actions/checkout to v3 (@andrehjr, #683)
- Enforce double quotes (@andrehjr, #682)
- Fix Rubocop Style/* Offenses (@andrehjr, #681)
- Enable rubocop on Github Actions (@andrehjr, #680)
- Fix all Layout issues on the project (@andrehjr, #679)
- Fix Style/HashSyntax offenses (@andrehjr, #678)
- Remove usage of deprecated implicit block expectation from specs (@andrehjr, #677)
- Remove appraisals configuration (@andrehjr, #676)
- Add Ruby 3.1 (@andrehjr, #675)
- Encapsulate Split::Algorithms at our own module to avoid explicit calling rubystats everywhere (@andrehjr, #674)
Bugfixes:
- ab_test must return metadata on error or if split is disabled/excluded user (@andrehjr, #622)
- Fix versioned experiments when used with allow_multiple_experiments=control (@andrehjr, #613)
- Only block Pinterest bot (@huoxito, #606)
- Respect experiment defaults when loading experiments in initializer. (@mattwd7, #599)
- Removes metadata key when it updated to nil (@andrehjr, #633)
- Force experiment does not count for metrics (@andrehjr, #637)
- Fix cleanup_old_versions! misbehaviour (@serggl, #661)
Features:
- Make goals accessible via on_trial_complete callbacks (@robin-phung, #625)
- Replace usage of SimpleRandom with RubyStats(Used for Beta Distribution RNG) (@andrehjr, #616)
- Introduce enable/disable experiment cohorting (@robin-phung, #615)
- Add on_experiment_winner_choose callback (@GenaMinenkov, #574)
- Add Split::Cache to reduce load on Redis (@rdh, #648)
- Caching based optimization in the experiment#save path (@amangup, #652)
- Adds config option for cookie domain (@joedelia, #664)
Misc:
- Drop support for Ruby < 2.5 (@andrehjr, #627)
- Drop support for Rails < 5 (@andrehjr, #607)
- Bump minimum required redis to 4.2 (@andrehjr, #628)
- Removed repeated loading from config (@robin-phung, #619)
- Simplify RedisInterface usage when persisting Experiment alternatives (@andrehjr, #632)
- Remove redis_url impl. Deprecated on version 2.2 (@andrehjr, #631)
- Remove thread_safe config as redis-rb is thread_safe by default (@andrehjr, #630)
- Fix typo of in
Split::Trial
class variable (TomasBarry, #644) - Single HSET to update values, instead of multiple ones (@andrehjr, #640)
- Use Redis#hmset to keep compatibility with Redis < 4.0 (@andrehjr, #659)
- Remove 'set' parsing for alternatives. Sets were used as storage and deprecated on 0.x (@andrehjr, #639)
- Adding documentation related to what is stored on cookies. (@andrehjr, #634)
- Keep railtie defined under the Split gem namespace (@avit, #666)
- Update RSpec helper to support block syntax (@clowder, #665)
Bugfixes:
- Reference ActionController directly when including split helpers, to avoid breaking Rails API Controllers (@andrehjr, #602)
Features:
- 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.
- Make dashboard pagination default "per" param configurable (@alopatin, #597)
Bugfixes:
- Fix
force_alternative
for experiments with incremented version (@giraffate, #568) - Persist alternative weights (@giraffate, #570)
- Combined experiment performance improvements (@gnanou, #575)
- Handle correctly case when ab_finished is called before ab_test for a user (@gnanou, #577)
- When loading active_experiments, it should not look into user's 'finished' keys (@andrehjr, #582)
Misc:
- Remove
rubyforge_project
from gemspec (@giraffate, #583) - Fix URLs to replace http with https (@giraffate , #584)
- Lazily include split helpers in ActionController::Base (@hasghari, #586)
- Fix unused variable warnings (@andrehjr, #592)
- Fix ruby warnings (@andrehjr, #593)
- Update rubocop.yml config (@andrehjr, #594)
- Add frozen_string_literal to all files that were missing it (@andrehjr, #595)
Features:
- Added uptime robot to configuration.rb (@razel1982, #556)
- Check to see if being run in Rails application and run in before_initialize (@husteadrobert, #555)
Bugfixes:
- Fix error message interpolation (@hanibash, #553)
- Fix Bigdecimal warnings (@agraves, #551)
- Avoid hitting up on redis for robots/excluded users. (@andrehjr, #544)
- Checks for defined?(request) on Helper#exclude_visitor?. (@andrehjr)
Misc:
- Update travis to add Rails 6 (@edmilton, #559)
- Fix broken specs in developement environment (@dougpetronilio, #557)
Features:
- Filter some more bots (@janosch-x, #542)
Bugfixes:
- Fix Dashboard Pagination Helper typo (@cattekin, #541)
- Do not storage alternative in cookie if experiment has a winner (@sadhu89, #539)
- fix user participating alternative not found (@NaturalHokke, #536)
Misc:
- Tweak RSpec instructions (@eliotsykes, #540)
- Improve README regarding rspec usage (@vermaxik, #538)
Features:
- Added pagination for dashboard (@GeorgeGorbanev, #518)
- Add Facebot crawler to list of bots (@pfeiffer, #530)
- Ignore previewing requests (@pfeiffer, #531)
- Fix binding of ignore_filter (@pfeiffer, #533)
Bugfixes:
- Fix cookie header duplication (@andrehjr, #522)
Performance:
- Improve performance of RedisInterface#make_list_length by using LTRIM command (@mlovic, #509)
Misc:
- Update development dependencies
- test rails 5.2 on travis (@lostapathy, #524)
- update ruby versions for travis (@lostapathy, #525)
Features:
- Allow configuration of how often winning alternatives are recalculated (@patbl, #501)
Bugfixes:
- Avoid z_score numeric exception for conversion rates >1 (@cmantas, #503)
- Fix combined experiments (@semanticart, #502)
Bugfixes:
- Bring back support for ruby 1.9.3 and greater (rubygems 2.0.0 or greater now required) (@patbl, #498)
Misc:
- Document testing with RSpec (@eliotsykes, #495)
Features:
- Support for combined experiments (@daviddening, #493)
- Rewrite CookieAdapter to work with Rack::Request and Rack::Response directly (@andrehjr, #490)
- Enumeration of a User's Experiments that Respects the db_failover Option(@MarkRoddy, #487)
Bugfixes:
- Blocked a few more common bot user agents (@kylerippey, #485)
Misc:
- Repository Audit by Maintainer.io (@RichardLitt, #484)
- Update development dependencies
- Test on ruby 2.4.1
- Test compatibility with rails 5.1
- Add uris to metadata section in gemspec
Features:
- added block randomization algorithm and specs (@hulleywood, #475)
- Add ab_record_extra_info to allow record extra info to alternative and display on dashboard. (@tranngocsam, #460)
Bugfixes:
- Avoid crashing on Ruby 2.4 for numeric strings (@flori, #470)
- Fix issue where redis isn't required (@tomciopp , #466)
Misc:
- Avoid variable_size_secure_compare private method (@eliotsykes, #465)
Backwards incompatible! Redis keys are renamed. Please make sure all running tests are completed before you upgrade, as they will reset.
Features:
- Remove dependency on Redis::Namespace (@bschaeffer, #425)
- Make resetting on experiment change optional (@moggyboy, #430)
- Add ability to force alternative on dashboard (@ccallebs, #437)
Bugfixes:
- Fix variations reset across page loads for multiple=control and improve coverage (@Vasfed, #432)
Misc:
- Remove Explicit Return (@BradHudson, #441)
- Update Redis config docs (@bschaeffer, #422)
- Harden HTTP Basic snippet against timing attacks (@eliotsykes, #443)
- Removed a couple old ruby 1.8 hacks (@andrew, #456)
- Run tests on rails 5 (@andrew, #457)
- Fixed a few codeclimate warnings (@andrew, #458)
- Use codeclimate for test coverage (@andrew #455)
Features:
- Support REDIS_PROVIDER variable used in Heroku (@kartikluke, #426)
Breaking changes:
- Removed deprecated
finished
andbegin_experiment
methods - Namespaced override param to avoid potential clashes (@henrik, #398)
Features:
- Running concurrent experiments on same endpoint/view (@karmakaze, #421)
Features:
- Add Dual Redis(logged-in)/cookie(logged-out) persistence adapter (@karmakaze, #420)
Features:
- Add
expire_seconds:
TTL option to RedisAdapter (@karmakaze, #409) - Optional custom persistence adapter (@ndelage, #411)
Misc:
- Use fakeredis for testing (@andrew, #412)
Bugfixes:
- FIX Negative numbers on non-finished (@divineforest, #408)
- Eliminate extra RedisAdapter hget (@karmakaze, #407)
- Remove unecessary code from Experiment class (@pakallis, #391, #392, #393)
Misc:
- Simplify Configuration#normalized_experiments (@pakallis, #395)
- Clarify test running instructions (@henrik, #397)
Bugfixes:
- Increment participation if store override is true and no experiment key exists (@spheric, #380)
Misc:
- Deprecated
finished
method in favour ofab_finished
(@andreibondarev, #389) - Added minimum version requirement to simple-random
- Clarify finished with first option being a hash in Readme (@henrik, #382)
- Refactoring the User abstraction (@andreibondarev, #384)
Features:
- add on_trial callback whenever a trial is started (@mtyeh411, #375)
Bugfixes:
- Allow algorithm configuration at experiment level (@007sumit, #376)
Misc:
- only choose override if it exists as valid alternative (@spheric, #377)
Misc:
- Deprecated some legacy methods (@andreibondarev, #374)
Bugfixes:
- respect manual start configuration after an experiment has been deleted (@mtyeh411, #372)
Misc:
- Introduce goals collection to reduce complexity of Experiment#save (@pakallis, #365)
- Revise specs according to http://betterspecs.org/ (@hkliya, #369)
Features:
- Added experiment filters to dashboard (@ccallebs, #363, #364)
- Added Contributor Covenant Code of Conduct
Bugfixes:
- Fix deleting experiments in from the updated dashboard (@craigmcnamara, #352)
Bugfixes:
- Fix the dashboard for experiments with ‘/‘ in the name. (@craigmcnamara, #349)
Features:
- allow for custom redis_url different from ENV variable (@davidgrieser, #323)
- add ability to change the length of the persistence cookie (@peterylai, #335)
Bugfixes:
- Rescue from Redis::BaseError instead of Redis::CannotConnectError (@nfm, #342)
- Fix active experiments when experiment is on a later version (@ndrisso, #331)
- Fix caching of winning alternative (@nfm, #329)
Misc:
- Remove duplication from Experiment#save (@pakallis, #333)
- Remove unnecessary argument from Experiment#write_to_alternative (@t4deu, #332)
Features:
- Handle redis DNS resolution failures gracefully (@fusion2004, #310)
- Push metadata to ab_test block (@ekorneeff, #296)
- Helper methods are now private when included in controllers (@ipoval, #303)
Bugfixes:
- Return an empty hash as metadata when Split is disabled (@tomasdundacek, #313)
- Don't use capture helper from ActionView (@tomasdundacek, #312)
Misc:
- Remove body "max-width" from dashboard (@xicreative, #299)
- fix private for class methods (@ipoval, #301)
- minor memoization fix in spec (@ipoval, #304)
- Minor documentation fixes (#295, #297, #305, #308)
Features:
- Configure redis using environment variables if available (@saratovsource , #293)
- Store metadata on experiment configuration (@dekz, #291)
Bugfixes:
- Revert the Trial#complete! public API to support noargs (@dekz, #292)
Changes:
- Public class methods on
Split::Experiment
(e.g.,find_or_create
) have been moved toSplit::ExperimentCatalog
.
Features:
- Decouple trial from Split::Helper (@joshdover, #286)
- Helper method for Active Experiments (@blahblahblah-, #273)
Misc:
- Use the new travis container based infrastructure for tests (@andrew, #280)
Changes:
- Remove support for Ruby 1.8.7 and Rails 2.3 (@qpowell, #271)
Features:
- Added new way to calculate the probability an alternative is the winner (@caser, #266, #251)
- support multiple metrics per experiment (@stevenou, #260)
Bugfixes:
- Avoiding call to params in EncapsulatedHelper (@afn, #257)
Features:
- Disable all split tests via a URL parameter (@hwartig, #263)
Bugfixes:
- Correctly escape experiment names on dashboard (@ecaron, #265)
- Handle redis connection exception error properly (@andrew, #245)
Features:
- Show metrics on the dashboard (@swrobel, #241)
Bugfixes:
- Avoid nil error with ExperimentCatalog when upgrading (@danielschwartz, #253)
- [SECURITY ISSUE] Only allow known alternatives as query param overrides (@ankane, #255)
Features:
- You can now reopen experiment from the dashboard (@mikezaby, #235)
Misc:
- Internal code tidy up (@IanVaughan, #238)
Features:
- Significantly improved z-score algorithm (@caser ,#221)
- Better sorting of Experiments on dashboard (@wadako111, #218)
Bugfixes:
- Fixed start button not being displayed in some cases (@vigosan, #219)
Misc:
- Experiment#initialize refactoring (@nberger, #224)
- Extract ExperimentStore into a seperate class (@nberger, #225)
Features:
- Sort experiments on Dashboard so "active" ones without a winner appear first (@swrobel, #204)
- Starting tests manually (@duksis, #209)
Bugfixes:
- Only trigger completion callback with valid Trial (@segfaultAX, #208)
- Fixed bug with
resettable
when usingnormalize_experiments
(@jonashuckestein, #213)
Misc:
- Added more bots to filter list (@lbeder, #214, #215, #216)
Features:
- Added Redis adapter for persisting experiments across sessions (@fengb, #203)
Misc:
- Expand upon algorithms section in README (@swrobel, #200)
Features:
- Add hooks for experiment deletion and resetting (@craigmcnamara, #198)
- Allow Split::Helper to be used outside of a controller (@nfm, #190)
- Show current Rails/Rack Env in dashboard (@rceee, #187)
Bugfixes:
- Fix whiplash algorithm when using goals (@swrobel, #193)
Misc:
- Refactor dashboard js (@buddhamagnet)
Features:
- Add hooks for Trial#choose! and Trial#complete! (@bmarini, #176)
Bugfixes:
- Stores and parses Experiment's start_time as a UNIX integer (@joeroot, #177)
Features:
- Rails 2.3 compatibility (@bhcarpenter, #167)
- Adding possibility to store overridden alternative (@duksis, #173)
Misc:
- Now testing against multiple versions of rails
Bugfixes:
- Use the specified algorithm for the experiment instead of the default (@woodhull, #165)
Misc:
- Ensure experiements are valid when configuring (@ashmckenzie, #159)
- Allow arrays to be passed to ab_test (@fenelon, #156)
Features:
- Support for Ruby 2.0.0 (@phoet, #142)
- Multiple Goals (@liujin, #109)
- Ignoring IPs using Regular Expressions (@waynemoore, #119)
- Added ability to add more bots to the default list (@themgt, #140)
- Allow custom configuration of user blocking logic (@phoet , #148)
Bugfixes:
- Fixed regression in handling of config files (@iangreenleaf, #115)
- Fixed completion rate increases for experiments users aren't participating in (@philnash, #67)
- Handle exceptions from invalid JSON in cookies (@iangreenleaf, #126)
Misc:
- updated minimum json version requirement
- Refactor Yaml Configuration (@rtwomey, #124)
- Refactoring of Experiments (@iangreenleaf @tamird, #117 #118)
- Added more known Bots, including Pingdom, Bing, YandexBot (@julesie, @zinkkrysty, @dimko)
- Improved Readme (@iangreenleaf @phoet)
Features:
- Persistence Adapters: Cookies and Session (@patbenatar, #98)
- Configure experiments from a hash (@iangreenleaf, #97)
- Pluggable sampling algorithms (@woodhull, #105)
Bugfixes:
- Fixed negative number of non-finished rates (@philnash, #83)
- Fixed behaviour of finished(:reset => false) (@philnash, #88)
- Only take into consideration positive z-scores (@thomasmaas, #96)
- Amended ab_test method to raise ArgumentError if passed integers or symbols as alternatives (@buddhamagnet, #81)
Features:
- General code quality improvements (@buddhamagnet, #79)
Bugfixes:
- Don't increment the experiment counter if user has finished (@dimko, #78)
- Fixed an incorrect test (@jaywengrow, #74)
Bugfixes:
- Fixed header gradient in FF/Opera (@philnash, #69)
- Fixed reseting of experiment in session (@apsoto, #43)
Features:
- Allow parameter overrides, even without Redis. (@bhcarpenter, #62)
Bugfixes:
- Fixes version number always increasing when alternatives are changed (@philnash, #63)
- updated guard-rspec to version 1.2
Features:
- redis failover now recovers from all redis-related exceptions
Features:
- Now works with v3.0 of redis gem
Bugfixes:
- Fixed redis failover on Rubinius
Features:
- Added configuration option to disable Split testing (@ilyakatz, #45)
Bugfixes:
- Fix weights for existing experiments (@andreas, #40)
- Fixed dashboard range error (@andrew, #42)
IMPORTANT
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.
Features:
- Experiments now record when they were started (@vrish88, #35)
- Old versions of experiments in sessions are now cleaned up
- Avoid users participating in multiple experiments at once (#21)
Bugfixes:
- Overriding alternatives doesn't work for weighted alternatives (@layflags, #34)
- confidence_level helper should handle tiny z-scores (#23)
Bugfixes:
- Fixed redis failover when a block was passed to ab_test (@layflags, #33)
Features:
- Handle redis errors gracefully (@layflags, #32)
Features:
- General code tidy up (@ryanlecompte, #22, @mocoso, #28)
- Lazy loading data from Redis (@lautis, #25)
Bugfixes:
- Handle unstarted experiments (@mocoso, #27)
- Relaxed Sinatra version requirement (@martinclu, #24)
Features:
- Redesigned dashboard (@mrappleton, #17)
- Use atomic increments in redis for better concurrency (@lautis, #18)
- Weighted alternatives
Bugfixes:
- Fix to allow overriding of experiments that aren't on version 1
Features:
- Added option to finished to not reset the users session
Bugfixes:
- Only allow strings as alternatives, fixes strange errors when passing true/false or symbols
Features:
- Experiments can now be deleted from the dashboard
- ab_test helper now accepts a block
- Improved dashboard
Bugfixes:
- After resetting an experiment, existing users of that experiment will also be reset
Features:
- Updated redis-namespace requirement to 1.0.3
- Added a configuration object for changing options
- Robot regex can now be changed via a configuration options
- Added ability to ignore visits from specified IP addresses
- Dashboard now shows percentage improvement of alternatives compared to the control
- If the alternatives of an experiment are changed it resets the experiment and uses the new alternatives
Bugfixes:
- Saving an experiment multiple times no longer creates duplicate alternatives
Bugfixes:
- Convert legacy sets to lists to avoid exceptions during upgrades from 0.1.x
Features:
- Override an alternative via a url parameter
- Experiments can now be reset from the dashboard
- The first alternative is now considered the control
- General dashboard usability improvements
- Robots are ignored and given the control alternative
Bugfixes:
- Alternatives are now store in a list rather than a set to ensure consistent ordering
- Fixed diving by zero errors
Bugfixes:
- More Robust conversion rate display on dashboard
- Ensure
Split::Version
is available everywhere, fixed dashboard
Initial Release