sigep_web 0.2.6.3 → 1.0.1

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 (44) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +44 -0
  3. data/.gitignore +5 -3
  4. data/Gemfile +1 -2
  5. data/LICENSE +1 -1
  6. data/LICENSE.txt +5 -7
  7. data/README.md +120 -29
  8. data/Rakefile +3 -3
  9. data/lib/sigep_web/calculate_digit_checker.rb +22 -18
  10. data/lib/sigep_web/configuration.rb +5 -3
  11. data/lib/sigep_web/generate_labels_digit_verifier.rb +19 -18
  12. data/lib/sigep_web/models/additional_service.rb +14 -0
  13. data/lib/sigep_web/models/dimension_object.rb +17 -0
  14. data/lib/sigep_web/models/postal_object.rb +26 -0
  15. data/lib/sigep_web/models/receiver.rb +35 -0
  16. data/lib/sigep_web/{Models → models}/sender.rb +5 -3
  17. data/lib/sigep_web/postage_card_status.rb +15 -18
  18. data/lib/sigep_web/request_labels.rb +43 -43
  19. data/lib/sigep_web/request_plp_services.rb +24 -24
  20. data/lib/sigep_web/request_range.rb +27 -23
  21. data/lib/sigep_web/request_xml_plp.rb +17 -18
  22. data/lib/sigep_web/search_client.rb +21 -20
  23. data/lib/sigep_web/service_availability.rb +25 -24
  24. data/lib/sigep_web/version.rb +3 -1
  25. data/lib/sigep_web/web_service_interface_api.rb +15 -11
  26. data/lib/sigep_web/web_service_reverse_logistic_api.rb +11 -8
  27. data/lib/sigep_web/xml/additional_service.rb +26 -0
  28. data/lib/sigep_web/{XML → xml}/dimension_object.rb +3 -1
  29. data/lib/sigep_web/xml/postal_object.rb +51 -0
  30. data/lib/sigep_web/{XML → xml}/receiver.rb +2 -0
  31. data/lib/sigep_web/zip_query.rb +15 -16
  32. data/lib/sigep_web.rb +26 -26
  33. data/sigep_web.gemspec +36 -34
  34. metadata +127 -41
  35. data/.codeclimate.yml +0 -28
  36. data/.rubocop.yml +0 -1156
  37. data/.travis.yml +0 -4
  38. data/Gemfile.lock +0 -63
  39. data/lib/sigep_web/Models/additional_service.rb +0 -12
  40. data/lib/sigep_web/Models/dimension_object.rb +0 -15
  41. data/lib/sigep_web/Models/postal_object.rb +0 -21
  42. data/lib/sigep_web/Models/receiver.rb +0 -33
  43. data/lib/sigep_web/XML/additional_service.rb +0 -24
  44. data/lib/sigep_web/XML/postal_object.rb +0 -50
@@ -1,58 +1,58 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class RequestLabels < WebServiceInterfaceApi
3
- def initialize(options = {})
4
- @receiver_type = options[:receiver_type]
5
- @identifier = options[:identifier]
6
- @id_service = options[:id_service]
7
- @qt_labels = options[:qt_labels]
5
+ def initialize(receiver_type:, identifier:, id_service:, qt_labels:)
6
+ @receiver_type = receiver_type
7
+ @identifier = identifier
8
+ @id_service = id_service
9
+ @qt_labels = qt_labels
10
+
8
11
  super()
9
12
  end
10
13
 
11
14
  def request
12
15
  authenticate = SigepWeb.configuration.authenticate
13
- begin
14
- response = process(:solicita_etiquetas, {
15
- tipoDestinatario: @receiver_type,
16
- identificador: @identifier,
17
- idServico: @id_service,
18
- qtdEtiquetas: @qt_labels,
19
- usuario: authenticate.user,
20
- senha: authenticate.password
21
- }).to_hash[:solicita_etiquetas_response][:return]
22
-
23
- {
24
- success: true,
25
- response: build_label_array(response)
26
- }
27
- rescue Savon::SOAPFault => msg
28
- {
29
- success: false,
30
- error: msg
31
- }
32
- end
16
+
17
+ response = process(
18
+ :solicita_etiquetas,
19
+ tipoDestinatario: receiver_type,
20
+ identificador: identifier,
21
+ idServico: id_service,
22
+ qtdEtiquetas: qt_labels,
23
+ usuario: authenticate.user,
24
+ senha: authenticate.password
25
+ ).to_hash[:solicita_etiquetas_response][:return]
26
+
27
+ {success: true, response: build_label_array(response)}
28
+ rescue Savon::SOAPFault => e
29
+ {success: false, error: e.message}
33
30
  end
34
31
 
35
32
  private
36
- def build_label_array(label_range)
37
- label_array = []
38
- start_label, end_label = label_range.split(',')
39
- prefix = start_label[0,2]
40
- suffix = start_label[11,12]
41
- number = start_label[2,8].to_i
42
- end_number = end_label[2,8].to_i
43
-
44
- while number <= end_number do
45
- use_number = number.to_s
46
-
47
- if use_number.size < 8
48
- use_number = ('0' * (8 - use_number.size)) + use_number
49
- end
50
-
51
- label_array.push prefix + use_number + ' ' + suffix
52
- number += 1
33
+
34
+ attr_reader :receiver_type, :identifier, :id_service, :qt_labels
35
+
36
+ def build_label_array(label_range)
37
+ label_array = []
38
+ start_label, end_label = label_range.split(",")
39
+ prefix = start_label[0, 2]
40
+ suffix = start_label[11, 12]
41
+ number = start_label[2, 8].to_i
42
+ end_number = end_label[2, 8].to_i
43
+
44
+ while number <= end_number
45
+ use_number = number.to_s
46
+
47
+ if use_number.size < 8
48
+ use_number = ("0" * (8 - use_number.size)) + use_number
53
49
  end
54
50
 
55
- label_array
51
+ label_array.push prefix + use_number + " " + suffix
52
+ number += 1
56
53
  end
54
+
55
+ label_array
56
+ end
57
57
  end
58
58
  end
@@ -1,35 +1,35 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class RequestPlpServices < WebServiceInterfaceApi
3
- def initialize(options = {})
4
- @plp = options[:plp]
5
- @id_plp_client = options[:id_plp_client]
6
- #@post_card = options[:post_card]
7
- @labels = options[:labels]
5
+ def initialize(plp:, id_plp_client:, labels:)
6
+ @plp = plp
7
+ @id_plp_client = id_plp_client
8
+ @labels = labels
9
+
8
10
  super()
9
11
  end
10
12
 
11
13
  def request
12
14
  authenticate = SigepWeb.configuration.authenticate
13
- begin
14
- response = process(:fecha_plp_varios_servicos, {
15
- xml: @plp.to_xml,
16
- idPlpCliente: @id_plp_client,
17
- cartaoPostagem: authenticate.card,
18
- listaEtiquetas: @labels,
19
- usuario: authenticate.user,
20
- senha: authenticate.password
21
- }).to_hash[:fecha_plp_varios_servicos_response][:return].to_s
22
15
 
23
- {
24
- success: true,
25
- response: response
26
- }
27
- rescue Savon::SOAPFault => msg
28
- {
29
- success: false,
30
- error: msg
31
- }
32
- end
16
+ response = process(
17
+ :fecha_plp_varios_servicos,
18
+ xml: plp.to_xml,
19
+ idPlpCliente: id_plp_client,
20
+ cartaoPostagem: authenticate.card,
21
+ listaEtiquetas: labels,
22
+ usuario: authenticate.user,
23
+ senha: authenticate.password
24
+ ).to_hash[:fecha_plp_varios_servicos_response][:return].to_s
25
+
26
+ {success: true, response: response}
27
+ rescue Savon::SOAPFault => e
28
+ {success: false, error: e.message}
33
29
  end
30
+
31
+ private
32
+
33
+ attr_reader :plp, :id_plp_client, :labels
34
34
  end
35
35
  end
@@ -1,36 +1,40 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class RequestRange < WebServiceReverseLogisticApi
3
- def initialize(options = {})
4
- @type = options[:type]
5
- @service = options[:service]
6
- @quantity = options[:quantity]
5
+ def initialize(type:, service:, quantity:)
6
+ @type = type
7
+ @service = service
8
+ @quantity = quantity
9
+
7
10
  super()
8
11
  end
9
12
 
10
13
  def request
11
14
  authenticate = SigepWeb.configuration.authenticate
12
15
 
13
- begin
14
- response = process(:solicitar_range, {
15
- usuario: authenticate.user,
16
- senha: authenticate.password,
17
- codAdministrativo: authenticate.administrative_code,
18
- contrato: authenticate.contract,
19
- tipo: @type,
20
- servico: @service,
21
- quantidade: @quantity
22
- }).to_hash[:solicitar_range_response][:return]
16
+ response = process(
17
+ :solicitar_range,
18
+ usuario: authenticate.user,
19
+ senha: authenticate.password,
20
+ codAdministrativo: authenticate.administrative_code,
21
+ contrato: authenticate.contract,
22
+ tipo: type,
23
+ servico: service,
24
+ quantidade: quantity
25
+ ).to_hash[:solicitar_range_response][:return]
23
26
 
24
- {
25
- success: true,
26
- response: response
27
- }
28
- rescue Savon::SOAPFault => msg
29
- {
30
- success: false,
31
- error: msg
32
- }
27
+ if response[:cod_erro] == "0"
28
+ {success: true, response: response}
29
+ else
30
+ {success: false, error: response[:msg_erro]}
33
31
  end
32
+ rescue Savon::SOAPFault => e
33
+ {success: false, error: e.message}
34
34
  end
35
+
36
+ private
37
+
38
+ attr_reader :type, :service, :quantity
35
39
  end
36
40
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class RequestXmlPlp < WebServiceInterfaceApi
3
- def initialize(options = {})
4
- @id_plp = options[:id_plp]
5
+ def initialize(id_plp:)
6
+ @id_plp = id_plp
5
7
 
6
8
  super()
7
9
  end
@@ -9,23 +11,20 @@ module SigepWeb
9
11
  def request
10
12
  authenticate = SigepWeb.configuration.authenticate
11
13
 
12
- begin
13
- response = process(:solicita_xml_plp, {
14
- idPlpMaster: @id_plp,
15
- usuario: authenticate.user,
16
- senha: authenticate.password
17
- }).to_hash[:solicita_xml_plp_response][:return]
14
+ response = process(
15
+ :solicita_xml_plp,
16
+ idPlpMaster: id_plp,
17
+ usuario: authenticate.user,
18
+ senha: authenticate.password
19
+ ).to_hash[:solicita_xml_plp_response][:return]
18
20
 
19
- {
20
- success: true,
21
- response: response
22
- }
23
- rescue Savon::SOAPFault => msg
24
- {
25
- success: false,
26
- error: msg
27
- }
28
- end
21
+ {success: true, response: response}
22
+ rescue Savon::SOAPFault => e
23
+ {success: false, error: e.message}
29
24
  end
25
+
26
+ private
27
+
28
+ attr_reader :id_plp
30
29
  end
31
30
  end
@@ -1,31 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class SearchClient < WebServiceInterfaceApi
3
- def initialize(options = {})
4
- @id_contract = options[:id_contract]
5
- @id_post_card = options[:id_post_card]
5
+ def initialize(id_contract:, id_post_card:)
6
+ @id_contract = id_contract
7
+ @id_post_card = id_post_card
8
+
6
9
  super()
7
10
  end
8
11
 
9
12
  def request
10
13
  authenticate = SigepWeb.configuration.authenticate
11
- begin
12
- response = process(:busca_cliente, {
13
- idContrato: @id_contract,
14
- idCartaoPostagem: @id_post_card,
15
- usuario: authenticate.user,
16
- senha: authenticate.password
17
- }).to_hash[:busca_cliente_response][:return]
18
14
 
19
- {
20
- success: true,
21
- response: response
22
- }
23
- rescue Savon::SOAPFault => msg
24
- {
25
- success: false,
26
- error: msg
27
- }
28
- end
15
+ response = process(
16
+ :busca_cliente,
17
+ idContrato: id_contract,
18
+ idCartaoPostagem: id_post_card,
19
+ usuario: authenticate.user,
20
+ senha: authenticate.password
21
+ ).to_hash[:busca_cliente_response][:return]
22
+
23
+ {success: true, response: response}
24
+ rescue Savon::SOAPFault => e
25
+ {success: false, error: e.message}
29
26
  end
27
+
28
+ private
29
+
30
+ attr_reader :id_contract, :id_post_card
30
31
  end
31
32
  end
@@ -1,34 +1,35 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class ServiceAvailability < WebServiceInterfaceApi
3
- def initialize(options = {})
4
- @service_number = options[:service_number]
5
- @source_zip = options[:source_zip]
6
- @target_zip = options[:target_zip]
5
+ def initialize(service_number:, source_zip:, target_zip:)
6
+ @service_number = service_number
7
+ @source_zip = source_zip
8
+ @target_zip = target_zip
9
+
7
10
  super()
8
11
  end
9
12
 
10
13
  def request
11
- begin
12
- authenticate = SigepWeb.configuration.authenticate
13
- response = process(:verifica_disponibilidade_servico, {
14
- codAdministrativo: authenticate.administrative_code,
15
- numeroServico: @service_number,
16
- cepOrigem: @source_zip,
17
- cepDestino: @target_zip,
18
- usuario: authenticate.user,
19
- senha: authenticate.password
20
- }).to_hash[:verifica_disponibilidade_servico_response][:return]
14
+ authenticate = SigepWeb.configuration.authenticate
15
+
16
+ response = process(
17
+ :verifica_disponibilidade_servico,
18
+ codAdministrativo: authenticate.administrative_code,
19
+ numeroServico: service_number,
20
+ cepOrigem: source_zip,
21
+ cepDestino: target_zip,
22
+ usuario: authenticate.user,
23
+ senha: authenticate.password
24
+ ).to_hash[:verifica_disponibilidade_servico_response][:return]
21
25
 
22
- {
23
- success: true,
24
- response: response
25
- }
26
- rescue Savon::SOAPFault => msg
27
- {
28
- success: false,
29
- error: msg
30
- }
31
- end
26
+ {success: true, response: response}
27
+ rescue Savon::SOAPFault => e
28
+ {success: false, error: e.message}
32
29
  end
30
+
31
+ private
32
+
33
+ attr_reader :service_number, :source_zip, :target_zip
33
34
  end
34
35
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
- VERSION = '0.2.6.3'
4
+ VERSION = "1.0.1"
3
5
  end
@@ -1,10 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class WebServiceInterfaceApi
3
- def initialize
4
- @client = Savon.client({
5
- wsdl: url,
6
- ssl_verify_mode: :none
7
- })
5
+ def initialize(default_transfer = Savon)
6
+ @client = default_transfer.client(wsdl: url, ssl_verify_mode: :none)
8
7
  end
9
8
 
10
9
  def process(method, message)
@@ -12,12 +11,17 @@ module SigepWeb
12
11
  end
13
12
 
14
13
  private
15
- def url
16
- if ENV['GEM_ENV'] == 'test'
17
- 'https://apphom.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl'
18
- else
19
- 'https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl'
20
- end
14
+
15
+ def url
16
+ if test_env?
17
+ "https://apphom.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl"
18
+ else
19
+ "https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl"
21
20
  end
21
+ end
22
+
23
+ def test_env?
24
+ (defined?(Rails) && ENV["RAILS_ENV"] == "test") || ENV["GEM_ENV"] == "test"
25
+ end
22
26
  end
23
27
  end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class WebServiceReverseLogisticApi
3
5
  def initialize
4
- @client = Savon.client({
6
+ @client = Savon.client(
5
7
  wsdl: url,
6
8
  ssl_verify_mode: :none
7
- })
9
+ )
8
10
  end
9
11
 
10
12
  def process(method, message)
@@ -12,12 +14,13 @@ module SigepWeb
12
14
  end
13
15
 
14
16
  private
15
- def url
16
- if ENV['GEM_ENV'] == 'test'
17
- 'http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol?wsdl'
18
- else
19
- 'http://webservicescol.correios.com.br/ScolWeb/WebServiceScol?wsdl'
20
- end
17
+
18
+ def url
19
+ if ENV["GEM_ENV"] == "test"
20
+ "http://webservicescolhomologacao.correios.com.br/ScolWeb/WebServiceScol?wsdl"
21
+ else
22
+ "http://webservicescol.correios.com.br/ScolWeb/WebServiceScol?wsdl"
21
23
  end
24
+ end
22
25
  end
23
26
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SigepWeb
4
+ module XML
5
+ class AdditionalService
6
+ def initialize(builder, additional_service)
7
+ @builder = builder
8
+ @additional_service = additional_service
9
+ end
10
+
11
+ def build_xml
12
+ @builder.servico_adicional do
13
+ if @additional_service
14
+ @additional_service.codes.each do |code|
15
+ @builder.codigo_servico_adicional code
16
+ end
17
+
18
+ @builder.codigo_servico_adicional "025"
19
+
20
+ @builder.valor_declarado @additional_service.declareted_value
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  module XML
3
5
  class DimensionObject
4
6
  def initialize(builder, dimension_object)
5
- @builder = builder
7
+ @builder = builder
6
8
  @dimension_object = dimension_object
7
9
  end
8
10
 
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SigepWeb
4
+ module XML
5
+ class PostalObject
6
+ def initialize(builder, postal_objects = [])
7
+ @builder = builder
8
+ @postal_objects = postal_objects
9
+ end
10
+
11
+ def build_xml
12
+ @postal_objects.each do |postal_object|
13
+ @builder.objeto_postal do
14
+ build_object(postal_object)
15
+ end
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def build_object(postal_object)
22
+ @builder.numero_etiqueta postal_object.label_number
23
+ @builder.codigo_objeto_cliente
24
+ @builder.codigo_servico_postagem postal_object.postage_code_service
25
+ @builder.cubagem postal_object.cubage
26
+ @builder.peso postal_object.weight
27
+ @builder.rt1
28
+ @builder.rt2
29
+
30
+ XML::Receiver.new(@builder, postal_object.receiver).build_xml
31
+
32
+ @builder.servico_adicional do
33
+ @builder.codigo_servico_adicional "025"
34
+
35
+ postal_object.additional_service_codes&.each do |code|
36
+ @builder.codigo_servico_adicional code
37
+ end
38
+
39
+ @builder.valor_declarado postal_object.additional_services_declared_value
40
+ end
41
+
42
+ XML::DimensionObject.new(@builder, postal_object.dimension_object).build_xml
43
+
44
+ @builder.data_postagem_sara
45
+ @builder.status_processamento postal_object.processing_status
46
+ @builder.numero_comprovante_postagem
47
+ @builder.valor_cobrado
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  module XML
3
5
  class Receiver
@@ -1,26 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SigepWeb
2
4
  class ZipQuery < WebServiceInterfaceApi
3
- def initialize(options = {})
4
- @zip = options[:zip]
5
+ def initialize(zip:)
6
+ @zip = zip
7
+
5
8
  super()
6
9
  end
7
10
 
8
11
  def request
9
- begin
10
- response = process(:consulta_cep, {
11
- cep: @zip
12
- }).to_hash[:consulta_cep_response][:return]
12
+ response = process(
13
+ :consulta_cep, cep: zip
14
+ ).to_hash[:consulta_cep_response][:return]
13
15
 
14
- {
15
- success: true,
16
- response: response
17
- }
18
- rescue Savon::SOAPFault => msg
19
- {
20
- success: false,
21
- error: msg
22
- }
23
- end
16
+ {success: true, response: response}
17
+ rescue Savon::SOAPFault => e
18
+ {success: false, error: e.message}
24
19
  end
20
+
21
+ private
22
+
23
+ attr_reader :zip
25
24
  end
26
25
  end
data/lib/sigep_web.rb CHANGED
@@ -1,29 +1,29 @@
1
- require 'sigep_web/version'
2
- require 'sigep_web/configuration'
3
- require 'sigep_web/web_service_interface_api'
4
- require 'sigep_web/web_service_reverse_logistic_api'
5
- require 'sigep_web/authenticate'
6
- require 'sigep_web/XML/postal_object'
7
- require 'sigep_web/XML/receiver'
8
- require 'sigep_web/XML/additional_service'
9
- require 'sigep_web/XML/dimension_object'
10
- require 'sigep_web/Models/sender'
11
- require 'sigep_web/Models/postal_object'
12
- require 'sigep_web/Models/receiver'
13
- require 'sigep_web/Models/additional_service'
14
- require 'sigep_web/Models/dimension_object'
15
- require 'sigep_web/service_availability'
16
- require 'sigep_web/search_client'
17
- require 'sigep_web/zip_query'
18
- require 'sigep_web/request_labels'
19
- require 'sigep_web/generate_labels_digit_verifier'
20
- require 'sigep_web/request_plp_services'
21
- require 'sigep_web/postage_card_status'
22
- require 'sigep_web/request_xml_plp'
23
- require 'sigep_web/request_range'
24
- require 'sigep_web/calculate_digit_checker'
25
- require 'savon'
26
- require 'nokogiri'
1
+ require "sigep_web/version"
2
+ require "sigep_web/configuration"
3
+ require "sigep_web/web_service_interface_api"
4
+ require "sigep_web/web_service_reverse_logistic_api"
5
+ require "sigep_web/authenticate"
6
+ require "sigep_web/xml/postal_object"
7
+ require "sigep_web/xml/receiver"
8
+ require "sigep_web/xml/additional_service"
9
+ require "sigep_web/xml/dimension_object"
10
+ require "sigep_web/models/sender"
11
+ require "sigep_web/models/postal_object"
12
+ require "sigep_web/models/receiver"
13
+ require "sigep_web/models/additional_service"
14
+ require "sigep_web/models/dimension_object"
15
+ require "sigep_web/service_availability"
16
+ require "sigep_web/search_client"
17
+ require "sigep_web/zip_query"
18
+ require "sigep_web/request_labels"
19
+ require "sigep_web/generate_labels_digit_verifier"
20
+ require "sigep_web/request_plp_services"
21
+ require "sigep_web/postage_card_status"
22
+ require "sigep_web/request_xml_plp"
23
+ require "sigep_web/request_range"
24
+ require "sigep_web/calculate_digit_checker"
25
+ require "savon"
26
+ require "nokogiri"
27
27
 
28
28
  module SigepWeb
29
29
  def self.configure