inovadora_xml 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.
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