Eu quero criar um pequeno projeto Ruby com 10 ~ 20 classes / arquivos. Preciso de algumas joias e quero usar RSpec como framework de teste.
Eu posso querer construir uma joia mais tarde, mas isso não é certo.
Existe algum guia prático que me mostra como configurar a estrutura básica do meu projeto?
As perguntas que tenho são:
- Onde coloco todos os meus erros / exceções personalizados?
- Existem algumas convenções para nomear diretórios como lib, bin, src etc?
- Onde coloco dados de teste ou documentos?
- Onde eu exijo todos os meus arquivos para ter acesso a eles no meu projeto?
Eu sei que poderia fazer tudo do zero, mas gostaria de alguma orientação. Existem algumas joias boas por aí que eu poderia copiar, mas não tenho certeza do que realmente preciso e do que posso excluir.
Eu olhei em http://gembundler.com/ , mas ele para depois de configurar o Bundler.
ruby
project-structure
Ayckoster
fonte
fonte
Respostas:
Para começar bem, você pode usar o
bundle gem
comando erspec --init
.lib
spec
spec/fixtures/
lib/my_lib.rb
. Você também pode definir suas exceções nesse arquivo ou em seus próprios arquivos - de acordo com sua preferência.ext/my_lib
bin
Em caso de dúvida, veja como as outras joias estão dispostas.
Outras informações:
Você deve adicionar rspec como uma dependência de desenvolvimento em seu gemspec para tornar as coisas mais fáceis para outros desenvolvedores
gem.add_development_dependency 'rspec'
egem.add_development_dependency 'rake'
próximo ao final.Bundler.setup
erequire 'my_lib'
no topo de spec / spec_helper.rb para garantir que suas dependências de gem sejam carregadas quando você executar suas especificações.require "rspec/core/rake_task"
etask :default => :spec
ao seu Rakefile, para que a execuçãorake
execute suas especificações.Enquanto você está trabalhando em sua criação mais recente, guard-rspec pode economizar tempo e aborrecimento executando automaticamente suas especificações conforme os arquivos mudam, alertando-o sobre as falhas de especificação.
Quando estiver satisfeito com sua criação, envie-o para o github
Então, quando você estiver pronto para lançar sua joia em Rubygems.org, execute
rake release
, que o guiará pelas etapas.Referências adicionais
fonte
-b, [--bin=Generate a binary for your library.]
combundle gem
.bundle gem <gem-name> -t
para fazer o equivalente arspec --init
tudo de uma vez.Existem alguns guias interessantes em rubygems.org que irão apresentá-lo às convenções e o raciocínio por trás de algumas delas. Em geral, as convenções de nomenclatura e diretório do Rubygems são seguidas pela maioria dos desenvolvedores Ruby.
Eu só criaria classes de exceção personalizadas se não conseguisse encontrar nenhuma classe na biblioteca padrão que se encaixasse na descrição do erro. Aninhe sua classe de erro sob a classe ou módulo que o gera:
Os testes de unidade vão para
/test
, se você estiver usandoTest::Unit
, ou/spec
se estiver usandoRSpec
. Eu recomendo o último.Bundler
é uma ótima maneira de gerenciar seu caminho de carregamento. Ele configurará automaticamente seu ambiente apenas com as dependências especificadas noGemfile
e, opcionalmente, nogemspec
. Ele também permite que você facilmenterequire
seu código sem torná-lo uma jóia.No entanto, como você pode agrupar seu código em uma gema no futuro, recomendo investigar como criar especificações de gema . Você deve escrever sua especificação manualmente. Não use alguma ferramenta para gerá-la automaticamente - elas são, na minha opinião, abordagens de força bruta que duplicam informações desnecessariamente e causam estragos quando usadas com o controle de origem.
Eu criei uma joia que você pode achar útil. Dado um
gemspec
arquivo, ele define muitos úteisRake
tarefas para trabalhar com a sua jóia, que incluem tarefas para a construção, instalação e liberando sua jóia pararubygems
egit
repositório com a versão de marcação automática. Ele também fornece uma maneira fácil de carregar seu código em uma sessãoirb
oupry
.fonte
Aqui estão as convenções que tenho visto com mais frequência (presumindo que o nome do seu projeto seja "foo"):
Dentro de lib /, a convenção geralmente é criar uma pasta para cada sub-namespace dentro de seu namespace de nível superior. Por exemplo, a classe Foo :: Bar :: Baz é normalmente encontrada em /lib/foo/bar/baz.rb.
Algumas pessoas gostam de criar um arquivo /lib/foo/version.rb apenas para definir a constante Foo :: VERSION, mas muitas vezes eu vi isso definido no arquivo /lib/foo.rb.
Além disso, se estiver criando uma gema, você precisará dos seguintes arquivos:
fonte
Existem alguns guias na internet sobre como estruturar um projeto Ruby. Além disso, acho que a melhor maneira de resolver isso é ir ao github e procurar por algum projeto Ruby famoso e verificar "suas" estruturas.
Além dos requisitos gerais de rubi gem, recomendo as seguintes ferramentas para um melhor fluxo de trabalho:
package
: construir pacote de gemasclean
: limpar arquivos geradostest
: teste de corridaE além de todas as ferramentas acima, eles são alguns serviços online para o projeto Ruby:
E você pode até gerar crachás via http://shields.io/ para o seu projeto de código aberto.
Essa é a minha experiência, espero que ajude para alguém.
fonte