20 Mayo 2008
O un poquito más castellano: "be_indexed: matcher de RSpec para el is_indexed de Ultrasphinx".
Con él podemos especificar como debe estar indexado nuestro modelo tal que:
describe MiModeloIndexadoConUltrasphinx do
include Spec::Ultrasphinx::Matchers
it do
MiModeloIndexadoConUltrasphinx.should be_indexed.using_fields([:campo_uno, :campo_dos]).with_delta
end
end
De momento sólo contempla sus opciones :fields y :delta (son las únicas que he necesitado por ahora).
Para utilizarlo colocar be_indexed a modo de plugin en vendor/plugins e incluirlo en nuestra spec como en el ejemplo de arriba.
Para utilizarlo en más de una spec podemos meterlo en nuestro spec_helper.rb así:
Spec::Runner.configure do |config|
config.include Spec::Ultrasphinx::Matchers
end
Para más ejemplos de uso ver su propia spec.
Descarga/download vía...
git clone git://github.com/nando/be_indexed.git
... desde su línea-de-comandos/command-line favorita.
servido por Fernando
sin comentarios
compártelo
favorito
14 Diciembre 2007
... porque para que funcione correctamente tenemos que pasarle la consulta como una cadena entre apóstrofes (o comillas simples).
Así figura en su ejemplo dentro de la documentación de la API, pero cualquier despistado (como por ejemplo yo) podría poner la cadena entre comillas dobles. Si así lo hacemos y dentro hacemos uso de la clave principal del registro actual (con algo como "... WHERE post_id = #{id} ...") la consulta resultante tendrá en su lugar el identificador del objeto Ruby.
Por lo menos eso me ha pasado a mí esta tarde y me he vuelto loco hasta que he descubierto el origen del problema.
No me enrollo más que ya llego tarde a la super cañas-cena-party de los Cocktail Workers.
¡A disfrutar de la/s fiesta/s!
servido por Fernando
3 comentarios
compártelo
favorito
11 Diciembre 2007
En el recibidor principal de la Conferencia Rails de este año tuvimos la suerte de tener a Joshua presentándonos su nuevo equipo entre soniquetes de guitarra española. Hoy leo a Evan Phoenix en su último post :
In addition to getting all kinds of great code done, we’ve been filling out a lot of paperwork, because I’m proud to official announce that Ryan Davis and Eric Hodel are now officially EY employees, working on Rubinius!!!
Sin duda con fichajes de este nivel mi "dream team" va a poder muy pronto, si no ya, disfrutar de una pachanguita la mar de entretenida.
servido por Fernando
1 comentario
compártelo
favorito
22 Octubre 2007
Yo también pensaba que test/spec era la opción de BDD más "legacy-friendly", pero...
If you prefer test/spec’s style, that’s one thing, but I hate to see people making a choice based on inaccurate information.
... comentaba <david/> en “Be Dee Dee and Me” un mes después de que fuese publicado en Err The Blog, allá por mayo de este año.
Una de las cosas que más me emociona de dicho post es la generación de un esqueleto de especificación a partir de texto en lenguaje natural, casi puro y duro (en YAML ).
Es una simple tarea de rake pero si la utilizas, de repente te ves con tu página en blanco esperando a que simplemente expliques qué es lo que tienes que hacer. Sólo el ejercicio de definir el contexto es todo un desafío ya que, según me parece a mí, casi cada palabra del mismo debería formar parte del "glosario" de la aplicación.
Mi bautismo el pasado viernes en estos menesteres dio como resultado el siguiente texto en YAML :
La portada de un blog:
- deberia redirigir al indice del blog si tiene algun post publicado
- deberia redirigir al indice del fotolog si tiene algun fotopost publicado y ningun post
- deberia informar de que el blog no tiene contenidos si no tiene ningun post ni fotopost publicado
... y de éste a su definición formal, y de ésta a su implementación final. Toda una gozada, la verdad.
Por ese motivo cuando he pinchado en el enlace del autor del mencionado comentario me he llevado una agradable sorpresa. "Story Runner in Plain English", un post publicado hace media hora (¡calentito aún!) trata justamente de más de eso mismo.
Pero eso sí, en este caso con Rspec, la reina de la fiesta y actual protagonista de nuestras paellas en The Cocktail.
Con este material al menos debería poder cocinar un buen postre, ¿no?
http://blog.davidchelimsky.net/
servido por Fernando
1 comentario
compártelo
favorito
16 Agosto 2007
Pues resulta que de un tiempo para acá venía sufriendo dolores en mi terminal al lanzar migraciones. Nada grave en realidad pero eso sí, bastante desagradables.
En particular con aquellas migraciones en las que tras la creación de una tabla le incorporamos algún campo nuevo que posteriormente utilizamos. Y era ahí justo, al utilizar ese nuevo campo, cuando sentía el pinchazo:
rake aborted!
undefined method `mi_nuevo_campo=' for #<ModeloUserType:0x9a6d0e8>
Normalmente el dolor se me pasaba con sólo lanzarla de nuevo: al cargar el modelo con la nueva estructura la migración pasaba sin problemas.
Pero en otras ocasiones ocurría que la migración en la que me aparecía el dolor, justo antes del mismo se realizaban operaciones irrepetibles, es decir, operaciones que al relanzar la migración fallaban, produciéndome un dolor mucho más grande.
Por suerte, gracias a Richard Livsey , en particualar gracias al siguiente comentario que le hacía en su blog a otro paciente con dolores similares, los míos ya son historia:
August 04 2007 at 11:57 Richard Livsey says...
[...]
In cases where the models db structure changes during a migration, you can call Model.reset_column_information to reload it.
Con su receta tras la incorporación de nuevos campos o justo antes de utilizarlos ya no he vuelto a sufrir molestias.
¡Gracias doctor!
servido por Fernando
sin comentarios
compártelo
favorito
13 Julio 2007
Hace ya tiempo que vengo sintiendo que GNU/Linux es para mí, entre otras cosas, el productor de mis sudokus favoritos. Lo que para muchos serían dolores de cabeza para mi son nuevos retos que me hacen pasar unos ratos bastante entretenido.
Lo bueno de estos sudokus es que para resolverlos en lugar de utilizar un algoritmo fijo es necesario uno variable basado fundamentalmente en el buceo: bucear por la red, bucear por código, bucear por ficheros de configuración, bucear por logs, etc. Y con cada inmersión vas aprendiendo no pocas peliculillas de este género, el digital.
Gracias a Max he logrado resolver en tiempo récord mi último sudoku:
Utilizando el móvil para acceder a Internet la conexión se me colgaba pasados unos pocos minutos
Primera inmersión: destino /var/log/syslog
Observo en el log del sistema los siguientes mensajes sospechosos:
Jul 11 12:09:02 duende kernel: hci_acl_tx_to: hci0 ACL tx timeout
Jul 11 12:09:02 duende kernel: hci_acl_tx_to: hci0 killing stalled ACL connection 36:ED:F1:63:19:00
Segunda inmersión: destino San Google
Buscado "ACL tx timeout" llego hasta una hebra del mismo nombre en una lista de usuarios de bluez, la pila de Bluetooth para Linux.
En uno de sus mensajes leo la siguiente pista de Max:
Looks like USB problems to me. For some people it helps to switch from usb-uhci.o to uhci.o
Y entonces me pregunto yo: ¿qué modulo tendré cargado en la máquina, usb-uhci o uhci?
Tercera inmersión: destino lsmod
Un lsmod me saca de dudas rápidamente: lástima, tengo cargado uhci, justo el que Max propone utilizar.
Pero no me rindo, veamos que otras opciones tengo...
Cuarta inmersión: destino modconf
Aleteando por los distintos menús de mi viejo kernel que amablemente me muestra modconf, dentro de kernel/drivers/usb/host me encuentro con los siguientes módulos: uhci, usb-uhci y usb-ohci.
Saco el módulo de uhci meto el de usb-uhci y... ¡bingo! La conexión ya no se corta.
Sudoku finiquitado (y ya comienzo a tener el mono de otro).
Does that help ?
Max
Yes, a lot. Thanks Max!
servido por Fernando
1 comentario
compártelo
favorito
28 Mayo 2007
Gracias a la serie de entrevistas sobre la máquna virtual de Ruby realizadas por James Edward Gray II a Matz
y Ko1 me agrada descubrir que el Ruby Core
Team tiene, al menos, un miembro más. Cuando le preguntan sobre sus labores en el proyecto no se corta:
My role in Ruby's development? To steal VM hacking pleasure from Matz?
Tengo la sensación de que tanto la máquina virtual de Ruby en particular (en sus distintas implementaciones) como las máquinas virtuales en general (tanto las de aplicación como las de sistema) tienen sus motores cada día más calentitos.
Suerte que al fin y al cabo hablamos de bits y nada malo puede pasar el día que les dé por explotar.
servido por Fernando
sin comentarios
compártelo
favorito
16 Mayo 2007
Uno de los efectos secundarios que tiene utilizar assert_select en nuestros tests de Rails es que comprueba que todo el código HTML que pasa por sus manos está bien formado.
Amablemente (esto es, sin romper los tests) nos avisa de que estamos cerrando una etiqueta sin haber cerrado antes otra que contiene, acompañado cada afirmación de precisos números de línea que nos facilitarán localizar la malformación.
Dicha precisión contrasta notablemente con la ausencia total de información al respecto del test que ha generado dicho código HTML. De poco nos sirve conocer la calle y el número si no sabemos el pueblo (unitario) o ciudad (funcional) en la que se encuentra Wally.
Si el aviso nos aparece en el test que acabamos de crear, no problemo: la acción invocada genera el HTML en cuestión. Lo incómodo es localizarlo si aparece de repente, de forma inesperada en medio de esa infinita hilera de puntos generada por la ejecución de los tests.
Solución: el parámetro TESTOPTS="-v" de rake, que no hace otra cosa que activar su modo verboso.
De esta forma justo antes de la ejecución de cada test aparecerá indicado su nombre y junto con el dedo acusica del assert_select descubrir sin muchos problemas donde está Wally.
servido por Fernando
1 comentario
compártelo
favorito