Добавление метода `get_like` в класс PluginStore

Обычно используется поле key в таблице plugin_store_rows для хранения как пространства имен, так и уникального идентификатора, например:

<namespace>_<id>

В последнее время этот паттерн реже встречается в основных плагинах Discourse, что связано с общим снижением использования PluginStore. Например:

Однако он все еще используется в некоторых местах, включая саму основную кодовую базу Discourse, например, в модели Reviewables.

Я также использую этот паттерн в ряде плагинов.

Основная причина использования этого паттерна заключается в том, что таблица plugin_store_rows используется несколькими плагинами (а также некоторыми основными службами), поэтому идентифицирующие столбцы, то есть id и plugin_name, не могут использоваться для внутренней идентификации в каждой системе, использующей PluginStore. Вместо этого в столбце key используется строковая система.

Что касается изменения структуры базы данных изнутри плагина, у @gdpelican есть хороший пост на эту тему:

Лично я все еще довольно осторожен в этом вопросе, так как при работе с сторонним плагином вы не контролируете пространство имен, удаление вашего плагина и потенциально конфликтующие изменения, вносимые в основную кодовую базу Discourse.

Как упоминает @gdpelican, вам необходимо предоставить способ для пользователя плагина удалить изменения в базе данных, если он удалит плагин.

Предоставьте метод для пользователей, чтобы очистить ваши изменения в базе данных, если они больше не хотят ваш плагин. Я сделал это с помощью задачи rake.

Мне кажется, это слишком подробно для большинства пользователей плагинов и создает риск, если они не осведомлены об этой детали.

Более того, я пока не нашел реальной необходимости выходить за рамки PluginStore и CustomFields.

Тем не менее, лично я был бы за появление нового метода по этому образцу в PluginStore, так как считаю этот паттерн полезным.

@david, мне было бы интересно узнать ваше мнение по вышеизложенному.