lib/cieloz/requisicao_transacao.rb in cieloz-0.0.16 vs lib/cieloz/requisicao_transacao.rb in cieloz-0.0.17
- old
+ new
@@ -10,11 +10,15 @@
attr_reader :autorizar, :capturar
attr_accessor :campo_livre, :url_retorno
validate :nested_validations
- validates :dados_portador, presence: true, if: "Cieloz::Configuracao.store_mode?"
+ with_options if: "Cieloz::Configuracao.store_mode?" do |c|
+ c.validates :dados_portador, presence: true
+ c.validate :valida_digitos_numero_cartao
+ end
+
validates :dados_pedido, :forma_pagamento, presence: true
with_options unless: "@forma_pagamento.nil?" do |txn|
txn.validate :suporta_autorizacao_direta?
txn.validate :suporta_autenticacao?
@@ -143,7 +147,22 @@
autorizar: @autorizar,
capturar: @capturar,
campo_livre: @campo_livre,
bin: (@dados_portador.numero.to_s[0..5] unless @dados_portador.nil?)
}
+ end
+
+ private
+ def valida_digitos_numero_cartao
+ if dados_portador and forma_pagamento and bandeira = forma_pagamento.bandeira
+ numero = dados_portador.numero.to_s
+ case bandeira.to_s
+ when Cieloz::Bandeiras::DINERS
+ dados_portador.errors.add :numero, :invalid_diners unless numero =~ /\A\d{14}\z/
+ when Cieloz::Bandeiras::AMEX
+ dados_portador.errors.add :numero, :invalid_amex unless numero =~ /\A\d{15}\z/
+ else
+ dados_portador.errors.add :numero, :invalid unless numero =~ /\A\d{16}\z/
+ end
+ end
end
end