r4nkt/laravel-resource-tidier

一组简单而具有偏见的类,允许对各种用户资源进行可配置的整理。

v0.5.0 2021-04-29 14:34 UTC

This package is auto-updated.

Last update: 2024-09-07 23:24:17 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

一组简单而具有偏见的类,允许对各种用户资源进行可配置的整理。它允许您配置“整理器”,以找到需要整理的资源,清除它们,通知资源所有者,并最终执行整理任务。它还允许在需要时“取消标记”资源。

这个包的开发是为了满足一个需求,但它也受到了Freek和他关于移除不活跃用户和团队的博客文章的启发。

还应注意的是,它是另一个r4nkt 的基础,该包可能对您的项目有用,或者可以作为如何使用laravel-resource-tidier的示例。

最后,重要的是指出,这个包受益于SpatieLaravel 包骨架包

安装

您可以通过 composer 安装此包

composer require r4nkt/laravel-resource-tidier

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="R4nkt\ResourceTidier\ResourceTidierServiceProvider" --tag="laravel-resource-tidier-config"

这是已发布配置文件的内容

<?php

use R4nkt\ResourceTidier\Actions\CullResources;
use R4nkt\ResourceTidier\Actions\HandleResources;
use R4nkt\ResourceTidier\Actions\NullFinder;
use R4nkt\ResourceTidier\Actions\NullMarker;
use R4nkt\ResourceTidier\Actions\NullNotifier;
use R4nkt\ResourceTidier\Actions\NullTask;
use R4nkt\ResourceTidier\Actions\NullUnmarker;

return [

    /**
     * Tidiers: A tidier is a simple class that tidies a given resource in two
     * steps:
     *  - First, it culls resources by finding those that match specific
     *    criteria, marking them, and notifying the resource owner of some
     *    impending action(s).
     *  - Second, it performs whatever tidying handler has been defined on the
     *    marked resources.
     *
     * Required parameters:
     *  - culler
     *  - handler
     */
    'tidiers' => [
        'null-resource-tidier' => [
            'culler' => 'null-resource-culler',
            'unmarker' => 'null-resource-unmarker',
            'handler' => 'null-resource-handler',
        ],
    ],

    /**
     * Cullers find specific resources, mark them, and notify their owners of
     * some impending handler(s).
     *
     * Required parameters:
     *  - class
     *  - params:
     *     - finder
     *     - marker
     *     - notifier
     *     - unmarker
     */
    'cullers' => [
        'null-resource-culler' => [
            'class' => CullResources::class, /** @todo Make optional...? */
            'params' => [
                'finder' => 'null-resource-finder',
                'marker' => 'null-resource-marker',
                'notifier' => 'null-resource-notifier',
            ],
        ],
    ],

    /**
     * Handlers, when executed, find resources having certain attributes and
     * then perform some sort of task on/with them.
     *
     * Required parameters:
     *  - class
     *  - params:
     *     - finder
     *     - task
     */
    'handlers' => [
        'null-resource-handler' => [
            'class' => HandleResources::class, /** @todo Make optional...? */
            'params' => [
                'finder' => 'null-resource-finder',
                'task' => 'null-resource-task',
            ],
        ],
    ],

    /**
     * Finders find resources that meet certain criteria, either for culling or
     * for handling.
     *
     * Required parameters:
     *  - class
     *
     * Optional parameters:
     *  - params
     *     - <custom param 1>
     *     - <custom param 2>
     *     - <custom param ...>
     *     - <custom param n>
     */
    'finders' => [
        'null-resource-finder' => [
            'class' => NullFinder::class,
            'params' => [
                'foo' => 'bar',
            ],
        ],
    ],

    /**
     * Markers mark a given resource as having been culled. The idea is that
     * enough information is stored to allow the handler's finder to
     * successfully find any marked resources.
     *
     * Required parameters:
     *  - class
     *
     * Optional parameters:
     *  - params
     *     - <custom param 1>
     *     - <custom param 2>
     *     - <custom param ...>
     *     - <custom param n>
     */
    'markers' => [
        'null-resource-marker' => [
            'class' => NullMarker::class,
            'params' => [
                'foo' => 'bar',
            ],
        ],
    ],

    /**
     * Notifiers are used to notify a resource owner that the resource has been
     * culled and that some action will take place.
     *
     * Required parameters:
     *  - class
     *
     * Optional parameters:
     *  - params
     *     - <custom param 1>
     *     - <custom param 2>
     *     - <custom param ...>
     *     - <custom param n>
     */
    'notifiers' => [
        'null-resource-notifier' => [
            'class' => NullNotifier::class,
            'params' => [
                'foo' => 'bar',
            ],
        ],
    ],

    /**
     * Tasks are executed for each culled resource during the handling stage of
     * the tidying process.
     *
     * Required parameters:
     *  - class
     *
     * Optional parameters:
     *  - params
     *     - <custom param 1>
     *     - <custom param 2>
     *     - <custom param ...>
     *     - <custom param n>
     */
    'tasks' => [
        'null-resource-task' => [
            'class' => NullTask::class,
            'params' => [
                'foo' => 'bar',
            ],
        ],
    ],

    /**
     * Unmarkers are meant to undo whatever the related marker has done,
     * effectively removing a given resource from the group of culled
     * resources.
     *
     * Required parameters:
     *  - class
     *
     * Optional parameters:
     *  - params
     *     - <custom param 1>
     *     - <custom param 2>
     *     - <custom param ...>
     *     - <custom param n>
     */
    'unmarkers' => [
        'null-resource-unmarker' => [
            'class' => NullUnmarker::class,
            'params' => [
                'foo' => 'bar',
            ],
        ],
    ],

];

使用方法

要获取一个已注册的整理器,您可以使用整理器工厂,如下所示

use R4nkt\ResourceTidier\Support\Factories\TidierFactory;

$tidier = TidierFactory::make('my-resource-tidier');

然后,您可以通过调用 cull() 来清除特定的整理器资源

$tidier->cull();

您还可以通过调用 handle() 来整理清除的资源

$tidier->handle();

最后,您可以通过调用 unmark() 并传入单个资源来取消标记清除的资源

$tidier->unmark($culledResource);

它做了什么?

整理器是一个简单的类,提供整理资源的方式

  • 首先,它会清除满足特定要求的任何资源。每个清除的资源都会被标记为需要整理,并且会通知资源所有者。
  • 其次,它允许取消标记之前已标记的单个资源。
  • 最后,它执行实际的整理工作。

一个示例整理器可能是针对那些尚未验证电子邮件地址的注册用户。清除将识别这些用户并将它们标记为删除。将向资源所有者(即用户本人)发送通知,告知他们的账户将被删除,因为与他们的账户关联的电子邮件尚未验证。如果他们在被删除之前验证了他们的电子邮件地址,那么它们将被“取消标记”。但是,如果未及时采取行动,则未经验证的用户账户将被删除。

整理器

可以在配置文件中按名称注册整理器,并且必须标识三个项目

  • culler
  • unmarker
  • handler

清除器

清除器的任务是找到满足某些条件的资源,将它们标记为清除,并通知单个资源所有者。

清除器可以在配置文件中按名称注册,并且必须标识三个参数

  • finder
  • marker
  • notifier

可选地,可以提供一个实现R4nkt\ResourceTidier\Actions\Contracts\CullsResources接口的class

取消标记器

取消标记器的任务是取消标记之前已标记的单个资源。

去标记器可以通过名称在配置文件中进行注册,并且必须标识一个实现了 R4nkt\ResourceTidier\Actions\Contracts\UnmarksResourceclass

可选地,可以提供去标记器需要的任何 params

处理器

处理器的任务是处理任何被清理的资源。

处理器可以通过名称在配置文件中进行注册,并且必须标识以下参数:

  • finder
  • 任务

可选地,可以提供一个实现了 R4nkt\ResourceTidier\Actions\Contracts\HandlesResourcesclass

查找器

查找器的任务是查找资源。它们被清理器和处理器使用,但执行的是相同的一般功能。对于清理器,它们是用来查找应该被清理的资源。对于处理器,它们是用来查找应该被整理的清理资源。

查找器可以通过名称在配置文件中进行注册,并且必须标识一个实现了 R4nkt\ResourceTidier\Actions\Contracts\FindsResourcesclass

可选地,可以提供查找器需要的任何 params

标记器

标记器的任务是标记单个资源已被清理。

标记器可以通过名称在配置文件中进行注册,并且必须标识一个实现了 R4nkt\ResourceTidier\Actions\Contracts\MarksResourcesclass

可选地,可以提供标记器需要的任何 params

通知器

通知器的任务是通知资源所有者他们的资源已被清理,并且可能将要采取某种行动。

通知器可以通过名称在配置文件中进行注册,并且必须标识一个实现了 R4nkt\ResourceTidier\Actions\Contracts\NotifiesResourceOwnerclass

可选地,可以提供通知器需要的任何 params

任务

任务的任务是整理单个资源。

任务可以通过名称在配置文件中进行注册,并且必须标识一个实现了 R4nkt\ResourceTidier\Actions\Contracts\ExecutesResourceTaskclass

可选地,可以提供通知器需要的任何 params

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

请审查我们的安全策略以了解如何报告安全漏洞。

鸣谢

许可

MIT 许可证 (MIT)。请参阅许可文件以获取更多信息。