104 votes

Comment configurer une base de ruby projet?

Je veux créer un petit rubis projet avec 10-20 classes / fichiers. J'ai besoin de quelques pierres précieuses, et je veux utiliser rspec comme framework de test.

J'aimerais construire un bijou plus tard, mais ce n'est pas certaine.

Est-il un Howto ou Guide qui me montre comment configurer la structure de base de mon projet?

Les Questions que j'ai sont:

  • Où dois-je mettre tous mes personnalisé des Erreurs/Exceptions
  • Certaines conventions pour le nommage des répertoires comme lib, bin, crs, etc?
  • Où dois-je mettre des données de test ou de documents.
  • Où puis-je exiger de tous mes fichiers, j'ai donc accès à mon projet.

Je sais que je pourrais le faire tout à partir de zéro, mais je voudrais quelques conseils. Il y a quelques bonnes gemmes que je pourrais copier, mais je ne suis pas certain de ce que j'en ai vraiment besoin et ce que je peux supprimer.

J'ai regardé http://gembundler.com/, mais il s'arrête après la mise en place bundler.

157voto

John Douthat Points 28189

Pour prendre un bon départ, vous pouvez utiliser l' bundle gem de commandement et d' rspec --init.

~/code $ bundle gem my_lib
      create  my_lib/Gemfile
      create  my_lib/Rakefile
      create  my_lib/LICENSE.txt
      create  my_lib/README.md
      create  my_lib/.gitignore
      create  my_lib/my_lib.gemspec
      create  my_lib/lib/my_lib.rb
      create  my_lib/lib/my_lib/version.rb
Initializating git repo in /Users/john/code/my_lib
~/code $ cd my_lib/
~/code/my_lib $ git commit -m "Empty project"
~/code/my_lib $ rspec --init
The --configure option no longer needs any arguments, so true was ignored.
  create   spec/spec_helper.rb
  create   .rspec
  • code va en lib
  • spécifications aller en spec
  • test de données ou de documents d'aller en spec/fixtures/
  • Besoin de toutes vos ruby fichiers dans lib/my_lib.rb. Vous pouvez définir des exceptions fichier, ou dans leurs propres fichiers, selon votre préférence.
  • Fichiers source C aller en ext/my_lib
  • shell scripts et exécutables aller en bin

En cas de doute, il suffit de regarder comment les autres gemmes sont définies.


Plus d'informations:

Vous devez ajouter rspec comme un développement de la dépendance dans votre gemspec pour rendre les choses plus facile pour les autres développeurs

  1. Edit my_lib.gemspec, l'ajout d' gem.add_development_dependency 'rspec' et gem.add_development_dependency 'rake' près du fond.
  2. Ajouter Bundler.setup et require 'my_lib' au-dessus de spec/spec_helper.rb.rb pour assurer votre bijou les dépendances sont chargés lorsque vous exécutez vos spécifications.
  3. Ajouter require "rspec/core/rake_task" et task :default => :spec de votre Rakefile, de sorte que l'exécution rake exécuter vos spécifications.

Pendant que vous travaillez sur votre nouvelle création, garde-rspec peut vous faire économiser du temps et de tracas en automatiquement l'exécution de vos spécifications techniques que les fichiers de changer, de vous alerter sur les spec des échecs.

~/code/my_lib $ git add spec/spec_helper.rb
~/code/my_lib $ git commit -am "Add RSpec"
~/code/my_lib $ vim my_lib.gemspec # add guard development dependency
~/code/my_lib $ bundle
~/code/my_lib $ bundle exec guard init
~/code/my_lib $ vim Guardfile # Remove the sections below the top one
~/code/my_lib $ git add Guardfile
~/code/my_lib $ git commit -am "Add Guard"

Après vous êtes satisfait de votre création, le pousser jusqu'à github

# create a github repository for your gem, then push it up
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}' 
~/code/my_lib $ git remote add origin git@github.com:myusername/my_lib.git
~/code/my_lib $ git push

Puis, quand vous êtes prêt à libérer votre bijou sur Rubygems.org, exécutez rake release, qui vous guidera à travers les étapes.

~/code/my_lib $ rake release

Autres Références

11voto

Matheus Moreira Points 7839

Il y a quelques belles guides à rubygems.org qui vous présentera les conventions et le raisonnement à l'origine de certains d'entre eux. En général, la Rubygems de nommage et d'annuaire conventions sont suivies par la plupart des développeurs Ruby.

Je tiens seulement à créer des classes d'exception si je n'étais pas en mesure de trouver toutes les classes de la bibliothèque standard correspond à la description de l'erreur. Nest votre erreur classe titre de la classe ou du module de l'élève:

class Parser::Error < RuntimeError; end

begin
  Parser.new(:invalid).parse!
rescue Parser::Error => e
  puts e.message
end

Les tests unitaires aller soit en /test, si vous utilisez Test::Unit, ou en /spec si vous utilisez RSpec. Je vous recommande le dernier.

Bundler est un excellent moyen de gérer votre chemin de chargement. Il sera automatiquement configurer votre environnement avec seulement les dépendances indiquées sur l' Gemfile , et éventuellement l' gemspec. Il vous permet également de facilement require votre code sans en faire un joyau.

Cependant, puisque vous pouvez regrouper votre code dans un joyau dans l'avenir, je recommande d'enquêter sur la façon de créer gem spécifications. Vous devez rédiger votre cahier des charges manuellement. N'utilisez pas un outil pour générer automatiquement -, ils sont, à mon avis, la force brute des approches qui inutilement de dupliquer l'information et de causer des ravages lorsqu'il est utilisé avec le contrôle de source.

J'ai créé un bijou qui pourraient vous être utiles. Étant donné un gemspec le fichier, il définit un grand nombre d' Rake des tâches pour le travail avec votre bijou, qui incluent des tâches pour la construction, l'installation et la commercialisation de votre gemme rubygems et git référentiel avec la version automatique de marquage. Il fournit également un moyen facile de charger votre code dans un irb ou pry de la session.

# Rakefile
require 'rookie'

# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!

6voto

louism Points 1648

Voici les conventions que j'ai vu le plus souvent (en supposant que le nom du projet est "toto"):

  • /lib/foo.rb - Définit le niveau supérieur de l'espace de noms du projet et sa version; exige que les fichiers nécessaires.
  • /lib/foo/ - Contient toutes les classes de votre projet, y compris les erreurs liées classes.
  • /test/ - Contient des tests pour votre projet.
  • /spec/ - Contient les spécifications de votre projet.
  • /bin/ - Si votre projet dépend de binaires (fichiers JAR, etc.), ils ont l'habitude d'aller là-bas.

À l'intérieur lib/, la convention est généralement de créer un dossier pour chaque sous-espace de noms à l'intérieur de votre haut niveau de l'espace de noms. Par exemple, la classe Foo::Bar::Baz se trouve généralement dans /lib/foo/bar/baz.rb.

Certaines personnes aiment à créer un dossier /lib/foo/version.rb fichier juste pour définir les Foo::constante de VERSION, mais très souvent, j'ai vu cette définie dans /lib/foo.rb fichier.

Aussi, si vous créez un bijou, vous aurez besoin des fichiers suivants:

  • /Rakefile - Définit les tâches rake (tels que les tâches de test, de la construction et de pousser le bijou).
  • /Gemfile - Définit la source de la gemme (entre autres choses).
  • /foo.gemspec - Décrit votre bijou et fournit une liste de dépendances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X