brazilian-rails
brazilian-rails copied to clipboard
user_como_dinheiro sem ActiveRecord
Estou tentando usar o BRDinheiro em uma classe que não extende de ActiveRecord, porém recebo um erro ruby undefined method
composed_of' for AccountTransfer:Class`, alguém tem alguma ideia se é possível?
class AccountTransfer
include ActiveModel::Model
include DinheiroActiveRecord
attr_accessor :company_to_id, :account_to_id, :value
validates :company_to_id, presence: true
validates :account_to_id, presence: true
validates :value, numericality: { greater_than: 0 }
usar_como_dinheiro :value
end
Fiz um gato aqui que resolveu meu problema, se alguém se interessar!
module DinheiroActiveModel#:nodoc:
def self.included(base)#:nodoc:
base.extend ClassMethods
end
module ClassMethods#:nodoc:
def usar_como_dinheiro(*args)#:nodoc:
unless args.size.zero?
args.each do |name|
name = name.to_s
module_eval <<-ADICIONANDO_METODO
validate :#{name}_valido?
def #{name}_valido?
begin
@#{name}.to_s.reais
rescue Exception => e
self.errors.add('#{name}', e.message)
end
end
def #{name}=(value)
if value.nil?
@#{name} = nil
elsif value.kind_of?(Dinheiro)
@#{name} = value.valor_decimal
else
begin
@#{name} = value.reais.valor_decimal
rescue
@#{name} = value
end
end
end
def #{name}
@#{name}.reais if @#{name}
end
ADICIONANDO_METODO
end
end
end
end
end