Переопределение user_guardian.rb в плагине (форк не требуется!)

Если кто-то наткнётся на это и так же, как я, был в замешательстве, я привожу ниже свой код, который у меня заработал как задумано. Я не изменял никаких файлов. Я просто создал новый файл plugin.rb и поместил в него следующее:

# about: Позволяет пользователям в режиме анонимности менять свои имена
# version: 0.1


require_dependency 'guardian'
require_dependency 'guardian/user_guardian'

class ::Guardian
end

module ::UserGuardian
  def can_edit_username?(user)
    return false if SiteSetting.sso_overrides_username?
    return true if is_staff?
    return false if SiteSetting.username_change_period <= 0
    return true if is_anonymous?
    is_me?(user) && ((user.post_count + user.topic_count) == 0 || user.created_at > SiteSetting.username_change_period.days.ago)
  end


  def can_edit_name?(user)
    return false unless SiteSetting.enable_names?
    return false if SiteSetting.sso_overrides_name?
    return true if is_staff?
    return true if is_anonymous?
    can_edit?(user)
  end
end

Это переопределяет класс user_guardian.rb в ядре Discourse, позволяя пользователям менять имя пользователя и имя своих анонимных учётных записей.

Если вы сравните то, что у меня здесь, с тем, что находится в user_guardian.rb в ядре Discourse, вы увидите, что есть множество других вещей, с которыми мне не нужно было ничего делать, поэтому я оставил их без изменений. Всё, что мне потребовалось, — это отредактировать два метода can_edit_username и can_edit_name, изменив некоторые возвращаемые значения с false на true, и я смог решить свою задачу.

Конечно, можно было бы внести улучшения, и, вероятно, существуют лучшие практики, которые я смог почерпнуть, прочитав связанные сообщения здесь и в других местах, но если вы, как и я, только начинаете знакомство с Ruby и просто хотите внести очень простые изменения в ядро, то это рабочий минималистичный пример того, что нужно сделать.

Огромное спасибо всем участникам этой ветки за ваше терпение, поддержку и помощь! В особенности @merefield, который ранее уже помогал мне в другом сообщении.