@aofl/rotations

The rotations class provides weight based view logic for A B testing

Stats

stars šŸŒŸissues āš ļøupdated šŸ› created šŸ£size šŸ‹ļøā€ā™€ļø
251Jun 15, 2021Aug 23, 2018Minified + gzip package size for @aofl/rotations in KB

Readme

@aofl/rotations

The rotations class provides weight based view logic for A B testing. It takes a rotation configuration file alongside an initial route configuration file containing all possible routes and produces a finalized route configuration file containing only the selected routes based on the rotation configuration rules. It also caches the results per client.

Aofl Router works well in conjunction with Aofl Rotations. Other routers may be used as well if they take a configuration file that uses path as a key for the value of the route. See sample route config below.

Api Documentation

Examples

Installation

$ npm i -S @aofl/rotations

Usage

Rotations config example

{
  'baseline_version': '1000',
  'conditions': {
    '2': 'homepage_design'
  },
  'qualification_order': {
    '/': ['2']
  },
  'versions': {
    '1000': 'routes',
    '1001': 'routes-homepage_design_test',
  },
  'weights': {
    '2': {
      '1000': 1,
      '1001': 1
    }
  }
}

Sample Route config example

{
  'routes': [
    {
      'resolve': () => import('./routes/home/index.js'),
      'rotation': 'routes',
      'path': '/',
      'dynamic': false,
      'title': 'AofL::Home'
    }
  ],
  'routes-homepage_design_test': [
    {
      'resolve': () => import('./routes-homepage_design_test/home/index.js'),
      'rotation': 'routes-homepage_design_test',
      'path': '/',
      'dynamic': false,
      'title': 'AofL::Home',
      'locale': ''
    }
  ]
};

Sample Rotation conditions

let rotationConditions = {
  'baseline': () => {
    return true;
  },
  'routes-homepage_design_test': (resolve, reject) => {
    return Promise.resolve(true); // works with promises too as long as the promise resolves with a boolean
  }
};

Sample Directory structure

routes
ā”œā”€ā”€ home
ā”‚   ā”œā”€ā”€ index.js
ā”‚   ā”œā”€ā”€ styles.css
ā”‚   ā”œā”€ā”€ template.js
ā”‚   ā””ā”€ā”€ test
ā”‚       ā””ā”€ā”€ index.spec.js
routes-homepage_design_test
ā”œā”€ā”€ home
ā”‚   ā”œā”€ā”€ index.js
ā”‚   ā”œā”€ā”€ styles.css
ā”‚   ā”œā”€ā”€ template.js
ā”‚   ā””ā”€ā”€ test
ā”‚       ā””ā”€ā”€ index.spec.js

The qualification logic begins by iterating over baseline routes (routes folder) and evaluating the conditions based on qualifying_order. Next weight are evaluated based on the qualifying rotation and the appropriate version is used to generate the new routes array.

Methods

Name Agruments Description Returns
constructor cacheNameSpace [String],
routeConfig [Object],
rotationConfig [Object],
rotationConditions [Object]
Rotations constructor void
getRoutes no arguments Gets the route configuration routeConfig [Array]<Object>

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.