Como en js no hay clases reales cuando se quiere obtener un funcionamiento de delegación similar hay que acudir a patrones más o menos liosos para ello.
La forma más efectiva de hacerlo (en términos de memoría) es haciendo uso de los prototypes de las funciones tal y como sigue:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Install into local maven repo (or wherever you want to):
grails maven install --binary
Then, you have include your plugin as a dependency for your grails app:
BuildConfig.groovy:
dependencies { //Since it is binary plugin is goes here instead of in the 'plugins' section compile 'com.nortia.book:book-remote:0.1' }
That's it! :D
PD: There is no need for the plugin to be 'binary' unless you're planning to use those domains in another groovy (no grails) project (which was my case).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Lo que pedía el cuerpo era hacer un intento para incluir Gorm en un ejemplo sencillo de Griffon.
El código completo esta en el siguiente repo (https://github.com/ivanarrizabalaga/BookGorm), y las partes relevantes son:
Llevo meses usando una especie de servilleta vieja donde apunto los comandos básicos de Git que siempre se me olvidan.
Hoy tenía que recoger la habitación y aunque no descarto que la hoja en cuestión acabe teniendo valor histórico creo que es momento de volcarlo a un mini-post que me sirva como 'cheatsheet' personal.
Hay 1000 recursos por ahi fuera mucho más estructurados y más completos, esto es simplemente mi versión ultrasimplificada
Los comandos hacen referencia a un hipotético escenario donde se trabaja sobre 3 entornos (desarrollo, staging, produccion), desplegando la aplicación sobre Heroku.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
En groovy convertir las propiedades de un objecto en un Map es una labor practicamente inmediata:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Nota: Si el objecto no es un objeto simple sino que esta compuesto de otros objetos complejos estos campos serán mapeados igualmente pero tal cual son, sin transformarse en Maps.
Y resulta q por un error de carga o algo similar la columna tablaPadre_id no esta bien cargada, podemos actualizar esa tablaHija según los datos de la tablaPadre usando la siguiente query:
UPDATE tablaHija th
SET tablaPadre_id = (
SELECT t.id
FROM tablaPadre tp
WHERE tp.tablaHija_id = th.id)
WHERE EXISTS (
SELECT 1
FROM tablaPadre tp
WHERE tp.tablaHija_id = th.id);
De esta forma los valores de la columna de la tablaPadre se usarán para dar valor a la columna vacia de la tablaHija.
Si alguna vez te has visto obligado a hacer un 'Replace All' en un fichero de texto grande (> 500MB) sabras que la experiencia es casi religiosa.
El editor de turno se queda colgado al abrir y al reemplazar y no queda dios ni semidios del que no te hayas acordado.
La solucion pasa por usar el comando sed de linux:
sed -i.bak 's/datamart_desa/datamart/' fich.sql
En este ejemplo se reemplaza la cadena "datamart_desa" por "datamart" en el fichero 'fich.sql' generando (por si acaso) un backup con el nombre 'fich.sql.bak'.
En un ejemplo concreto con un fichero de 870MB tarda unos 10sec., ¡una maravilla oiga!
A veces, en especial mientras ejecutas tests, necesitas sacar la información de tus objetos de dominio.
Empiezas con un println sencillo y al rato tu código apesta porque tienes println infumables que además habrá que revisar el día que cambias la definición de tus clases.
Así que para ahorrarme estos disgustos he acabado haciendo una clase muy sencilla que directamente te permite sacar la información de cualquier dominio (o listas de dominios) de forma genérica.
El código mezclando groovy con la api de reflection de java queda como sigue:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Si vas por partes verás que es muy sencillo, el único detalle más complicado tiene que ver con los campos heredados ya que hay que escalar en la jerarquía para poder listarlos.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters