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.
- data/inovadora_xml-0.0.2.gem +0 -0
- data/inovadora_xml.gemspec +3 -2
- data/lib/inovadora_xml/assinador.rb +90 -70
- data/lib/inovadora_xml/custom_exceptions/server_error.rb +8 -4
- data/lib/inovadora_xml/custom_exceptions.rb +6 -0
- data/lib/inovadora_xml/modules/dados_nfse_service.rb +14 -1
- data/lib/inovadora_xml/servidor_wsdl.rb +6 -13
- data/lib/inovadora_xml/version.rb +1 -1
- data/lib/inovadora_xml/xml.rb +76 -0
- data/lib/inovadora_xml.rb +21 -12
- metadata +31 -12
Binary file
|
data/inovadora_xml.gemspec
CHANGED
@@ -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.
|
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.
|
11
|
+
self.cert = cert
|
12
|
+
self.key = key
|
10
13
|
end
|
11
14
|
|
12
15
|
def assinar_xml()
|
13
|
-
|
14
|
-
|
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
|
-
|
17
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
29
|
-
|
32
|
+
# 3.1 Create Signature Info
|
33
|
+
signature_info = Nokogiri::XML::Node.new('SignedInfo', self.xml_assinado)
|
30
34
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
42
|
-
|
43
|
-
|
45
|
+
# 3.4 Create Reference
|
46
|
+
reference = Nokogiri::XML::Node.new('Reference', self.xml_assinado)
|
47
|
+
reference['URI'] = "##{node.first.last}"
|
44
48
|
|
45
|
-
|
46
|
-
|
49
|
+
# 3.5 Add Transforms
|
50
|
+
transforms = Nokogiri::XML::Node.new('Transforms', self.xml_assinado)
|
47
51
|
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
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
|
-
|
60
|
+
reference.add_child transforms
|
57
61
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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
|
-
|
69
|
-
|
70
|
-
|
72
|
+
# 3.7 Add Reference and Signature Info
|
73
|
+
signature_info.add_child reference
|
74
|
+
signature.add_child signature_info
|
71
75
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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
|
-
|
83
|
-
|
86
|
+
# 5 Create KeyInfo
|
87
|
+
key_info = Nokogiri::XML::Node.new('KeyInfo', self.xml_assinado)
|
84
88
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
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
|
-
|
91
|
-
|
94
|
+
x509_data.add_child x509_certificate
|
95
|
+
key_info.add_child x509_data
|
92
96
|
|
93
|
-
|
94
|
-
|
95
|
-
|
97
|
+
# 5.2 Add KeyInfo
|
98
|
+
signature.add_child key_info
|
99
|
+
end
|
96
100
|
|
97
|
-
|
98
|
-
|
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
|
-
|
2
|
-
|
1
|
+
module InovadoraXml
|
2
|
+
module CustomExceptions
|
3
|
+
class ServerError < StandardError
|
4
|
+
attr_reader :object
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
+
def initialize(object)
|
7
|
+
@object = object
|
8
|
+
end
|
9
|
+
end
|
6
10
|
end
|
7
11
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
module InovadoraXml
|
3
3
|
module Modules
|
4
4
|
module DadosNfseService
|
5
|
-
def
|
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, :
|
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.
|
19
|
-
self.
|
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.
|
49
|
-
http.auth.ssl.cert_key_file = self.
|
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
|
@@ -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
|
-
|
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
|
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
|
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(
|
84
|
-
Assinador.new(
|
85
|
-
|
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.
|
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-
|
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:
|
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.
|
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.
|
61
|
+
version: 1.4.2
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
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.
|
70
|
-
type: :
|
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.
|
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: :
|
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
|