correios_sigep 0.5.0 → 1.0.0

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.
Files changed (38) hide show
  1. checksums.yaml +5 -13
  2. data/.rubocop.yml +1155 -2
  3. data/.travis.yml +4 -4
  4. data/README.md +2 -3
  5. data/correios_sigep.gemspec +3 -2
  6. data/lib/correios_sigep.rb +0 -1
  7. data/lib/correios_sigep/builders/xml/collect_objects.rb +4 -4
  8. data/lib/correios_sigep/builders/xml/request.rb +30 -7
  9. data/lib/correios_sigep/builders/xml/request_collect_number.rb +5 -0
  10. data/lib/correios_sigep/configuration.rb +3 -3
  11. data/lib/correios_sigep/logistic_reverse/base_client.rb +7 -4
  12. data/lib/correios_sigep/logistic_reverse/request_sro.rb +1 -1
  13. data/lib/correios_sigep/models/administrative_fields.rb +1 -2
  14. data/lib/correios_sigep/models/sro.rb +2 -2
  15. data/lib/correios_sigep/version.rb +1 -1
  16. data/spec/correios_sigep/builders/xml/request_collect_number_spec.rb +1 -1
  17. data/spec/correios_sigep/builders/xml/request_spec.rb +2 -13
  18. data/spec/correios_sigep/builders/xml/request_sro_spec.rb +2 -2
  19. data/spec/correios_sigep/configuration_spec.rb +23 -33
  20. data/spec/correios_sigep/logistic_reverse/base_client_spec.rb +10 -4
  21. data/spec/correios_sigep/logistic_reverse/request_collect_number_spec.rb +18 -11
  22. data/spec/correios_sigep/logistic_reverse/request_sro_spec.rb +18 -11
  23. data/spec/correios_sigep_spec.rb +0 -14
  24. data/spec/fixtures/builders/request_collect_number.xml +1 -2
  25. data/spec/fixtures/builders/request_sro.xml +1 -2
  26. data/spec/fixtures/correios/request_sro/response_array_success.xml +2 -2
  27. data/spec/fixtures/correios/request_sro/response_collect_number_not_found.xml +2 -2
  28. data/spec/fixtures/correios/request_sro/response_required_fields.xml +2 -2
  29. data/spec/fixtures/correios/request_sro/response_sro_not_ready.xml +2 -2
  30. data/spec/fixtures/correios/request_sro/response_success.xml +2 -2
  31. data/spec/fixtures/correios/request_sro/response_unknown_error.xml +2 -2
  32. data/spec/fixtures/correios/wsdl.xml +650 -188
  33. data/spec/fixtures/requests/collect_number_request.xml +2 -2
  34. data/spec/fixtures/requests/sro_request.xml +1 -1
  35. data/spec/spec_helper.rb +2 -3
  36. metadata +48 -37
  37. data/lib/correios_sigep/builders/xml/authentication.rb +0 -37
  38. data/spec/fixtures/correios/wsdl_test.xml +0 -616
data/.travis.yml CHANGED
@@ -2,10 +2,10 @@ language: ruby
2
2
  before_install:
3
3
  - gem install bundler -v '~> 1.5'
4
4
  rvm:
5
- - 2.0.0
6
- - 2.1.1
7
- - 2.2.2
8
- - 2.3.0
5
+ - 2.1.10
6
+ - 2.2.6
7
+ - 2.3.3
8
+ - 2.4.0
9
9
  bundler_args: --without debug
10
10
  deploy:
11
11
  provider: rubygems
data/README.md CHANGED
@@ -34,11 +34,10 @@ Para utilizar a gem, é necessário configurar os campos necessários com base n
34
34
 
35
35
  ```ruby
36
36
  CorreiosSigep.configure do |config|
37
- config.user = '60618043'
38
- config.password = '8o8otn'
37
+ config.user = 'empresacws'
38
+ config.password = '123456'
39
39
  config.administrative_code = '08082650'
40
40
  config.card = '0057018901'
41
- config.contract = '9912208555'
42
41
  config.service_code = '41076'
43
42
  end
44
43
  ```
@@ -20,12 +20,13 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'net-http-persistent', '~> 2.9.4'
22
22
  spec.add_dependency 'rack', '~> 1.6', '>= 1.6.4'
23
- spec.add_dependency 'savon', '~> 2.0'
23
+ spec.add_dependency 'savon', '~> 2.11'
24
24
 
25
25
  spec.add_development_dependency 'bundler', '~> 1.7'
26
+ spec.add_development_dependency 'pry', '~> 0.10'
26
27
  spec.add_development_dependency 'coveralls'
27
28
  spec.add_development_dependency 'rake', '~> 10.0'
28
29
  spec.add_development_dependency 'rspec', '~> 3.0'
29
30
  spec.add_development_dependency 'simplecov', '~> 0.9'
30
- spec.add_development_dependency 'webmock', '~> 1.0'
31
+ spec.add_development_dependency 'webmock', '~> 2.3'
31
32
  end
@@ -15,7 +15,6 @@ require 'correios_sigep/builders/xml/sender'
15
15
  require 'correios_sigep/builders/xml/product'
16
16
  require 'correios_sigep/builders/xml/collect_objects'
17
17
  require 'correios_sigep/builders/xml/collect'
18
- require 'correios_sigep/builders/xml/authentication'
19
18
  require 'correios_sigep/builders/xml/request'
20
19
  require 'correios_sigep/builders/xml/request_collect_number'
21
20
  require 'correios_sigep/builders/xml/request_sro'
@@ -17,11 +17,11 @@ module CorreiosSigep
17
17
 
18
18
  private
19
19
  def build_item(object)
20
- @builder.item object.item
21
- @builder.id object.id
22
- @builder.desc object.description
20
+ @builder.item object.item
21
+ @builder.id object.id
22
+ @builder.desc object.description
23
23
  @builder.entrega object.ship
24
- @builder.num object.num
24
+ @builder.num object.num
25
25
  end
26
26
  end
27
27
  end
@@ -3,18 +3,41 @@ module CorreiosSigep
3
3
  module XML
4
4
  class Request
5
5
 
6
- def self.build_xml(request, overrides={})
7
- config = CorreiosSigep.configuration
8
- document = Nokogiri::XML(request.to_xml)
9
- administrative_fields =
10
- overrides[:administrative] || config.administrative_fields
11
- XML::Authentication.new(document, administrative_fields).build_xml!
6
+ def initialize(document, overrides={})
7
+ @document = Nokogiri::XML(document.to_xml)
8
+ config = CorreiosSigep.configuration
9
+
10
+ administrative_fields!( overrides[:administrative] ||
11
+ config.administrative_fields )
12
+ end
12
13
 
13
- document
14
+ def administrative_fields!(administrative_fields)
15
+ add_node 'codAdministrativo', administrative_fields.administrative_code
16
+ end
17
+
18
+ def to_xml
19
+ @document
14
20
  .to_xml(save_with: Nokogiri::XML::Node::SaveOptions::NO_DECLARATION)
15
21
  .gsub(/<(\/)?root>/, '')
16
22
  end
17
23
 
24
+ def self.build_xml(request, overrides={})
25
+ new(request, overrides).to_xml
26
+ end
27
+
28
+ private
29
+
30
+ def add_node(node_name, node_content)
31
+ @document.root.children.first.add_previous_sibling(
32
+ create_node(node_name, node_content)
33
+ )
34
+ end
35
+
36
+ def create_node(node_name, node_content)
37
+ node = Nokogiri::XML::Node.new(node_name, @document)
38
+ node.content = node_content
39
+ node
40
+ end
18
41
  end
19
42
  end
20
43
  end
@@ -2,6 +2,11 @@ module CorreiosSigep
2
2
  module Builders
3
3
  module XML
4
4
  class RequestCollectNumber < Request
5
+ def administrative_fields!(administrative_fields)
6
+ add_node 'codAdministrativo', administrative_fields.administrative_code
7
+ add_node 'codigo_servico', administrative_fields.service_code
8
+ add_node 'cartao', administrative_fields.card
9
+ end
5
10
  end
6
11
  end
7
12
  end
@@ -1,12 +1,12 @@
1
1
  module CorreiosSigep
2
2
  class Configuration
3
- attr_accessor :administrative_code, :card, :contract, :password,
4
- :service_code, :user, :wsdl_base_url, :proxy, :timeout
3
+ attr_accessor :administrative_code, :card, :service_code, :wsdl_base_url,
4
+ :proxy, :timeout, :user, :password
5
5
 
6
6
  def administrative_fields
7
7
  @administrative_fields ||=
8
8
  Models::AdministrativeFields.new(administrative_code: administrative_code,
9
- card: card, contract: contract,
9
+ card: card,
10
10
  service_code: service_code)
11
11
 
12
12
  end
@@ -4,14 +4,17 @@ module CorreiosSigep
4
4
  DEFAULT_TIMEOUT = 30
5
5
 
6
6
  def initialize
7
- timeout = CorreiosSigep.configuration.timeout || DEFAULT_TIMEOUT
7
+ timeout = CorreiosSigep.configuration.timeout || DEFAULT_TIMEOUT
8
+ user = CorreiosSigep.configuration.user
9
+ password = CorreiosSigep.configuration.password
8
10
 
9
11
  options = {
10
12
  adapter: :net_http_persistent,
11
13
  proxy: CorreiosSigep.configuration.proxy,
12
14
  wsdl: wsdl,
13
15
  open_timeout: timeout,
14
- read_timeout: timeout
16
+ read_timeout: timeout,
17
+ basic_auth: [user, password]
15
18
  }
16
19
  options.delete(:proxy) unless options[:proxy]
17
20
 
@@ -22,9 +25,9 @@ module CorreiosSigep
22
25
 
23
26
  def wsdl
24
27
  @wsdl ||= if ENV['GEM_ENV'] == 'test'
25
- 'http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol?wsdl'
28
+ 'https://apphom.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS?wsdl'
26
29
  else
27
- 'http://webservicescol.correios.com.br/ScolWeb/WebServiceScol?wsdl'
30
+ 'https://cws.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS?wsdl'
28
31
  end
29
32
  end
30
33
 
@@ -14,7 +14,7 @@ module CorreiosSigep
14
14
 
15
15
  private
16
16
  def process_response response
17
- correios_hash = response.body[:acompanhar_pedido_response][:return]
17
+ correios_hash = response.body[:acompanhar_pedido_response][:acompanhar_pedido]
18
18
  check_sro_errors(correios_hash)
19
19
  correios_response(correios_hash[:coleta][:objeto])[:numero_etiqueta] || begin raise Models::Errors::SRONotReady; end
20
20
  end
@@ -1,12 +1,11 @@
1
1
  module CorreiosSigep
2
2
  module Models
3
3
  class AdministrativeFields
4
- attr_accessor :administrative_code, :card, :contract, :service_code
4
+ attr_accessor :administrative_code, :card, :service_code
5
5
 
6
6
  def initialize(options={})
7
7
  self.administrative_code = options[:administrative_code]
8
8
  self.card = options[:card]
9
- self.contract = options[:contract]
10
9
  self.service_code = options[:service_code]
11
10
  end
12
11
  end
@@ -10,11 +10,11 @@ module CorreiosSigep
10
10
 
11
11
  def to_xml
12
12
  builder = Nokogiri::XML::Builder.new do |xml|
13
- xml.root {
13
+ xml.root do
14
14
  xml.tipoBusca('H')
15
15
  xml.tipoSolicitacao(@type)
16
16
  xml.numeroPedido(@collect_number)
17
- }
17
+ end
18
18
  end
19
19
  builder.to_xml
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module CorreiosSigep
2
- VERSION = '0.5.0'
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -5,7 +5,7 @@ module CorreiosSigep
5
5
  module XML
6
6
  describe RequestCollectNumber do
7
7
  describe '.build_xml' do
8
- subject { described_class.build_xml(logistic_reverse) }
8
+ subject { described_class.build_xml(logistic_reverse).chop }
9
9
 
10
10
  let(:logistic_reverse) { CorreiosSigep::Models::LogisticReverse.new }
11
11
  let(:expected_xml) { builders_fixture('request_collect_number.xml') }
@@ -9,12 +9,7 @@ module CorreiosSigep
9
9
  context 'when do not override anything' do
10
10
  it 'builds a Authentication XML with Configuration parameters' do
11
11
  expected_response = [
12
- '<cartao>0057018901</cartao>',
13
- '<codigo_servico>41076</codigo_servico>',
14
- '<contrato>9912208555</contrato>',
15
- '<codAdministrativo>08082650</codAdministrativo>',
16
- '<senha>8o8otn</senha>',
17
- '<usuario>60618043</usuario><test/>'
12
+ '<codAdministrativo>08082650</codAdministrativo><test/>'
18
13
  ].join + "\n"
19
14
  expect(described_class.build_xml request).to eq expected_response
20
15
  end
@@ -24,15 +19,9 @@ module CorreiosSigep
24
19
  it 'builds a Authentication XML with the override parameter' do
25
20
  administrative_fields = Models::AdministrativeFields.new(administrative_code: 'adm123',
26
21
  card: 'card123',
27
- contract: 'cont123',
28
22
  service_code: 'ser123')
29
23
  expected_response = [
30
- '<cartao>card123</cartao>',
31
- '<codigo_servico>ser123</codigo_servico>',
32
- '<contrato>cont123</contrato>',
33
- '<codAdministrativo>adm123</codAdministrativo>',
34
- '<senha>8o8otn</senha>',
35
- '<usuario>60618043</usuario><test/>'
24
+ '<codAdministrativo>adm123</codAdministrativo><test/>'
36
25
  ].join + "\n"
37
26
  expect(described_class.build_xml request, administrative: administrative_fields).to eq expected_response
38
27
  end
@@ -3,13 +3,13 @@ module CorreiosSigep
3
3
  module XML
4
4
  describe RequestSRO do
5
5
  describe '.build_xml' do
6
- subject { described_class.build_xml(sro) }
6
+ subject { described_class.build_xml(sro).chop }
7
7
 
8
8
  let(:sro_params) { { collect_number: '1234', type: 'A' } }
9
9
  let(:sro) { CorreiosSigep::Models::SRO.new(sro_params) }
10
10
  let(:expected_xml) { builders_fixture('request_sro.xml') }
11
11
 
12
- it { should eq expected_xml }
12
+ it { should eq expected_xml }
13
13
  end
14
14
  end
15
15
  end
@@ -28,43 +28,29 @@ module CorreiosSigep
28
28
  end
29
29
  end
30
30
 
31
- describe '#contract' do
32
- it 'returns nil when unset' do
33
- expect(subject.contract).to be_nil
34
- end
35
- end
36
-
37
- describe '#contract=' do
38
- it 'sets the contract in configuration' do
39
- subject.contract = 'contract'
40
- expect(subject.contract).to eq 'contract'
41
- end
42
- end
43
-
44
- describe '#password' do
31
+ describe '#service_code' do
45
32
  it 'returns nil when unset' do
46
- expect(subject.password).to be_nil
33
+ expect(subject.service_code).to be_nil
47
34
  end
48
35
  end
49
36
 
50
- describe '#password=' do
37
+ describe '#service_code=' do
51
38
  it 'sets the password in configuration' do
52
- subject.password = 'password'
53
- expect(subject.password).to eq 'password'
39
+ subject.service_code = 'service_code'
40
+ expect(subject.service_code).to eq 'service_code'
54
41
  end
55
42
  end
56
43
 
57
-
58
- describe '#service_code' do
44
+ describe '#timeout' do
59
45
  it 'returns nil when unset' do
60
- expect(subject.service_code).to be_nil
46
+ expect(subject.timeout).to be_nil
61
47
  end
62
48
  end
63
49
 
64
- describe '#service_code=' do
65
- it 'sets the password in configuration' do
66
- subject.service_code = 'service_code'
67
- expect(subject.service_code).to eq 'service_code'
50
+ describe '#timeout=' do
51
+ it 'sets the timeout in configuration' do
52
+ subject.timeout = 15
53
+ expect(subject.timeout).to eq 15
68
54
  end
69
55
  end
70
56
 
@@ -75,22 +61,26 @@ module CorreiosSigep
75
61
  end
76
62
 
77
63
  describe '#user=' do
64
+ let(:user) { 'user' }
65
+
78
66
  it 'sets the user in configuration' do
79
- subject.user = 'user'
80
- expect(subject.user).to eq 'user'
67
+ subject.user = user
68
+ expect(subject.user).to eq user
81
69
  end
82
70
  end
83
71
 
84
- describe '#timeout' do
72
+ describe '#password' do
85
73
  it 'returns nil when unset' do
86
- expect(subject.timeout).to be_nil
74
+ expect(subject.password).to be_nil
87
75
  end
88
76
  end
89
77
 
90
- describe '#timeout=' do
91
- it 'sets the timeout in configuration' do
92
- subject.timeout = 15
93
- expect(subject.timeout).to eq 15
78
+ describe '#password=' do
79
+ let(:pass) { 'pass' }
80
+
81
+ it 'sets the password in configuration' do
82
+ subject.password = pass
83
+ expect(subject.password).to eq pass
94
84
  end
95
85
  end
96
86
  end
@@ -3,6 +3,9 @@ require 'spec_helper'
3
3
  module CorreiosSigep
4
4
  module LogisticReverse
5
5
  describe BaseClient do
6
+ let(:user) { CorreiosSigep.configuration.user }
7
+ let(:pass) { CorreiosSigep.configuration.password }
8
+
6
9
  context 'setting up a proxy' do
7
10
  subject { described_class.new }
8
11
 
@@ -15,6 +18,7 @@ module CorreiosSigep
15
18
  wsdl: described_class.new.wsdl,
16
19
  open_timeout: CorreiosSigep::LogisticReverse::BaseClient::DEFAULT_TIMEOUT,
17
20
  read_timeout: CorreiosSigep::LogisticReverse::BaseClient::DEFAULT_TIMEOUT,
21
+ basic_auth: [user, pass],
18
22
  headers: { 'SOAPAction' => '' }
19
23
  }
20
24
  end
@@ -33,6 +37,7 @@ module CorreiosSigep
33
37
  wsdl: described_class.new.wsdl,
34
38
  open_timeout: CorreiosSigep::LogisticReverse::BaseClient::DEFAULT_TIMEOUT,
35
39
  read_timeout: CorreiosSigep::LogisticReverse::BaseClient::DEFAULT_TIMEOUT,
40
+ basic_auth: [user, pass],
36
41
  headers: { 'SOAPAction' => '' }
37
42
  }
38
43
  end
@@ -48,16 +53,16 @@ module CorreiosSigep
48
53
  subject { described_class.new.wsdl }
49
54
 
50
55
  context 'in a test environment' do
51
- it 'return the staging url' do
56
+ it 'returns the staging url' do
52
57
  allow(ENV).to receive(:[]).with('GEM_ENV').and_return 'test'
53
- expect(subject).to eq 'http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol?wsdl'
58
+ expect(subject).to eq 'https://apphom.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS?wsdl'
54
59
  end
55
60
  end
56
61
 
57
62
  context 'in other environment' do
58
- it 'return the production url' do
63
+ it 'returns the production url' do
59
64
  allow(ENV).to receive(:[]).with('GEM_ENV').and_return 'prod'
60
- expect(subject).to eq 'http://webservicescol.correios.com.br/ScolWeb/WebServiceScol?wsdl'
65
+ expect(subject).to eq 'https://cws.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS?wsdl'
61
66
  end
62
67
  end
63
68
 
@@ -73,6 +78,7 @@ module CorreiosSigep
73
78
  wsdl: described_class.new.wsdl,
74
79
  open_timeout: CorreiosSigep.configuration.timeout,
75
80
  read_timeout: CorreiosSigep.configuration.timeout,
81
+ basic_auth: [user, pass],
76
82
  headers: { 'SOAPAction' => '' }
77
83
  }
78
84
  end
@@ -3,25 +3,32 @@ require 'spec_helper'
3
3
  module CorreiosSigep
4
4
  module LogisticReverse
5
5
  describe RequestCollectNumber do
6
- let(:logistic_reverse) { Models::LogisticReverse.new }
7
- let(:request_collect) { described_class.new logistic_reverse }
8
- let(:body) { request_fixture('collect_number_request.xml') }
6
+ let(:logistic_reverse) { Models::LogisticReverse.new }
7
+ let(:request_collect) { described_class.new logistic_reverse }
8
+ let(:body) { request_fixture('collect_number_request.xml').chop }
9
+ let(:user) { 'user' }
10
+ let(:pass) { 'pass' }
9
11
 
10
12
  before do
11
13
  seed_logistic_reverse(logistic_reverse)
12
14
 
13
15
  # WSDL
14
- stub_request(:get, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol?wsdl").
15
- with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
16
- to_return(:status => 200, :body => correios_fixture('wsdl_test.xml'), :headers => {})
16
+ stub_request(:get, 'https://apphom.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS?wsdl').
17
+ with(basic_auth: [user, pass]).
18
+ with(:headers => {
19
+ 'Accept'=>'*/*',
20
+ 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
21
+ 'User-Agent'=>'Ruby'
22
+ }).to_return(:status => 200, :body => correios_fixture('wsdl.xml'), :headers => {})
17
23
 
18
24
  # REQUEST
19
- stub_request(:post, "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol").
20
- with(:body => body, :headers => { 'Accept'=>'*/*',
25
+ stub_request(:post, 'https://apphom.correios.com.br/logisticaReversaWS/logisticaReversaService/logisticaReversaWS').
26
+ with(basic_auth: [user, pass]).
27
+ with(:body => body, :headers => {
28
+ 'Accept'=>'*/*',
21
29
  'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
22
- 'Content-Length'=>'2279', 'Content-Type'=>'text/xml;charset=UTF-8',
23
- 'Soapaction'=>'', 'User-Agent'=>'Ruby' }).
24
- to_return(:status => 200, :body => correios_fixture("request_collect_number/#{response_body}"), :headers => {})
30
+ 'User-Agent'=>'Ruby'
31
+ }).to_return(:status => 200, :body => correios_fixture("request_collect_number/#{response_body}"), :headers => {})
25
32
  end
26
33
 
27
34
  describe '.process' do