Je suis après un aperçu/clarification de la structure de projet idéale pour un projet Ruby (non-Rails/merb/etc). Je suppose que cela suit
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
Ai-je quelque chose de mal? Quelles parties ai-je manquées?
Je pense que c'est à peu près juste. Par défaut, Rubygems ajoutera le répertoire lib au chemin de chargement, mais vous pouvez pousser n'importe quel répertoire de votre choix en utilisant la variable $ :. c'est à dire.
$:.Push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff')
Cela signifie que lorsque vous avez dit: surfer.rb
dans ce répertoire, vous pouvez require "surfer"
n'importe où et le fichier sera trouvé.
De plus, par convention, les classes et les singletons obtiennent un fichier et les modules un répertoire. Par exemple, si vous aviez le module LolCatz
et le LolCatz::Moar
classe qui ressemblerait à:
lib/
appname.rb
lolcatz/
moar.rb
C'est pourquoi il existe un dossier lib/appname car la plupart des bibliothèques se trouvent dans l'espace de noms appname
.
En outre, si vous essayez d'exécuter la commande newgem --simple [projectname]
qui va rapidement générer un échafaudage pour vous avec juste l'essentiel pour un projet Ruby (et par extension a Ruby Gem)). Il existe d'autres des outils qui font ça, je sais, mais newgem est assez courant. Je me débarrasse généralement du fichier TODO et de tous les trucs de script.
Voir l'exemple suivant de http://guides.rubygems.org/what-is-a-gem/
% tree freewill
freewill/
├── bin/
│ └── freewill
├── lib/
│ └── freewill.rb
├── test/
│ └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec
J'essaie d'imiter la structure du projet Rails parce que mon équipe, qui s'occupe généralement de Rails, comprendra mieux la structure qu'une autre configuration. Convention sur la configuration - saignement de Rails.
Si vous utilisez bundler, exécutez cette commande bundle gem app_name
vous donnera la même structure de répertoires.
Si vous souhaitez utiliser rspec au lieu de tests unitaires, vous pouvez alors exécuter cette commande rspec --init
(Assurez-vous simplement que vous cd app_name
première)