diff --git a/src/Helpers/FilterHelper.php b/src/Helpers/FilterHelper.php index 5a1780b..dfa0173 100644 --- a/src/Helpers/FilterHelper.php +++ b/src/Helpers/FilterHelper.php @@ -84,6 +84,13 @@ public static function recordNotification($notifiable, $notification): bool }); } + public static function recordFeatureFlag($flag, $scope): bool + { + return static::recordEvent(function () use ($flag, $scope) { + return app(LaritorOverride::class)->recordFeatureFlag($flag, $scope); + }); + } + public static function isBot($request): bool { return static::recordEvent(function () use ($request) { diff --git a/src/LaritorServiceProvider.php b/src/LaritorServiceProvider.php index 81f9bef..1141a22 100755 --- a/src/LaritorServiceProvider.php +++ b/src/LaritorServiceProvider.php @@ -130,6 +130,7 @@ public function registerRecorders() \BinaryBuilds\LaritorClient\Recorders\LogRecorder::class, \BinaryBuilds\LaritorClient\Recorders\MailRecorder::class, \BinaryBuilds\LaritorClient\Recorders\NotificationRecorder::class, + \BinaryBuilds\LaritorClient\Recorders\FeatureFlagRecorder::class, ]; foreach ($recorders as $recorder) { diff --git a/src/Override/DefaultOverride.php b/src/Override/DefaultOverride.php index 3b3111d..35e2254 100644 --- a/src/Override/DefaultOverride.php +++ b/src/Override/DefaultOverride.php @@ -129,6 +129,16 @@ public function recordNotification($notifiable, $notification): bool return true; } + /** + * @param string $flag + * @param mixed $scope + * @return bool + */ + public function recordFeatureFlag($flag, $scope): bool + { + return true; + } + /** * @param Request $request * @return bool diff --git a/src/Override/LaritorOverride.php b/src/Override/LaritorOverride.php index 4a70d0f..acca918 100644 --- a/src/Override/LaritorOverride.php +++ b/src/Override/LaritorOverride.php @@ -70,6 +70,13 @@ public function recordMail($message): bool; */ public function recordNotification($notifiable, $notification): bool; + /** + * @param string $flag + * @param mixed $scope + * @return bool + */ + public function recordFeatureFlag($flag, $scope): bool; + /** * @param Request $request * @return bool diff --git a/src/Recorders/FeatureFlagRecorder.php b/src/Recorders/FeatureFlagRecorder.php new file mode 100644 index 0000000..dd695df --- /dev/null +++ b/src/Recorders/FeatureFlagRecorder.php @@ -0,0 +1,62 @@ +feature, $event->scope)) { + return; + } + + self::recordFeatureCheck($event->feature, $event->value !== false); + } + + public static function registerRecorder() + { + if (class_exists(\Laravel\Pennant\Events\FeatureRetrieved::class)) { + Event::listen( \Laravel\Pennant\Events\FeatureRetrieved::class, [static::class, 'handle'] ); + } + } + + public static function recordFeatureCheck(string $feature, bool $active = true) + { + $laritor = app(Laritor::class); + + $flags = $laritor->getEvents(self::$eventType); + $addedFlags = []; + + $flagAdded = false; + foreach ($flags as $flag) { + if ($flag['flag'] === $feature) { + $flagAdded = true; + $flag['active'] = $active; + $addedFlags[] = $flag; + break; + } + } + + if (!$flagAdded) { + $addedFlags[] = [ + 'flag' => $feature, + 'active' => $active + ]; + } + + $laritor->addevents(self::$eventType, $addedFlags); + } +} diff --git a/src/Recorders/MailRecorder.php b/src/Recorders/MailRecorder.php index 9ddfb1a..bdde587 100644 --- a/src/Recorders/MailRecorder.php +++ b/src/Recorders/MailRecorder.php @@ -5,7 +5,6 @@ use BinaryBuilds\LaritorClient\Helpers\DataHelper; use BinaryBuilds\LaritorClient\Helpers\FilterHelper; use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Log\Events\MessageLogged; use Illuminate\Mail\Events\MessageSending; use Illuminate\Mail\Events\MessageSent; use Illuminate\Mail\Mailable; diff --git a/stubs/LaritorDataFilter.stub b/stubs/LaritorDataFilter.stub index a61bb47..3f37286 100644 --- a/stubs/LaritorDataFilter.stub +++ b/stubs/LaritorDataFilter.stub @@ -101,6 +101,16 @@ class LaritorDataFilter extends DefaultOverride return parent::recordNotification($notifiable, $notification); } + /** + * @param string $flag + * @param mixed $scope + * @return bool + */ + public function recordFeatureFlag($flag, $scope): bool + { + return true; + } + /** * @param Request $request * @return bool