Clases con el mismo nombre

Buenas,
hoy nos hemos encontrado con un problema usando dos gemas de excel.
Usamos una para leer informes y otra para generarlos.
El problema es que ambas gemas tienen una clase Excel definida…
Existe alguna manera de especificar que clase Excel debe usar en cada
clase? Alguna manera de marcar el namespace o desambiguar las clases?

Gracias.

Si esperas un poco te llegara una repuesta buena. Pero si yo tuviera tu
problema y sólo conatase con mis escasoso conocimientos, probaría una
locura
del tipo hacer una clase mi que herede de una de las otras dos. Esta
clase
mi tendría un nombre diferente…en mi cabeza tiene sentido. Pero
llevarlo a
la práctica es otra cosa.

Un saludo

El 24 de abril de 2009 8:45, Xurde F. <
[email protected]> escribió:

Perdón, por “clase mi” quería decir “clase mía”

El 24 de abril de 2009 9:59, Andrés gutiérrez
[email protected]escribió:

2009/4/24 Xurde F. [email protected]:

Buenas,
hoy nos hemos encontrado con un problema usando dos gemas de excel.
Usamos una para leer informes y otra para generarlos.
El problema es que ambas gemas tienen una clase Excel definida…
Existe alguna manera de especificar que clase Excel debe usar en cada
clase? Alguna manera de marcar el namespace o desambiguar las clases?

El otro día leí un post justo sobre este tema:

http://blog.zerosum.org/2009/4/17/why-namespaces-are-important

La solución sería utilizar módulos para aislar cada clase excel dentro
de un namespace propio, lo que no sé es si en tu caso se puede hacer.
Tampoco nos das muchos detalles ¿qué gemas estás utilizando?

2009/4/24 Xurde F. [email protected]

El problema es que ambas gemas tienen una clase Excel definida…

Se me ocurren dos maneras diferentes de solucionarlo.

a) La primera es modificar las gemas, cosa poco recomendada si son gemas
que
se piensan actualizar. Para ello, vendorizarlas sobretodo, nada de
instalarlas en el sistema.

b) Tener dos procesos. En uno cargas una y en otro cargas otra, y les
pones
ha hablar como amigos mediante drb(preferiblemente socket).

Explico un poco más esta segunda.
En la app cargo la gema de solo lectura, y esta se conecta al “demonio”
drb
y le pasa los parámetros para construir el excel.

Ambas soluciones creo que son válidas, la segunda me parece más
divertida y
más limpia, además de poder generar excels con una api clara y definida.
Además, tienes la ventaja (que no se si será el caso), de poder el
servidor
drb a escuchar en tcp, y tienes un generador de excel con una api
publica en
ruby para toda la red.

Creo que serían las dos soluciones más elegantes.

Un Saludo.


Guillermo Álvarez

Sent from Madrid, Comunidad de Madrid

El día 24 de abril de 2009 11:20, Guillermo [email protected]
escribió:>

2009/4/24 Xurde F. [email protected]

El problema es que ambas gemas tienen una clase Excel definida…

Seguramente las gemas tengas la clase dentro de un módulo por lo que
se le podrá invocar utilizando la cadena de namespaces como indica
David A…

Qué gemas son?

f.

2009/4/24 Fernando G. [email protected]

Seguramente las gemas tengas la clase dentro de un módulo por lo que
se le podrá invocar utilizando la cadena de namespaces como indica
David A…

Te sorprenderías la de gemas que no hacen eso, y el peligro no está ahí,
sino cuando una gema que crees inofensiva, te sobreescribe métodos del
core.
No me acuerdo ahora, pero una vez me volví loco buscando que pasaba, y
una
gema había sobreescrito Object#to_s. No recuerdo el caso en concreto, ya
que
mi reciente cambio de edad me lo impide, pero por si acaso, y si tienes
dudas, revisa el código de una gema. Que al fin y al cavo, no sabes que
gema
puede contener un rootkit. Desconfia.

Lo de los namespaces, de vez en cuando pasa, y es una putada. Lo bueno
que
es que suele pasar en gemas antiguas(sin mucha actualización), ya que
las
nuevas y más brillantes, suelen traer todas el namespace correspondiente
al
nombre de la gema, o por lo menos un nombre único, lo hace técnicamente
imposible el solapamiento de clases.

Gracias por todas las soluciones. Al final lo arreglamos gracias a que
una de las gemas si venia en forma de modulo y aprovechamos para usar el
namespace, la otra venia definida como un clase y poco que hacer con
ella…