Incluir mixin de gem, ¿no funciona?

Tengo un problema al tratar de incluir mixin desde un archivo gem para usar a través de la consola.

require "fertilizer/version"

module Fertilizer
  # <-- CONSOLE EXTENSION (CONSOLE ONLY)-->
  # Following part of code is active with the start of IRB console. 
  # Details about features can be seen in console_extensions module.

  if defined?(Rails::Console)
    require 'fertilizer/console_extensions'
    include ConsoleExtensions
  end

  # <-- OBJECT EXTENSIONS (CONSOLE ONLY)-->
  if defined?(Rails::Console)
    require 'fertilizer/object_extensions'
  end
end

Gem tiene un archivo de rubí fertilizante.rb que ejecuta el código anterior, cuando inicio la consola puedo ver que se activa el código. Pero cuando trato de usar métodos de mixin, la consola no puede encontrarlos.

Si tomo exactamente el mismo código y lo pongo inicializador mixin se carga (como antes) pero esta vez puedo usar métodos de mixin en consle.

¿Cómo puedo arreglar mi archivo de gema para que cuando se cargue la gema, los métodos de mezcla estén disponibles a través de la consola?

preguntado el 12 de junio de 12 a las 14:06

Parece que ya lo arreglaste si usar un inicializador funciona. -

Bueno, me gustaría crear una gema que haga eso por ti. Si necesito crear un inicializador, entonces necesito generar ese inicializador. Demasiada molestia solo para agregar algunos métodos para que estén disponibles a través de la consola. -

Me di cuenta hasta ahora de que probablemente me falta "yo", es decir, "yo" del inicializador probablemente apunta a aplicaciones de rieles y "yo" de la inicialización de gemas es otra cosa. Trabajando en ello. -

Ok, descubrí el problema, pero no estoy seguro de cómo resolverlo, se requiere el archivo de gema fertilizante.rb pero no está incluido. Necesito enviar (: incluir, auto) pero no estoy seguro a través de qué clase activarlo. -

self se refiere al contexto de ejecución actual. Si alguna vez necesita saberlo con certeza, ya sea puts self.inspect or puts self.class -

1 Respuestas

Más discusión se puede encontrar aquí:

¿Cómo incluir automáticamente Gem en el camino?

La solución es:

Object.send(:include, self)

No estoy contento con la solución, pero funciona.

contestado el 23 de mayo de 17 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.