inovadora_xml 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Binary file
@@ -23,7 +23,8 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.17"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "nokogiri", "1.6.0"
27
26
  spec.add_development_dependency "signer", "1.4.2"
28
- spec.add_development_dependency "savon", "1.2.0"
27
+ spec.add_dependency "nokogiri", ">= 1.4.0"
28
+ spec.add_dependency "savon", "1.2.0"
29
+ spec.add_dependency "wasabi", "2.5.0"
29
30
  end
@@ -1,102 +1,122 @@
1
1
  #encoding=utf-8
2
2
  module InovadoraXml
3
3
  class Assinador
4
- attr_accessor :xml_assinar, :xml_assinado, :tag_assinar, :parametro
4
+ attr_accessor :xml_assinar, :xml_assinado, :tag_assinar, :cert, :key, :errors, :parametro
5
+
6
+ def initialize(xml, tag_assinar, cert, key)
7
+ self.errors = ActiveModel::Errors.new(self)
5
8
 
6
- def initialize(xml, tag_assinar)
7
9
  self.xml_assinar = xml.to_s
8
10
  self.tag_assinar = tag_assinar
9
- self.assinar_xml
11
+ self.cert = cert
12
+ self.key = key
10
13
  end
11
14
 
12
15
  def assinar_xml()
13
- chave_privada = OpenSSL::PKey::RSA.new(File.read("#{Rails.root}/app/services/sefaz/assinatura/chave.cer"))
14
- certificado = OpenSSL::X509::Certificate.new(File.read("#{Rails.root}/app/services/sefaz/assinatura/certificado.cer"))
16
+ if self.valid?
17
+ chave_privada = OpenSSL::PKey::RSA.new(File.read(self.key))
18
+ certificado = OpenSSL::X509::Certificate.new(File.read(self.cert))
15
19
 
16
- self.xml_assinado = Nokogiri::XML(self.xml_assinar.to_s, &:noblanks)
17
- self.xml_assinado.xpath("//xmlns:#{self.tag_assinar}").each do |node|
20
+ self.xml_assinado = Nokogiri::XML(self.xml_assinar.to_s, &:noblanks)
21
+ self.xml_assinado.xpath("//xmlns:#{self.tag_assinar}").each do |node|
18
22
 
19
- # 1. Digest Hash for all XML
20
- xml_canon = node.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
21
- xml_digest = Base64.encode64(OpenSSL::Digest::SHA1.digest(xml_canon)).strip
23
+ # 1. Digest Hash for all XML
24
+ xml_canon = node.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
25
+ xml_digest = Base64.encode64(OpenSSL::Digest::SHA1.digest(xml_canon)).strip
22
26
 
23
- # 2. Add Signature Node
24
- signature = Nokogiri::XML::Node.new('Signature', self.xml_assinado)
25
- signature.default_namespace = 'http://www.w3.org/2000/09/xmldsig#'
26
- node.after(signature)
27
+ # 2. Add Signature Node
28
+ signature = Nokogiri::XML::Node.new('Signature', self.xml_assinado)
29
+ signature.default_namespace = 'http://www.w3.org/2000/09/xmldsig#'
30
+ node.after(signature)
27
31
 
28
- # 3.1 Create Signature Info
29
- signature_info = Nokogiri::XML::Node.new('SignedInfo', self.xml_assinado)
32
+ # 3.1 Create Signature Info
33
+ signature_info = Nokogiri::XML::Node.new('SignedInfo', self.xml_assinado)
30
34
 
31
- # 3.2 Add CanonicalizationMethod
32
- child_node = Nokogiri::XML::Node.new('CanonicalizationMethod', self.xml_assinado)
33
- child_node['Algorithm'] = 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'
34
- signature_info.add_child child_node
35
+ # 3.2 Add CanonicalizationMethod
36
+ child_node = Nokogiri::XML::Node.new('CanonicalizationMethod', self.xml_assinado)
37
+ child_node['Algorithm'] = 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'
38
+ signature_info.add_child child_node
35
39
 
36
- # 3.3 Add SignatureMethod
37
- child_node = Nokogiri::XML::Node.new('SignatureMethod', self.xml_assinado)
38
- child_node['Algorithm'] = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1'
39
- signature_info.add_child child_node
40
+ # 3.3 Add SignatureMethod
41
+ child_node = Nokogiri::XML::Node.new('SignatureMethod', self.xml_assinado)
42
+ child_node['Algorithm'] = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1'
43
+ signature_info.add_child child_node
40
44
 
41
- # 3.4 Create Reference
42
- reference = Nokogiri::XML::Node.new('Reference', self.xml_assinado)
43
- reference['URI'] = "##{node.first.last}"
45
+ # 3.4 Create Reference
46
+ reference = Nokogiri::XML::Node.new('Reference', self.xml_assinado)
47
+ reference['URI'] = "##{node.first.last}"
44
48
 
45
- # 3.5 Add Transforms
46
- transforms = Nokogiri::XML::Node.new('Transforms', self.xml_assinado)
49
+ # 3.5 Add Transforms
50
+ transforms = Nokogiri::XML::Node.new('Transforms', self.xml_assinado)
47
51
 
48
- child_node = Nokogiri::XML::Node.new('Transform', self.xml_assinado)
49
- child_node['Algorithm'] = 'http://www.w3.org/2000/09/xmldsig#enveloped-signature'
50
- transforms.add_child child_node
52
+ child_node = Nokogiri::XML::Node.new('Transform', self.xml_assinado)
53
+ child_node['Algorithm'] = 'http://www.w3.org/2000/09/xmldsig#enveloped-signature'
54
+ transforms.add_child child_node
51
55
 
52
- child_node = Nokogiri::XML::Node.new('Transform', self.xml_assinado)
53
- child_node['Algorithm'] = 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'
54
- transforms.add_child child_node
56
+ child_node = Nokogiri::XML::Node.new('Transform', self.xml_assinado)
57
+ child_node['Algorithm'] = 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'
58
+ transforms.add_child child_node
55
59
 
56
- reference.add_child transforms
60
+ reference.add_child transforms
57
61
 
58
- # 3.6 Add Digest
59
- child_node = Nokogiri::XML::Node.new('DigestMethod', self.xml_assinado)
60
- child_node['Algorithm'] = 'http://www.w3.org/2000/09/xmldsig#sha1'
61
- reference.add_child child_node
62
+ # 3.6 Add Digest
63
+ child_node = Nokogiri::XML::Node.new('DigestMethod', self.xml_assinado)
64
+ child_node['Algorithm'] = 'http://www.w3.org/2000/09/xmldsig#sha1'
65
+ reference.add_child child_node
62
66
 
63
- # 3.6 Add DigestValue
64
- child_node = Nokogiri::XML::Node.new('DigestValue', self.xml_assinado)
65
- child_node.content = xml_digest
66
- reference.add_child child_node
67
+ # 3.6 Add DigestValue
68
+ child_node = Nokogiri::XML::Node.new('DigestValue', self.xml_assinado)
69
+ child_node.content = xml_digest
70
+ reference.add_child child_node
67
71
 
68
- # 3.7 Add Reference and Signature Info
69
- signature_info.add_child reference
70
- signature.add_child signature_info
72
+ # 3.7 Add Reference and Signature Info
73
+ signature_info.add_child reference
74
+ signature.add_child signature_info
71
75
 
72
- # 4 Sign Signature
73
- sign_canon = signature_info.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
74
- signature_hash = chave_privada.sign(OpenSSL::Digest::SHA1.new, sign_canon)
75
- signature_value = Base64.encode64( signature_hash ).gsub("\n", '')
76
+ # 4 Sign Signature
77
+ sign_canon = signature_info.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
78
+ signature_hash = chave_privada.sign(OpenSSL::Digest::SHA1.new, sign_canon)
79
+ signature_value = Base64.encode64(signature_hash).gsub("\n", '')
76
80
 
77
- # 4.1 Add SignatureValue
78
- child_node = Nokogiri::XML::Node.new('SignatureValue', self.xml_assinado)
79
- child_node.content = signature_value
80
- signature.add_child child_node
81
+ # 4.1 Add SignatureValue
82
+ child_node = Nokogiri::XML::Node.new('SignatureValue', self.xml_assinado)
83
+ child_node.content = signature_value
84
+ signature.add_child child_node
81
85
 
82
- # 5 Create KeyInfo
83
- key_info = Nokogiri::XML::Node.new('KeyInfo', self.xml_assinado)
86
+ # 5 Create KeyInfo
87
+ key_info = Nokogiri::XML::Node.new('KeyInfo', self.xml_assinado)
84
88
 
85
- # 5.1 Add X509 Data and Certificate
86
- x509_data = Nokogiri::XML::Node.new('X509Data', self.xml_assinado)
87
- x509_certificate = Nokogiri::XML::Node.new('X509Certificate', self.xml_assinado)
88
- x509_certificate.content = certificado.to_s.gsub(/\-\-\-\-\-[A-Z]+ CERTIFICATE\-\-\-\-\-/, "").gsub(/\n/,"")
89
+ # 5.1 Add X509 Data and Certificate
90
+ x509_data = Nokogiri::XML::Node.new('X509Data', self.xml_assinado)
91
+ x509_certificate = Nokogiri::XML::Node.new('X509Certificate', self.xml_assinado)
92
+ x509_certificate.content = certificado.to_s.gsub(/\-\-\-\-\-[A-Z]+ CERTIFICATE\-\-\-\-\-/, "").gsub(/\n/,"")
89
93
 
90
- x509_data.add_child x509_certificate
91
- key_info.add_child x509_data
94
+ x509_data.add_child x509_certificate
95
+ key_info.add_child x509_data
92
96
 
93
- # 5.2 Add KeyInfo
94
- signature.add_child key_info
95
- end
97
+ # 5.2 Add KeyInfo
98
+ signature.add_child key_info
99
+ end
96
100
 
97
- # Return XML
98
- self.xml_assinado.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
101
+ # Return XML
102
+ self.xml_assinado.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
103
+ end
104
+ rescue Exception => e
105
+ self.errors.add(:base, e.message)
106
+ ensure
107
+ return self.errors.blank?
108
+ end
109
+
110
+ def valid?
111
+ raise "Chave não informada" unless self.key.present?
112
+ raise "Certificado não informado" unless self.cert.present?
113
+ raise "Arquivo chave não encontrado" unless File.exists?(self.key)
114
+ raise "Arquivo certificado não encontrado" unless File.exists?(self.cert)
115
+
116
+ rescue Exception => e
117
+ self.errors.add(:base, e.message)
118
+ ensure
119
+ return self.errors.blank?
99
120
  end
100
-
101
121
  end
102
- end
122
+ end
@@ -1,7 +1,11 @@
1
- class Utils::Xml::CustomExceptions::ServerError < StandardError
2
- attr_reader :object
1
+ module InovadoraXml
2
+ module CustomExceptions
3
+ class ServerError < StandardError
4
+ attr_reader :object
3
5
 
4
- def initialize(object)
5
- @object = object
6
+ def initialize(object)
7
+ @object = object
8
+ end
9
+ end
6
10
  end
7
11
  end
@@ -0,0 +1,6 @@
1
+ module InovadoraXml
2
+ module CustomExceptions
3
+ # extend ActiveSupport::Autoload
4
+ autoload :ServerError, "inovadora_xml/custom_exceptions/server_error"
5
+ end
6
+ end
@@ -2,7 +2,7 @@
2
2
  module InovadoraXml
3
3
  module Modules
4
4
  module DadosNfseService
5
- def numero_lote_rps
5
+ def get_numero_lote_rps
6
6
  self.fnnfse.build_fnnfses_sancionada if self.fnnfse.fnnfses_sancionada.blank?
7
7
  if self.fnnfse.fnnfses_sancionada.numero_rps.to_s == ""
8
8
  self.fnnfse.fnnfses_sancionada.numero_rps = self.fnnfse.class.connection.select_value("SELECT nextval('gestho.prox_nro_rps_nfse')")
@@ -125,6 +125,19 @@ module InovadoraXml
125
125
  def get_codigo_municipio_prest_servico
126
126
  self.hospital.cidade_ibge.try(:ibge_com_digito)
127
127
  end
128
+
129
+ def persistir_fnnfses_xml(xml)
130
+ xml_tratado = Nokogiri::XML(CGI.unescapeHTML(xml.to_xml.to_s), &:noblanks)
131
+ xml_tratado = xml_tratado.to_xml(indent: 2).to_s
132
+ if xml_tratado.blank?
133
+ xml_tratado = "xml não recebido da prefeitura"
134
+ end
135
+ retorno_service = NotasVendas::XmlRetornoService.new(fnnfse: self.fnnfse, xml_envio: self.xml_gerado().to_s, xml_retorno: xml_tratado, errors: self.errors)
136
+ if retorno_service.retornou_dados_nota?
137
+ retorno_service.save
138
+ end
139
+ end
140
+
128
141
  end
129
142
  end
130
143
  end
@@ -1,22 +1,15 @@
1
1
  #encoding: utf-8
2
2
  module InovadoraXml
3
3
  class ServidorWsdl
4
- attr_accessor :xml_enviar, :metodo_soap, :wsdl, :args_request, :certificado, :chave, :retorno, :errors
4
+ attr_accessor :xml_enviar, :metodo_soap, :wsdl, :args_request, :cert, :key, :retorno, :errors
5
5
 
6
-
7
- # servidor = Utils::Xml::ServidorWsdl.new(
8
- # gerar_xml_enviar,
9
- # self.metodo_soap,
10
- # "https://hom.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx?WSDL",
11
- # {soap_action: "http://www.portalfiscal.inf.br/nfe/wsdl/NFeDistribuicaoDFe/nfeDistDFeInteresse"}
12
- # )
13
- def initialize(xml_enviar, metodo_soap, wsdl, args_request = {})
6
+ def initialize(xml_enviar, metodo_soap, wsdl, cert = nil, key = nil, args_request = {})
14
7
  self.xml_enviar = xml_enviar
15
8
  self.metodo_soap = metodo_soap
16
9
  self.wsdl = wsdl
17
10
 
18
- self.certificado = "#{Rails.root}/app/services/sefaz/assinatura/certificado.cer"
19
- self.chave = "#{Rails.root}/app/services/sefaz/assinatura/chave.cer"
11
+ self.cert = cert
12
+ self.key = key
20
13
 
21
14
  self.args_request = args_request
22
15
 
@@ -45,8 +38,8 @@ module InovadoraXml
45
38
  def estabelecer_cliente
46
39
  Savon::Client.new do |wsdl, http|
47
40
  wsdl.document = self.wsdl
48
- http.auth.ssl.cert_file = self.certificado unless self.certificado.blank?
49
- http.auth.ssl.cert_key_file = self.chave unless self.certificado.blank?
41
+ http.auth.ssl.cert_file = self.cert unless self.cert.blank?
42
+ http.auth.ssl.cert_key_file = self.key unless self.key.blank?
50
43
  http.auth.ssl.verify_mode = :none
51
44
  end
52
45
  end
@@ -1,3 +1,3 @@
1
1
  module InovadoraXml
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,76 @@
1
+ #encoding: utf-8
2
+ module InovadoraXml
3
+ class Xml
4
+ attr_accessor :xml_nfse, :schema, :metodo_soap, :xml_gerado, :retorno, :wsdl, :cert, :key, :errors
5
+
6
+ include InovadoraXml::Modules::FormatadorMfse
7
+ include InovadoraXml::Modules::GeradorXml
8
+
9
+ def initialize(args = {})
10
+ self.errors = ActiveModel::Errors.new(self)
11
+ self.xml_gerado = self.gerar_xml()
12
+
13
+ self.validar_args
14
+ # self.valid?
15
+ end
16
+
17
+ def comunicar(request_args = {})
18
+ self.valid?
19
+
20
+ if self.errors.blank?
21
+ servidor = InovadoraXml::ServidorWsdl.new(
22
+ envelopar(),
23
+ self.metodo_soap,
24
+ self.wsdl,
25
+ request_args
26
+ )
27
+
28
+ unless servidor.enviar
29
+ raise InovadoraXml::CustomExceptions::ServerError.new(servidor), "Server Error"
30
+ end
31
+ #usage: self.retorno.to_xml ou self.retorno.body
32
+ self.retorno = servidor.retorno
33
+ end
34
+
35
+ rescue InovadoraXml::CustomExceptions::ServerError => e
36
+ e.object.errors.full_messages.each {|e| self.errors.add(:base, e)}
37
+ rescue Exception => e
38
+ self.errors.add(:base, e.message)
39
+ ensure
40
+ return self.errors.blank?
41
+ end
42
+
43
+ def validar_args
44
+ self.errors.add(:base, "Metodo SOAP não especificado") if self.metodo_soap.blank?
45
+ self.errors.add(:base, "Schema não especificado") if self.schema.blank?
46
+ self.errors.add(:base, "WSDL não especificado") if self.wsdl.blank?
47
+
48
+ return self.errors.blank?
49
+ end
50
+
51
+ def valid?
52
+ erros = []
53
+ schema = open(self.schema)
54
+ xsd = Nokogiri::XML::Schema(schema)
55
+ xsd.validate(self.xml_gerado).each do |error|
56
+ unless error.message.to_s.include?("{http://www.w3.org/2000/09/xmldsig#}Signature") ||
57
+ error.message.to_s.include?("{http://www.w3.org/2000/09/xmldsig#}SignedInfo")
58
+ erros << "(Linha: " + error.line.to_s + ") => " + error.message.to_s
59
+ end
60
+ end
61
+
62
+ erros.each {|erro| self.errors.add(:base, erro)}
63
+ rescue Errno::ENOENT => e
64
+ self.errors.add(:base, "Arquivo schema não existe")
65
+ rescue Exception => e
66
+ self.errors.add(:base, e)
67
+ ensure
68
+ self.errors.blank?
69
+ end
70
+
71
+ def assinar(xml_assinar, tag_assinar)
72
+ Assinador.new(xml_assinar, tag_assinar).xml_assinado
73
+ end
74
+
75
+ end
76
+ end
data/lib/inovadora_xml.rb CHANGED
@@ -11,6 +11,7 @@ module InovadoraXml
11
11
  extend ActiveSupport::Autoload
12
12
  attr_accessor :xml_nfse, :schema, :metodo_soap, :xml_gerado, :retorno, :wsdl, :cert, :key, :errors
13
13
  autoload :Modules
14
+ autoload :CustomExceptions
14
15
 
15
16
  class Xml
16
17
  attr_accessor :xml_nfse, :schema, :metodo_soap, :xml_gerado, :retorno, :wsdl, :cert, :key, :errors
@@ -22,30 +23,30 @@ module InovadoraXml
22
23
  self.errors = ActiveModel::Errors.new(self)
23
24
  self.xml_gerado = self.gerar_xml()
24
25
 
25
- self.validar_args
26
+ self.validar_args()
26
27
  # self.valid?
27
28
  end
28
29
 
29
30
  def comunicar(request_args = {})
30
- self.valid?
31
-
32
- if self.errors.blank?
33
- servidor = Utils::Xml::ServidorWsdl.new(
34
- envelopar(),
31
+ if self.valid?
32
+ servidor = InovadoraXml::ServidorWsdl.new(
33
+ self.envelopar(),
35
34
  self.metodo_soap,
36
35
  self.wsdl,
36
+ self.cert,
37
+ self.key,
37
38
  request_args
38
39
  )
39
40
 
40
41
  unless servidor.enviar
41
- raise Utils::Xml::CustomExceptions::ServerError.new(servidor), "Server Error"
42
+ raise InovadoraXml::CustomExceptions::ServerError.new(servidor), "Server Error"
42
43
  end
43
44
  #usage: self.retorno.to_xml ou self.retorno.body
44
45
  self.retorno = servidor.retorno
45
46
  end
46
47
 
47
- rescue Utils::Xml::CustomExceptions::ServerError => e
48
- e.object.errors.full_messages.each {|e| self.errors.add(:base, e)}
48
+ rescue InovadoraXml::CustomExceptions::ServerError => e
49
+ e.object.errors.full_messages.each {|e| "Erro na comunicação: #{self.errors.add(:base, e)}"}
49
50
  rescue Exception => e
50
51
  self.errors.add(:base, e.message)
51
52
  ensure
@@ -80,9 +81,17 @@ module InovadoraXml
80
81
  self.errors.blank?
81
82
  end
82
83
 
83
- def assinar(xml_assinar, tag_assinar)
84
- Assinador.new(xml_assinar, tag_assinar).xml_assinado
85
- end
84
+ def assinar(tag_assinar)
85
+ assinador = InovadoraXml::Assinador.new(self.xml_gerado, tag_assinar, self.cert, self.key)
86
+ assinador.assinar_xml
86
87
 
88
+ assinador.errors.each do |error|
89
+ self.errors.add(:base, error.full_message)
90
+ end
91
+
92
+ self.xml_gerado = assinador.xml_assinado if assinador.errors.blank?
93
+ ensure
94
+ return self.errors.blank?
95
+ end
87
96
  end
88
97
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inovadora_xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-06-11 00:00:00.000000000 Z
12
+ date: 2019-06-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -44,13 +44,13 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  version: '10.0'
46
46
  - !ruby/object:Gem::Dependency
47
- name: nokogiri
47
+ name: signer
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
51
  - - '='
52
52
  - !ruby/object:Gem::Version
53
- version: 1.6.0
53
+ version: 1.4.2
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,23 +58,23 @@ dependencies:
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.6.0
61
+ version: 1.4.2
62
62
  - !ruby/object:Gem::Dependency
63
- name: signer
63
+ name: nokogiri
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - '='
67
+ - - ! '>='
68
68
  - !ruby/object:Gem::Version
69
- version: 1.4.2
70
- type: :development
69
+ version: 1.4.0
70
+ type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - '='
75
+ - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
- version: 1.4.2
77
+ version: 1.4.0
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: savon
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -83,7 +83,7 @@ dependencies:
83
83
  - - '='
84
84
  - !ruby/object:Gem::Version
85
85
  version: 1.2.0
86
- type: :development
86
+ type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - '='
92
92
  - !ruby/object:Gem::Version
93
93
  version: 1.2.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: wasabi
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 2.5.0
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 2.5.0
94
110
  description:
95
111
  email:
96
112
  - evanor.libardoni@gmail.com
@@ -106,9 +122,11 @@ files:
106
122
  - Rakefile
107
123
  - bin/console
108
124
  - bin/setup
125
+ - inovadora_xml-0.0.2.gem
109
126
  - inovadora_xml.gemspec
110
127
  - lib/inovadora_xml.rb
111
128
  - lib/inovadora_xml/assinador.rb
129
+ - lib/inovadora_xml/custom_exceptions.rb
112
130
  - lib/inovadora_xml/custom_exceptions/server_error.rb
113
131
  - lib/inovadora_xml/modules.rb
114
132
  - lib/inovadora_xml/modules/dados_nfse_service.rb
@@ -116,6 +134,7 @@ files:
116
134
  - lib/inovadora_xml/modules/gerador_xml.rb
117
135
  - lib/inovadora_xml/servidor_wsdl.rb
118
136
  - lib/inovadora_xml/version.rb
137
+ - lib/inovadora_xml/xml.rb
119
138
  homepage:
120
139
  licenses:
121
140
  - MIT