Skip to content
This repository has been archived by the owner on Mar 11, 2019. It is now read-only.

user_como_dinheiro sem ActiveRecord #73

Open
brunofrank opened this issue Dec 8, 2014 · 1 comment
Open

user_como_dinheiro sem ActiveRecord #73

brunofrank opened this issue Dec 8, 2014 · 1 comment

Comments

@brunofrank
Copy link

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
@brunofrank
Copy link
Author

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant