Estou atrás de uma visão geral / esclarecimento da estrutura ideal do projeto para um projeto ruby (non-rails / merb / etc). Eu estou supondo que segue
app/
bin/ #Files for command-line execution
lib/
appname.rb
appname/ #Classes and so on
Rakefile #Running tests
README
test,spec,features/ #Whichever means of testing you go for
appname.gemspec #If it's a gem
Eu entendi algo errado? Que partes eu perdi?
ruby
project-structure
dylanfm
fonte
fonte
Respostas:
Eu acho que é muito bonito no local. Por padrão, Rubygems adicionará o diretório lib ao caminho de carregamento, mas você pode enviar qualquer diretório que desejar para ele usando a variável $: ie
Isso significa que, quando você disser,
surfer.rb
nesse diretório, poderá emrequire "surfer"
qualquer lugar e o arquivo será encontrado.Além disso, como convenção, classes e singletons obtêm um arquivo e módulos obtêm um diretório. Por exemplo, se você tivesse o
LolCatz
módulo e aLolCatz::Moar
classe com a seguinte aparência:É por isso que existe uma pasta lib / appname, porque a maioria das bibliotecas está no
appname
espaço para nome.Além disso, se você tentar executar o comando
newgem --simple [projectname]
que gerará rapidamente um andaime para você, com apenas o essencial para um projeto Ruby (e, por extensão, uma Ruby Gem). Existem outras ferramentas que fazem isso, eu sei, mas o newgem é bastante comum. Normalmente, me livre do arquivo TODO e de todas as coisas de script.fonte
lib
ser automaticamente adicionado ao caminho de carregamento. É uma coisa de 1,9? Alguma configuração especial necessária para que isso aconteça?bundle gem gem_name
Veja o exemplo a seguir em http://guides.rubygems.org/what-is-a-gem/
fonte
Tento imitar a estrutura do projeto Rails porque minha equipe, que geralmente lida com o Rails, entenderá a estrutura melhor do que outra configuração. Convenção sobre configuração - sangrando pelo Rails.
fonte
Se você usar o bundler, a execução desse comando
bundle gem app_name
fornecerá a mesma estrutura de diretório.Se você quiser usar rspec em vez de testes de unidade, poderá executar este comando
rspec --init
(certifique-secd app_name
primeiro)fonte