Por Ismael en 26/11/2008
en Desarrollo, Ruby & Rails, artículos
No hay una sino muchísimas formas de extender ActiveRecord. Buceando entre los cientos de plugins y extensiones disponibles encuentro distintas estrategias para incluír módulos, sobreescribir métodos o configurar opciones.
Me encontré especialmente frustrado al buscar alguna forma más o menos estándar de definir macros o métodos de clase que definen nuevo comportamiento, algo común en los infinitos plugins de una sola línea como acts_as_tree, acts_as_versioned (y toda la serie “acts_as”) o mis propios ar_publish_control y sluggable_finder.
Code (ruby)
-
-
class Post < ActiveRecord::Base
-
acts_as_tree #
-
end
-
Lo siguiente es un boceto para una convención orientada a escribir extensiones de ActiveRecord en forma de gemas. Una gema de ejemplo, incluyendo tests, se encuentra aquí.
Por Ismael en 23/11/2008
en Proyectos, Ruby & Rails, artículos
Gema ruby para agregar control de publicación a tus modelos ActiveRecord
ar_publish_control es una gema Ruby para añadir control de publicación a tus modelos ActiveRecord.
En muchos de los proyectos en que he trabajado, especialmente administradores de contenido, se necesita algún tipo de control sobre las fechas y status de publicación de información. Nada nuevo, pero los plugins y librerías que encontré no hacían exactamente lo que quería. Mi gema está basada en Acts as Publishable, un sencillo plugin para Rails al que agregué funcionalidad y actualicé para funcionar con las versiones más recientes de ActiveRecord.
Decidí reeditar el plugin como una gema porque eso me permite tener tests autónomos (en rspec) y también 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 podría ser más sencillo:
Code (ruby)
-
-
class Post < ActiveRecord::Base
-
publish_control
-
end
-
Básicamente, eso agrega fecha de inicio y fin de publicación a tus modelos, por medio de una serie de named_scopes que permiten haces cosas como:
Code (ruby)
-
-
@post = Post.create(:unpublish_at => 2.weeks.from_now)
-
Lee el resto de este artículo »
Por Ismael en 22/9/2008
en artículos, 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)
-
-
<a href="#contenido" class="js_collapse">Mostrar o esconder</a>
-
-
<div id="contenido">
-
Mostrar o esconder este contenido al presionar el ancla de arriba.
-
</div>
-
El código
Code (javascript)
-
-
(function($){
-
$.fn.toggleTarget = function(){
-
$(this).click(function(){
-
var target = $($(this).attr(‘href’));
-
target.toggle(‘fast’);
-
return false;
-
});
-
}
-
})(jQuery);
-
Uso
Code (javascript)
-
-
$(function(){
-
$(‘a.js_collapse’).toggleTarget();
-
});
-
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.