Preciso debugar meu código ruby, mas como fazer ?
Essa era uma de minhas perguntas e, um amigo me apresentou uma gem chamada ruby-debug. Essa gem é muito útil quando é preciso saber o que está ocorrendo em determinada parte do seu código em tempo de execução.
Para instalar a gem:
sudo gem install ruby-debug
Para utilizar é preciso iniciar o servidor em debug:
rdebug script/server
Agora é hora de incluir os break point, veja o exemplo:
break product.rb:50
Toda vez que o arquivo product.rb for executado ele irá parar na linha 50 e com isso é possível analisar o que deseja via terminal.
Para continuar executando o código ou pular para outro break point:
continue, cont ou c
Todos os comandos acima devem ser executados via terminal.
Estou utilizando o Ubuntu 9.10 e meu ambiente de desenvolvimento está baseado em RVM, porém, em qualquer uma das versões de ruby que eu executava o comando “script/console” obtinha o erro:
@rodrigo {ruby -1.8.6} ~/Projects/loja-virtual (work) $ script/console
Loading development environment (Rails 2.3.5)
/home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb/completion.rb:10:in `require’: no such file to load — readline (LoadError)
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb/completion.rb:10
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb/init.rb:252:in `require’
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb/init.rb:252:in `load_modules’
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb/init.rb:250:in `each’
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb/init.rb:250:in `load_modules’
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb/init.rb:21:in `setup’
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/lib/ruby/1.8/irb.rb:54:in `start’
from /home/rodrigo/.rvm/rubies/ruby-1.8.6-p383/bin/irb:16
A resolução deste problema não é complexa, basta seguir os passos:
1 – O diretório “.rvm/src” contém as versões de ruby instalados.
cd ~/.rvm/src
2 – Vá para o diretório com a versão do ruby onde ocorre o erro. (Ex.: cd ruby-1.8.6-p383/)
cd DIRETORIO_COM_VERSAO_DO_RUBY
3 – Vá para o diretório “ext/readline”
cd source/ext/readline
4 – Execute o comando
ruby extconf.rb
5 – Em seguida
make
6 – Por fim
make install
A famosa sátira da galinha e do porco, bastante difundida entre desenvolvedores que trabalham com tecnologias ágeis, porém, é uma lição para todas as coisas.

Umas das formas de validar o usuário é a autenticação HTTP, claro que, está é apenas umas das formas de se validar um usuário com login e senha. E, está é a mais simples.
Vamos supor que possuímos um projeto CRUD (Create, Read, Update, Delete) para cadastro de anúncios. O usuário só poderá alterar ou deletar o anúncio depois de autenticado no sistema.
Para fazermos isso precisaremos incluir códigos no controller. Vejamos:
class AdsController < ApplicationController
before_filter :check_logged_in, :only => [:edit, :update]
private
def check_logged_in
authenticate_or_request_with_http_basic("Ads") do |user, pass|
user == "admin" && pass = "teste123"
end
end
end
A linha do before_filter é a que defini a chamada do método check_logged_in antes de o usuário editar ou excluir um cadastro.
Existem formas melhores de se autenticar o usuário, está é apenas uma delas e não é das melhores. Visto que o usuário e senha estão definidos direto na programação e temos apenas um usuário.
Veja exemplo da tela de autenticação:

Caso o usuario e senha não sejam informados será apresentado a seguinte mensagem:“HTTP Basic: Access denied.”
Claro que está mesma forma de autenticação pode ser melhorada criando um model de “user” e salvando os usuários cadastrados na base de dados. Consequentemente será necessário efetuar alterações no controller “ads”.
Com está modificação temos o ganho de poder ter mais de um usuário cadastrado no sistema; não ter mais o usuário e senha definido como HARD CODE;
Uma outra forma de autenticação bastante comum é a utilização da gem Authlogic.

| Meu Resultado | |||||
| Nome | Peito | Equipe | Líquido | Oficial | Ritmo |
| Rodrigo Lariente Ortiz | 3445 | Locamotiva | 00:38:26.57 | 00:38:40.99 | 05:29 |

Está foi a segunda vez que participo da corrida Oral B, mesmo correndo gripado foi uma ótima corrida.