Mapeando rotas com with_options

Posted by Alberto Leal on December 3rd, 2008

Muitas vezes, nossos controllers possuem diversas actions. Às vezes customizamos a URL e criamos uma rota para cada um, e, de forma repetida. Por exemplo:

ActionController::Routing::Routes.draw do |map|
  map.connect “/blog/list,  :controller => “blog”,
                             :action => “list”
  map.connect “/blog/view/:id,  :controller => “blog”,
                                 :action => “find_post”
end

Note que, todos os mapeamentos acima fazem referência ao mesmo controller, porém para actions diferentes. O método with_options nos permite criar um bloco com mapeamentos para o mesmo controller de forma a não ter que repetir sempre o nome do controller para todos os mapeamentos:

ActionController::Routing::Routes.draw do |map|
  map.with_options (:controller => “blog”) do |blog_map|
    blog_map.connect “/blog/list”, :action => “list”
    blog_map.connect “/blog/show/:id,   :action => “show”
  end
end

Como instalar Ruby/Gem MySQL no Mac OS X Leopard

Posted by Alberto Leal on December 1st, 2008

Quando tentamos executar nossa migration no rails 2.2, usando o mysql como SGBD, nos deparamos com o seguinte erro:

The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.

Para instalar a gem no MAC OS X 10.5 Leopard, execute a seguinte linha se comando no seu terminal:

$ sudo env ARCHFLAGS="-arch i386" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

Você terá a seguinte saída:

Building native extensions.  This could take a while...
Successfully installed mysql-2.7
1 gem installed

Conversão implícita e explícita no Ruby

Posted by Alberto Leal on December 1st, 2008

Existe um pouco de confusão quando estamos falando dos métodos: to_s e to_str. Qualquer objeto, no ruby, pode ser convertido para uma representação em string. Quando olhamos as classes no core nos deparamos com um método to_s (Por exemplo, execute Fixnum.methods e você verá o método), mas não vemos o método to_str. Pense que to_str é para conversão implícita e to_s é para conversão explícita.

Vamos ver um exemplo:

 

class Automovel
  def to_s
    "Carro"
  end

  def to_str
    "Fiat"
  end
end

auto = Automovel.new
puts auto
puts "O automóvel criado foi #{auto}"
puts "O automóvel criado foi " + auto

# Saída COM o método to_str definido
# Alberto:Desktop Alberto$ ruby post.rb
# Carro
# O automóvel criado foi Carro
# O automóvel criado foi Fiat

 

É possível notar que, quando definimos o método to_str estamos forçando uma conversão. Vamos executar o mesmo código acima, porém sem o método to_str definido:

class Automovel
  def to_s
    "Carro"
  end
end

auto = Automovel.new
puts auto
puts "O automóvel criado foi #{auto}"
puts "O automóvel criado foi " + auto

# Saída SEM o método to_str definido
# Alberto:Desktop Alberto$ ruby post.rb
# Carro
# O automóvel criado foi Carro
# post.rb:10:in `+': can't convert Automovel into String (TypeError) from post.rb:10

 

Vale ressaltar que, quando usamos o método puts, esse sempre chama o método to_s do objeto quando desejamos a representação textual de um objeto.

Vamos ver mais um exemplo: Quando tentamos concatenar uma String com um objeto do tipo Fixnum, diretamente, não conseguimos porque a classe Fixnum não possui o método to_str, para conversão implícita.

s = "Número: " + 007
TypeError: can't convert Fixnum into String
    from (irb):3:in `+'
    from (irb):3
    from :0

 

Agora, quando adicionamos o método em tempo de execução a classe Fixnum (via duck typing), conseguimos executar o código que antes acusava TypeError :

class Fixnum
  def to_str
    self.to_s
  end
end

s = "Número: "+ 007

Outra forma de executar o código, sem ter que adicionar o novo método a classe Fixnum, seria chamar o método to_s diretamente:

s = "Número: "+ 007.to_s

Rspec + Growl + ZenTest

Posted by Alberto Leal on November 28th, 2008

Existe uma aplicação para Mac OS chamada Growl. Através dessa é possível enviar notificações para serem exibidas no desktop.

Diversos programas o utilizam para enviar alertas ao usuário. Aproveitando essa característica, alguns desenvolvedores configuram o seu ambiente de desenvolvimento para receberem notificações com o resultado da execução dos testes da aplicação em desenvolvimento.

Caso você queria configurar, também, o seu ambiente de desenvolvimento, aconselho a leitura do post.

Read the rest of this entry »


Copyright © 2007 Alberto Leal. All rights reserved.