Rails Hotkeys
28/06/07
Ontem de noite fiz um plugin para o Gedit para aumentar minha produtividade enquanto estou trabalhando em projetos desenvolvidos com Rails. Chama-se Rails Hotkeys. Se você segue as convenções sugeridas pelo Rails — e isso significa que você deve codificar em inglês — este plugin vai ser uma mão na roda. Como? Continue lendo.
Imagine que você está editando um modelo "Post". Se você quiser editar seu controller — na maioria dos casos será "PostsController" — basta pressionar Ctrl + Shift + R para ativar o Rails Mode e, então, pressionar a tecla C para abrir o arquivo correspondente. E não é só isso! Você pode abrir, à partir deste mesmo modelo, os testes (unitários, funcionais e de integração), arquivos de configuração, além de algumas outras coisas.
Ainda não se interessou? Então veja o screencast do Rails Hotkeys (o projeto que mostro lá o mesmo dos artigos de Testes). Para instalá-lo, basta baixar o plugin e extrair os arquivos para ~/.gnome2/gedit/plugins/. Lembre-se de ativá-lo em "Edit › Preferences › Plugins › Rails Hotkeys".
Após concluir a instalação, pressione as teclas Ctrl + Shift + R e depois a tecla F1 para ver a lista de atalhos disponíveis.
O plugin Rails Hotkeys está disponível em f.simplesideias.com.br/rails_hotkeys.tar.gz através do Subversion. Para pegar a versão mais recente, execute o comando svn co http://svn.simplesideias.com.br/general/gedit/plugins/rails_hotkeys e copie os arquivos para ~/.gnome2/gedit/plugins.
Ah, o nome foi sugerido pelo Klaus Paiva, viciado no plugin HotKeys do Gaim. Então, se não gostarem, já sabem para quem reclamar!
Nota: obviamente, este plugin só irá funcionar se você estiver editando algum projeto Rails.
Possíveis funcionalidades que serão implementadas:
- Iniciar e parar um servidor Webrick
- Executar comandos como
script/generateerake - Exibir um painel com todos os comentários marcados como TO-DO e FIXME (por exemplo,
# TODO: Implement the whole thing)
- Permalink
- Trackback
- Comentários (7)
- Ao som de: The Ataris – Takeoffs and Landings
Código-fonte do Sounds Like
25/06/07
A Long Time Ago in a Galaxy Far, Far Away…
Conforme prometido, aqui está o código-fonte do Sounds Like, projeto enviado ao Rails Rally 2007: soundslikenow.tar.gz.
Vale lembrar que o código-fonte é o da mesma versão que foi enviado para o concurso e, portanto, é muito mais simples do que o que está atualmente em soundslikenow.org.
Divirta-se!
- Permalink
- Trackback
- Comentários (5)
- Ao som de: Death Cab for Cutie – Blacking Out the Friction
Usando number_to_currency em modelos no Rails
16/06/07
No PHP, uma função muito usada é number_format, mas no Ruby não temos nada assim nativamente. O Rails implementa sua própria versão com o helper number_to_currency, que satisfaz totalmente minhas necessidades. O problema é que ele só está disponível na view e, sendo assim, você não consegue utilizá-lo nem no modelo, nem no controller.
Para resolver isto, estendi algumas classes de modo que isso esteja disponível para qualquer instância de números (Fixnum, Bignum ou Float). Adicionalmente, um método to_number foi adicionado aos objetos da classe String, convertendo valores como 150.00 ou 150,00 para números do tipo Float.
module Currency
BRL = {:delimiter => ".", :separator => ",", :unit => "R$", :precision => 2, :position => "before"}
USD = {:delimiter => ',', :separator => ".", :unit => "US$", :precision => 2, :position => "before"}
DEFAULT = USD.merge(:unit => "$")
module String
def to_number(options={})
return self.gsub(/,/, '.').to_f if self.numeric?
nil
end
def numeric?
self =~ /^(\+|-)?[0-9]+((\.|,)[0-9]+)?$/ ? true : false
end
end
module Number
def to_currency(options = {})
number = self
default = Currency::DEFAULT.stringify_keys
options = default.merge(options.stringify_keys)
precision = options["precision"] || default["precision"]
unit = options["unit"] || default["unit"]
position = options["position"] || default["position"]
separator = precision > 0 ? options["separator"] || default["separator"] : ""
delimiter = options["delimiter"] || default["delimiter"]
begin
parts = number.with_precision(precision).split('.')
number = parts[0].to_i.with_delimiter(delimiter) + separator + parts[1].to_s
position == "before" ? unit + number : number + unit
rescue
number
end
end
def with_delimiter(delimiter=",", separator=".")
number = self
begin
parts = number.to_s.split(separator)
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
parts.join separator
rescue
self
end
end
def with_precision(precision=3)
number = self
"%01.#{precision}f" % number
end
end
end
class Fixnum; include Currency::Number; end
class Bignum; include Currency::Number; end
class Float; include Currency::Number; end
class String; include Currency::String; end
Para ter estes novos métodos funcionando basta adicionar o código acima ao arquivo "environment.rb". Veja alguns exemplos de uso:
number = 9999.99
# using default settings
puts number.to_currency # $9,999.99
# using Brazilian Real
puts number.to_currency(Currency::BRL) # R$9.999,99
# using US Dollar
puts number.to_currency(Currency::USD) # US$9,999.99
# setting default to Brazilian Real
silence_warnings do
Currency::DEFAULT = Currency::BRL
end
# using default settings, now
# Brazilian Real
number.to_currency # R$9.999,99
puts '199.99'.to_number # 199.99
puts '199,99'.to_number # 199.99
puts '+199,99'.to_number # 199.99
puts '-199,99'.to_number # -199.99 - Permalink
- Trackback
- Comentários (8)
- Ao som de: No Fun At All – Ultramar
