Je veux créer un petit projet Ruby avec 10 ~ 20 classes / fichiers. J'ai besoin de quelques gemmes et je veux utiliser RSpec comme cadre de test.
Je pourrais vouloir construire un bijou plus tard, mais ce n'est pas certain.
Existe-t-il un mode d'emploi ou un guide qui me montre comment configurer la structure de base de mon projet?
Les questions que j'ai sont:
- Où dois-je mettre toutes mes erreurs / exceptions personnalisées?
- Existe-t-il des conventions pour nommer des répertoires comme lib, bin, src, etc.?
- Où dois-je mettre les données ou les documents de test?
- Où ai-je besoin de tous mes fichiers pour y avoir accès dans mon projet?
Je sais que je pourrais tout faire à partir de zéro, mais j'aimerais avoir des conseils. Il y a de bons joyaux que je pourrais copier, mais je ne suis pas sûr de ce dont j'ai vraiment besoin et de ce que je peux supprimer.
J'ai regardé http://gembundler.com/ , mais il s'arrête après avoir configuré Bundler.
ruby
project-structure
ayckoster
la source
la source
Réponses:
Pour obtenir un bon départ, vous pouvez utiliser la
bundle gem
commande etrspec --init
.lib
spec
spec/fixtures/
lib/my_lib.rb
. Vous pouvez également définir vos exceptions dans ce fichier ou dans leurs propres fichiers, selon vos préférences.ext/my_lib
bin
En cas de doute, regardez comment les autres gemmes sont disposées.
Informations complémentaires:
Vous devriez ajouter rspec en tant que dépendance de développement dans votre gemspec pour faciliter les choses pour les autres développeurs
gem.add_development_dependency 'rspec'
etgem.add_development_dependency 'rake'
près du bas.Bundler.setup
etrequire 'my_lib'
en haut de spec / spec_helper.rb pour vous assurer que vos dépendances de gem sont chargées lorsque vous exécutez vos specs.require "rspec/core/rake_task"
ettask :default => :spec
à votre fichier Rakefile, de sorte que l'exécutionrake
exécutera vos spécifications.Pendant que vous travaillez sur votre dernière création, guard-rspec peut vous faire gagner du temps et des tracas en exécutant automatiquement vos spécifications à mesure que les fichiers changent, vous alertant en cas d'échec des spécifications.
Une fois que vous êtes satisfait de votre création, poussez-la vers github
Ensuite, lorsque vous êtes prêt à publier votre gemme sur Rubygems.org, exécutez
rake release
, qui vous guidera à travers les étapes.Références supplémentaires
la source
-b, [--bin=Generate a binary for your library.]
avecbundle gem
.bundle gem <gem-name> -t
pour faire l'équivalent derspec --init
tout à la fois.Il y a quelques bons guides sur rubygems.org qui vous présenteront les conventions et le raisonnement derrière certaines d'entre elles. En général, les conventions de dénomination et de répertoire Rubygems sont suivies par la plupart des développeurs Ruby.
Je ne créerais des classes d'exception personnalisées que si je ne pouvais trouver aucune classe dans la bibliothèque standard correspondant à la description de l'erreur. Imbriquez votre classe d'erreur sous la classe ou le module qui la déclenche:
Les tests unitaires vont soit dans
/test
, si vous utilisezTest::Unit
, soit dans/spec
si vous utilisezRSpec
. Je recommande ce dernier.Bundler
est un excellent moyen de gérer votre chemin de chargement. Il configurera automatiquement votre environnement avec uniquement les dépendances spécifiées sur leGemfile
et éventuellement legemspec
. Il vous permet également de facilementrequire
votre code sans en faire un bijou.Cependant, comme vous pourriez regrouper votre code dans un bijou à l'avenir, je vous recommande d'étudier comment créer des spécifications de gemme . Vous devez écrire votre spécification manuellement. N'utilisez pas un outil pour le générer automatiquement - ce sont, à mon avis, des approches de force brute qui dupliquent inutilement les informations et font des ravages lorsqu'ils sont utilisés avec le contrôle de code source.
J'ai créé un bijou que vous trouverez peut-être utile. Compte tenu d' un
gemspec
fichier, il définit de nombreuses utilesRake
tâches pour travailler avec votre bijou, qui comprennent des tâches pour la construction, l' installation et de libérer votre bijou àrubygems
etgit
dépôt avec le marquage automatique de la version. Il fournit également un moyen simple de charger votre code dans une sessionirb
oupry
.la source
Voici les conventions que j'ai le plus souvent vues (en supposant que le nom de votre projet soit "foo"):
Dans lib /, la convention est généralement de créer un dossier pour chaque sous-espace de noms à l'intérieur de votre espace de noms de niveau supérieur. Par exemple, la classe Foo :: Bar :: Baz se trouve généralement sous /lib/foo/bar/baz.rb.
Certaines personnes aiment créer un fichier /lib/foo/version.rb juste pour définir la constante Foo :: VERSION, mais très souvent j'ai vu cela défini dans le fichier /lib/foo.rb.
De plus, si vous créez une gemme, vous aurez besoin des fichiers suivants:
la source
Il existe des guides sur Internet sur la manière de structurer un projet Ruby. En outre, je pense que la meilleure façon de résoudre ce problème est de se diriger vers github et de rechercher un projet Ruby célèbre, et de vérifier "leurs" structures.
Outre les exigences générales en matière de gemmes rubis, je recommande les outils suivants pour un meilleur flux de travail:
package
: construire un paquet de gemmesclean
: nettoyer les fichiers généréstest
: exécuter le testEt en plus de tous les outils ci-dessus, il s'agit d'un service en ligne pour le projet ruby:
Et vous pouvez même générer des badges via http://shields.io/ pour votre projet open source.
C'est mon expérience, j'espère que cela aidera quelqu'un.
la source