fabiolnm/cieloz

View on GitHub
lib/cieloz/requisicao_transacao/dados_pedido.rb

Summary

Maintainability
A
35 mins
Test Coverage
class Cieloz::RequisicaoTransacao
  class DadosPedido
    include Cieloz::Helpers

    IDIOMAS = [ "PT", "EN", "ES" ] # portugues, ingles, espanhol

    attr_accessor :numero, :valor, :moeda, :data_hora, :descricao, :idioma, :soft_descriptor

    validates :numero, :valor, :moeda, :data_hora, presence: true

    validates :numero, length: { maximum: 20 }

    validates :valor, length: { maximum: 12 }
    validates :valor, numericality: { only_integer: true }, unless: "@valor.blank?"

    validates :descricao, length: { maximum: 1024 }
    validates :idioma, inclusion: { in: IDIOMAS }
    validates :soft_descriptor, length: { maximum: 13 }

    def self.map(source, opts={})
      mappings = attrs_from source, opts, :numero, :valor,
        :descricao, :data_hora, :moeda, :idioma, :soft_descriptor

      num, val, desc, time, cur, lang, soft = mappings
      val = (val * 100).round unless val.nil? or val.integer?

      time  ||= Time.now
      cur   ||= Cieloz::Configuracao.moeda
      lang  ||= Cieloz::Configuracao.idioma
      soft  ||= Cieloz::Configuracao.soft_descriptor

      new source: source, opts: opts,
        data_hora: time, numero: num, valor: val, moeda: cur,
        idioma: lang, descricao: desc, soft_descriptor: soft
    end

    def attributes
      {
        numero:           @numero,
        valor:            @valor,
        moeda:            @moeda,
        data_hora:        @data_hora.strftime("%Y-%m-%dT%H:%M:%S"),
        descricao:        @descricao,
        idioma:           @idioma,
        soft_descriptor:  @soft_descriptor
      }
    end
  end
end