<?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, 01 Mar 2011 18:24:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Testeando javascript con Steak y Akephalos</title>
		<link>http://www.boliviaonrails.com/2011/03/01/testeando-javascript-con-steak-y-akephalos/</link>
		<comments>http://www.boliviaonrails.com/2011/03/01/testeando-javascript-con-steak-y-akephalos/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 18:20:09 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=214</guid>
		<description><![CDATA[Saludos de tiempo, quiero decirles que me declaro un fanatico de Steak, es una gema que hace que testear sea mas simple y poderlo combinar con akephalos es algo increible, busque la forma de como hacer funcionar Steak y Akephalos juntos pero lo no lo logre por algún tiempo, ya ahora se como hacerlo, primero [...]]]></description>
			<content:encoded><![CDATA[<p>Saludos de tiempo, quiero decirles que me declaro un fanatico de Steak, es una gema que hace que testear sea mas simple y poderlo combinar con <a href="https://github.com/bernerdschaefer/akephalos" target="_blank">akephalos</a> es algo increible, busque la forma de como hacer funcionar Steak y Akephalos juntos pero lo no lo logre por algún tiempo, ya ahora se como hacerlo, primero les recomiendo de que instalen java para los que usan LINUX ubuntu, debian o mint deben ejecutar<span id="more-214"></span></p>
<pre>sudo apt-get install curl g++ openjdk-6-jre-headless
sudo apt-get install ant openjdk-6-jdk</pre>
<p>La segunda linea es opcional ya que funciona con solo instalar la primera linea, ahora debemos instalar <a href="https://github.com/bernerdschaefer/akephalos" target="_blank">akephalos</a></p>
<pre>gem install akephalos</pre>
<p>Esta gema tarda un poco en ser instalada pero veran lo interesante que es y como utilizarla para poder correr tests, no voy a dar indicaciones para instalar Steak pero les muestro como debe lucir el Gemfile</p>
<pre class="ruby">source 'http://rubygems.org'

gem 'rails', '3.0.5'

# Bundle edge Rails instead:
# gem 'rails', :git =&gt; 'git://github.com/rails/rails.git'

gem 'sqlite3-ruby'
gem 'steak', :group =&gt; :development

group :test do
  gem 'akephalos'
  gem 'rspec-rails'
  gem 'steak'
  gem 'capybara'
  gem 'database_cleaner'
  gem 'spork'
end</pre>
<p>Corremos</p>
<pre>bundle install</pre>
<p>Corremos los instaladores para rspec y steak</p>
<pre>rails g rspec:install
rails g steak:install</pre>
<p>Y ahora a generar un scaffold y nuestro test</p>
<pre>rails g scaffold post title:string body:text publish:boolean
rails g rspec:steak javascript</pre>
<p>El <strong><em>rspec:steak</em></strong> nos genera un archivo <strong>spec/acceptance/javascript_feature_spec.rb</strong> y ahora corremos las migraciones</p>
<pre>rake db:migrate
rake db:migrate RAILS_ENV=test</pre>
<p>Y ahora tenemos que hacer las pruebas y modificar el código para que funcione, entonces añadimos lo siguiente para que pueda funcionar el AJAX de forma sincrona en <strong>app/views/layouts/application.html.erb</strong></p>
<pre class="ruby">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Javascript&lt;/title&gt;
  &lt;%= stylesheet_link_tag :all %&gt;
  &lt;%= javascript_include_tag 'jquery-1.5.1.min' %&gt;
  &lt;%= csrf_meta_tag %&gt;

  &lt;% if Rails.env == 'test' %&gt;
    &lt;script type="text/javascript"&gt;
      $.ajaxSetup({ async: false });
    &lt;/script&gt;
<script type="text/javascript"><!--mce:0--></script>  &lt;% end %&gt;
&lt;%= yield %&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Con esto nos aseguramos que el AJAX de jQuery sea sincrono (No olvides descargar jquery y hubicarlo en public/javascripts).</p>
<p>Ahora a escribir los tests, para esto editamos el archivo <strong>app/views/posts/index.html.erb</strong> de la siguiente forma:</p>
<pre class="ruby">&lt;h1&gt;Posts&lt;/h1&gt;
&lt;%= link_to 'Nuevo Post', new_post_path %&gt;
&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Título&lt;/th&gt;
    &lt;th&gt;Contenido&lt;/th&gt;
    &lt;th&gt;Publcado&lt;/th&gt;
    &lt;th&gt;&lt;/th&gt;
  &lt;/tr&gt;

&lt;% @posts.each do |post| %&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;%= post.title %&gt;&lt;/td&gt;
    &lt;td&gt;&lt;%= post.body %&gt;&lt;/td&gt;
    &lt;td&gt;&lt;%= post.published %&gt;&lt;/td&gt;
    &lt;td&gt;
        &lt;%= link_to 'Show', post %&gt;
        &lt;%= link_to 'Edit', edit_post_path(post) %&gt;
        &lt;%= link_to 'Destroy', post, :confirm =&gt; 'Are you sure?', :method =&gt; :delete %&gt;
  &lt;/td&gt;
  &lt;/tr&gt;
&lt;% end %&gt;
&lt;/table&gt;
&lt;hr/&gt;
&lt;br /&gt;
&lt;%= link_to "more", "#", :id =&gt; 'more_link' %&gt;
&lt;%= link_to "ajax", new_post_path, :id =&gt; 'ajax' %&gt;

&lt;div id="more"&gt;&lt;/div&gt;

&lt;script type="text/javascript"&gt;
  $('#more_link').live('click', function() {
      $('#more').html('this is the content for more');
  });
  $('#ajax').live('click', function() {
      $('#more').load($(this).attr("href"));
      return false;
  });
&lt;/script&gt;</pre>
<p>Con esto tenemos el código con dos vínculos, el primero #more_link que añade contenido directamente y despues el vínculo #ajax que hara una llamada AJAX y presentara el contenido de posts/new, ahora debemos realizar los tests pero antes una ultima configuración, añadimos el archivo <strong>spec/acceptance/support/javascript.rb</strong> con el siguiente contenido</p>
<pre class="ruby">require 'akephalos'

Rspec.configure do |config|

  config.before(:each) do
    Capybara.current_driver = :akephalos if example.metadata[:js]
    #Capybara.current_driver = :selenium #if example.metadata[:js] # Por defecto capybara usa selenium
  end

  config.after(:each) do
    Capybara.use_default_driver if example.metadata[:js]
  end

end</pre>
<p>Aqui estamos indicando cuando debe usar Capybara javascript indicando que el driver a usar es akephalos, escribamos nuestros test en el al archivo <strong>spec/acceptance/javascript_feature_spec.rb</strong></p>
<pre class="ruby">require File.expand_path(File.dirname(__FILE__) + '/acceptance_helper')

feature "First Feature", %q{In order to test ajax I must use akephalos} do
  scenario "Scenario name", :js =&gt; true do
    visit "/posts"
    page.should have_css("#more", :text =&gt; '')
    click_link "more"
    page.should have_css("#more", :text =&gt; 'this is the content for more')
    click_link "ajax"
    page.should have_css("#more form")
  end
end</pre>
<p>Y para correr el test ejecutamos en consola</p>
<pre>rspec spec/acceptance/javascript_feature_spec.rb</pre>
<p>El código de este post se encuentra en <a href="https://github.com/boriscy/akephalos_steak">https://github.com/boriscy/akephalos_steak</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2011/03/01/testeando-javascript-con-steak-y-akephalos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Feliz año nuevo, comencemos una comunidad Ruby en Bolivia</title>
		<link>http://www.boliviaonrails.com/2010/12/31/feliz-ano-nuevo-comencemos-una-comunidad-ruby-en-bolivia/</link>
		<comments>http://www.boliviaonrails.com/2010/12/31/feliz-ano-nuevo-comencemos-una-comunidad-ruby-en-bolivia/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 17:54:38 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=213</guid>
		<description><![CDATA[Saludos a tod@s, este es un llamado para todas las personas que estén interesados en crear una comunidad de ruby en Bolivia, actualmente no existe una comunidad, entiendo que hay muy poca gente que sabe de Ruby pero realmente me encantaría ser miembro de una comunidad que organice eventos y en la cual se pueda compartir y llegar a [...]]]></description>
			<content:encoded><![CDATA[<p>Saludos a tod@s, este es un llamado para todas las personas que estén interesados en crear una comunidad de ruby en Bolivia, actualmente no existe una comunidad, entiendo que hay muy poca gente que sabe de Ruby pero realmente me encantaría ser miembro de una comunidad que organice eventos y en la cual se pueda compartir y llegar a formar buen@s amig@s. Este fue un año muy bueno para Ruby ya que se lanzo Ruby 1.9.2 y Rails 3 como los hitos mas importantes, Ruby es un lenguaje maravilloso con una comunidad mundial impresionante, quisiera poder ver mas gente de mi Boliva que se integre y aprenda, que vea que hay una opción muy buena que les ahorrara tiempo y hará que sean desarrolladores mas felices.</p>
<p>Contactenme a: boriscyber@gmail.com</p>
<p>Saludos a todos y Feliz año 2011!!!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/12/31/feliz-ano-nuevo-comencemos-una-comunidad-ruby-en-bolivia/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Steak acceptance testing</title>
		<link>http://www.boliviaonrails.com/2010/10/14/steak-acceptance-testing/</link>
		<comments>http://www.boliviaonrails.com/2010/10/14/steak-acceptance-testing/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 00:34:14 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

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

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

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

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

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

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

		<category><![CDATA[tdd/bdd]]></category>

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

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=212</guid>
		<description><![CDATA[Hasta hace algún tiempo he utilizado cucumber como mi herramienta principal de testeo para pruebas de aceptación, pero la verdad suele ser muy vervoso y los clientes no escribiran sus historias.
Steak
Steak es una herramienta minimalista basada en Rspec para realizar pruebas de aceptación, aún no posee algunas de las caracteristicas que extraño de cucumber como [...]]]></description>
			<content:encoded><![CDATA[<p>Hasta hace algún tiempo he utilizado <a href="http://cukes.info/">cucumber</a> como mi herramienta principal de testeo para pruebas de aceptación, pero la verdad suele ser muy vervoso y los clientes no escribiran sus historias.</p>
<h2>Steak</h2>
<p><a href="http://github.com/cavalle/steak">Steak</a> es una herramienta minimalista basada en <a href="http://rspec.info/">Rspec</a> para realizar pruebas de aceptación, aún no posee algunas de las caracteristicas que extraño de cucumber como las tablas, pero me siento mas confortable con esta herramienta.<span id="more-212"></span></p>
<h2>Comencemos</h2>
<p>El demo que dare sera para rails 3 y mostrare como se puede realizar tests junto a <a href="http://github.com/plataformatec/devise">devise</a>, lo primero que hay que hacer es modificar el archivo Gemfile y añadan lo siguiente</p>
<pre class="ruby">gem 'devise'
# Es necesario añadir este grupo para que funcionen los generators
group :development do
  gem 'rspec-rails'
  gem 'steak', '&gt;= 1.0.0.rc.1'
end
group :test do
  gem 'rspec'
  gem 'steak', '&gt;= 1.0.0.rc.1'
  gem 'capybara'
  gem 'factory_girl_rails'
end</pre>
<p>Una ves que tengan esto en su archivo <em>Gemfile</em> ejecuten en la consola</p>
<pre>bundle install</pre>
<p>y despues que instale las gemas ejecuten</p>
<pre>rails generate devise:install
rails generate rspec:install
rails generate steak:install</pre>
<p>Ya tenemos la instalación lista ahora comencemos a realizar tests, como sabran devise es un motor (engine) que nos proporciona autenticación, registro y recuperación de contraseñas, es muy completo pero es necesario añadir el siguiente archivo en <strong>spec/acceptance/support/warden.rb </strong>para que puedan funcionar los tests<strong><br />
</strong></p>
<pre class="rails">RSpec.configure do |config|
  config.include Warden::Test::Helpers
  config.after { Warden.test_reset! }
end</pre>
<p>Ahora ya podremos testear con devise, si desean saber mas de como funciona devise visiten en este blog (<a href="http://www.boliviaonrails.com/2010/04/05/como-usar-devise-con-rails-3/#comment-567" target="_self">como usar devise con rails 3</a>) donde támbien en los comentarios hay vínculos relacionados con mas detalles sobre devise. Comencemos con algo sencillo, creamos un usuario para poder acceder a una página restringida, tratare de ser lo mas breve asi que usare <em>User</em> en ves de Usuario.</p>
<pre>rails generate devise User</pre>
<p>Esto genera la migración archivos para testear el modelo, corremos la migración</p>
<pre>rake db:migrate</pre>
<p>Ahora tenemos que crear la base de datos para hacer tests</p>
<pre> rake db:test:clone</pre>
<p>Lo que vamos a realizar es permitir solo a los usuarios autenticados ingresar al controlador users<br />
entonces creamos un controlardor para el modelo User</p>
<pre>rails generate controller users index show new create destroy update</pre>
<p>Ahora tendriamos que editar el archivo <strong>config/routes.rb</strong> para que nuestro root (raíz) sea el controlador users, entonces aumentamos al archivo dentro de las rutas</p>
<pre class="ruby">root :to =&gt; 'users#index'</pre>
<p>Entonce ahora si podemos realizar las pruebas y comenzar a testear nuestro sistema. Ahora generemos el test de aceptacion para steak</p>
<pre>rails generate steak:spec login_user</pre>
<p>Bueno ya tenemos el controlador, el modelo y el test de aceptación pero lo que queremos es que solo  usuario <em>User</em> que este logueado pueda tener acceso al  controlador <strong><em>users</em></strong> entonces editamos el archivo <strong>spec/acceptance/login_user_spec.rb</strong></p>
<pre class="ruby">require File.dirname(__FILE__) + '/acceptance_helper'

feature "Login" do
  # Creamos un usuario
  background do
    User.create(:email =&gt; 'user@mail.com', :password =&gt; 'demo123', :password_confirmation =&gt; 'demo123')
  end
  # Este es el escenario que correra
  scenario "el usuario no debe acceder al controlador users" do
    # Primero nos aseguramos de que no haya sesiones de usuarios
    visit "/users/sign_out"
    visit "/users"
    # page es una variable tipo Capybara::Session
    page.current_path.should == "/users/sign_in"
  end
end</pre>
<p>Corramos el test con el comando</p>
<pre>rspec spec/acceptance/login_user_spec.rb</pre>
<p>Nos retorna un error, hagamos que pase el test, editemos nuestro controlador</p>
<pre class="ruby">class UsersController &lt; ApplicationController
  # método de devise que permite verificar si un usuario esta logueado
  # caso contrario este redirecciona a '/users/sing_in'
  before_filter :authenticate_user!
  def index
    render :text =&gt; 'Prueba'
  end
end</pre>
<p>Corremos de nuevo nuestro test y vemos que esta ves pasa, ahora veamos como tenemos que hacer el test para que podamos loguearnos y despues visitar users</p>
<pre class="rails">require File.dirname(__FILE__) + '/acceptance_helper'

feature "Login" do

  background do
    User.create(:email =&gt; 'user@mail.com', :password =&gt; 'demo123', :password_confirmation =&gt; 'demo123')
  end

  # El anterior escenario ...

  scenario "el usuario debe poder ingresar y loguearse" do
    # Primero nos aseguramos de que no haya sesiones de usuarios
    visit "/users/sign_out"
    visit "/users"
    fill_in "user[login]&#8220;, :with =&gt; &#8216;user@mail.com&#8217;
    fill_in &#8220;user[password]&#8220;, :with =&gt; &#8216;demo123&#8242;
    click_button &#8220;Sign in&#8221;
    page.current_path.should == &#8220;/users&#8221;
  end
end</pre>
<p>Entonces ahora si debe pasar el test :), pero algo que es importante y que nos ayudara a escribir mucho menos código la siguiente ves es poder crear helpers, hagamos que la creación de un usuario y el logueado sea un helper de tal forma que podamos llamar a un método <em>create_and_login_user</em> para crear un usuario y loguearnos, entonces creamos el archivo <strong>spec/acceptance/support/helpers.rb</strong></p>
<pre class="ruby">module HelperMethods
  def create_and_login_user
    Create.user!(:email =&gt; 'user@mail.com', :password =&gt; 'demo123', :password_confirmation =&gt; 'demo123')
    visit '/users/sign_out'
    visit '/users/sign_in'
    fill_in "user[login]&#8220;, :with =&gt; &#8216;user@mail.com&#8217;
    fill_in &#8220;user[password]&#8220;, :with =&gt; &#8216;demo123&#8242;
    click_button &#8220;Sign in&#8221;
  end
end</pre>
<p>Y ahora solo llamamos al método <em>create_and_login_user</em> dentro de nuestro escenario</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/10/14/steak-acceptance-testing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Benchmark de Aplicaciones Rails 2.3.8 Vs Rails 3.0 rc2 &#8211; Erb y Haml</title>
		<link>http://www.boliviaonrails.com/2010/08/28/benchmark-de-aplicaciones-rails-238-vs-rails-30-rc2-erb-y-haml/</link>
		<comments>http://www.boliviaonrails.com/2010/08/28/benchmark-de-aplicaciones-rails-238-vs-rails-30-rc2-erb-y-haml/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 20:59:48 +0000</pubDate>
		<dc:creator>carakan</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

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

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

		<guid isPermaLink="false">http://www.boliviaonrails.com/2010/08/28/benchmark-de-aplicaciones-rails-238-vs-rails-30-rc2-erb-y-haml/</guid>
		<description><![CDATA[Recientemente trabajando con la actualización de algunas aplicaciones Ruby on Rails desde la versión 2.3.x a rails 3.0 rc2, he tenido la curiosidad de ver que tanto rendimiento existe en las mismas, como siempre estos “Benchmarks” son mas referenciales, les paso los datos del ambiente de test:

Core2duo 2.0 MHz
Memoria 3Gb
Ubuntu 10.4
Servidor Webrick (default en instalaciones [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente trabajando con la actualización de algunas aplicaciones Ruby on Rails desde la versión 2.3.x a rails 3.0 rc2, he tenido la curiosidad de ver que tanto rendimiento existe en las mismas, como siempre estos “Benchmarks” son mas referenciales, les paso los datos del ambiente de test:</p>
<ul>
<li>Core2duo 2.0 MHz</li>
<li>Memoria 3Gb</li>
<li>Ubuntu 10.4</li>
<li>Servidor Webrick (default en instalaciones Ruby)</li>
</ul>
<p>La aplicación es simple es el listado de 150 registros dentro de una base de datos Mysql, cabe recalcar que para rails 3 estoy utilizando el adaptador mysql2, además al mostrar estos 150 registros añadí funciones helper para probar la velocidad de procesamiento.</p>
<p><strong>Resultados:</strong></p>
<p><a href="http://www.boliviaonrails.com/wp-content/uploads/2010/08/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.boliviaonrails.com/wp-content/uploads/2010/08/image-thumb.png" border="0" alt="image" width="552" height="333" /></a></p>
<p>Resultados completos <a href="http://gist.github.com/555515">aqui</a>.</p>
<p>Sorprende el resultado de rails 2.3.8 + Haml, publicare mas adelante el codigo fuente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/08/28/benchmark-de-aplicaciones-rails-238-vs-rails-30-rc2-erb-y-haml/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CoffeeScript, dulce sintaxis para JavaScript</title>
		<link>http://www.boliviaonrails.com/2010/08/17/coffeescript-dulce-sintaxis-para-javascript/</link>
		<comments>http://www.boliviaonrails.com/2010/08/17/coffeescript-dulce-sintaxis-para-javascript/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 22:41:51 +0000</pubDate>
		<dc:creator>Boris Barroso</dc:creator>
		
		<category><![CDATA[General]]></category>

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

		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://www.boliviaonrails.com/?p=207</guid>
		<description><![CDATA[Seguro de que la sintaxis de JavaScript a muchos les parece arida y muchas veces un poco arcaica, esta fue influenciada por lenguajes como Java o C++ en su época, pero actualmente hay una solución que hara que el escribir JavaScript sea mucho mas agradable y simple CoffeeScript.
CoffeeScript tiene una sintaxis inspirada en Ruby y [...]]]></description>
			<content:encoded><![CDATA[<p>Seguro de que la sintaxis de JavaScript a muchos les parece arida y muchas veces un poco arcaica, esta fue influenciada por lenguajes como Java o C++ en su época, pero actualmente hay una solución que hara que el escribir JavaScript sea mucho mas agradable y simple <a href="http://coffeescript.org">CoffeeScript</a>.<span id="more-207"></span><br />
<strong>CoffeeScript</strong> tiene una sintaxis inspirada en Ruby y Python que permite que los scripts sean mas fáciles de leer y escribir, en el sitio Web de este nuevo lenguaje existe una buena variedad de ejemplos que nos permitiran probar y revisar como funciona. CoffeeScript compila  todo el código con extensión <strong>.coffee</strong> en JavaScript, actualmente ya esta cerca a una versión estable (0.9.1) y según lei esta es la versión de Release candidate que no tendra mas modificaciones hasta llegar a la versión 1.</p>
<h3>Como usarlo</h3>
<p>Es muy simple usar CoffeeScript, se puede instalar la versión que usa <a href="http://nodejs.org">node.js</a> para compilar los archivos <strong>.coffee</strong> a javascript o tambien se puede directamente en el browser. Para poder instalarlo con node.js es necesario tener el administrador de paquetes para node.js <a href="http://github.com/isaacs/npm">npm</a> y simplemente hacer</p>
<pre class="js">sudo npm install coffee-script</pre>
<p>una ves instalado el mismo es muy simple poder probarlo, iniciamos la consola ejecuatando <strong>coffee</strong>,  si desean que cada ves que hagan modificaciones a sus scripts de coffee se compile el javascript deben correr</p>
<pre class="js">coffee -w -c dir</pre>
<p>Donde dir es un directorio en el cual se almacena los archivos <strong>.coffee</strong> que despues son compilados a javascript <strong>.js</strong>, esto nos permite realizar cambios en los archivos <em><strong>.coffee</strong></em> y cada ves que salvamos se compila a javascript.<em><strong></strong></em></p>
<p>En caso de que deseen utlizar CoffeeScript en el browser simplemente hay que descargar de su repositorio de <a href="http://github.com/jashkenas/coffee-script">http://github.com/jashkenas/coffee-script</a> y despues se incluye el archivo <strong>coffee-script.js</strong></p>
<p>Les doy algunos ejemplos de como se crear una función y como genera el javascript</p>
<pre class="js"># cuadrado
cuadrado = (x)-&gt;
  x * x

# factorial
fac = (x)-&gt;
  if x &gt; 0
    x * fac(x -1)
  else
    1</pre>
<p>Y genera:</p>
<pre class="js">(function() {
  var cuadrado, fac;
  cuadrado = function(x) {
    return x * x;
  };
  fac = function(x) {
    return x &gt; 0 ? x * fac(x - 1) : 1;
  };
})();</pre>
<p>En caso de que deseen hacer programación con objectos</p>
<pre class="js">class Animal
  constructor:(@patas, @cola)-&gt;

class Perro extends Animal
  constructor:(@nombre)-&gt;
    super 4, true
  ladrar: -&gt;
    "gua gua"</pre>
<p>Y genera</p>
<pre class="js">(function() {
  var Animal, Perro, cuadrado, fac;
  var __extends = function(child, parent) {
    var ctor = function(){};
    ctor.prototype = parent.prototype;
    child.prototype = new ctor();
    child.prototype.constructor = child;
    if (typeof parent.extended === "function") parent.extended(child);
    child.__superClass__ = parent.prototype;
  };
  Animal = function(_a, _b) {
    this.cola = _b;
    this.patas = _a;
    return this;
  };
  Perro = function(_a) {
    this.nombre = _a;
    Perro.__superClass__.constructor.call(this, 4, true);
    return this;
  };
  __extends(Perro, Animal);
  Perro.prototype.ladrar = function() {
    return "gua gua";
  };
})();</pre>
<p>Para la gente que usa VIM como editor pueden encontrar en este proyecto <a href="http://github.com/kchmck/vim-coffee-script">http://github.com/kchmck/vim-coffee-script</a> un modulo para poder editar los script <strong><em>.coffee</em></strong></p>
<p>Finalmente una apreciación personal seria de que en un futuro el lenguaje que reinara en el browser y en el servidor será JavaScript, proyectos como node.js que actualmente tiene muy buena aceptación a nivel de hostings y CoffeeScript hacen que el camino sea mas fácil.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boliviaonrails.com/2010/08/17/coffeescript-dulce-sintaxis-para-javascript/feed/</wfw:commentRss>
		</item>
		<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>

		<category><![CDATA[rails 3]]></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 &lt; 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>
	</channel>
</rss>

