motoEx, Importación simple de datos desde Excel

Recientemente termine un proyecto llamando motoEx, esta herramienta permite la importación de datos desde Excel u Openoffice de forma muy simple.

Si desean saber mas sobre el proyecto pueden visitar http://boriscy.github.com/motoEx/, y si desean descargarlo y usarlo visiten http://github.com/boriscy/motoEx es un proyecto de Software Libre

Rails 3.0 (beta) Lanzado oficialmente

Después de un largo tiempo de espera, un año y mes desde el anuncio oficial, se ha lanzado la beta publica de la versión de Rails 3, pueden ver el anuncio oficial aqui.

Comentarles que esta versión del framework rails, corre bajo ruby 1.8.7 y preferentemente 1.9.X, ya que la velocidad de ejecución de código es mas alta que en las versiones de ruby 1.8.x.

Para probar las nuevas características de rails 3.0 solo escriban en la consola:

gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
gem install rails --pre

Informacion detallada de los cambios

Video tutorial para realizar la migración de una aplicación existente a rails 3

Ahora no hay excusas de aprender rails :D

Multiples versiones de Ruby “rvm”

No se ustedes pero manejar multiples versiones de Ruby se vuelve una confusión y algo complejo cuando tienes varias versiones, afortunadamente existe rvm, una excelente gema que permite mantener multiples versiones de Ruby de forma sencilla.

Leer el resto del articulo »

Curso de Ruby on Rails en la UPEA el Alto

Saludos a todos quisiera invitarlos al primer curso de Ruby on Rails que se realizara en la Universidad Pública de El Alto los días 9, 16, 23 y 30 de Enero de 2010 de 9:00 a 13:00 los días sábados. Más detalles en el afiche

Curso de Ruby on Rails

jQuery transform Rails date datetime

Si estan usando el datepicker de jquery-ui se puede hacer que los campos date_select o datetime_select de rails puedan ser reemplazados con el siguiente javascript que hice. En caso de que esten usando formtastic pueden usar este snipet http://snipt.net/boriscy/formtastic-datetime/,

  1. lo guardan como lib/custom_form_builder.rb
  2. En el config/environment.rb al final escriben include ‘custom_form_builder’
  3. Aumenten al final del archivo config/initializers/formtastic.rb Formtastic::SemanticFormHelper.builder = MyCustomFormBuilder
$(document).ready(function() {
    // Define the dateFormat for the datepicker
    $.datepicker._defaults.dateFormat = 'dd M yy';

    /**
     * Sets the date for each select with the date selected with datepicker
     */
    $('input.ui-date-text').live("change", function() {
        var sels = $(this).siblings("select:lt(3)");
        var d = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $(this).val() );

        $(sels[0]).val(d.getFullYear());
        $(sels[1]).val(d.getMonth() + 1);
        $(sels[2]).val(d.getDate());
    });

    /**
     * Replaces the date or datetime field with jquey-ui datepicker
     */
    $(’.date, .datetime’).each(function(i, el) {
        var input = document.createElement(’input’);
        $(input).attr({’type’: ‘text’, ‘class’: ‘ui-date-text’});
        // Insert the input:text before the first select
        $(el).find(”select:first”).before(input);
        $(el).find(”select:lt(3)”).hide();
        // Set the input with the value of the selects
        var values = [];
        $(input).siblings(”select:lt(3)”).each(function(i, el) {
            var val = $(el).val();
            if(val != ”)
                values.push(val);
        });
        if( values.length > 1) {
            d = new Date(values[0], parseInt(values[1]) - 1, values[2]);
            $(input).val( $.datepicker.formatDate($.datepicker._defaults.dateFormat, d) );
        }

        $(input).datepicker();
    });
});

Aunque hay un problema con el Internet Explorer (solo probe con IE7), cuando uno cambia la fecha sin usar el datepicker sino escribiendola esta no es guardada correctamente, haber si lo resulven y lo testean con varios browsers.

Testeando subida de archivos (file uploads) con Cucumber, Rspec y Paperclip

Ultimamente estoy realizando una aplicación que requiere subir archivos Excel, fue un poco difícil encontrar la forma de que pasaran mis tests con Paperclip, pero hay que reconocer que esta gema hace magia con los uploads, el problema que tenía era con los uploads y el content_type, mi modelo realiza la validación del tipo de contenido usando las validaciones que provee paperclip, el modelo luce de esta forma:

Leer el resto del articulo »

Traducción de Authlogic a español y ejemplos de configuración

Saludos a todos, he estado usando Authlogic y busque una traducción al español pero no la encontre, entonces ahi les va para que se la copien y peguenlo en su archivo “config/ocales/es.yml”

  authlogic:
    error_messages:
      login_blank: "no debe estar en blanco"
      login_not_found: "no es válido"
      login_invalid: "solo debe ingresar letras, números y -_@ sin espacios"
      consecutive_failed_logins_limit_exceeded: "Se sobrepaso el número consecutivo de logins, la cuenta fue desactivada"
      email_invalid: "debe ser un email válido."
      password_blank: "no debe estar en blanco"
      password_invalid: "no es válido"
      not_active: "Su cuenta no esta activa"
      not_confirmed: "Su cuenta no ha sido confirmada"
      not_approved: "Su cuenta no fue aprovada"
      no_authentication_details: "Usted no proveio ningún detalle para la autentu¡icación."
    models:
      user_session: "UsuarioSession (o lo que este usando)"
    attributes:
      user_session: # "(or whatever name you are using)"
        login: "login"
        email: "email"
        password: "contraseña"
        remember_me: "recuerdame"

recuerden mantenre los dos espacios de tabulación debido que debe estar dentro de “es”. Tambien estaba probando y haciendo algunas modificaciones a mi modelo para que authlogic funcione como yo queria entonces hice lo siguiente:

class Usuario < ActiveRecord::Base
  acts_as_authentic do |config|
    config.login_field = :login
    config.merge_validates_format_of_login_field_options(:with => /\A^[a-z-_0-9@]+$\Z/i)
    config.merge_validates_length_of_login_field_options(:within => 4..20)
  end
end

Lo cual nos permite definir otras validaciones en Authlogic.

Testeo de Authlogic

En caso de que deseen testear su código en Rspec o Cucumber con authlogic solo deben adicionar lo siguiente para Rspec en spec/spec_helper.rb o para Cucumber en features/support/env.rb

require "authlogic/test_case"
include Authlogic::TestCase

Entonces ahora esto permite realizar los test, pero no debemos olvidar crear la sesión en Authlogic de la siguiente forma:

# Agreguen los campos necesarios para su usuario
@usuario = Usuario.create(:login => 'usuario', :password => 'demo123', :password_confirmation => 'demo123')
UsuarioSession.create(@usuario)

Image Science

Saludos y una disculpa por no haber escrito posts en tiempo o haber hecho posts que tal ves correspondan a un microblog (jeje), recientemente descubri esta gema http://seattlerb.rubyforge.org/ImageScience.html, que a todos los que detestamos Rmagick es una salvación. Esta gema depende de la librería http://freeimage.sourceforge.net que según veo es muy escalable y rápida.

Como escribir mucho menos CSS

Todos sabemos el tedio que resulta cuando uno tiene que trabajar con hojas grandes de estilo en CSS, todos queremos una solución mas simple y mas estructurada, y esto es posible con la gema para ruby less, para poder instalarla deben tener rubygems y ejecutar el comando

sudo gem install less

Leer el resto del articulo »

Debugueando con ruby-debug

Saludos de nuevo despues de haber públicado posts por algún tiempo, el tema es como hacer debugging aplicaciones Rails con ruby-debug, esta gema nos permite debuggear nuestras aplicaciones de una forma simple. Comencemos con las instalacion de la gema

gem install ruby-debug

Una ves instalada la gema si creamos una aplicación rails queremos que esta gema solo funcione en nuestro entorno de desarrollo y test, entonces dirijanse en su aplicacion editen los archivos config/enviroments/development.rb, config/enviroments/test.rb, y aumenten la siguiente linea al final

config.gem 'ruby-debug'

Lo cual permitirá que funcione ruby-debug, en caso de que esten en algún otro Framework como Sinatra lo único que tienen que hacer es aumentar en la primera línea

require 'ruby-debug'

para poder utilizar ruby-debug lo que hay que hacer es lo siguiente, dado que tengamos el código en algún archivo para que pogamos un punto de control lo hacemos así:

def index
  @menus = Menu.all :order => "fecha DESC"
  debugger # Punto de control
  respond_to do |format|
    format.html
    format.xml {render :xml => @menus}
  end
end

enonces debo ejecutar script/server vamos a la dirección donde se ejecutará nuestro código con el navegador y volvemos donde ejecutamos el script/server, me mostrará lo siguiente:

Redirected to http://localhost:3000/menus
Completed in 32ms (DB: 1) | 302 Found [http://localhost/session]
/home/boris/rails/mayasg/app/controllers/menus_controller.rb:7
respond_to do |format|
(rdb:1)

Donde muestra (rdb:1) intoducimos list y nos mostrará el código donde esta parado, si introducimos irb y luego @menus nos devolvera la variable, como en modo consola solo que estamos debugueando y tenemos acceso a variables como session, params, etc. para salir del modo consola escribimos exit, para poder ver la lista de comandos introducimos help, para poder ver donde estamos introducimos where, para moverse en el debug ingresan step, para ver la lista de hilos introduces thread list, introduciendo var local les presentará las variables locales, y si introduces var global les mostrará un listado de las variables globales finalmente para poder continuar el script introducimos cont.

Esperó les sirva de algo este tutor saludos hasta un proximo tutor o artículo.