tapajos / brazilian-rails

Brazilian Rails é um conjunto de gems para serem usadas com Ruby e com o Ruby on Rails e tem como objetivo unir alguns recursos úteis para os desenvolvedores brasileiros.
http://brazilian-rails.rubyforge.org
361 stars 100 forks source link

brdinheiro - Atualização/recuperação do valor de atributo usado como dinheiro #27

Closed dreoliv closed 12 years ago

dreoliv commented 12 years ago

Encontrei um problema no brDinheiro que não permite a recuperação de atributo de um objeto ActiveRecord que está sendo usado como dinheiro, quando este atributo é inicializado pelo construtor da classe. Acho que é mais fácil de entender em uma sessão do console. Estou usando o seguinte model:

class Grana < ActiveRecord::Base
  usar_como_dinheiro :valor
end

No console:

1.9.3-p0 :001 > g = Grana.new({ :valor => 10.reais })
 => #<Grana id: nil, valor: #<BigDecimal:7fe735469b90,'0.1E2',9(18)>, created_at: nil, updated_at: nil> 
1.9.3-p0 :002 > g.valor
 => 10,00 
1.9.3-p0 :003 > g.valor = 15.reais
 => 15,00 
1.9.3-p0 :004 > g.valor
 => 10,00 

Vejam que ao atribuir um novo valor, não é possível recuperar depois este novo valor.

Simulei o problema da seguinte forma:

Usando Rails 3.1.3 e Ruby 1.9.3

  1. Criei um projeto novo do rails: rails new teste -T
  2. Incluí o brazilian-rails no meu Gemfile: gem 'brazilian-rails'
  3. Rodei o bundle: bundle install
  4. Criei um modelo simples: rails g model Grana valor:decimal
  5. Rodei a migration: rake db:migrate
  6. Incluí a linha usar_como_dinheiro :valor no model, que ficou igual ao que eu coloquei acima.
  7. Acessei o console (rails c) e simulei conforme a sessão do console acima.

Anexei uma sugestão de correção nesta issue, caso queiram aproveitá-la :-)