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 framework de test.
Je pourrais vouloir construire un joyau plus tard, mais ce n’est pas certain.
Existe-t-il un guide ou un guide qui me montre comment configurer la structure de base de mon projet?
Les questions que j'ai sont:
Je sais que je peux tout faire à partir de rien, mais j'aimerais des conseils. Je pourrais copier quelques bonnes perles, mais je ne suis pas certain 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 la configuration de Bundler.
Pour bien commencer, vous pouvez utiliser le bundle gem
commande et 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
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, il suffit de regarder comment les autres gemmes sont disposées.
Informations complémentaires:
Vous devez 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'
et gem.add_development_dependency 'rake'
près du bas.Bundler.setup
et require 'my_lib'
au début de spec/spec_helper.rb pour vous assurer que vos dépendances de gem sont chargées lors de l’exécution de vos spécifications.require "rspec/core/rake_task"
et task :default => :spec
vers votre fichier Rakefile, de sorte que l'exécution de rake
exécute vos spécifications.Pendant que vous travaillez sur votre nouvelle création, guard-rspec peut vous faire gagner du temps et vous faciliter la vie de automatiquement en exécutant vos spécifications en tant que les fichiers changent, vous alertant des échecs de spécification.
~/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"
Une fois que vous êtes satisfait de votre création, appuyez sur 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 [email protected]:myusername/my_lib.git
~/code/my_lib $ git Push
Ensuite, lorsque vous êtes prêt à publier votre bijou sur Rubygems.org, exécutez rake release
, qui vous guidera à travers les marches.
~/code/my_lib $ rake release
Références supplémentaires
Il y a quelques guides de Nice sur rubygems.org qui vous initiera aux conventions et au raisonnement derrière certaines d'entre elles. En général, les conventions de dénomination et de répertoire Rubygems sont suivis par la plupart des Ruby).
Je ne créerais des classes d'exception personnalisées que si je ne pouvais trouver aucune classe dans la bibliothèque standard qui corresponde à la description de l'erreur. Emboîtez votre classe d'erreur sous la classe ou le module qui la soulève:
class Parser::Error < RuntimeError; end
begin
Parser.new(:invalid).parse!
rescue Parser::Error => e
puts e.message
end
Les tests unitaires vont soit en /test
, si vous utilisez Test::Unit
, ou dans /spec
si vous utilisez RSpec
. 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 le Gemfile
et éventuellement sur le gemspec
. Il vous permet également de facilement require
votre code sans en faire un joyau.
Cependant, étant donné que vous pourriez regrouper votre code dans une gemme à l'avenir, je vous recommande de rechercher comment créer des spécifications de gem . Vous devriez é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 des informations et font des ravages lorsqu'elles sont utilisées avec le contrôle de source.
J'ai créé une gemme que vous pouvez trouver utile. Avec un fichier gemspec
, il définit de nombreuses tâches Rake
utiles pour travailler avec votre gemme, notamment les tâches de construction, d'installation et de publication de votre gem sur rubygems
et git
référentiel avec marquage de version automatique. Il fournit également un moyen simple de charger votre code dans une session irb
ou pry
.
# Rakefile
require 'rookie'
# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
Voici les conventions que j'ai le plus souvent vues (en supposant que le nom de votre projet est "foo"):
Dans lib /, la convention est généralement de créer un dossier pour chaque sous-espace de noms dans votre espace de noms de premier niveau. 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 uniquement 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:
Il existe quelques guides sur Internet sur la façon de structurer un projet Ruby. En outre, je pense que le meilleur moyen de résoudre ce problème est de vous rendre sur github et de rechercher des noms célèbres Ruby projet, et vérifiez "leurs" structures.
Outre les exigences générales Ruby gem, je recommande les outils suivants pour un meilleur flux de travail:
package
: construire le paquet Gemclean
: nettoie les fichiers généréstest
: lancer le testEt en plus de tous les outils ci-dessus, il existe 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 pour quelqu'un.