cieloz 0.0.19 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a01af493ef899c0c0c0cdf065bf203186b4d24c2
4
- data.tar.gz: aeab74a28b3e300a9f4cd1ab1c2f98420db99b0a
3
+ metadata.gz: 77964f0f33904c8eb3964429c696916c43da5a91
4
+ data.tar.gz: 6f65d196587d27f886c781c0a049b1290c65b601
5
5
  SHA512:
6
- metadata.gz: 249a1f443dbd199b335c007de8fcbcba983ebdb30a96cce056e1e224c15830bcdd5500baa1547ad44814b62f4bffd53408796f87a1fcbd405169a2d3771ce597
7
- data.tar.gz: 9a0a1fb4cae3d385f161080d70017c161f7be5a5d7eb4bf123e2715993efbbddb1b050d254ba4e0e33c322ee7f99f7f075579e34878e4d200388759a449ca031
6
+ metadata.gz: 2cbc6e83a74d127cfe2c46bfdd570d0feb60eca2f6f9a9b2a423316988217725c36a98029e6974281151842eacd682d5ce4a0b6f55a68f3ab0130557d66ee9b5
7
+ data.tar.gz: 75b0c51b42376501a1d7e255ee266f35a55bc493729c40a6f910cfb38b38d8eb2e2937491f6e2fe6aef3ab1c51efb5497eb3003bf6e753aafc752dfeb926f18d
@@ -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
-
@@ -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
-
@@ -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
@@ -80,5 +80,10 @@ module Cieloz
80
80
  send(m, v) if respond_to? m
81
81
  }
82
82
  end
83
+
84
+ def dasherize_attr value
85
+ value.to_s.gsub("@", "").dasherize
86
+ end
87
+
83
88
  end
84
89
  end
@@ -19,14 +19,16 @@ class Cieloz::Requisicao
19
19
  attributes.each { |attr, value|
20
20
  next if value.nil?
21
21
 
22
- unless value.respond_to? :attributes
23
- x.tag! dash(attr), value
24
- else
25
- x.tag! dash(attr) do
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!(dash(attr), value) unless value.blank?
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.0" if versao.blank?
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
 
@@ -1,3 +1,3 @@
1
1
  module Cieloz
2
- VERSION = "0.0.19"
2
+ VERSION = "0.0.20"
3
3
  end
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.19
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: 2013-09-25 00:00:00.000000000 Z
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