Edge Rails: Novo método “label_tag” 10

Publicado por Carlos Brando em 31 de Janeiro de 2008

79128791_69f2267c76.jpg

Estou meio atrasado com a série “Edge Rails” (preciso mudar este nome… se alguém tiver alguma sugestão…), mas vou tentar acelerar e documentar as novidades para a próxima versão do Ruby on Rails.

Eu já falei do método label e para que servem os rótulos em HTML em um artigo mais antigo, mas parece que a galera esqueceu de criar um método label_tag para os casos mais simples. Mas agora o método já foi criado e incluído no FormTagHelper.

Este método funciona exatamente como o outro mas de uma forma mais simplista:

>> label_tag 'nome'
=> <label for="nome">Nome</label> 

>> label_tag 'nome', 'Seu nome'
=> <label for="nome">Seu Name</label> 

>> label_tag 'nome', nil, :class => 'small_label'
=> <label for="nome" class="small_label">Nome</label>

Rails Podcast Brasil - Episódio 3 30

Publicado por Carlos Brando em 30 de Janeiro de 2008

untitled-1.png

No ar o terceiro episódio do Rails Podcast Brasil, por Carlos Brando (eu) e Fábio Akita. No episódio desta semana comentamos sobre os novos livros para Railers e Rubistas, Microformats, crescimento do Ruby e quantidade de ofertas de emprego, CouchDB, MapReduce, Streamlined, iPhone e mais…

Neste episódio:

Acredito que desta vez o som estará melhor, afinal de contas, eu e o Fábio agora temos microfones melhores. O podcast está em formato mp3, assim você pode fazer o download e ouvir no seu carro, celular, mp3 player ou iPod.

Uma coisa que estamos sentido falta é de um feedback de vocês. Seria muito legal se pudéssemos ouvir (ou ler) os comentários de vocês sobre o podcast. O que gostou, o que não gostou, etc…

Para fazer o download do podcast, o endereço você já conhece: http://www.rubyonrails.pro.br/podcasts

Ruby Quiz: Brincando com moedas 1

Publicado por Carlos Brando em 28 de Janeiro de 2008

208619977_f8ad002f4f.jpg

Um site que eu particularmente gosto é o Ruby Quiz. Nele você vai encontrar dezenas de desafios para programadores Ruby. Veja por exemplo o desafio corrente:

O desafio consiste na criação de um método de manipulação de moedas. Por exemplo, se você deve 39 centavos e precisa pagar em moedas de 25, 10, 5 e 1 centavos, quais moedas você usaria para pagar? Hmm… entendeu? Não? Veja em código:

>> make_change(39)
=> [25, 10, 1, 1, 1, 1]

Entendeu?

Mas e se você só tivesse moedas de 10, 7 e 1 centavos? Eu sei que 7 centavos não existem, mas isto é um desafio lembra? O método deve aceitar algo assim:

>> make_change(14, [10, 7, 1])
=> [7, 7]

Em outras palavras o desafio é completar o método abaixo:

def make_change(amount, coins = [25, 10, 5, 1])

end

E aí, gostou? Não basta apenas criar um método simples para resolver isto, você precisa criar o melhor e mais performático. E aí? Quer tentar? Complete e envie um e-mail para suggestion@rubyquiz.com com o titulo “Making Change”.

Boa sorte!

Episódio 6: Consumindo microformats em Ruby 19

Publicado por Carlos Brando em 28 de Janeiro de 2008

423899632_5ea49b467f.jpg

Neste vídeo eu explico de uma forma muito simples o que são microformats e mostro como consumi-los usando um gem para Ruby chamado mofo.

No último post, e no podcast eu disse que este vídeo seria especial, mas infelizmente eu tive um problema (com minha falta de experiência em ferramentas de edição) e perdi uma boa parte do vídeo que eu estava preparando, então vai ficar para depois… Mas eu acredito que este assunto também é interessante, e acho que este vídeo vai no mínimo atiçar a curiosidade de vocês sobre o assunto.

Mais uma vez eu agradeço a todos os comentários feitos após assistir ao vídeo! E gostaria de pedir, caso você goste dos screencasts que me recomende no site Working With Rails.

A página que permite montar seu currículo usando microformats, mostrada no vídeo, é no seguinte endereço: http://hresume.weblogswork.com/hresumecreator

Para montar este vídeo eu usei como referência os seguintes artigos:

E atendendo a pedidos a música neste vídeo é Little Blue Mailbox do Fink.

Para fazer o download dos vídeos via iTunes use o endereço: http://feeds.feedburner.com/nomedojogo/podcast. Para fazer o download da forma tradicional ou assistir por aqui mesmo use os links abaixo.

 

icon for podpress  Episódio 6: Microformats: Play Now | Play in Popup | Download (261)

Edge Rails: Bug no PostgreSQL e novos métodos para o DateTime

Publicado por Carlos Brando em 25 de Janeiro de 2008

1939398332_4e856ea627.jpg

Bug ao adicionar colunas em banco de dados PostgreSQL

Havia um bug ao se usar o banco de dados PostgreSQL. O bug ocorria quando se criava uma migration para adicionar uma coluna em uma tabela já existente, veja um exemplo:

Arquivo: db/migrate/002_add_cost.rb

class AddCost < ActiveRecord::Migration
  def self.up
    add_column :items, :cost, :decimal, :precision => 6, :scale => 2
  end

  def self.down
    remove_column :items, :cost
  end
end

Note que estou criando uma coluna com :precision => 6 e :scale => 2. Agora é hora de rodar o “rake db:migrate” e vamos ver como ficou nossa tabela no banco:

   Column     |          Type          | Modifiers
--------------+------------------------+-------------
 id           | integer                | not null
 descr        | character varying(255) |
 price        | numeric(5,2)           |
 cost         | numeric                |

Ops…Veja a coluna “cost” que acabamos de criar… ela é um numeric comum, mas deveria ser uma coluna como a “price“, logo acima dela, mais precisamente um numeric(6,2).

Bom, este erro já foi corrigido!

Novos métodos #utc, #utc? e #utc_offset para a classe DateTime

Outra alteração interessante para a nova versão. Para manter a compatibilidade (duck-typing) com a classe Time, três métodos novos foram adicionados à classe DateTime. Os métodos são #utc, #utc? e #utc_offset. Vamos ver um exemplo de uso de cada um:

>> date = DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24))
=> Mon, 21 Feb 2005 10:11:12 -0600
>> date.utc
=> Mon, 21 Feb 2005 16:11:12 +0000

>> DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc?
=> false
>> DateTime.civil(2005, 2, 21, 10, 11, 12, 0).utc?
=> true

>> DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc_offset
=> -21600