cieloz 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/locales/en.yml +2 -1
- data/config/locales/pt-BR.yml +2 -1
- data/lib/cieloz/builder.rb +4 -0
- data/lib/cieloz/helpers.rb +5 -0
- data/lib/cieloz/requisicao.rb +8 -11
- data/lib/cieloz/requisicao_transacao/dados_avs.rb +51 -0
- data/lib/cieloz/requisicao_transacao.rb +19 -9
- data/lib/cieloz/version.rb +1 -1
- data/lib/cieloz.rb +1 -0
- data/test/unit/requisicao_transacao_test.rb +15 -0
- data/test/unit/validations_test.rb +23 -0
- data/test/unit/xml/dados-avs.xml +11 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77964f0f33904c8eb3964429c696916c43da5a91
|
4
|
+
data.tar.gz: 6f65d196587d27f886c781c0a049b1290c65b601
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cbc6e83a74d127cfe2c46bfdd570d0feb60eca2f6f9a9b2a423316988217725c36a98029e6974281151842eacd682d5ce4a0b6f55a68f3ab0130557d66ee9b5
|
7
|
+
data.tar.gz: 75b0c51b42376501a1d7e255ee266f35a55bc493729c40a6f910cfb38b38d8eb2e2937491f6e2fe6aef3ab1c51efb5497eb3003bf6e753aafc752dfeb926f18d
|
data/config/locales/en.yml
CHANGED
@@ -10,6 +10,8 @@ en:
|
|
10
10
|
direct_auth_available_for_credit_only: Direct auth available for credit only
|
11
11
|
capturar:
|
12
12
|
inclusion: should be true or false
|
13
|
+
dados_avs:
|
14
|
+
no_capture_with_avs: Automatic capture is not permitted with AVS
|
13
15
|
cieloz/requisicao_transacao/dados_portador:
|
14
16
|
attributes:
|
15
17
|
numero:
|
@@ -29,4 +31,3 @@ en:
|
|
29
31
|
bandeira:
|
30
32
|
blank: choose credit card flag
|
31
33
|
inclusion: choose credit card flag
|
32
|
-
|
data/config/locales/pt-BR.yml
CHANGED
@@ -10,6 +10,8 @@ pt-BR:
|
|
10
10
|
direct_auth_available_for_credit_only: Autorização Direta disponível apenas em operações de crédito
|
11
11
|
capturar:
|
12
12
|
inclusion: deveria ser true ou false
|
13
|
+
dados_avs:
|
14
|
+
no_capture_with_avs: Captura automática não é permitida em conjunto com AVS
|
13
15
|
cieloz/requisicao_transacao/dados_portador:
|
14
16
|
attributes:
|
15
17
|
numero:
|
@@ -29,4 +31,3 @@ pt-BR:
|
|
29
31
|
bandeira:
|
30
32
|
blank: escolha a bandeira
|
31
33
|
inclusion: escolha a bandeira
|
32
|
-
|
data/lib/cieloz/builder.rb
CHANGED
@@ -20,6 +20,10 @@ module Cieloz
|
|
20
20
|
RequisicaoTransacao::FormaPagamento.map_parcelado source, opts
|
21
21
|
end
|
22
22
|
|
23
|
+
def avs source, opts={}
|
24
|
+
RequisicaoTransacao::DadosAvs.map source, opts
|
25
|
+
end
|
26
|
+
|
23
27
|
def transacao source, opts={}
|
24
28
|
RequisicaoTransacao.map source, opts
|
25
29
|
end
|
data/lib/cieloz/helpers.rb
CHANGED
data/lib/cieloz/requisicao.rb
CHANGED
@@ -19,14 +19,16 @@ class Cieloz::Requisicao
|
|
19
19
|
attributes.each { |attr, value|
|
20
20
|
next if value.nil?
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
x.tag!
|
22
|
+
if value.respond_to? :build_xml
|
23
|
+
value.build_xml x
|
24
|
+
elsif value.respond_to? :attributes
|
25
|
+
x.tag! dasherize_attr(attr) do
|
26
26
|
value.attributes.each do |attr, value|
|
27
|
-
x.tag!(
|
27
|
+
x.tag!(dasherize_attr(attr), value) unless value.blank?
|
28
28
|
end
|
29
29
|
end
|
30
|
+
else
|
31
|
+
x.tag! dasherize_attr(attr), value
|
30
32
|
end
|
31
33
|
}
|
32
34
|
end
|
@@ -37,7 +39,7 @@ class Cieloz::Requisicao
|
|
37
39
|
|
38
40
|
if valid?
|
39
41
|
@id = SecureRandom.uuid if id.blank?
|
40
|
-
@versao = "1.2.
|
42
|
+
@versao = "1.2.1" if versao.blank?
|
41
43
|
|
42
44
|
http = Net::HTTP.new Cieloz::Configuracao.host, 443
|
43
45
|
http.use_ssl = true
|
@@ -69,9 +71,4 @@ class Cieloz::Requisicao
|
|
69
71
|
doc.to_xml
|
70
72
|
end
|
71
73
|
end
|
72
|
-
|
73
|
-
private
|
74
|
-
def dash value
|
75
|
-
value.to_s.gsub("@", "").dasherize
|
76
|
-
end
|
77
74
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class Cieloz::RequisicaoTransacao
|
2
|
+
class DadosAvs
|
3
|
+
CONFERE = 'C'
|
4
|
+
NAO_CONFERE = 'N'
|
5
|
+
INDISPONIVEL = 'I'
|
6
|
+
TEMPORARIAMENTE_INDISPONIVEL = 'T'
|
7
|
+
NAO_SUPORTADO = 'X'
|
8
|
+
|
9
|
+
include Cieloz::Helpers
|
10
|
+
|
11
|
+
attr_accessor :cep, :endereco, :complemento, :numero, :bairro
|
12
|
+
|
13
|
+
validates :cep, presence: true, format: { with: /\A(\d{5}-\d{3})\z/ }
|
14
|
+
|
15
|
+
def self.map(source, opts={})
|
16
|
+
cep, endereco, complemento, numero, bairro = attrs_from source, opts,
|
17
|
+
:cep, :endereco, :complemento, :numero, :bairro
|
18
|
+
|
19
|
+
new source: source, opts: opts,
|
20
|
+
cep: cep, endereco: endereco, complemento: complemento, numero: numero, bairro: bairro
|
21
|
+
end
|
22
|
+
|
23
|
+
def attributes
|
24
|
+
{
|
25
|
+
endereco: @endereco,
|
26
|
+
complemento: @complemento,
|
27
|
+
numero: @numero,
|
28
|
+
bairro: @bairro,
|
29
|
+
cep: @cep
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_xml builder
|
34
|
+
builder.tag! 'avs' do
|
35
|
+
builder.cdata! attr_to_xml
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def attr_to_xml
|
41
|
+
x = Builder::XmlMarkup.new
|
42
|
+
@xml = x.tag! 'dados-avs' do
|
43
|
+
attributes.each do |attr, value|
|
44
|
+
next if value.nil?
|
45
|
+
|
46
|
+
x.tag! dasherize_attr(attr), value
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -5,10 +5,10 @@ class Cieloz::RequisicaoTransacao < Cieloz::Requisicao
|
|
5
5
|
AUTORIZACAO_DIRETA = 3
|
6
6
|
RECORRENTE = 4
|
7
7
|
|
8
|
-
hattr_writer :dados_portador, :dados_pedido, :forma_pagamento
|
9
|
-
attr_reader :dados_portador, :dados_pedido, :forma_pagamento
|
8
|
+
hattr_writer :dados_portador, :dados_pedido, :forma_pagamento, :dados_avs
|
9
|
+
attr_reader :dados_portador, :dados_pedido, :forma_pagamento, :dados_avs
|
10
10
|
attr_reader :autorizar, :capturar
|
11
|
-
attr_accessor :campo_livre, :url_retorno
|
11
|
+
attr_accessor :campo_livre, :url_retorno, :gerar_token
|
12
12
|
|
13
13
|
validate :nested_validations
|
14
14
|
|
@@ -27,6 +27,9 @@ class Cieloz::RequisicaoTransacao < Cieloz::Requisicao
|
|
27
27
|
validate :parcela_minima?,
|
28
28
|
if: "not @dados_pedido.nil? and not @forma_pagamento.nil?"
|
29
29
|
|
30
|
+
validate :nao_capturar?,
|
31
|
+
if: "not @dados_avs.nil?"
|
32
|
+
|
30
33
|
validates :autorizar, inclusion: {
|
31
34
|
in: [
|
32
35
|
SOMENTE_AUTENTICAR, AUTORIZAR_SE_AUTENTICADA,
|
@@ -44,15 +47,16 @@ class Cieloz::RequisicaoTransacao < Cieloz::Requisicao
|
|
44
47
|
validates :campo_livre, length: { maximum: 128 }
|
45
48
|
|
46
49
|
def self.map(source, opts={})
|
47
|
-
portador, pedido, pagamento, url, capturar, campo_livre =
|
50
|
+
portador, pedido, pagamento, avs, url, capturar, campo_livre, gerar =
|
48
51
|
attrs_from source, opts, :dados_portador, :dados_pedido,
|
49
|
-
:forma_pagamento, :url_retorno, :capturar, :campo_livre
|
52
|
+
:forma_pagamento, :dados_avs, :url_retorno, :capturar, :campo_livre, :gerar_token
|
50
53
|
|
51
54
|
url ||= Cieloz::Configuracao.url_retorno
|
55
|
+
gerar ||= false
|
52
56
|
|
53
57
|
txn = new source: source, opts: opts, dados_portador: portador,
|
54
|
-
dados_pedido: pedido, forma_pagamento: pagamento,
|
55
|
-
campo_livre: campo_livre, url_retorno: url,
|
58
|
+
dados_pedido: pedido, forma_pagamento: pagamento, dados_avs: avs,
|
59
|
+
campo_livre: campo_livre, url_retorno: url, gerar_token: gerar,
|
56
60
|
dados_ec: Cieloz::Configuracao.credenciais
|
57
61
|
|
58
62
|
capturar ||= Cieloz::Configuracao.captura_automatica
|
@@ -68,7 +72,7 @@ class Cieloz::RequisicaoTransacao < Cieloz::Requisicao
|
|
68
72
|
end
|
69
73
|
|
70
74
|
def nested_validations
|
71
|
-
nested_attrs = [ :dados_ec, :dados_pedido, :forma_pagamento ]
|
75
|
+
nested_attrs = [ :dados_ec, :dados_pedido, :forma_pagamento, :dados_avs ]
|
72
76
|
nested_attrs << :dados_portador if Cieloz::Configuracao.store_mode?
|
73
77
|
|
74
78
|
nested_attrs.each { |attr|
|
@@ -86,6 +90,10 @@ class Cieloz::RequisicaoTransacao < Cieloz::Requisicao
|
|
86
90
|
end
|
87
91
|
end
|
88
92
|
|
93
|
+
def nao_capturar?
|
94
|
+
add_error :dados_avs, :no_capture_with_avs if @capturar == 'true'
|
95
|
+
end
|
96
|
+
|
89
97
|
def somente_autenticar
|
90
98
|
@autorizar = SOMENTE_AUTENTICAR
|
91
99
|
self
|
@@ -147,7 +155,9 @@ class Cieloz::RequisicaoTransacao < Cieloz::Requisicao
|
|
147
155
|
autorizar: @autorizar,
|
148
156
|
capturar: @capturar,
|
149
157
|
campo_livre: @campo_livre,
|
150
|
-
bin: (@dados_portador.numero.to_s[0..5] unless @dados_portador.nil?)
|
158
|
+
bin: (@dados_portador.numero.to_s[0..5] unless @dados_portador.nil?),
|
159
|
+
gerar_token: @gerar_token,
|
160
|
+
dados_avs: @dados_avs
|
151
161
|
}
|
152
162
|
end
|
153
163
|
|
data/lib/cieloz/version.rb
CHANGED
data/lib/cieloz.rb
CHANGED
@@ -18,6 +18,7 @@ require "cieloz/requisicao/resposta/transacao"
|
|
18
18
|
require "cieloz/requisicao_transacao"
|
19
19
|
require "cieloz/requisicao_transacao/dados_portador"
|
20
20
|
require "cieloz/requisicao_transacao/dados_pedido"
|
21
|
+
require "cieloz/requisicao_transacao/dados_avs"
|
21
22
|
require "cieloz/requisicao_transacao/forma_pagamento"
|
22
23
|
require "cieloz/requisicao_tid"
|
23
24
|
|
@@ -12,6 +12,9 @@ describe Cieloz::RequisicaoTransacao do
|
|
12
12
|
data_hora: now, descricao: "teste", idioma: "PT", soft_descriptor: "13letterstest"
|
13
13
|
}
|
14
14
|
let(:pagamento) { _::FormaPagamento.new.credito "visa" }
|
15
|
+
let(:avs) {
|
16
|
+
_::DadosAvs.new cep: '12345-123', endereco: 'Rua Lala', complemento: 'Casa', numero: '123', bairro: 'Brooklyn'
|
17
|
+
}
|
15
18
|
|
16
19
|
it "serializes dados-ec" do
|
17
20
|
subject.submit # @dados_ec is set on submission
|
@@ -33,6 +36,11 @@ describe Cieloz::RequisicaoTransacao do
|
|
33
36
|
assert_equal expected_xml(opts) { xml_for :pagamento, dir, binding }, subject.to_xml
|
34
37
|
end
|
35
38
|
|
39
|
+
it "serializes dados-avs" do
|
40
|
+
subject.dados_avs = avs
|
41
|
+
assert_equal expected_xml(opts) { xml_for :avs, dir, binding }, subject.to_xml
|
42
|
+
end
|
43
|
+
|
36
44
|
it "serializes simple attributes" do
|
37
45
|
subject.url_retorno = "http://callback.acti.on"
|
38
46
|
subject.autorizacao_direta
|
@@ -41,6 +49,13 @@ describe Cieloz::RequisicaoTransacao do
|
|
41
49
|
assert_equal expected_xml(opts) { xml_for :simple_attrs, dir, binding }, subject.to_xml
|
42
50
|
end
|
43
51
|
|
52
|
+
it "doesn't permit automatic capture with AVS" do
|
53
|
+
subject.dados_avs = avs
|
54
|
+
subject.capturar_automaticamente
|
55
|
+
assert !subject.valid?
|
56
|
+
assert_equal 'Automatic capture is not permitted with AVS', subject.errors[:dados_avs].first
|
57
|
+
end
|
58
|
+
|
44
59
|
describe "request posting" do
|
45
60
|
let(:status_txn) { "0" }
|
46
61
|
let(:id) { "1001734898090FD31001" }
|
@@ -246,6 +246,29 @@ describe Cieloz::RequisicaoTransacao::FormaPagamento do
|
|
246
246
|
end
|
247
247
|
end
|
248
248
|
|
249
|
+
describe Cieloz::RequisicaoTransacao::DadosAvs do
|
250
|
+
it { must_validate_presence_of :cep }
|
251
|
+
|
252
|
+
it 'validates format of cep' do
|
253
|
+
subject.cep = '12345-123'
|
254
|
+
assert subject.valid?
|
255
|
+
|
256
|
+
subject.cep = '12345123'
|
257
|
+
refute subject.valid?
|
258
|
+
assert_equal [I18n.t('errors.messages.invalid')], subject.errors[:cep]
|
259
|
+
|
260
|
+
subject.cep = '12345-abc'
|
261
|
+
refute subject.valid?
|
262
|
+
assert_equal [I18n.t('errors.messages.invalid')], subject.errors[:cep]
|
263
|
+
end
|
264
|
+
|
265
|
+
it "is validated inside RequisicaoTransacao" do
|
266
|
+
txn = Cieloz::RequisicaoTransacao.new dados_avs: subject
|
267
|
+
refute txn.valid?
|
268
|
+
refute txn.errors[:dados_avs].empty?
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
249
272
|
describe Cieloz::RequisicaoTransacao do
|
250
273
|
let(:_) { subject.class }
|
251
274
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<avs>
|
2
|
+
<![CDATA[
|
3
|
+
<dados-avs>
|
4
|
+
<endereco><%= avs.endereco %></endereco>
|
5
|
+
<complemento><%= avs.complemento %></complemento>
|
6
|
+
<numero><%= avs.numero %></numero>
|
7
|
+
<bairro><%= avs.bairro %></bairro>
|
8
|
+
<cep><%= avs.cep %></cep>
|
9
|
+
</dados-avs>
|
10
|
+
]]>
|
11
|
+
</avs>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cieloz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fábio Luiz Nery de Miranda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/cieloz/requisicao/resposta/transacao.rb
|
151
151
|
- lib/cieloz/requisicao_tid.rb
|
152
152
|
- lib/cieloz/requisicao_transacao.rb
|
153
|
+
- lib/cieloz/requisicao_transacao/dados_avs.rb
|
153
154
|
- lib/cieloz/requisicao_transacao/dados_pedido.rb
|
154
155
|
- lib/cieloz/requisicao_transacao/dados_portador.rb
|
155
156
|
- lib/cieloz/requisicao_transacao/forma_pagamento.rb
|
@@ -181,6 +182,7 @@ files:
|
|
181
182
|
- test/unit/requisicao_test.rb
|
182
183
|
- test/unit/requisicao_transacao_test.rb
|
183
184
|
- test/unit/validations_test.rb
|
185
|
+
- test/unit/xml/dados-avs.xml
|
184
186
|
- test/unit/xml/dados-ec.xml
|
185
187
|
- test/unit/xml/dados-pagamento.xml
|
186
188
|
- test/unit/xml/dados-pedido.xml
|
@@ -227,6 +229,7 @@ test_files:
|
|
227
229
|
- test/unit/requisicao_test.rb
|
228
230
|
- test/unit/requisicao_transacao_test.rb
|
229
231
|
- test/unit/validations_test.rb
|
232
|
+
- test/unit/xml/dados-avs.xml
|
230
233
|
- test/unit/xml/dados-ec.xml
|
231
234
|
- test/unit/xml/dados-pagamento.xml
|
232
235
|
- test/unit/xml/dados-pedido.xml
|