Convencin para extender ActiveRecord

Por Ismael en 26/11/2008 en Desarrollo, Ruby & Rails, artculos

No hay una sino muchsimas formas de extender ActiveRecord. Buceando entre los cientos de plugins y extensiones disponibles encuentro distintas estrategias para inclur mdulos, sobreescribir mtodos o configurar opciones.

Me encontr especialmente frustrado al buscar alguna forma ms o menos estndar de definir macros o mtodos de clase que definen nuevo comportamiento, algo comn en los infinitos plugins de una sola lnea como acts_as_tree, acts_as_versioned (y toda la serie “acts_as”) o mis propios ar_publish_control y sluggable_finder.

Code (ruby)
  1.  
  2. class Post < ActiveRecord::Base
  3.   acts_as_tree #
  4. end
  5.  

Lo siguiente es un boceto para una convencin orientada a escribir extensiones de ActiveRecord en forma de gemas. Una gema de ejemplo, incluyendo tests, se encuentra aqu.

Control de publicacin en ActiveRecord

Por Ismael en 23/11/2008 en Proyectos, Ruby & Rails, artculos

Gema ruby para agregar control de publicacin a tus modelos ActiveRecord

ar_publish_control es una gema Ruby para aadir control de publicacin a tus modelos ActiveRecord.

En muchos de los proyectos en que he trabajado, especialmente administradores de contenido, se necesita algn tipo de control sobre las fechas y status de publicacin de informacin. Nada nuevo, pero los plugins y libreras que encontr no hacan exactamente lo que quera. Mi gema est basada en Acts as Publishable, un sencillo plugin para Rails al que agregu funcionalidad y actualic para funcionar con las versiones ms recientes de ActiveRecord.

Decid reeditar el plugin como una gema porque eso me permite tener tests autnomos (en rspec) y tambin usar la funcionalidad con otros frameworks. En este momento lo uso para un proyecto Rails en el trabajo y para un proyecto peronal en Merb.

Como estamos acostumbrados con ActiveRecord, usar ar_publish_control en tus modelos no podra ser ms sencillo:

Code (ruby)
  1.  
  2. class Post < ActiveRecord::Base
  3.     publish_control
  4. end
  5.  

Bsicamente, eso agrega fecha de inicio y fin de publicacin a tus modelos, por medio de una serie de named_scopes que permiten haces cosas como:

Code (ruby)
  1.  
  2. @post = Post.create(:unpublish_at => 2.weeks.from_now)
  3.  

Lee el resto de este artículo »

Patrones jQuery: toggleTarget

Por Ismael en 22/9/2008 en artculos, javascript, jquery

Hace un tiempo recopilo funciones y utilidades que, usando jQuery, me encuentro usando una y otra vez en distintos proyectos. Una de las ventajas de jQuery es la abundancia de plugins disponibles, pero normalmente éstos son más avanzados de lo que necesito y en algunos casos prefiero escribir estos “microplugines” que soluciones casos muy concretos y al mismo tiempo comunes.

El caso

Quieres uno o más links que despliegue un elemento escondido en la página, o lo esconda si el elemento está visible (por ejemplo un link “ver más”).
El efecto debe ser accesible: sin javascript, el browser debe simplemente mostrar el elemento normalmente y el link debe ser un “ancla” a éste. El caso es similar a un ejemplo publicado tiempo atrás para MooTools.

Code (javascript)
  1.  
  2. <a class="#contenido" class="js_collapse">Mostrar o esconder</a>
  3.  
  4. <div id="contenido">
  5. Mostrar o esconder este contenido al presionar el ancla de arriba.
  6. </div>
  7.  

El código

Code (javascript)
  1.  
  2. (function($){
  3.   $.fn.toggleTarget = function(){
  4.     $(this).click(function(){
  5.       var target = $($(this).attr(‘href’));
  6.       target.toggle(‘fast’);
  7.       return false;
  8.     });
  9.   }
  10. })(jQuery);
  11.  

Uso

Code (javascript)
  1.  
  2. $(function(){
  3.   $(‘a.js_collapse’).toggleTarget();
  4. });
  5.  

La mayoría de estas utilidades las tengo bajo control de versiones en mi Github. Sientanse libres de hacer un fork y contribuír.

Link: jQuery patterns en Gihub.

Destacados

Prototype: Ajax

10/10/2006

Construyendo aplicaciones Ajax con la librera Prototype.js

122 Comentarios »

IT Corporativo, Microsoft y el mito del soporte

24/9/2006

Sobre la cultura del miedo a las nuevas tecnologas en los departamentos de IT de las grandes empresas y la excesiva dependencia de Microsoft para el desarrollo Web.

12 Comentarios »

CSS: buenas prcticas

30/5/2006

Sumario de trucos y buenas prcticas para disear con CSS.

29 Comentarios »

Terra y los estndares: sintomas de una enfermedad

14/1/2006

Los casos de Las Amarillas y Terra muestran falta de propsito en el uso de estndares web.

22 Comentarios »

3 capas de presentacin

25/11/2005

Introducción a la serie “3 Capas de Presentación” para la construcción de interfaces web accesibles.

17 Comentarios »

Artículos recientes

En qué he estado

31/8/2008

Resumen de mi actividad de desarrollo web en los últimos meses.

16 Comentarios »

MiniFlickr: una gema

14/5/2008

Sencilla gema Ruby para obtener fotos de Flickr.

3 Comentarios »

Tablas HTML Dinámicas

5/5/2008

Manipulando tablas HTML con Javascript y el DOM

10 Comentarios »

Incondicionalmente

18/3/2008

Evitando estructuras condicionales para lograr código más legible y estable. Ejemplos en Ruby.

5 Comentarios »

El “errno: 150″ de MySQL

16/3/2008

No fue hasta mucho tiempo despus de conocer MySQL que conoc las tablas tipo InnoDb. Estas, a diferencia de su contraparte MyISAM, poseen varias cualidades que la hacen deseable. Por ejemplo: Integridad Referencial.
Lamentablemente InnoDb posee algunos peros. Uno de los ms molestos es el “errn: 150″ que aparece al ejecutar alguna sql […]

11 Comentarios »

Notas

HashMapper

HashMapper es una gema Ruby que escrib para facilitar la transformacin de estructuras de datos (hashes o diccionarios).

El uso ms obvio es cuando quieres normalizar parametros provistos por terceros antes de ingresarlos a tu aplicacin. Por ejemplo normalizar el objeto params en aplicaciones Rails o Merb antes de pasar los datos a tus modelos, un problema bastante comn si me preguntan. Actualmente lo usamos en uno de los proyectos de New Bamboo.

chale una mirada al README para ms informacin. Muchas gracias a mi colega Mark Evans.

Link: HashMapper en GitHub.

3/2/2009 | ¿comentarios?  | link

Merb es Rails es Merb!

Acabo de leer el anuncio. Los equipos de Merb y Rails trabajarn juntos para sacar la versin 3 de Ruby on Rails, combinando lo mejor de ambos frameworks en uno slo.

Primero pens que era algn tipo de broma pero al parecer la cosa va en serio.

Qu significa esto? para empezar, Rails ms gentl con tu RAM, ms modular y thread safe. Para continuar, Algunas joyas de Merb como procesos de fondo que no bloquean tus controladores o master processes para controlar fcilmente tus Mongrels. Para terminar, toda la elegancia sintctica que amamos de Rails.

Qu buena forma de recibir el 2009.

Link Merb *is* Rails.

23/12/2008 | 1 Comentario  | link

Gitcasts

Leiste sobre Git y tal vez Github, pero tanta nueva tecnología te abruma y no te decides a dar el salto y aprender sobre este espectacular software de control de versiones que ya usan los equipos de Merb, Ruby on Rails y otros grandes proyectos.

No hay más excusas. Gitcasts es eso, un feed RSS de screencasts (tutoriales en video) que exploran el uso diario de Git desde lo básico hasta uno que otro truco que puedes sacar de bajo la manga cuando quieras sorprender a tus colegas y amigos geek.

Dale, agrégalo a tu iTunes y ponte a ver los videos. Tu jefe entenderá que es por tu desarrollo profesional.

Link: Gitcasts.

26/5/2008 | 1 Comentario  | link

GitHub

spacer

GitHub se lanza oficalmente al público hoy.GitHub es un hosting para repositorios Git, la nueva revolución del Control de Versiones, donde puedes fácilmente mantener tus repositorios, ya sea creando uno nuevo o “clonando” uno existente, entre los cuales se encuentran Merb, Rails y un numero creciente de proyectos Ruby y de otro tipo.

En New Bamboo hemos estado usando el servicio beta desde hace tiempo - usamos Git internamente para administrar nuestro código- y en verdad la aplicación es una joya. No sólo hace fácil algo tan complejo como el control de versiones, sino que agrega herramientas tremendamente utiles como un mapa historico de cada proyecto.

Adios SVN.

¿Saber más? Git, GitHub.

11/4/2008 | 8 Comentarios  | link

Sluggable Finder rev. 20

… Y hay más mejoras para mi plugin sluggable_finder.

La versión 20 incluye un arreglo para cuando el plugin es usado en colleciones de ActiveRecord.

Code (ruby)
  1.  
  2. @user.friends.find ‘ismael’
  3.  

El ejemplo anterior debiera levantar una excepción ActiveRecord::RecordNotFound si “ismael” no es parte de la coleccón @user.friends. Esto debiera funcionar para colecciones :has_many y :has_many :though

Como siempre, le pido a los usuarios que reporten cualquier problema.

4/4/2008 | 5 Comentarios  | link
Ver más notas

Links

Delicious/isma

  1. High Scalability - High Scalability - Tumblr Architecture - 15 Billion Page Views a Month and Harder to Scale than Twitter 13/02/12
  2. Measure Anything, Measure Everything « Code as Craft 13/02/12
  3. Autocomplete with tire 12/02/12
  4. PATIENCE AND PRUDENCE lyrics - Tonight You Belong To Me 09/02/12
  5. Goodsie : Goodsie 08/02/12
  6. FetchApp — The easiest way to sell downloads from any website, social network, Goodsie shop, or Shopify store. 08/02/12
    Goodsie
  7. Mixpanel | Mobile and Web Analytics 07/02/12
  8. mitmproxy - home 07/02/12
  9. Qubity 06/02/12
  10. turn.js - The page flip effect for HTML5 05/02/12
gipoco.com is neither affiliated with the authors of this page nor responsible for its contents. This is a safe-cache copy of the original web site.