web-dev-qa-db-fra.com

Idéal Ruby structure du projet

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?

118
dylanfm

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.

86
Chris Lloyd

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
9
Sam Shiles

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.

6
berlin.ab

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)

1
8bithero