correios_sigep 0.0.2 → 0.0.3

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- N2Q3ZjVmN2EwZGRiYmMwMjUzNGFmNWFiNDdmN2I5ZGExMGM0MmE5OQ==
4
+ YjA5NmI1OTJjZWQ3NTFjYTdmNDQ5ZDA1ZDMyYTdkNDM0MjdlNGJjZg==
5
5
  data.tar.gz: !binary |-
6
- NzRiOTA1NWZhNzE4ZDgyMTY2YmQ4ZTdkMjBlZWZkZDIxMjUxMmEyYg==
6
+ NDgwOGYxMmY0NDA0Yzg5YWM4ZWRhYzBkOWJhYWRmYTg3N2VkNjcxZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NmZmMDFiNDllZmFlZDJhY2RjODk0Njc0MmFkOTU4Y2UzOTlkMzZmY2EwZjcz
10
- OGMyNGI4ZWM2NTY1YjE2OTFiNDUzNGE2Mzc4OGU0YjI2NGRiOWFjZDZkOTZh
11
- MTZiMWYwOWQxMjRlNDRhOWU0NmRjM2Q0NWVhN2Q4OTA3ZjI1ZTc=
9
+ MWYwMDI0NGI2MmIyMmJkNTdlZmNmZjY4NDIxMmQxNTZlYTI3MzBjOTNkNzBj
10
+ MDBiNDU2Y2MwYTdkZjUzMmEyYTQ5MzM2MzcxNWY5YzNiZDkzNWE3OTZkNDZm
11
+ NzQ0ZjYwYjY2MzQ1MzQxMjU5MjMzM2YxOWM3Y2RkMjg3MzZiODc=
12
12
  data.tar.gz: !binary |-
13
- Njc3M2QwYmJiZTQ5ZGMzZjhmOTM5MDFkN2UwZWQyNjgzODE0YjA3M2I5YmY5
14
- ZmQzYWQwMWYwM2M5Y2UwNmQ0NjBiMTUwYmMwZTZkMTQ2NTBkYzBkYTcxOWZk
15
- NDJkZjgzNTdkNjdiOWI2NzJiYmE4OTgxMzMyZWViODI5Njk5OTg=
13
+ YWZjOWZmMTg3OTkwNGJiZWMzYzA4MGRhNTU0NzI5ZmQyYjkyYjM3Y2I1MjUy
14
+ ZmRhYTBmYjY1ZGRjNGI5ZTE1ZWFiZmYwOTAwZjkxZGJiOTNjNDRjYmFlZjMx
15
+ YWRkMzdjMDMxOWUwY2NiYzRmYWYwZDhjY2Y2NTkxMGQ3MThhNzU=
data/.travis.yml CHANGED
@@ -2,9 +2,9 @@ language: ruby
2
2
  before_install:
3
3
  - gem install bundler -v '~> 1.5'
4
4
  rvm:
5
- - 1.9.3
6
5
  - 2.0.0
7
6
  - 2.1.1
7
+ - 2.2.0
8
8
  - jruby-19mode
9
9
  bundler_args: --without debug
10
10
  deploy:
data/README.md CHANGED
@@ -4,7 +4,7 @@ CorreiosSigep
4
4
  [![Build Status](https://travis-ci.org/duduribeiro/correios_sigep.svg?branch=master)](https://travis-ci.org/duduribeiro/correios_sigep)
5
5
 
6
6
  - Integrador responsável pela comunicação com o SigepWeb - http://goo.gl/z8VJjJ.
7
- - Documentação do SigepWeb: http://goo.gl/6TWp2f
7
+ - Excelente documentação do SigepWeb providenciada pelos Correios: http://goo.gl/6TWp2f :trollface:
8
8
  - Atualmente a Gem faz somente uma solicitação de uma postagem de reversa (documentação, pág 36).
9
9
 
10
10
  ## Instalação
@@ -7,6 +7,7 @@ require 'correios_sigep/builders/xml/collect_objects'
7
7
  require 'correios_sigep/builders/xml/collect'
8
8
  require 'correios_sigep/builders/xml/authentication'
9
9
  require 'correios_sigep/builders/xml/request_collect_number'
10
+ require 'correios_sigep/builders/xml/request_sro'
10
11
  require 'correios_sigep/models/recipient'
11
12
  require 'correios_sigep/models/product'
12
13
  require 'correios_sigep/models/recipient'
@@ -15,6 +16,7 @@ require 'correios_sigep/models/object'
15
16
  require 'correios_sigep/models/sender'
16
17
  require 'correios_sigep/models/collect'
17
18
  require 'correios_sigep/models/logistic_reverse'
19
+ require 'correios_sigep/models/sro'
18
20
  require 'correios_sigep/models/correios_response_codes'
19
21
  require 'correios_sigep/models/errors/ticket_already_used'
20
22
  require 'correios_sigep/models/errors/unavailable_service'
@@ -22,8 +24,10 @@ require 'correios_sigep/models/errors/inexistent_zipcode'
22
24
  require 'correios_sigep/models/errors/unavailable_house_collect'
23
25
  require 'correios_sigep/models/errors/collect_not_answered_for_the_zipcode'
24
26
  require 'correios_sigep/models/errors/unknown_error'
27
+ require 'correios_sigep/models/errors/sro_not_ready'
25
28
  require 'correios_sigep/logistic_reverse/base_client'
26
29
  require 'correios_sigep/logistic_reverse/request_collect_number'
30
+ require 'correios_sigep/logistic_reverse/request_sro'
27
31
  require 'nokogiri'
28
32
  require 'savon'
29
33
 
@@ -7,7 +7,7 @@ module CorreiosSigep
7
7
  @config = CorreiosSigep.configuration
8
8
  end
9
9
 
10
- def build_xml
10
+ def build_xml!
11
11
  add_node "usuario", @config.user
12
12
  add_node "senha", @config.password
13
13
  add_node "codAdministrativo", @config.administrative_code
@@ -4,9 +4,11 @@ module CorreiosSigep
4
4
  class RequestCollectNumber
5
5
 
6
6
  def self.build_xml(logistic_reverse)
7
- document = Nokogiri::XML(logistic_reverse.to_xml)
8
- XML::Authentication.new(document).build_xml
9
- document.to_xml(save_with: Nokogiri::XML::Node::SaveOptions::NO_DECLARATION)
7
+ document = Nokogiri::XML(logistic_reverse.to_xml)
8
+ XML::Authentication.new(document).build_xml!
9
+
10
+ document
11
+ .to_xml(save_with: Nokogiri::XML::Node::SaveOptions::NO_DECLARATION)
10
12
  .gsub(/<(\/)?root>/, '')
11
13
  end
12
14
 
@@ -0,0 +1,19 @@
1
+ module CorreiosSigep
2
+ module Builders
3
+ module XML
4
+ class RequestSRO
5
+
6
+ def self.build_xml(sro)
7
+ document = Nokogiri::XML(sro.to_xml)
8
+ XML::Authentication.new(document).build_xml!
9
+
10
+ document
11
+ .to_xml(save_with: Nokogiri::XML::Node::SaveOptions::NO_DECLARATION)
12
+ .gsub(/<(\/)?root>/, '')
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -14,8 +14,11 @@ module CorreiosSigep
14
14
  end
15
15
 
16
16
  def invoke(method, message)
17
- @client.instance_variable_set(:@wsdl,
18
- Wasabi::Document.new(CorreiosSigep.configuration.wsdl_base_url)) if wsdl_base_url_changed?
17
+ @client.instance_variable_set(
18
+ :@wsdl,
19
+ Wasabi::Document.new(CorreiosSigep.configuration.wsdl_base_url)
20
+ ) if wsdl_base_url_changed?
21
+
19
22
  @client.call(method, message: message)
20
23
  end
21
24
 
@@ -14,7 +14,7 @@ module CorreiosSigep
14
14
 
15
15
  private
16
16
 
17
- def process_response(response)
17
+ def process_response response
18
18
  response_xml = response.to_xml.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
19
19
  response_doc = Nokogiri::XML.parse(response_xml)
20
20
  code = response_doc.search('//cod-erro | //cod_erro').text.to_i rescue nil
@@ -26,26 +26,29 @@ module CorreiosSigep
26
26
  result_node = response_doc.search(result_string)
27
27
 
28
28
  case code
29
-
30
29
  when Models::CorreiosResponseCodes::SUCCESS
31
30
  result = result_node.search('//numero-coleta | //numero_coleta')
32
- if node = result.first
33
- collect_number = node.text
34
- end
31
+ result.first.text rescue nil
32
+
35
33
  when Models::CorreiosResponseCodes::TICKET_ALREADY_USED
36
- raise Models::Errors::TicketAlreadyUsed.new result_node
37
- .search('//msg_erro | //msg_erro').text
34
+ error_message = result_node.search('//msg_erro | //msg_erro').text
35
+ raise Models::Errors::TicketAlreadyUsed.new error_message
36
+
38
37
  when Models::CorreiosResponseCodes::UNAVAILABLE_SERVICE
39
38
  raise Models::Errors::UnavailableService
39
+
40
40
  when Models::CorreiosResponseCodes::INEXISTENT_ZIPCODE
41
41
  raise Models::Errors::InexistentZipcode
42
+
42
43
  when Models::CorreiosResponseCodes::UNAVAILABLE_HOUSE_COLLECT
43
44
  raise Models::Errors::UnavailableHouseCollect
45
+
44
46
  when Models::CorreiosResponseCodes::COLLECT_NOT_ANSWERED_FOR_THE_ZIPCODE
45
47
  raise Models::Errors::CollectNotAnsweredForTheZipcode
48
+
46
49
  else
47
- raise Models::Errors::UnknownError.new result_node
48
- .search('//msg_erro | //msg_erro').text
50
+ error_message = result_node.search('//msg_erro | //msg_erro').text
51
+ raise Models::Errors::UnknownError.new error_message
49
52
  end
50
53
  end
51
54
  end
@@ -0,0 +1,28 @@
1
+ module CorreiosSigep
2
+ module LogisticReverse
3
+ class RequestSRO < BaseClient
4
+ def initialize(sro)
5
+ @sro = sro
6
+ super()
7
+ end
8
+
9
+ def process
10
+ xml = Builders::XML::RequestSRO.build_xml(@sro)
11
+ process_response invoke(:acompanhar_pedido, xml)
12
+ end
13
+
14
+ private
15
+ def process_response response
16
+ correios_hash = response.body[:acompanhar_pedido_response][:return]
17
+
18
+ case correios_hash[:cod_erro].to_i
19
+ when 0
20
+ correios_hash[:coleta][:objeto][:numero_etiqueta]
21
+ else
22
+ # TODO look for a descritpion of this weird error
23
+ raise Models::Errors::SRONotReady
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ module CorreiosSigep
2
+ module Models
3
+ module Errors
4
+ class SRONotReady < StandardError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ module CorreiosSigep
2
+ module Models
3
+ class SRO
4
+ attr_accessor :collect_number, :type
5
+
6
+ def initialize(options={})
7
+ @collect_number = options[:collect_number]
8
+ @type = options[:type]
9
+ end
10
+
11
+ def to_xml
12
+ builder = Nokogiri::XML::Builder.new do |xml|
13
+ xml.root {
14
+ xml.tipoBusca('H')
15
+ xml.tipoSolicitacao(@type)
16
+ xml.numeroPedido(@collect_number)
17
+ }
18
+ end
19
+ builder.to_xml
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module CorreiosSigep
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -0,0 +1,19 @@
1
+ module CorreiosSigep
2
+ module Builders
3
+ module XML
4
+ describe RequestSRO do
5
+ let(:sro_params) { { collect_number: '1234', type: 'A' } }
6
+ let(:sro) { CorreiosSigep::Models::SRO.new(sro_params) }
7
+ let(:xml) do
8
+ "<cartao>0057018901</cartao><codigo_servico>41076</codigo_servico><contrato>9912208555</contrato><codAdministrativo>08082650</codAdministrativo><senha>8o8otn</senha><usuario>60618043</usuario>\n <tipoBusca>H</tipoBusca>\n <tipoSolicitacao>A</tipoSolicitacao>\n <numeroPedido>1234</numeroPedido>\n\n"
9
+ end
10
+
11
+ subject { described_class.build_xml(sro) }
12
+
13
+ it 'builds a xml without root but with authentication' do
14
+ expect(subject).to eq xml
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,64 @@
1
+ module CorreiosSigep
2
+ module LogisticReverse
3
+ describe RequestSRO do
4
+ let(:sro_params) { { collect_number: '1234', type: 'A' } }
5
+ let(:sro) { CorreiosSigep::Models::SRO.new(sro_params) }
6
+
7
+ describe '.initialize' do
8
+ subject { described_class.new(sro) }
9
+
10
+ it 'instantiates necessary classes' do
11
+ expect(subject.class).to eq CorreiosSigep::LogisticReverse::RequestSRO
12
+ end
13
+ end
14
+
15
+ describe '.process' do
16
+ subject { described_class.new(sro).process }
17
+
18
+ before :each do
19
+ expect_any_instance_of(RequestSRO).to receive(:invoke).with(any_args) { response }
20
+ end
21
+
22
+ let(:response) { double('response', body: response_hash) }
23
+ let(:sro_ticket) { 'ABC123123123BR' }
24
+
25
+ context 'when successfully brings a SRO' do
26
+ let(:response_hash) do
27
+ {
28
+ acompanhar_pedido_response: {
29
+ return: {
30
+ cod_erro: 0,
31
+ coleta: {
32
+ objeto: {
33
+ numero_etiqueta: sro_ticket
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ end
40
+
41
+ it 'returns sro ticket' do
42
+ expect(subject).to eq sro_ticket
43
+ end
44
+ end
45
+
46
+ context 'when SRO is not ready yet' do
47
+ let(:response_hash) do
48
+ {
49
+ acompanhar_pedido_response: {
50
+ return: {
51
+ cod_erro: 1
52
+ }
53
+ }
54
+ }
55
+ end
56
+
57
+ it 'raises an error' do
58
+ expect{subject}.to raise_error Models::Errors::SRONotReady
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,40 @@
1
+ module CorreiosSigep
2
+ module Models
3
+ describe SRO do
4
+ it { should respond_to :collect_number }
5
+ it { should respond_to :type }
6
+
7
+ describe '.initialize' do
8
+ subject { described_class.new params }
9
+
10
+ context 'with nil params' do
11
+ let(:params) { Hash.new }
12
+
13
+ it 'binds attrs to nil' do
14
+ expect(subject.collect_number).to be_nil
15
+ expect(subject.type).to be_nil
16
+ end
17
+ end
18
+
19
+ context 'with present params' do
20
+ let(:params) { { collect_number: '1234', type: 'A' } }
21
+ it 'binds params to params' do
22
+ expect(subject.collect_number).to eq params[:collect_number]
23
+ expect(subject.type).to eq params[:type]
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '.to_xml' do
29
+ let(:sro) { described_class.new(collect_number: '12345', type: 'A') }
30
+ let(:xml) do
31
+ "<?xml version=\"1.0\"?>\n<root>\n <tipoBusca>H</tipoBusca>\n <tipoSolicitacao>A</tipoSolicitacao>\n <numeroPedido>12345</numeroPedido>\n</root>\n"
32
+ end
33
+
34
+ it 'generates the correct xml with root' do
35
+ expect(sro.to_xml).to eq xml
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,6 @@ require 'simplecov'
3
3
  require 'support/logistic_reverse_helper'
4
4
  require 'support/fixture_helper'
5
5
  require 'webmock/rspec'
6
- require 'pry'
7
6
 
8
7
  File.expand_path(File.dirname(File.dirname(__FILE__)))
9
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: correios_sigep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Ribeiro
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-02 00:00:00.000000000 Z
12
+ date: 2015-03-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
@@ -138,14 +138,17 @@ files:
138
138
  - lib/correios_sigep/builders/xml/product.rb
139
139
  - lib/correios_sigep/builders/xml/recipient.rb
140
140
  - lib/correios_sigep/builders/xml/request_collect_number.rb
141
+ - lib/correios_sigep/builders/xml/request_sro.rb
141
142
  - lib/correios_sigep/builders/xml/sender.rb
142
143
  - lib/correios_sigep/configuration.rb
143
144
  - lib/correios_sigep/logistic_reverse/base_client.rb
144
145
  - lib/correios_sigep/logistic_reverse/request_collect_number.rb
146
+ - lib/correios_sigep/logistic_reverse/request_sro.rb
145
147
  - lib/correios_sigep/models/collect.rb
146
148
  - lib/correios_sigep/models/correios_response_codes.rb
147
149
  - lib/correios_sigep/models/errors/collect_not_answered_for_the_zipcode.rb
148
150
  - lib/correios_sigep/models/errors/inexistent_zipcode.rb
151
+ - lib/correios_sigep/models/errors/sro_not_ready.rb
149
152
  - lib/correios_sigep/models/errors/ticket_already_used.rb
150
153
  - lib/correios_sigep/models/errors/unavailable_house_collect.rb
151
154
  - lib/correios_sigep/models/errors/unavailable_service.rb
@@ -155,17 +158,21 @@ files:
155
158
  - lib/correios_sigep/models/product.rb
156
159
  - lib/correios_sigep/models/recipient.rb
157
160
  - lib/correios_sigep/models/sender.rb
161
+ - lib/correios_sigep/models/sro.rb
158
162
  - lib/correios_sigep/version.rb
159
163
  - spec/correios_sigep/builders/xml/request_collect_number_spec.rb
164
+ - spec/correios_sigep/builders/xml/request_sro_spec.rb
160
165
  - spec/correios_sigep/configuration_spec.rb
161
166
  - spec/correios_sigep/logistic_reverse/base_client_spec.rb
162
167
  - spec/correios_sigep/logistic_reverse/request_collect_number_spec.rb
168
+ - spec/correios_sigep/logistic_reverse/request_sro_spec.rb
163
169
  - spec/correios_sigep/models/collect_spec.rb
164
170
  - spec/correios_sigep/models/logistic_reverse_spec.rb
165
171
  - spec/correios_sigep/models/object_spec.rb
166
172
  - spec/correios_sigep/models/product_spec.rb
167
173
  - spec/correios_sigep/models/recipient_spec.rb
168
174
  - spec/correios_sigep/models/sender_spec.rb
175
+ - spec/correios_sigep/models/sro_spec.rb
169
176
  - spec/correios_sigep_spec.rb
170
177
  - spec/fixtures/correios/response_already_in_use.xml
171
178
  - spec/fixtures/correios/response_inexistent_zipcode.xml
@@ -204,15 +211,18 @@ specification_version: 4
204
211
  summary: A gem that integrates with Correios SIGEP WEB.
205
212
  test_files:
206
213
  - spec/correios_sigep/builders/xml/request_collect_number_spec.rb
214
+ - spec/correios_sigep/builders/xml/request_sro_spec.rb
207
215
  - spec/correios_sigep/configuration_spec.rb
208
216
  - spec/correios_sigep/logistic_reverse/base_client_spec.rb
209
217
  - spec/correios_sigep/logistic_reverse/request_collect_number_spec.rb
218
+ - spec/correios_sigep/logistic_reverse/request_sro_spec.rb
210
219
  - spec/correios_sigep/models/collect_spec.rb
211
220
  - spec/correios_sigep/models/logistic_reverse_spec.rb
212
221
  - spec/correios_sigep/models/object_spec.rb
213
222
  - spec/correios_sigep/models/product_spec.rb
214
223
  - spec/correios_sigep/models/recipient_spec.rb
215
224
  - spec/correios_sigep/models/sender_spec.rb
225
+ - spec/correios_sigep/models/sro_spec.rb
216
226
  - spec/correios_sigep_spec.rb
217
227
  - spec/fixtures/correios/response_already_in_use.xml
218
228
  - spec/fixtures/correios/response_inexistent_zipcode.xml