2011-01-14 24 views
55

Estoy confundido acerca de lo que es la convención de nomenclatura cuando el nombre de la gema tiene más de una palabra.¿Debería uno usar guiones o guiones bajos al nombrar una gema con más de una palabra?

  • pensamiento-esfinge es el nombre de la gema, pero el archivo de base de .rb * para esta joya es lib/thinking_sphinx.rb (subrayado)

  • actos-como-taggable-On es la nombre de la gema, y ​​el archivo base * .rb se llama lib/acts-as-taggable-on.rb (guiones)

  • factory_girl usa un guion bajo en el nombre de la gema y en el nombre de la base * .rb archivo

¿Importa si se usan guiones bajos o guiones? ¿Hay algún consenso emergente aquí?

Respuesta

50

Eric Hodel tiene un blog el siguiente: A Project Naming Recommendation

rieles solidificado la convención de nombres de clase CamelCase de mapeo para nombres de archivo (subrayados clase IMAPProcesor se define en imap_processor.rb). El uso de nombres de gemas subrayados facilita a las personas averiguar qué archivo requerir (el mismo como nombre del proyecto) o el nombre de la clase que debe buscarse en ri.

Si tengo un complemento gema o una extensión Voy a virar en el nombre del subproyecto con un guión. Si quisiera agregar un nuevo controlador para imap_to_rss para el correo electrónico Chase bank , la gema se llamaría imap_to_rss-chase.

+4

Esto es consistene con el consejo pues dada en las guías oficiales de Ruby Gems - [nomenclatura coherente] (http://guides.rubygems.org/patterns/#consistent-naming). – stevenharman

+0

¿Qué pasa con yajl-ruby o bcrypt-ruby, que son envoltorios Ruby para las bibliotecas C existentes? Quiero un simple requerimiento 'bcrypt' dentro de mi código, pero no quiero nombrar a mi proyecto github "yajl" o "bcrypt" porque estos (tal vez) ya están tomados para las bibliotecas C originales. – dubek

+1

Este enlace al artículo de Eric Hodel ahora está muerto. Traté de encontrarlo en línea, pero después de 3 minutos de Google no pude hacerlo. – gardenofwine

23

Siguiendo el consejo here, aquí hay una tabla de cómo se romperían las cosas.

|  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

Creé una gema llamada tout_suite, pero aún así tuve que solicitarla con 'require 'tout/suite''. ¿Alguna idea de por qué? Estoy usando ruby ​​2.0 y rails 4.1.1 – gardenofwine

+0

@gardenofwine, ¿Cuál fue la clase principal o módulo? ¿Cómo era la estructura de archivos de tu gema? Esas cosas dictan lo que "debe" nombrar la gema, y ​​no al revés. – Intentss

+1

Esto funcionó bien para mí .. Creé una gema llamada calabash-shared y tuve que requerir 'calabash/shared' - mira este artículo para crear gemas http://www.smashingmagazine.com/2014/04/08/how -to-build-a-ruby-gem-with-bundler-test-driven-development-travis-ci-and-monos-oh-mi / –

Cuestiones relacionadas