it-swarm.com.de

Wie richte ich ein einfaches Ruby Projekt ein?

Ich möchte ein kleines Ruby Projekt mit 10 ~ 20 Klassen/Dateien erstellen. Ich benötige einige Edelsteine ​​und möchte RSpec als Testframework verwenden.

Vielleicht möchte ich später einen Edelstein bauen, aber das ist nicht sicher.

Gibt es eine Anleitung, die mir zeigt, wie ich die Grundstruktur meines Projekts aufbaue?

Fragen, die ich habe, sind:

  • Wo lege ich alle meine benutzerdefinierten Fehler/Ausnahmen ab?
  • Gibt es einige Konventionen für die Benennung von Verzeichnissen wie lib, bin, src usw.?
  • Wo lege ich Testdaten oder -dokumente ab?
  • Wo benötige ich alle meine Dateien, damit ich in meinem Projekt auf sie zugreifen kann?

Ich weiß, dass ich alles von Grund auf neu machen kann, aber ich hätte gerne eine Anleitung. Es gibt einige gute Juwelen, die ich kopieren könnte, aber ich bin nicht sicher, was ich wirklich brauche und was ich löschen kann.

Ich habe mir http://gembundler.com/ angesehen, aber es stoppt, nachdem Bundler eingerichtet wurde.

96
ayckoster

Für einen guten Start können Sie den Befehl bundle gem Und rspec --init Verwenden.

~/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 geht in lib
  • angaben gehen in spec
  • testdaten oder Dokumente gehen in spec/fixtures/
  • Benötigen Sie alle Ihre Ruby Dateien in lib/my_lib.rb. Sie können Ihre Ausnahmen auch in dieser Datei oder in ihren eigenen Dateien definieren - ganz nach Ihren Wünschen.
  • C-Quelldateien gehen in ext/my_lib
  • Shell-Skripte und ausführbare Dateien gehen in bin

Im Zweifelsfall schauen Sie sich einfach an, wie andere Edelsteine ​​angeordnet sind.


Weitere Informationen:

Sie sollten rspec als Entwicklungsabhängigkeit in Ihre gemspec aufnehmen, um es anderen Entwicklern leichter zu machen

  1. Bearbeiten Sie my_lib.gemspec, und fügen Sie gem.add_development_dependency 'rspec' Und gem.add_development_dependency 'rake' Im unteren Bereich hinzu.
  2. Fügen Sie Bundler.setup Und require 'my_lib' Am Anfang von spec/spec_helper.rb hinzu, um sicherzustellen, dass Ihre Gem-Abhängigkeiten geladen werden, wenn Sie Ihre Spezifikationen ausführen.
  3. Fügen Sie Ihrem Rakefile require "rspec/core/rake_task" Und task :default => :spec Hinzu, so dass das Ausführen von rake Ihre Spezifikationen ausführt.

Während Sie an Ihrer neuesten Kreation arbeiten, können Sie mit guard-rspec Zeit und Ärger sparen, indem Sie automatisch Ihre Spezifikationen als ausführen Dateien ändern sich und Sie werden auf Spezifikationsfehler aufmerksam gemacht.

~/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"

Wenn Sie mit Ihrer Kreation zufrieden sind, schieben Sie sie zum 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

Wenn Sie dann bereit sind, Ihren Edelstein auf Rubygems.org freizugeben, führen Sie rake release Aus, das Sie durch die Schritte führt.

~/code/my_lib $ rake release

Weitere Referenzen

151
John Douthat

Es gibt einige nette Führer bei rubygems.org , die Ihnen die Konventionen und die Gründe für einige von ihnen vorstellen. Im Allgemeinen werden die Rubygems-Namens- und -Verzeichniskonventionen von den meisten Ruby) Entwicklern befolgt.

Ich würde nur benutzerdefinierte Ausnahmeklassen erstellen, wenn ich keine Klasse in der Standardbibliothek finden könnte, die der Fehlerbeschreibung entspricht. Verschachteln Sie Ihre Fehlerklasse unter der Klasse oder dem Modul, die bzw. das sie auslöst:

class Parser::Error < RuntimeError; end

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

Unit-Tests gehen entweder in /test, Wenn Sie Test::Unit verwenden, oder in /spec, Wenn Sie RSpec . Letzteres empfehle ich.

Bundler ist eine großartige Möglichkeit, Ihren Ladepfad zu verwalten. Es wird automatisch Ihre Umgebung mit nur den Abhängigkeiten eingerichtet, die in Gemfile und optional in gemspec angegeben sind. Außerdem können Sie Ihren Code auf einfache Weise require, ohne ihn zu einem Juwel zu machen.

Da Sie Ihren Code jedoch möglicherweise in Zukunft in einem Edelstein bündeln, empfehle ich, wie Sie Edelsteinspezifikationen erstellen . Sie sollten Ihre Spezifikation manuell schreiben. Verwenden Sie kein Tool, um es automatisch zu generieren. Meiner Meinung nach handelt es sich um Brute-Force-Ansätze, die Informationen unnötig duplizieren und bei der Verwendung der Quellcodeverwaltung Chaos anrichten.

Ich habe ein Juwel erstellt das Sie vielleicht nützlich finden. Wenn Sie eine gemspec -Datei haben, werden viele nützliche Rake -Aufgaben für die Arbeit mit Ihrem Gem definiert, darunter Aufgaben zum Erstellen, Installieren und Freigeben Ihres Gems für rubygems und git Repository mit automatischer Versionskennzeichnung. Es bietet auch eine einfache Möglichkeit, Ihren Code in einer irb- oder pry-Sitzung zu laden.

# Rakefile
require 'rookie'

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

Hier sind die Konventionen, die ich am häufigsten gesehen habe (vorausgesetzt, der Name Ihres Projekts lautet "foo"):

  • /lib/foo.rb - Definiert den Namespace der obersten Ebene des Projekts und dessen Version. Benötigt Dateien.
  • / lib/foo/- Enthält alle Klassen für Ihr Projekt, einschließlich fehlerbezogener Klassen.
  • / test/- Enthält Tests für Ihr Projekt.
  • / spec/- Enthält die Spezifikationen für Ihr Projekt.
  • / bin/- Wenn Ihr Projekt von Binärdateien (JAR-Dateien usw.) abhängt, werden diese normalerweise dort abgelegt.

In lib/besteht die Konvention normalerweise darin, einen Ordner für jeden Sub-Namespace in Ihrem Top-Level-Namespace zu erstellen. Beispielsweise befindet sich die Klasse Foo :: Bar :: Baz normalerweise unter /lib/foo/bar/baz.rb.

Einige Leute mögen es, eine /lib/foo/version.rb-Datei zu erstellen, um die Foo :: VERSION-Konstante festzulegen, aber ich habe dies sehr oft in der /lib/foo.rb-Datei gesehen.

Wenn Sie einen Edelstein erstellen, benötigen Sie außerdem die folgenden Dateien:

  • / Rakefile - Definiert Rechenaufgaben (z. B. Aufgaben zum Testen, Bauen und Schieben des Edelsteins).
  • / Gemfile - Definiert die Quelle des Gems (unter anderem).
  • /foo.gemspec - Beschreibt Ihren Edelstein und stellt eine Liste von Abhängigkeiten bereit.
6
user2398029

Es gibt im Internet einige Anleitungen zum Strukturieren eines Ruby Projektes. Außerdem denke ich, dass der beste Weg, dies zu lösen, darin besteht, über Github zu gehen und nach einigen berühmten Ruby projektieren und "ihre" Strukturen überprüfen.

Neben den allgemeinen Ruby gem-Anforderungen empfehle ich die folgenden Tools für einen besseren Workflow:

  • editorconfig hilft Entwicklern, konsistente Codierungsstile zwischen verschiedenen Editoren und IDEs zu definieren und beizubehalten.
  • rubocop , statischer Codeanalysator für Ruby, die Defac in der Ruby Community.
  • guard zusammen mit einer Reihe von Plugins können Sie beliebige Befehle ausführen, wenn sich der Code automatisch ändert.
  • Rechen , der universelle Treiber für verschiedene Projektaufgaben, wie zum Beispiel:
    • package: Edelsteinpaket erstellen
    • clean: Generierte Dateien bereinigen
    • test: Test ausführen
  • yard , popular Ruby Dokumentationstool.

Und neben all den oben genannten Tools gibt es auch einen Onlinedienst für Ruby project:

Und Sie können sogar Ausweise über http://shields.io/ für Ihr Open-Source-Projekt generieren.

Das ist meine Erfahrung, hoffe es hilft jemandem.

4
Xiao Hanyu