sesiones rails gema funciones ruby

rails - ¿Cuál es la mejor manera de cargar clases de Ruby en una aplicación?



gema devise (5)

Aquí hay una opción que me gusta usar.

http://github.com/dyoder/autocode/tree/master

Del github doc

require ''autocode'' module Application include AutoCode auto_load true, :directories => [ :configurations, :models, :views, :controllers ] end

Esto intentará cargar código de forma dinámica desde los directorios proporcionados, utilizando el nombre del módulo para determinar qué directorio buscar. Por lo tanto, Application :: CustomerModel podría cargar los modelos de archivo / customer_model.rb.

Además, puedes echar un vistazo a la manera en que arrancan los rieles.

Actualmente estoy cargando clases de Ruby en cada archivo de clase usando el comando require, por ejemplo:

require File.join(File.dirname(__FILE__), ''observation_worker'') require File.join(File.dirname(__FILE__), ''log_worker'')

Para cada clase estoy definiendo las clases que requiere. Sería genial si pudiera hacer esto en el punto de entrada a mi aplicación.

¿Hay alguna manera fácil de cargar todas las clases de Ruby al inicio de una aplicación?


Si tiene una estructura de directorios algo clara de dónde va su código, podría agregar rutas de directorio específicas a la ruta de carga como

$LOAD_PATH.unshift( File.join( File.dirname(__FILE__), ''lib'' ) )

luego, en otras partes de tu código podrías necesitar una ruta relativa como esta:

require ''observation_worker'' require ''logger_worker''

o si tiene carpetas dentro de lib, incluso podría hacer

require ''workers/observation'' require ''workers/logger''

Esta es probablemente la forma más limpia de manejar la carga dentro del contexto de una biblioteca, en mi opinión.


pagar este cargador de clase

http://github.com/alexeypetrushin/class_loader

supongamos que tiene la siguiente estructura de directorios

/your_app /lib /animals /dog.rb /zoo.rb

simplemente apunte ClassLoader a la raíz de su aplicación, encontrará y cargará todas las otras clases automáticamente

require ''class_loader'' autoload_dir ''/your_app/lib'' Zoo.add Animals::Dog.new # <= all classes loaded automatically


Como comentó jtzero, autocarga ha sido desaprobada

Aún necesita especificar qué cargar, pero puede probar la autoload .

autoload :Module, "module"

Cuando se usa por primera vez el Module constante, el archivo "module" se require d automáticamente.


No estoy seguro de que entiendo completamente, ya que siempre tendrá que decirle a su programa qué archivos necesita, pero podría hacer algo como:

Dir["#{File.dirname(__FILE__)}/*.rb"].each { |f| require(f) }

Que incluirá todos los archivos .rb del directorio del archivo actual. Aunque si alguna vez comienzas a usar RDoc, no será feliz contigo.

Por lo general, no es malo enumerar sus necesidades de forma explícita, sino que deja en claro a otros desarrolladores que leen su código lo que está sucediendo.