<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Bolivia on Rails</title>
	<atom:link href="http://www.boliviaonrails.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.boliviaonrails.com</link>
	<description>Desarrollo web 2.0 en Bolivia con RoR</description>
	<pubDate>Tue, 11 May 2010 16:47:41 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Lanzado la versi&#243;n de Haml y Sass 3</title>
		<link>http://www.boliviaonrails.com/2010/05/11/lanzado-la-versin-de-haml-y-sass-3/</link>
		<comments>http://www.boliviaonrails.com/2010/05/11/lanzado-la-versin-de-haml-y-sass-3/#comments</comments>
		<pubDate>Tue, 11 May 2010 16:47:41 +0000</pubDate>
		<dc:creator>carakan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/2010/05/11/lanzado-la-versin-de-haml-y-sass-3/</guid>
		<description><![CDATA[Hoy tenemos el placer de informar el lanzamiento de la versión 3 de estos componentes de desarrollo mas elegante, dentro de las vistas estamos hablando de haml que para esta versión tiene como gran mejora la de poder hacer uso de multilineas dentro de la sintaxis por ejemplo:
antes:
= link_to_remote &#34;Add to cart&#34;, :url =&#62; { [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy tenemos el placer de informar el lanzamiento de la versión 3 de estos componentes de desarrollo mas elegante, dentro de las vistas estamos hablando de haml que para esta versión tiene como gran mejora la de poder hacer uso de multilineas dentro de la sintaxis por ejemplo:</p>
<p><strong>antes:</strong></p>
<pre class="ruby">= link_to_remote &quot;Add to cart&quot;, :url =&gt; { :action =&gt; &quot;add&quot;, :id =&gt; product.id }, :update =&gt; { :success =&gt; &quot;cart&quot;, :failure =&gt; &quot;error&quot; } </pre>
<p><strong>ahora:</strong></p>
<pre class="ruby">= link_to_remote &quot;Add to cart&quot;, </pre>
<pre class="ruby">       :url =&gt; { :action =&gt; &quot;add&quot;, :id =&gt; product.id }, </pre>
<pre class="ruby">       :update =&gt; { :success =&gt; &quot;cart&quot;, :failure =&gt; &quot;error&quot; } </pre>
<pre class="ruby">&#160;</pre>
<p>Además otras pequeñas mejoras que se explican detalladamente <a href="http://nex-3.com/posts/101-haml-sass-3-released" target="_blank">aquí.</a></p>
<p><a href="http://haml-lang.com/" target="_blank">Como funciona Haml.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/05/11/lanzado-la-versin-de-haml-y-sass-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Como usar devise con rails 3</title>
		<link>http://www.boliviaonrails.com/2010/04/05/como-usar-devise-con-rails-3/</link>
		<comments>http://www.boliviaonrails.com/2010/04/05/como-usar-devise-con-rails-3/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 01:41:57 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=205</guid>
		<description><![CDATA[Bueno como les había mostrado en mi anterior post les mostraría en un futuro post como usar devise, devise es una gema para realizar la auntenticación que tiene similitudes con clearance, como dicen es un full stack authentication system, esto quiere decir que no solo permite la autenticación de los usuarios sino que tambien se [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno como les había mostrado en mi anterior post les mostraría en un futuro post como usar <a href="http://github.com/plataformatec/devise" target="_blank">devise</a>, devise es una gema para realizar la auntenticación que tiene similitudes con <a href="http://github.com/thoughtbot/clearance">clearance</a>, como dicen es un full stack authentication system, esto quiere decir que no solo permite la autenticación de los usuarios sino que tambien se encarga de permitir cambiar la contrseña en caso de que se hayan olvidado y además de realizar la activación de la cuenta mediante email. Disponer de toda esta funcionalidad sin tener que programarla y testearla es algo muy positivo ya que casí la mayoría de los proyectos necesitan algún tipo de autenticación, activación y recuperación de cuentas. Comencemos creando un proyecto con rails 3 beta.<span id="more-205"></span></p>
<pre class="js">rails devise_test
cd devise_test</pre>
<p>Ahora mdifiquemos el archivo <strong><em>Gemfile</em></strong> para aumentar la gema de devise</p>
<pre class="ruby">gem "devise", "1.1.pre4"</pre>
<p>Ahora ejecutemos el comando de instalación</p>
<pre class="js">bundle install</pre>
<p>Y usamos el generador de devise que crea varios archivos.</p>
<pre class="js">rails generate devise_install</pre>
<p>Esto nos genera los archivos de configuración asi como los archivos para la traducción. Por defecto devise utiliza la clase User para poder funcionar, pero puede funcionar con una clase con distinto nombre, generemos ahora el modelo usuario para trabajar.</p>
<pre class="js">rails generate usuario nombre:string apellido:string</pre>
<p>No es necesario crear ni login, email y password ya que devise se encarga de realizar todo esto solo deben ahora editar el archivo de <strong>migración</strong> que crea la tabla de usuarios de la siguiente forma</p>
<pre class="ruby">  create_table :users do |t|
    t.string :nombre
    t.string :apellido
    t.authenticatable
    t.confirmable
    t.recoverable
    t.rememberable
    t.trackable
    t.timestamps
  end</pre>
<p>Y ahora modifiquemos el modelo <strong>Usuario</strong></p>
<pre class="ruby">class Usuario &lt; ActiveRecord::Base
  devise :authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable
end</pre>
<p>Y ahora debemos cbemos configurar las rutas para que puedan acceder correctamente, en el archivo <strong><em>config/routes.rb</em></strong></p>
<pre class="ruby"> devise_for :users, :as =&gt; "usuarios"</pre>
<p>Listo, pero aún no podremos probar efectivamente esta herramienta si es que no tenemos configurada nuestra salida smtp para enviar emails, entonces creamos el archivo <strong><em>config/initializers/mail_setup.rb</em></strong></p>
<pre class="ruby">ActionMailer::Base.smtp_settings = {
  :address =&gt; "smtp.gmail.com",
  :port =&gt; "587",
  :domain =&gt; "midominio.com",
  :user_name =&gt; "mi.login.gmail",
  :password =&gt; "mi.password",
  :authentication =&gt; "plain",
  :enable_starttls_auto =&gt; true
}

ActionMailer::Base.default_url_options[:host] = &#8220;localhost:3000&#8243;</pre>
<p>Ahora creamos el formulario de inscripción de un usuario views/usuarios/new.html.erb</p>
<pre class="ruby">&lt;% form_for @user do |f| -%&gt;

  &lt;%= f.label :nombre, "Nombre"
  &lt;%= f.text_field :nombre %&gt;

  &lt;%= f.label :apellido, "Apellido" %&gt;
  &lt;%= f.text_field :apellido %&gt;

  &lt;%= f.label :password, "Contraseña" %&gt;
  &lt;%= f.text_field :password %&gt;

  &lt;%= f.label :password_confirmation, "Confirmar contraseña" %&gt;
  &lt;%= f.text_field :password_confirmation %&gt;

  &lt;%= f.submit "Registrarse" %&gt;
&lt;% end -%&gt;</pre>
<p>Y si creamos el usuario recibiremos una confirmación en el correo que hayamos ingresado. Para poder loguear deben ir a usuarios/sign_in, para salir a usuarios/sign_out, aunque esto puede ser configurado en las rutas, aquí un ejemplo de la página oficial</p>
<pre class="ruby">  devise_for :users, :as =&gt; "usuarios", :path_names =&gt; { :sign_in =&gt; 'login', :sign_out =&gt; 'logout', :sign_up =&gt; 'register', :password =&gt; 'secret', :confirmation =&gt; 'verification', :unlock =&gt; 'unblock' }</pre>
<p>Una nota importante es de que devise por defecto no define los atributos <strong>attr_accessible</strong> y <strong>attr_protected</strong> entonces es labor de uno definir los mismos en el modelo de la siguiente forma.</p>
<pre class="ruby">
class Usuario < ActiveRecord::Base
  devise :authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable
  attr_accessible :email, :password, :password_confirmation # Todos los campos que sean accesibles
end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/04/05/como-usar-devise-con-rails-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tips para rails 3</title>
		<link>http://www.boliviaonrails.com/2010/03/16/tips-para-rails-3/</link>
		<comments>http://www.boliviaonrails.com/2010/03/16/tips-para-rails-3/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 15:59:34 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[rails 3]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=204</guid>
		<description><![CDATA[Recientemente salio el artículo en este y muchos otros blogs acerca de rails 3 beta, es realmente emocionante poder usar esta versión de este Framework pero un gran problema es no poder usar las gemas que estamos acostumbrados, por ejemplo para hacer tests yo uso rspec, támbien he estado usando mongo_mapper que por suerte funciona [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente salio el artículo en este y muchos otros blogs acerca de <a href="http://www.boliviaonrails.com/2010/02/06/rails-30-beta-lanzado-oficialmente/" target="_blank">rails 3 beta</a>, es realmente emocionante poder usar esta versión de este Framework pero un gran problema es no poder usar las gemas que estamos acostumbrados, por ejemplo para hacer tests yo uso <a href="http://rspec.info/" target="_blank">rspec</a>, támbien he estado usando <a href="http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started">mongo_mapper</a> que por suerte funciona con <strong>rails 3</strong> aunque no he solucionado el problema de generar scaffolds, bueno aqui les doy algunos tips para que puedan usar rails3 y tal ves no extrañar algunas gemas. Antes de que intenten este tutor asegurense de que actualizar sus gemas.<span id="more-204"></span></p>
<h2>Testeo con Rspec y Cucumber</h2>
<p>Debemos instalar rspec para rails</p>
<pre class="js">gem install rspec-rails --pre
</pre>
<p>Luego debemos configurar el archivo <strong>Gemfile</strong></p>
<pre class="ruby">group :test do
  gem "rspec", "&gt;=2.0.0.beta.4"
  gem "rspec-rails", "&gt;=2.0.0.beta.4"
  gem "webrat"
end
</pre>
<p>y finalmente ejecutamos el comando</p>
<pre class="js">script/rails generate rspec:install
#o
rails g rspec:install
</pre>
<p>Pueden ver mas detalles <a href="http://github.com/rspec/rspec-rails">aqui</a>, debido a que existe algunos problemas. Ahora no necesitan usar el comando <strong>script/generate rspec_scaffold</strong> u otros similares como en ateriores versiones de rails, sino que directamente al ejecutar <strong>rails g scaffold</strong> u otros comandos se generarán los archivos de rspec necesarios para testear.</p>
<blockquote><p>Como veran no he mostrado el típico <strong>bundle install</strong> que nos permite instalar todas las gemas despues de editar el archivo <strong>Gemfile</strong></p></blockquote>
<p>Ahora <strong>Cucumber</strong>, editen el archivo <strong>Gemfile<br />
</strong></p>
<pre class="ruby">gem 'capybara'
gem 'database_cleaner'
gem 'cucumber-rails'
</pre>
<p>luego ejecuten</p>
<pre class="js">bundle install
</pre>
<p>sino no les funciona actualizen sus gemas manualmente usando el comando <strong>gem update cucumber-rails</strong> por ejemplo y finalmente generamos el esqueleto de cucumber</p>
<pre class="js">rails g cucumber:skeleton
# o
ruby script/rails generate cucumber:skeleton
</pre>
<p>Ahora se puede generara el archivo cucumber por ejemplo <em>Usuario</em></p>
<pre class="js">rails g cucumber:feature Usuario nombre:string apellido:string fecha_nacimiento:date
#
ruby script/rails generate cucumber:feature Usuario nombre:string apellido:string fecha_nacimiento:date</pre>
<h2>Formularios</h2>
<p>Si usaron alguna ves usaron <a href="http://github.com/justinfrench/formtastic" target="_blank">formtastic</a>, les aseguro que les va encantar <a href="http://github.com/plataformatec/simple_form" target="_blank">simple_form</a>, que tiene una sintaxis muy similar a formtastic, para instalar ejecuten</p>
<pre class="js">gem install simple_form
</pre>
<p>y luego añadan al archivo <strong>Gemfile</strong></p>
<pre class="ruby">gem "simple_form"
</pre>
<p>y ejecuten</p>
<pre class="js">rails generate simple_form_install
</pre>
<p>Y tendran el generador de simple_form para sus formularios cuando quieran generar scaffolds, además les genera el partial &#8220;_form.html.erb&#8221;</p>
<h2>Autenticación</h2>
<p>Existe una buena variedad de gemas para poder realizar esta tarea como:</p>
<ul>
<li><a href="http://github.com/binarylogic/authlogic/" target="_blank">Authlogic</a></li>
<li><a href="http://github.com/thoughtbot/clearance/" target="_blank">Clearance</a></li>
<li><a href="http://github.com/technoweenie/restful-authentication" target="_blank">restful_authentication</a></li>
</ul>
<p>Sin embargo les recomiendo probar devise, para instalar esta gema</p>
<pre class="js">gem install devise --version=1.1.pre4
</pre>
<p>Luego en nuestro archivo Gemfile editamos</p>
<pre class="ruby">gem "devise", "&gt;=1.1.pre4"
</pre>
<p>y luego ejecuten</p>
<pre class="js">rails g devise_install
</pre>
<p>En un futuro escribire un tutor mas completo de como usar esta gema, pero por ahora creo que con esto tendran mucho para investigar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/03/16/tips-para-rails-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>motoEx, Importación simple de datos desde Excel</title>
		<link>http://www.boliviaonrails.com/2010/03/10/motoex-importacion-simple-de-datos-desde-excel/</link>
		<comments>http://www.boliviaonrails.com/2010/03/10/motoex-importacion-simple-de-datos-desde-excel/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 16:43:55 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Excel]]></category>

		<category><![CDATA[motoEx]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=203</guid>
		<description><![CDATA[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
]]></description>
			<content:encoded><![CDATA[<p>Recientemente termine un proyecto llamando motoEx, esta herramienta permite la importación de datos desde Excel u Openoffice de forma muy simple.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9392083&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=9392083&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Si desean saber mas sobre el proyecto pueden visitar <a href="http://boriscy.github.com/motoEx/" target="_blank">http://boriscy.github.com/motoEx/</a>, y si desean descargarlo y usarlo visiten <a href="http://github.com/boriscy/motoEx" target="_blank">http://github.com/boriscy/motoEx</a> es un proyecto de <strong>Software Libre</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/03/10/motoex-importacion-simple-de-datos-desde-excel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails 3.0 (beta) Lanzado oficialmente</title>
		<link>http://www.boliviaonrails.com/2010/02/06/rails-30-beta-lanzado-oficialmente/</link>
		<comments>http://www.boliviaonrails.com/2010/02/06/rails-30-beta-lanzado-oficialmente/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 02:25:28 +0000</pubDate>
		<dc:creator>carakan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[rails 3]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/2010/02/06/rails-30-beta-lanzado-oficialmente/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <a href="http://weblog.rubyonrails.org/2010/2/5/rails-3-0-beta-release" target="_blank">aqui</a>.</p>
<p>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.</p>
<p>Para probar las nuevas características de rails 3.0 solo escriban en la consola:</p>
<pre  class="javascript">gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
gem install rails --pre</pre>
<p><a href="http://guides.rails.info/3_0_release_notes.html" target="_blank">Informacion detallada de los cambios</a></p>
<p><a href="http://blog.peepcode.com/tutorials/2010/live-coding-rails-3-upgrade" target="_blank">Video tutorial para realizar la migración de una aplicación existente a rails 3</a></p>
<p>Ahora no hay excusas de aprender rails <img src='http://www.boliviaonrails.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/02/06/rails-30-beta-lanzado-oficialmente/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Multiples versiones de Ruby &#8220;rvm&#8221;</title>
		<link>http://www.boliviaonrails.com/2010/02/05/multiples-versiones-de-ruby-rvm/</link>
		<comments>http://www.boliviaonrails.com/2010/02/05/multiples-versiones-de-ruby-rvm/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 00:30:28 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[ruby versiones]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=201</guid>
		<description><![CDATA[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.
Instalación en Linux
Solo ejecuten
sudo gem install rvm

Despues de haberse instalado la gema entonces ejecuten
rvm-install

Presenta una serie de opciones, si no [...]]]></description>
			<content:encoded><![CDATA[<p>No se ustedes pero manejar multiples versiones de Ruby se vuelve una confusión y algo complejo cuando tienes varias versiones, afortunadamente existe <a href="http://rvm.beginrescueend.com/" target="_blank">rvm</a>, una excelente gema que permite mantener multiples versiones de Ruby de forma sencilla.<span id="more-201"></span></p>
<h2>Instalación en Linux</h2>
<p>Solo ejecuten</p>
<pre class="js">sudo gem install rvm
</pre>
<p>Despues de haberse instalado la gema entonces ejecuten</p>
<pre class="js">rvm-install
</pre>
<p>Presenta una serie de opciones, si no les funciona es por que el path de sus gemas en  &#8220;<strong>~</strong>&#8221; no existe, deben editar su archivo <strong>~/.bash_profile</strong> y <strong>~/.bashrc</strong>, y añadan lo siguiente al final de estos archivos.</p>
<pre class="js">PATH=$PATH:~/.gem/ruby/1.8/bin
export $PATH
</pre>
<p>Entonces deben abrir una nueva ventana de consola ejecuten el comando rvm-install para ver como funciona. Ahora instalemos <strong>Ruby 1.9.1</strong></p>
<pre class="js">rvm install 1.9.1
</pre>
<p>Instala Ruby 1.9.1 y el tiempo de instalación depende de la velocidad de su internet y la velocidad de su máquina. Una ves finalizada la instalación ejecuten.</p>
<pre class="js">rvm 1.9.1
ruby -v
# ruby 1.9.1p243 (2009-07-16 revision 24175) [x86_64-linux]
which ruby
# \/home/wayne/.rvm/ruby-1.9.1-p243/bin/ruby
</pre>
<p>Listo ya tienen Ruby 1.9.1, es posible instalarse otras versiones de Ruby como Jruby, IronRuby, etc, solo vean el sitio web para mas detalles. Una nota importante es de que cada ves que ejecuten el comando <em>rvm 1.9.1</em> solo estara activa en la ventana que ejecutaron este comando si desean que la versión se mantenga como la versión por defecto ejecuten.</p>
<pre class="js"> rvm 1.9.1 --default</pre>
<p>Si desean regresar a como eran las cosas antes de ejecutar este comando ejecutan</p>
<pre class="js">rvm system --default
</pre>
<h2>Como instalar otras versiones</h2>
<p>Si desean instalar otras versiones deben cumplir con las dependencias <a href="http://rvm.beginrescueend.com/requirements/" target="_blank">http://rvm.beginrescueend.com/requirements/</a>. Por ejemplo para poder instalar <strong>jRuby</strong> en <strong>Debian</strong>:</p>
<pre class="js">sudo aptitude install sun-java6-bin sun-java6-jre sun-java6-jdk
rvm install jruby
</pre>
<p>Para <strong>Gentoo</strong>:</p>
<pre class="js">sudo emerge dev-java/sun-jdk dev-java/sun-jre-bin
rvm install jruby</pre>
<p>bueno si hacen click en el vinculo tendrán mas detalles</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/02/05/multiples-versiones-de-ruby-rvm/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Curso de Ruby on Rails en la UPEA el Alto</title>
		<link>http://www.boliviaonrails.com/2009/12/21/curso-de-ruby-on-rails-en-la-upea-el-alto/</link>
		<comments>http://www.boliviaonrails.com/2009/12/21/curso-de-ruby-on-rails-en-la-upea-el-alto/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 16:17:58 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[curso]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=200</guid>
		<description><![CDATA[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

]]></description>
			<content:encoded><![CDATA[<p>Saludos a todos quisiera invitarlos al primer curso de Ruby on Rails que se realizara en la <a href="http://www.upea.edu.bo/" target="_blank">Universidad Pública de El Alto</a> 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</p>
<p><a title="Curso de Ruby on Rails" href="http://farm3.static.flickr.com/2541/4266169456_2bd84ae7a8_o.jpg" target="_blank"><img class="alignleft" style="float: left;" src="http://farm3.static.flickr.com/2541/4266169456_50603f0567_m.jpg" alt="Curso de Ruby on Rails" width="240" height="180" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2009/12/21/curso-de-ruby-on-rails-en-la-upea-el-alto/feed/</wfw:commentRss>
		</item>
		<item>
		<title>jQuery transform Rails date datetime</title>
		<link>http://www.boliviaonrails.com/2009/12/08/jquery-transform-rails-date-datetime/</link>
		<comments>http://www.boliviaonrails.com/2009/12/08/jquery-transform-rails-date-datetime/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 17:18:08 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[date]]></category>

		<category><![CDATA[formtastic]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=199</guid>
		<description><![CDATA[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/,

lo guardan como lib/custom_form_builder.rb
En el config/environment.rb al final escriben include &#8216;custom_form_builder&#8217;
Aumenten al final del archivo config/initializers/formtastic.rb Formtastic::SemanticFormHelper.builder = MyCustomFormBuilder

$(document).ready(function() {
 [...]]]></description>
			<content:encoded><![CDATA[<p>Si estan usando el datepicker de <a href="http://jqueryui.com/home" target="_blank">jquery-ui</a> 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 <a href="http://github.com/justinfrench/formtastic">formtastic</a> pueden usar este snipet <a href="http://snipt.net/boriscy/formtastic-datetime/" target="_blank">http://snipt.net/boriscy/formtastic-datetime</a>/,</p>
<ol>
<li>lo guardan como <em>lib/custom_form_builder.rb</em></li>
<li><em>En el <em>config/environment.rb</em> al final escriben <strong>include &#8216;custom_form_builder&#8217;</strong></em></li>
<li><em><span style="font-style: normal;">Aumenten al final del archivo</span><strong> </strong>config/initializers/formtastic.rb<span style="font-style: normal;"> Formtastic::SemanticFormHelper.builder = MyCustomFormBuilder</span></em></li>
</ol>
<pre class="javascript">$(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
     */
    $(&#8217;.date, .datetime&#8217;).each(function(i, el) {
        var input = document.createElement(&#8217;input&#8217;);
        $(input).attr({&#8217;type&#8217;: &#8216;text&#8217;, &#8216;class&#8217;: &#8216;ui-date-text&#8217;});
        // Insert the input:text before the first select
        $(el).find(&#8221;select:first&#8221;).before(input);
        $(el).find(&#8221;select:lt(3)&#8221;).hide();
        // Set the input with the value of the selects
        var values = [];
        $(input).siblings(&#8221;select:lt(3)&#8221;).each(function(i, el) {
            var val = $(el).val();
            if(val != &#8221;)
                values.push(val);
        });
        if( values.length &gt; 1) {
            d = new Date(values[0], parseInt(values[1]) - 1, values[2]);
            $(input).val( $.datepicker.formatDate($.datepicker._defaults.dateFormat, d) );
        }

        $(input).datepicker();
    });
});</pre>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2009/12/08/jquery-transform-rails-date-datetime/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Testeando subida de archivos (file uploads) con Cucumber, Rspec y Paperclip</title>
		<link>http://www.boliviaonrails.com/2009/11/03/testeando-subida-de-archivos-file-uploads-con-cucumber-rspec-y-paperclip/</link>
		<comments>http://www.boliviaonrails.com/2009/11/03/testeando-subida-de-archivos-file-uploads-con-cucumber-rspec-y-paperclip/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 16:36:16 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[cucumber]]></category>

		<category><![CDATA[paperclip]]></category>

		<category><![CDATA[rspec]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=192</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <a href="http://www.thoughtbot.com/projects/paperclip" target="_blank">Paperclip</a>, pero hay que reconocer que esta gema hace magia con los uploads, el problema que tenía era con los uploads y el <strong>content_type</strong>, mi modelo realiza la validación del tipo de contenido usando las validaciones que provee paperclip, el modelo luce de esta forma:<span id="more-192"></span></p>
<pre class="rails">class Archivo &lt; ActiveRecord::Base

  before_create :adicionar_usuario

  belongs_to :usuario
  has_many :hojas

  validates_associated :usuario
  validates_presence_of :nombre
  validates_format_of :archivo_excel_file_name, :with =&gt; /\A^.+\.xls$\Z/i, :message =&gt; 'Solo se permite archivos excel ".xls"'

  attr_accessible :archivo_excel, :nombre, :descripcion

  has_attached_file :archivo_excel, :path =&gt; "archivos/:id/:basename.xls"

 # Validacion de tipos de contenido para excel
  validates_attachment_content_type :archivo_excel, :content_type =&gt; ['application/vnd.ms-excel'],
                        :message =&gt; &#8216;Solo se permite archivos Excel&#8217;
 #&#8217;application/x-msexcel&#8217;,'application/ms-excel&#8217;, &#8216;application/msexcel&#8217;, &#8216;application/x-excel&#8217;

  validates_attachment_presence :archivo_excel, :message =&gt; &#8220;Debe ingresar un archivo excel&#8221;

protected
  def adicionar_usuario
    self.usuario = UsuarioSession.find.record
  end

end</pre>
<p>Además estoy usando <a href="http://github.com/binarylogic/authlogic" target="_blank">Authlogic</a> para hacer la autenticación, junto con <a href="http://robots.thoughtbot.com/post/159805987/speculating-with-shoulda" target="_blank">shoulda</a>. El test del modelo es de la siguiente forma:</p>
<pre class="rails">require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe Archivo do

  it{should belong_to(:usuario)}
  it{should validate_presence_of(:nombre)}

  before(:each) do

    archivo = File.join(RAILS_ROOT, 'ejemplos/VentasPrecio2000-2008.xls')
    up = ActionController::UploadedStringIO.new
    up.original_path = archivo
    up.content_type = 'application/vnd.ms-excel'
    @archivo_params = {
      :nombre =&gt; 'Excel',
      :archivo_excel =&gt; up
    }
    @usuario_mock = mock_model(Usuario, :id =&gt; 1, :nombre =&gt; 'Juan')
    Usuario.stub!(:find).with(kind_of(Fixnum)).and_return(@usuario_mock)
    @us = mock("record", :record =&gt; @usuario_mock)
    UsuarioSession.stub!(:find).and_return(@us)
  end

  def create_archivo
    @archivo = Archivo.create(@archivo_params)
  end

  it "debe crear" do
    a = Archivo.create!(@archivo_params)
  end

  it "debe guardar el usuario" do
    create_archivo()
    @archivo.usuario.id.should == 1
  end
end</pre>
<p>Lo importante aquí está en cuando defino el <span style="color: #339966;">before(:each)</span> del test rspec, en el cual creo un mock ActionController::UploadedStringIO.new,  despues defino la ruta y el tipo de content_type para el archivo que hago upload. Esta es la clave para poder hacer el subida del archivo y de que pase el test.</p>
<p>El problema para testear con <a href="http://cukes.info/" target="_blank">Cucumber</a> era mucho mas simple pero me llevo algún tiempo darme cuenta de ello (mi amigo Felix Carreño lo hizo), lo que sucedía era que <a href="http://github.com/brynary/webrat" target="_blank">Webrat</a> tiene un comando para poder subir archivos en el cual solo se pasa el archivo que se desea subir y este asigna al <strong>file_field</strong> que uno define en el formulario, pero además uno debe indicar el tipo de conten_type, para que el test funcione y pase la validación de contenido de paperclip, osea solo es necesario hacerlo de esta forma:</p>
<pre class="rails">#Archivo que uso para mi test
archivo = File.join(RAILS_ROOT, "ejemplos/VentasPrecio2000-2008.xls")
attach_file "archivo[archivo_excel]&#8220;, archivo, &#8216;application/vnd.ms-excel&#8217;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2009/11/03/testeando-subida-de-archivos-file-uploads-con-cucumber-rspec-y-paperclip/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Traducción de Authlogic a español y ejemplos de configuración</title>
		<link>http://www.boliviaonrails.com/2009/09/22/traduccion-de-authlogic-a-espanol-y-ejemplos-de-configuracion/</link>
		<comments>http://www.boliviaonrails.com/2009/09/22/traduccion-de-authlogic-a-espanol-y-ejemplos-de-configuracion/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 17:43:30 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[authlogic]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=182</guid>
		<description><![CDATA[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 &#8220;config/ocales/es.yml&#8221;

  authlogic:
    error_messages:
      login_blank: "no debe estar en blanco"
      login_not_found: [...]]]></description>
			<content:encoded><![CDATA[<p>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 &#8220;config/ocales/es.yml&#8221;</p>
<pre class="js">
  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"
</pre>
<p>recuerden mantenre los dos espacios de tabulación debido que debe estar dentro de &#8220;es&#8221;. Tambien estaba probando y haciendo algunas modificaciones a mi modelo para que authlogic funcione como yo queria entonces hice lo siguiente:</p>
<pre class="rails">
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
</pre>
<p>Lo cual nos permite definir otras validaciones en Authlogic. </p>
<h2>Testeo de Authlogic</h2>
<p>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</p>
<pre class="ruby">
require "authlogic/test_case"
include Authlogic::TestCase
</pre>
<p>Entonces ahora esto permite realizar los test, pero no debemos olvidar crear la sesión en Authlogic de la siguiente forma:</p>
<pre class="ruby">
# Agreguen los campos necesarios para su usuario
@usuario = Usuario.create(:login => 'usuario', :password => 'demo123', :password_confirmation => 'demo123')
UsuarioSession.create(@usuario)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2009/09/22/traduccion-de-authlogic-a-espanol-y-ejemplos-de-configuracion/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.265 seconds -->
