A simple software maturity feature flag configuration package for Laravel 5.5/5.6
Laravel ships with .env files to give you great flexibility over the configuration and behaviour of your application depending on the environment it is running in., (*1)
However, specific environments are a more technical aspect, and often this is not the driver for when a functionality should be available or not.
Be it local, docker or test - there are a mixture of situations where you would probably not want your software to access a critical 3rd party API, apply strict business rules, store certain data or behave a simpler way than usual., (*2)
Using a maturity-based approach, you can bundle that behaviour into a handful of levels and and apply it to the different technical environments you are going to set up., (*3)
How to install it
Just pull in the package via composer:, (*4)
$ composer install bitnetic/maturity "0.1.*"
The maturity package comes with a config file named config/maturity.php. This file is deployed to the central laravel configuration directory using the vendor:publish command:, (*5)
$ php artisan vendor:publish --tag=config
How to use it
Insert your desired feature flags:, (*6)
$ vi config/maturity.php
Set your planned environment's maturities, e.g.:, (*7)
$ echo "MATURITY=DEV" >> .env
$ echo "MATURITY=PROD" >> .env.aws
Check and use feature flags within your business code, e.g.:, (*8)
if (Maturity::has('PROCESS_CREDIT_CARDS')) {
// ...
}
or in your DatabaseSeeder.php:, (*9)
public function run()
{
$this->call(\Acme\Cars\PlateRuleSeeder::class);
if (Maturity::has('SEED_DEMO_DATA')) {
// ...
}
}