[Ruby] Como vocês gerenciam suas dependências?

Eu realmente odeio o estilo de Rby para declarar dependências. Uma linguagem que lida com classes e módulos não deveria fazer “require” por arquivos e sim por alguma abstração consistente. Nos últimos projetos eu estava usando um hack para incluir tudo de uma vez só:

    Dir.glob(File.expand_path(directory + '/**/*rb')).each {|file| require file}

Que todo mundo sabe que é horrível mas pelo menos sanava o problema. O ponto é que esse código não garante ordem e eu tive problemas com arquivos que são carregados antes de suas dependências internas. A solução por enquanto foi voltar pro ‘padrão’ de cada arquivo faz seu próprio require de arquivos.

Estou pensando eme srever uma libzinha para tentar aplicar conceitos de pacotes e dependências, talvez uma DSL, mas anes gostaria de saber:

  1. Alguém conhece algo parecido?
  2. Como vocês gerenciam suas dependências hoje?

Eu deixo uma classe por arquivo, então eu tenho que dar require para todos as classes que eu estou usando.

Isso é chato demais mesmo.

Ruby deveria ter um default classpath como Java ou seja, todas as classes que estão no mesmo directório ão visíveis.

Será que eu tenho que fazer um hackezinho para carregar todos os .rb que estão no mesmo diretório da minha classe?

Assim, ainda não escrevi uma aplicação não rails em Ruby, mas o autorequire do Rails já quebra um galhão, né não?

Acho que ele em si já poderia ser padronizado pra a linguagem em si.

Em que lugar do meu código/classe devo colocar o código do autorequire, ou seja, que pega todos os .rb do diretório onde eu estou e dá um require?

Devo meter esse código fora do meu módulo, dentro do módulo ou dentro da classe ou dentro do initialize?

Não adianta muito porque Ruby não posui a convenção de nome do arquivo = nome da classe e ermite top-level (i.e. Object) methods.

Ele pega da sua pasta lib ou dos gems que você tiver na suam máquina pelo nome da classe que você estiver usando, não precisa nem dar require.

Não é uma maravilha, mas já faz a maior parte do trabalho.

Dizer quais classes você depende é meio ruim, o ideal é dizer quais módulos vc precisa. Para isso adotar a convensão que o nome do arquivo é o do módulo é razoavel e não mata ninguém.

Só toma cuidado para não inventar a cagada que é o sistema de módulos do python.

Modulos em Ruby sao apenas namespaces com meetodos atachados, nao vai adiantar muito.

[quote=louds]Dizer quais classes você depende é meio ruim, o ideal é dizer quais módulos vc precisa. Para isso adotar a convensão que o nome do arquivo é o do módulo é razoavel e não mata ninguém.
[/quote]

Mas você não pode fazer um include MyModule::Util sem antes fazer o require de todas os .rb desse módulo, certo?

Teoricamente no múdulo você teria um arquivo com o nome do módulo que dá um require em todos os arquivos do mesmo (é assim que os gems funcionam).

Genial! :thumbup:

Sinceramente, não me incomoda nem um pouco ter que fazer “require”.

Por favor, evite ressuscitar tópicos se não houver nada de relevante à acrescentar.