O que é exatamente "reloadable_patch"?

Olá,

Ainda estou tentando analisar plugins. Eu estava procurando sobrescrever o TopicsController em meus estudos e pesquisei no repositório de código do Discourse, onde notei o reloadable_patch.

Em seguida, pesquisei por reloadable_patch no Discourse e obtive 12 resultados de código:

Então, decidi olhar de forma mais ampla para tentar entender esse fascinante “método / hook (?)”. Para isso:

  • Pesquisei em todo o GitHub:
    – Todos os resultados parecem estar relacionados ao Discourse (plugins)

  • Pesquisei na web:
    – Todos os resultados parecem estar relacionados ao Discourse (plugins)

  • Pesquisei no Meta:
    – Obtive alguns resultados, mas nada que explicasse o reloadable_patch (internamente) em detalhes.

Na sequência, pesquisei novamente no repositório do Discourse e não consegui encontrar (deve ser porque ainda não tenho experiência nisso) a “definição” do que, exatamente, o reloadable_patch faz (ou como é definido).

Parece, para um iniciante em Ruby como eu, ser um “método” — por falta de uma palavra melhor — ou um “hook” que facilita a sobrescrita de classes do Discourse; mas não consegui encontrar o código Ruby que define como ele funciona internamente.

Alguém se importa em me explicar isso ou me indicar o “código definidor” que explicaria o que o reloadable_patch faz, sob uma perspectiva de funcionamento interno do Ruby?

Obrigado!

Espero não estar sendo um incômodo ao perguntar!! :slight_smile:

Está definido aqui. Espero que isso ajude a investigar mais.

Muito obrigado, @fzngagan

Não sei por que o método def não apareceu quando pesquisei no repositório com essa palavra-chave; mas é exatamente o que eu estava procurando!

Obrigado novamente!!

Edição: Entendi o que aconteceu. Não examinei o arquivo instance.rb com profundidade suficiente e parei no início do arquivo; mas havia 23 entradas para reloadable_patch no arquivo, e o def estava no final.

Uma busca por “def reloadable_patch” entre aspas o encontrou (agora mesmo) :slight_smile:

Estou começando a ficar viciado em Ruby, explorando cada canto e recanto.

Explicado de forma clara por @markvanlan