, (*1)
Scientist Utility Matchers
, (*2)
Simple type, utility matchers for use with the Scientist Library, (*3)
1. Installation
Require the latest version of Scientist Symfony using Composer., (*4)
composer require danhanly/scientist-utility-matcher
2. Matchers
There are a number of simple matchers packaged within this project, for use with your experiments., (*5)
2.1 ObjectPropertyMatcher
This allows you to match specific properties on objects returned with the control and trial processes., (*6)
When initialising the matcher, you can configure it to either match against a single property (via string), or multiple properties (via array), (*7)
// initialise matcher
$matcher = new \DanHanly\Scientist\UtilityMatchers\ObjectPropertyMatcher;
// define property via string
$matcher->setProperties('propertyName');
// or via array
$matcher->setProperties(['propertyName', 'anotherPropertyName']);
You can also set properties directly via the matcher constructor., (*8)
// define property via string
$matcher = new \DanHanly\Scientist\UtilityMatchers\ObjectPropertyMatcher('propertyName');
// or via array
$matcher = new \DanHanly\Scientist\UtilityMatchers\ObjectPropertyMatcher(['propertyName', 'anotherPropertyName']);
2.2 ArrayKeyMatcher
This allows you to match specific keys on arrays returned with the control and trial processes., (*9)
2.2.1 Simple Key Matching
When initialising the matcher, you can configure it to either match against a single key (via string), or multiple keys (via array), (*10)
// initialise matcher
$matcher = new \DanHanly\Scientist\UtilityMatchers\ArrayKeyMatcher;
// define keys via string
$matcher->setKeys('keyName');
// or via array
$matcher->setKeys(['keyName', 'anotherKeyName']);
You can also set keys directly via the matcher constructor., (*11)
// define key via string
$matcher = new \DanHanly\Scientist\UtilityMatchers\ArrayKeyMatcher('keyName');
// or via array
$matcher = new \DanHanly\Scientist\UtilityMatchers\ArrayKeyMatcher(['keyName', 'anotherKeyName']);
2.2.2 Deep Key Matching
Array deep key matching can be done with the -> delimiter., (*12)
Say for example you wanted to match the zip code of an address, but the address is stored in $array['data']['user']['address']['zip'], your matching notation would be data->user->address->zip, (*13)
// define key via string
$matcher = new \DanHanly\Scientist\UtilityMatchers\ArrayKeyMatcher('data->user->address->zip');
2.3 MinMaxMatcher
This allows you to ensure that both the trial values and the control values are within a predefined threshold., (*14)
When initialising the matcher, you can configure it to match only those that are greater than a minimum value, those that are less than a maximum value, or a combination of both., (*15)
The first parameter is the minimum value, the second parameter is the maximum value., (*16)
// intialise with a 0 minimum
$matcher = new \DanHanly\Scientist\UtilityMatchers\MinMaxMatcher(0);
// intialise with a 10 maximum
$matcher = new \DanHanly\Scientist\UtilityMatchers\MinMaxMatcher(null, 10);
// intialise between 0 and 10
$matcher = new \DanHanly\Scientist\UtilityMatchers\MinMaxMatcher(0, 10);
3. Usage
Once you've initialised and configured your matcher, you can use it within your experiments., (*17)
$experiment = (new Scientist\Laboratory)
->experiment('experiment title')
->control($controlCallback)
->trial('trial name', $trialCallback)
->matcher($matcher);