Quiero crear un pequeño proyecto Ruby con 10 ~ 20 clases / archivos. Necesito algunas gemas y quiero usar RSpec como marco de prueba.
Es posible que desee construir una gema más adelante, pero eso no es seguro.
¿Hay algún instructivo o guía que me muestre cómo configurar la estructura básica de mi proyecto?
Las preguntas que tengo son:
- ¿Dónde pongo todos mis errores / excepciones personalizados?
- ¿Existen algunas convenciones para nombrar directorios como lib, bin, src, etc.?
- ¿Dónde pongo los datos o documentos de prueba?
- ¿Dónde necesito todos mis archivos para tener acceso a ellos en mi proyecto?
Sé que puedo hacer todo desde cero, pero me gustaría recibir orientación. Hay algunas gemas buenas que podría copiar, pero no estoy seguro de qué necesito realmente y qué puedo eliminar.
Miré http://gembundler.com/ , pero se detiene después de configurar Bundler.
ruby
project-structure
ayckoster
fuente
fuente
Respuestas:
Para empezar bien, puede utilizar el
bundle gem
comando yrspec --init
.lib
spec
spec/fixtures/
lib/my_lib.rb
. También puede definir sus excepciones en ese archivo o en sus propios archivos, según sus preferencias.ext/my_lib
bin
En caso de duda, mire cómo están distribuidas otras gemas.
Más información:
Debe agregar rspec como una dependencia de desarrollo en su gemspec para facilitar las cosas a otros desarrolladores
gem.add_development_dependency 'rspec'
ygem.add_development_dependency 'rake'
cerca del final.Bundler.setup
yrequire 'my_lib'
al principio de spec / spec_helper.rb para asegurarse de que sus dependencias de gemas se carguen cuando ejecute sus especificaciones.require "rspec/core/rake_task"
ytask :default => :spec
a su Rakefile, para que la ejecuciónrake
ejecute sus especificaciones.Mientras trabaja en su creación más reciente, guard-rspec puede ahorrarle tiempo y molestias al ejecutar automáticamente sus especificaciones a medida que cambian los archivos, lo que le alerta sobre fallas en las especificaciones.
Una vez que esté satisfecho con su creación, póngala en github
Luego, cuando esté listo para lanzar su gema en Rubygems.org, ejecute
rake release
, que lo guiará a través de los pasos.Referencias adicionales
fuente
-b, [--bin=Generate a binary for your library.]
conbundle gem
.bundle gem <gem-name> -t
para hacer el equivalente derspec --init
todos a la vez.Hay algunas guías interesantes en rubygems.org que le presentarán las convenciones y el razonamiento detrás de algunas de ellas. En general, la mayoría de los desarrolladores de Ruby siguen las convenciones de nomenclatura y directorio de Rubygems .
Solo crearía clases de excepción personalizadas si no pudiera encontrar ninguna clase en la biblioteca estándar que se ajuste a la descripción del error. Anida su clase de error debajo de la clase o módulo que la genera:
Las pruebas unitarias entran en
/test
, si está usandoTest::Unit
, o en/spec
si está usandoRSpec
. Recomiendo este último.Bundler
es una excelente manera de administrar su ruta de carga. Automáticamente configurará su entorno con solo las dependencias especificadas enGemfile
y, opcionalmente, elgemspec
. También le permiterequire
crear fácilmente su código sin convertirlo en una joya.Sin embargo, dado que podría agrupar su código en una gema en el futuro, le recomiendo investigar cómo crear especificaciones de gemas . Debe escribir su especificación manualmente. No use alguna herramienta para generarlo automáticamente; en mi opinión, son enfoques de fuerza bruta que duplican información innecesariamente y causan estragos cuando se usan con control de fuente.
Creé una joya que puede resultarle útil. Dado un
gemspec
archivo, se define muchos útilesRake
tareas para trabajar con su gema, que incluyen tareas para la construcción, la instalación y la liberación de su joya arubygems
ygit
repositorio con la versión de etiquetado automático. También proporciona una manera fácil de cargar su código en una sesiónirb
opry
.fuente
Estas son las convenciones que he visto con más frecuencia (asumiendo que el nombre de su proyecto es "foo"):
Dentro de lib /, la convención suele ser crear una carpeta para cada sub-espacio de nombres dentro de su espacio de nombres de nivel superior. Por ejemplo, la clase Foo :: Bar :: Baz generalmente se encuentra en /lib/foo/bar/baz.rb.
A algunas personas les gusta crear un archivo /lib/foo/version.rb solo para establecer la constante Foo :: VERSION, pero muy a menudo he visto esto definido en el archivo /lib/foo.rb.
Además, si está creando una gema, necesitará los siguientes archivos:
fuente
Hay algunas guías en Internet sobre cómo estructurar un proyecto Ruby. Además, creo que la mejor manera de resolver esto es dirigirse a github y buscar algún proyecto Ruby famoso, y verificar "sus" estructuras.
Además de los requisitos generales de gemas de rubí, recomiendo las siguientes herramientas para un mejor flujo de trabajo:
package
: construir paquete de gemasclean
: limpiar archivos generadostest
: ejecutar pruebaY además de todas las herramientas anteriores, hay algún servicio en línea para el proyecto ruby:
E incluso puede generar insignias a través de http://shields.io/ para su proyecto de código abierto.
Esa es mi experiencia, espero que ayude a alguien.
fuente