Substituindo user_guardian.rb em um plugin (sem necessidade de fork!)

Olá @leighno5

Minha opinião para você, baseada na minha experiência pessoal, é que escrever plugins em Ruby para fazer o que você está fazendo no seu “fork” é muito mais fácil quando já entendemos Ruby e Rails o suficiente para criar facilmente um plugin para o Discourse (ou modificar qualquer classe do Rails).

Se não entendemos Rails e Ruby o suficiente para escrever um plugin para o Discourse, na minha experiência, fazer um fork do Discourse e mexer no núcleo é “equivocado”.

Acho que a analogia é esta (desculpe pela simplicidade da ideia):

“Alguém acha difícil caminhar; então decide correr em vez disso.”

Deixe-me explicar, se você não se importar:

Antes de começar a escrever aplicações em Rails (nada a ver com o Discourse) e tentar criar plugins para o Discourse, eu estava um pouco perdido; e até ficava um pouco irritado com o Discourse, acho. É como quando você quer acertar uma bola de golfe pela primeira vez; ela não vai direto e exige muito trabalho para acertar a bola no meio do fairway. Fazer um fork do Discourse é como pegar o driver grande no campo de prática antes de conseguir fazer chips e putts com os ferros curtos!

Eu tirei um tempo de fora de mexer no Discourse (vários meses atrás) e trabalhei por um tempo construindo, de fato, várias aplicações em Rails do zero; e então (e só então) comecei a desenvolver um conhecimento “instintivo” sobre Rails. Depois disso, quando decidi modificar o Discourse (atualmente estou rodando 6 plugins personalizados que escrevi para produção no Discourse), tudo se tornou intuitivo e plugins que modificavam o núcleo do Ruby ficaram muito simples.

Ruby é muito flexível. Podemos sobrescrever qualquer classe, qualquer objeto. Podemos redefinir todos os aspectos do Ruby. Com alguma experiência, começamos a pensar: “UAU”, não fazia ideia de que Ruby era tão flexível (e poderoso) e começamos a “ficar perigosos”, porque podemos voar como o Superman com Ruby e Rails. Estamos no início da nossa jornada em Ruby e Rails nesse momento, não no fim!

Com o conhecimento em Ruby e Rails que adquiri em 2020, sabendo o que sei agora, eu nunca faria um fork do Discourse e faria mudanças no núcleo do Ruby e do Rails como você está propondo, porque plugins são simplesmente muito fáceis de sobrescrever e modificar classes do Ruby, quando entendemos o básico das classes do Ruby e o básico de metaprogramação.

Acho que o que estou dizendo, desculpe ser tão direto, é que, se alguém acha que precisa mexer no núcleo do Discourse para fazer algumas pequenas mudanças em Ruby; então essa pessoa não entende Ruby e Rails o suficiente; porque, se entendesse, não mexeria no núcleo e apenas escreveria um plugin rápido para sobrescrever as classes e adoraria o monkey-patching.

Por outro lado, se eu quisesse fazer algo maluco e ser miserável, como substituir o EmberJS do Discourse por React e Ant Design, então fazer um fork seria a única opção! No entanto, na minha visão, o “Discourse” não é definido pelas “bibliotecas JavaScript”. O Discourse é definido pelas habilidades da equipe de desenvolvimento principal (as pessoas) e sua atenção aos detalhes, atendimento ao cliente, abordagem de equipe para desenvolvimento de código aberto, seu pipeline de recursos SPA e todo o trabalho duro deles! Seria um pouco maluco (na minha opinião) jogar todo esse poder intelectual fora só porque podemos gostar mais do Ant Design (com React) ou VueJS do que do Ember.

O mesmo é totalmente verdadeiro, ainda mais se vamos apenas modificar o núcleo do Discourse aqui e ali! Seria um pouco “maluco” fazer um fork para isso, jogando fora as “pessoas” que são o “verdadeiro” Discourse (não o código).

Estou falando apenas da minha jornada pessoal em 2020 aprendendo Ruby e Rails. Agora, está ficando fácil (o básico) e eu estou “perigoso”, LOL. Posso “brincar com monkey patch em qualquer coisa”, o que nem sempre é bom; e é para isso que os plugins do Discourse servem.

Mantenha o núcleo sólido como uma rocha e divirta-se “brincando” com o Discourse usando plugins.

Espero que isso ajude.

Nota: enquanto escrevia esta resposta, você escreveu:

Isso meio que prova meu ponto, não acha?

Escrever um “plugin” no Discourse é escrever “código Ruby” (em um nível) e, para outros, vai muito mais fundo (no EmberJS).

Antes de começar a escrever plugins para o Discourse, meu conselho amigável, talvez parecendo sem valor para você, é primeiro desenvolver algumas aplicações em Ruby on Rails. Aprenda seu caminho em Ruby e Rails, pelo menos o básico; depois disso, você terá respondido à sua própria pergunta acima.

Eu estava no telefone esta manhã em uma conferência com um cliente por três horas discutindo uma aplicação em Rails, validações, modelos, etc., e depois estava tirando um descanso após codificar algumas das ações da chamada e li sua postagem.

O caminho mais curto para escrever plugins para o Discourse, na minha opinião, é aprender Rails primeiro.

Espero que isso ajude!

5 curtidas