Sovrascrivere user_guardian.rb in un plugin (nessun fork necessario!)

Se qualcuno si imbatte in questo e si è sentito così perso come me, ecco il mio codice, poiché sono riuscito a farlo funzionare come previsto. Non ho modificato alcun file. Ho semplicemente creato un nuovo file plugin.rb e inserito al suo interno quanto segue:

# about: Consente agli utenti in Modalità Anonima di modificare i propri nomi utente
# 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

Questo sovrascrive la classe user_guardian.rb nel core di Discourse per consentire agli utenti di modificare il nome utente e il nome dei propri account anonimi.

Se confronti ciò che ho qui con quanto contenuto in user_guardian.rb nel core di Discourse, puoi notare che c’è un sacco di altro codice con cui non ho dovuto fare nulla, quindi l’ho lasciato com’era. Tutto ciò che mi serviva era modificare quei due metodi can_edit_username e can_edit_name cambiando alcuni valori di ritorno da false a true, e sono riuscito a ottenere ciò che mi serviva.

Certamente ci sono miglioramenti che potrebbero essere apportati, e probabilmente ci sono le migliori pratiche che sono riuscito a cogliere leggendo i post collegati qui e altrove, ma se sei nuovo a Ruby come me e vuoi solo apportare una modifica molto semplice al core, questo è un esempio minimale funzionante di ciò che devi fare.

Molte grazie alle persone in questa discussione per la loro pazienza, il loro incoraggiamento e il loro aiuto! In particolare a @merefield, che in passato mi ha già aiutato con un altro post.