2011-01-14 9 views
55

Ich bin verwirrt darüber, was die Edelstein Namenskonvention ist, wenn der Edelstein Name mehr als ein Wort hat.Sollte man bei der Benennung eines Edelsteins mit mehr als einem Wort Bindestriche oder Unterstriche verwenden?

  • Denken-Sphinx ist der Name des Edelsteins, aber die Basis * .rb-Datei für dieses Juwel ist lib/thinking_sphinx.rb (Unterstrichen)

  • Akten-as-markierbare-on ist die Name des Edelsteins, und die Basisdatei * .rb heißt lib/acts-as-taggable-on.rb (Bindestriche)

  • factory_girl verwendet einen Unterstrich sowohl im Namen des Edelsteins als auch im Namen der Basis * .rb-Datei

Spielt es eine Rolle, ob Unterstriche oder Bindestriche verwendet werden? Gibt es hier einen Konsens?

Antwort

50

Eric Hodel hat einen Blog-Post auf diesem: A Project Naming Recommendation

Rails die Konvention von Mapping Camelcase Klassennamen unterstrichenen Dateinamen (Klasse IMAPProcesor in imap_processor.rb definiert ist) verfestigt. Mit unterstrichenen Gem Namen macht es einfach für Menschen zu herauszufinden, welche Datei zu erfordern (gleiche als Projektname) oder welche Klasse Name in Ri suchen.

Wenn ich ein Plugin Juwel oder eine Erweiterung habe, werde ich auf den Teilprojektnamen mit einem Bindestrich heften. Wenn ich einen neuen Handler für imap_to_rss für Chase Bank E-Mail hinzufügen möchte, würde der Edelstein imap_to_rss-chase heißen.

+4

Dies ist consistene mit dem reccommendation in dem offiziell Ruby-Gems Guides gegeben - [Konsistente Naming] (http://guides.rubygems.org/patterns/#consistent-naming). – stevenharman

+0

Was ist mit yajl-ruby oder bcrypt-ruby, die Ruby-Wrapper für bestehende C-Bibliotheken sind? Ich möchte eine einfache Anforderung "bcrypt" in meinem Code, aber ich möchte nicht mein github-Projekt "yajl" oder "bcrypt" nennen, weil diese (vielleicht) bereits für die ursprünglichen C-Bibliotheken verwendet werden. – dubek

+1

Dieser Link zu Eric Hodels Artikel ist jetzt tot. Ich habe versucht, es online zu finden, aber nach 3 Google Minuten gelang es nicht, dies zu tun. – gardenofwine

23

Folgen Sie dem Rat here, hier ist eine Tabelle, wie die Dinge zusammenbrechen würden.

|  Gem name  | Require statement   | Main class or module | 
|:--------------------|:-----------------------------|:----------------------| 
|fancy_require  |require 'fancy_require'  | FancyRequire   | 
|ruby_parser   |require 'ruby_parser'   | RubyParser   | 
|net-http-persistent |require 'net/http/persistent' | Net::HTTP::Persistent | 
|rdoc-data   |require 'rdoc/data'   | RDoc::Data   | 
|autotest-growl  |require 'autotest/growl'  | Autotest::Growl  | 
|net-http-digest_auth |require 'net/http/digest_auth'| Net::HTTP::DigestAuth | 
+0

Ich habe ein Juwel namens tout_suite erstellt, aber ich musste es immer noch mit 'require 'tout/suite' anfordern. Irgendwelche Ideen warum? Ich benutze Ruby 2.0 und Schienen 4.1.1 – gardenofwine

+0

@gardenofwine, Was war die Hauptklasse oder Modul? Wie sah die Dateistruktur Ihres Edelsteins aus? Diese Dinge bestimmen, was der Edelstein "heißen soll", nicht umgekehrt. – Intentss

+1

Das hat einfach gut für mich geklappt. Ich habe einen Edelstein namens calabash-shared kreiert und ich musste 'calabash/shared' verlangen - schaut euch diesen Artikel an, um Edelsteine ​​zu erschaffen http://www.smashingmagazine.com/2014/04/08/how -building-a-ruby-gem-mit-bundler-test-driven-development-travis-ci-und-overall-oh-my / –

Verwandte Themen