br-invoice-download 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '087765e8459a45578d7bf60c20e598e5ed67536dfbf749e8159faab5ef23fb3a'
4
+ data.tar.gz: e6dfc19691a832a69516570607f39c1f8f364589b27a56546ae1cd9ea8b21d05
5
+ SHA512:
6
+ metadata.gz: cbfb13a73e0f3dcb1df0d418f46438557fcd1e448c0b818a99bc29ba16c6cf9a38aebc0afb352ee9aa878480f27bf3dffc34a8755a87e89869091732eff9c754
7
+ data.tar.gz: 779d9a175fbd20c8b24cf26076e523ac07e5d66144e0e6ccaa77f615e490efc70d609a361d5b5efa14e29b42804bcd19b33f46742de4a9ca40c44eee28eb6253
@@ -0,0 +1,6 @@
1
+ coverage/
2
+ .dropbox
3
+ **/*.subl*
4
+ **/*.~lock.*
5
+ dev
6
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,108 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ br-invoice-download (1.0.0)
5
+ activesupport (>= 3)
6
+ savon (>= 2.11)
7
+ slim (>= 3.0)
8
+ slim-rails (>= 3.1)
9
+ stringio (>= 0.0.2)
10
+ zlib (>= 1.0)
11
+
12
+ GEM
13
+ remote: http://rubygems.org/
14
+ specs:
15
+ actionpack (6.0.2.2)
16
+ actionview (= 6.0.2.2)
17
+ activesupport (= 6.0.2.2)
18
+ rack (~> 2.0, >= 2.0.8)
19
+ rack-test (>= 0.6.3)
20
+ rails-dom-testing (~> 2.0)
21
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
22
+ actionview (6.0.2.2)
23
+ activesupport (= 6.0.2.2)
24
+ builder (~> 3.1)
25
+ erubi (~> 1.4)
26
+ rails-dom-testing (~> 2.0)
27
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
28
+ activesupport (6.0.2.2)
29
+ concurrent-ruby (~> 1.0, >= 1.0.2)
30
+ i18n (>= 0.7, < 2)
31
+ minitest (~> 5.1)
32
+ tzinfo (~> 1.1)
33
+ zeitwerk (~> 2.2)
34
+ akami (1.3.1)
35
+ gyoku (>= 0.4.0)
36
+ nokogiri
37
+ builder (3.2.4)
38
+ concurrent-ruby (1.1.6)
39
+ crass (1.0.6)
40
+ erubi (1.9.0)
41
+ gyoku (1.3.1)
42
+ builder (>= 2.1.2)
43
+ httpi (2.4.4)
44
+ rack
45
+ socksify
46
+ i18n (1.8.2)
47
+ concurrent-ruby (~> 1.0)
48
+ loofah (2.4.0)
49
+ crass (~> 1.0.2)
50
+ nokogiri (>= 1.5.9)
51
+ method_source (1.0.0)
52
+ mini_portile2 (2.4.0)
53
+ minitest (5.14.0)
54
+ nokogiri (1.10.9)
55
+ mini_portile2 (~> 2.4.0)
56
+ nori (2.6.0)
57
+ rack (2.2.2)
58
+ rack-test (1.1.0)
59
+ rack (>= 1.0, < 3)
60
+ rails-dom-testing (2.0.3)
61
+ activesupport (>= 4.2.0)
62
+ nokogiri (>= 1.6)
63
+ rails-html-sanitizer (1.3.0)
64
+ loofah (~> 2.3)
65
+ railties (6.0.2.2)
66
+ actionpack (= 6.0.2.2)
67
+ activesupport (= 6.0.2.2)
68
+ method_source
69
+ rake (>= 0.8.7)
70
+ thor (>= 0.20.3, < 2.0)
71
+ rake (13.0.1)
72
+ savon (2.12.0)
73
+ akami (~> 1.2)
74
+ builder (>= 2.1.2)
75
+ gyoku (~> 1.2)
76
+ httpi (~> 2.3)
77
+ nokogiri (>= 1.8.1)
78
+ nori (~> 2.4)
79
+ wasabi (~> 3.4)
80
+ slim (4.0.1)
81
+ temple (>= 0.7.6, < 0.9)
82
+ tilt (>= 2.0.6, < 2.1)
83
+ slim-rails (3.2.0)
84
+ actionpack (>= 3.1)
85
+ railties (>= 3.1)
86
+ slim (>= 3.0, < 5.0)
87
+ socksify (1.7.1)
88
+ stringio (0.1.0)
89
+ temple (0.8.2)
90
+ thor (1.0.1)
91
+ thread_safe (0.3.6)
92
+ tilt (2.0.10)
93
+ tzinfo (1.2.6)
94
+ thread_safe (~> 0.1)
95
+ wasabi (3.5.0)
96
+ httpi (~> 2.0)
97
+ nokogiri (>= 1.4.2)
98
+ zeitwerk (2.3.0)
99
+ zlib (1.1.0)
100
+
101
+ PLATFORMS
102
+ ruby
103
+
104
+ DEPENDENCIES
105
+ br-invoice-download!
106
+
107
+ BUNDLED WITH
108
+ 1.17.2
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2016 Bruno M. Mergen
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,52 @@
1
+
2
+ # **br-invoice-download**
3
+ Gem para fazer o download de notas fiscais através da chave de acesso
4
+
5
+ **Introdução**
6
+
7
+ Através do serviço **NFeDistribuicaoDFe** é possível obter o XML da nota fiscal com suas informações.
8
+ Com base na documentação da [NT 2014.002 v1.02](/Brunomm/doc/NT2014.002_v1.02_WsNFeDistribuicaoDFe.pdf) foi criado apenas o serviço para a disponibilização do xml da nota fiscal, onde somente o destinatário, transportador e terceiros (identificados na tag `autXML`) podem usar este serviço.
9
+
10
+ ## Instalação
11
+ **Manualmente**
12
+
13
+ gem install br-invoice-download
14
+
15
+ **Gemfile**
16
+
17
+ gem 'br-invoice-download'
18
+
19
+ ## Utilização
20
+
21
+ ```ruby
22
+ @engine = BrInvoiceDownload::NfeDistribuicaoDfe.new({
23
+ certificate_pkcs12_password: 'CERTIFITACE_PASSWORD',
24
+ certificate_pkcs12_path: '/path/for/certificate-A1.pfx',
25
+ cnpj: '12345678901234',
26
+ invoice_key: '42200231775690400191560010004277701695237709',
27
+ ibge_uf: 42 # vide https://www.ibge.gov.br/explica/codigos-dos-municipios.php
28
+ })
29
+
30
+ @engine.request
31
+
32
+ @engine.invoice_xml
33
+ # => "<nfeProc versao=\"4.00\" xmlns=\"http://www.portalfiscal.inf.br" ...."
34
+
35
+ @engine.invoice_hash
36
+ # => {"nfeProc"=>{"versao"=>"4.00", "xmlns"=>"http://www.portalfiscal.inf.br/nfe", ...}
37
+
38
+ ```
39
+
40
+ ## Contribuições
41
+
42
+ Seja um contribuidor. Você pode contribuir de várias formas:
43
+
44
+ * Desenvolver as outras funcionalidades disponibilizadas pelo serviço **NFeDistribuicaoDFe**.
45
+ * Refatorando código.
46
+ * Fornecendo Feedback construtivo (*Sempre bem vindo!*).
47
+
48
+
49
+ ## Licença
50
+
51
+ - MIT
52
+ - Copyleft 2020 Bruno Mucelini Mergen
@@ -0,0 +1,32 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |task|
4
+ task.libs << %w(test lib)
5
+ task.pattern = 'test/**/*_test.rb'
6
+ end
7
+
8
+ desc "Open an irb session preloaded with this library"
9
+ task :console do
10
+ sh "irb -rubygems -I lib -r br_nfe.rb"
11
+ end
12
+
13
+ task :default => :test
14
+
15
+ namespace :test do
16
+ desc "Test lib source"
17
+ Rake::TestTask.new(:product) do |t|
18
+ t.libs << "test"
19
+ t.pattern = 'test/br_nfe/product/**/*_test.rb'
20
+ t.verbose = true
21
+ end
22
+
23
+ end
24
+
25
+ namespace :test do
26
+ desc "Test lib source"
27
+ Rake::TestTask.new(:service) do |t|
28
+ t.libs << "test"
29
+ t.pattern = 'test/br_nfe/service/**/*_test.rb'
30
+ t.verbose = true
31
+ end
32
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/br_invoice_download/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'br-invoice-download'
6
+ gem.version = BrInvoiceDownload::Version::CURRENT
7
+ gem.license = 'MIT'
8
+ gem.description = %q{BrInvoiceDownload é uma gem para projetos Ruby on Rails que tem como objetivo fazer o download do xml das notas fiscais de produto emitidas no Brasil.}
9
+ gem.summary = %q{Download de Notas Fiscais Eletrônicas em Ruby}
10
+ gem.authors = ['Bruno M. Mergen']
11
+ gem.email = ['brunomergen@gmail.com']
12
+ gem.homepage = 'https://github.com/Brunomm/br-invoice-download'
13
+
14
+ gem.files = `git ls-files`.split("\n").reject{|fil|
15
+ fil.include?('dev/') ||
16
+ fil.include?('doc/')
17
+ }
18
+ gem.require_paths = ["lib"]
19
+ gem.required_ruby_version = ['>= 2.1.0', '< 3.0.0']
20
+
21
+ # gem.add_dependency "rake", '>= 10'
22
+ gem.add_dependency 'activesupport', '>= 3'
23
+ gem.add_dependency 'savon', '>= 2.11'
24
+ # gem.add_dependency 'signer', '>= 1.4'
25
+ gem.add_dependency 'slim', '>= 3.0'
26
+ gem.add_dependency 'slim-rails', '>= 3.1'
27
+ gem.add_dependency 'zlib', '>= 1.0'
28
+ gem.add_dependency 'stringio', '>= 0.0.2'
29
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'active_support/core_ext/string'
5
+ require 'active_support/core_ext/hash'
6
+ require 'savon'
7
+ require 'slim'
8
+
9
+ require 'br_invoice_download/version'
10
+ require 'br_invoice_download/nfe_distribuicao_dfe'
11
+
12
+
13
+ # Copyright (C) 2020 Bruno M. Mergen
14
+ #
15
+ # @author Bruno Mucelini Mergen <brunomergen@gmail.com>
16
+ #
17
+ #
18
+ module BrInvoiceDownload
19
+ def self.root
20
+ File.expand_path '../..', __FILE__
21
+ end
22
+ end
@@ -0,0 +1,192 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require "zlib"
5
+ require "stringio"
6
+ require "base64"
7
+
8
+ module BrInvoiceDownload
9
+ class NfeDistribuicaoDfe
10
+
11
+ def initialize(opts={})
12
+ opts.each do |key, value|
13
+ instance_variable_set("@#{key}", value)
14
+ end
15
+ end
16
+
17
+ attr_accessor :certificate_pkcs12_password
18
+ attr_accessor :certificate_pkcs12_path
19
+ attr_accessor :certificate_pkcs12_value
20
+ attr_accessor :ibge_uf
21
+ attr_accessor :cnpj
22
+ attr_accessor :invoice_key
23
+
24
+ def response
25
+ @response
26
+ end
27
+
28
+ def request
29
+ @response = client_wsdl.call(:nfe_dist_d_fe_interesse, xml: soap_xml)
30
+ rescue Savon::SOAPFault => error
31
+ return @response = {request_status: :soap_error, request_message_error: error.message}
32
+ rescue Savon::HTTPError => error
33
+ return @response = {request_status: :http_error, request_message_error: error.message}
34
+ rescue Exception => error
35
+ return @response = {request_status: :unknown_error, request_message_error: error.message}
36
+ end
37
+
38
+ def invoice_hash
39
+ @invoice ||= handle_invoice
40
+ end
41
+
42
+ def invoice_xml
43
+ @invoice_xml ||= handle_invoice_xml
44
+ end
45
+
46
+ private
47
+
48
+ def handle_invoice_xml
49
+ ret = response.try(:body).dig(:nfe_dist_d_fe_interesse_response, :nfe_dist_d_fe_interesse_result, :ret_dist_d_fe_int, :lote_dist_d_fe_int, :doc_zip)
50
+ return unless ret
51
+
52
+ Zlib::GzipReader.new(
53
+ StringIO.new(
54
+ Base64.decode64( ret )
55
+ )
56
+ ).read
57
+ end
58
+
59
+ def handle_invoice
60
+ Hash.from_xml invoice_xml
61
+ end
62
+
63
+ # Esse método serve para ser utilizado no Base de cada orgão emissor
64
+ # onde em alguns casos é necessário colocar o xml em um CDATA
65
+ # É esse método que é passado dentro do Body da equisição SOAP
66
+ #
67
+ def content_xml
68
+ @content_xml ||= render_xml 'root/NfeDistribuicaoDfe'
69
+ end
70
+
71
+ # Tag XML que vai na requisição SOAP
72
+ #
73
+ # <b>Tipo de retorno: </b> _String_
74
+ #
75
+ def tag_xml
76
+ '<?xml version="1.0" encoding="UTF-8"?>'
77
+ end
78
+
79
+ # XML que irá na requisição SOAP
80
+ #
81
+ # <b>Tipo de retorno: </b> _String XML_
82
+ #
83
+ def soap_xml
84
+ @soap_xml ||= "#{tag_xml}#{render_xml('soap_env')}".html_safe
85
+ end
86
+
87
+ def client_wsdl_params
88
+ {
89
+ log: true,
90
+ pretty_print_xml: true,
91
+ ssl_verify_mode: :none,
92
+ ssl_cert: certificate,
93
+ ssl_cert_key: certificate_key,
94
+ ssl_cert_key_password: certificate_pkcs12_password,
95
+ wsdl: 'https://www1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx?wsdl',
96
+ ssl_version: :TLSv1
97
+ }
98
+ end
99
+
100
+ def url_xmlns
101
+ 'http://www.portalfiscal.inf.br/nfe/wsdl/NFeDistribuicaoDFe'
102
+ end
103
+
104
+ # Cliente WSDL utilizado para fazer a requisição.
105
+ # Utilizando a gem savon.
106
+ # Veja mais detalhes em http://savonrb.com/version2/client.html
107
+ def client_wsdl
108
+ @client_wsdl ||= Savon.client( client_wsdl_params )
109
+ end
110
+
111
+ # Caso não tenha o certificate_pkcs12 salvo em arquivo, pode setar a string do certificate_pkcs12 direto pelo atributo certificate_pkcs12_value
112
+ # Caso tenha o certificate_pkcs12 em arquivo, basta setar o atributo certificate_pkcs12_path e deixar o atributo certificate_pkcs12_value em branco
113
+ def certificate_pkcs12_value
114
+ @certificate_pkcs12_value ||= File.read(certificate_pkcs12_path)
115
+ end
116
+
117
+ def certificate_pkcs12
118
+ return @certificate_pkcs12 if @certificate_pkcs12
119
+ @certificate_pkcs12 = nil
120
+
121
+ # É utilizado uma Thread e limpado os errors do OpenSSL para evitar perda de
122
+ # conexão com o banco de dados PostgreSQL.
123
+ # Veja: http://stackoverflow.com/questions/33112155/pgconnectionbad-pqconsumeinput-ssl-error-key-values-mismatch/36283315#36283315
124
+ # Veja: https://github.com/tedconf/front_end_builds/pull/66
125
+ Thread.new do
126
+ @certificate_pkcs12 = OpenSSL::PKCS12.new(certificate_pkcs12_value, certificate_pkcs12_password)
127
+ OpenSSL.errors.clear
128
+ end.join
129
+ OpenSSL.errors.clear
130
+
131
+ @certificate_pkcs12
132
+ rescue
133
+ end
134
+
135
+ def certificate_pkcs12=(value)
136
+ @certificate_pkcs12 = value
137
+ end
138
+
139
+ def certificate=(value)
140
+ @certificate = value
141
+ end
142
+
143
+ def certificate
144
+ @certificate ||= (certificate_pkcs12 && certificate_pkcs12.certificate)
145
+ end
146
+
147
+ def certificate_key
148
+ @certificate_key ||= (certificate_pkcs12 && certificate_pkcs12.key)
149
+ end
150
+
151
+ def certificate_key=(value)
152
+ @certificate_key = value
153
+ end
154
+
155
+ # Utilização
156
+ # `render_xml('file_name', {dir_path: '/my/custom/dir', context: Object}`
157
+ #
158
+ # <b>Tipo de retorno: <b> _String_ (XML)
159
+ #
160
+ def render_xml file_name, opts={}
161
+ opts = {
162
+ dir_path: nil,
163
+ context: self,
164
+ }.merge(opts)
165
+
166
+ # Inicializa a variavel xml com nil para comparar se oa rquivo foi de fato encontrado.
167
+ xml = nil
168
+ get_xml_dirs(opts[:dir_path]).each do |dir|
169
+ if xml = find_xml(file_name, dir, opts[:context], opts)
170
+ break # Stop loop
171
+ end
172
+ end
173
+
174
+ # Lança uma excessão se não for encontrado o xml
175
+ # Deve verificar se é nil pois o arquivo xml pode estar vazio
176
+ if xml.nil?
177
+ raise "Arquivo #{file_name}.xml.slim não encontrado nos diretórios #{get_xml_dirs(default_options[:dir_path])}"
178
+ end
179
+ xml
180
+ end
181
+
182
+ def find_xml(file_name, dir, context=nil, options={})
183
+ if File.exists?("#{dir}/#{file_name}.xml.slim")
184
+ Slim::Template.new("#{dir}/#{file_name}.xml.slim").render(context, options).html_safe
185
+ end
186
+ end
187
+
188
+ def get_xml_dirs(custom_dir_path=nil)
189
+ [custom_dir_path, "#{BrInvoiceDownload.root}/lib/br_invoice_download/xml"].flatten.select(&:present?)
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ module BrInvoiceDownload
5
+ module Version
6
+ MAJOR = 1 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
7
+ MINOR = 0 #inclui novas funcionalidades, sem quebrar APIs existentes
8
+ PATCH = 0 #corrige bugs ou traz melhorias em implementações já existentes
9
+ CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ distDFeInt xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01"
2
+ tpAmb = 1
3
+ cUFAutor = ibge_uf
4
+ CNPJ = cnpj
5
+ consChNFe
6
+ chNFe = invoice_key
@@ -0,0 +1,9 @@
1
+ soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
2
+ soap:Header
3
+ nfeCabecMsg xmlns="#{url_xmlns}"
4
+ cUF = ibge_uf
5
+ versaoDados = '1.00'
6
+ soap:Body
7
+ nfeDistDFeInteresse xmlns="#{url_xmlns}"
8
+ nfeDadosMsg
9
+ = content_xml.html_safe
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: br-invoice-download
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bruno M. Mergen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-03-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: savon
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '2.11'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '2.11'
41
+ - !ruby/object:Gem::Dependency
42
+ name: slim
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: slim-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '3.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: zlib
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: stringio
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.2
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.0.2
97
+ description: BrInvoiceDownload é uma gem para projetos Ruby on Rails que tem como
98
+ objetivo fazer o download do xml das notas fiscais de produto emitidas no Brasil.
99
+ email:
100
+ - brunomergen@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - Gemfile
107
+ - Gemfile.lock
108
+ - LICENSE
109
+ - README.md
110
+ - Rakefile
111
+ - br_invoice_download.gemspec
112
+ - lib/br_invoice_download.rb
113
+ - lib/br_invoice_download/nfe_distribuicao_dfe.rb
114
+ - lib/br_invoice_download/version.rb
115
+ - lib/br_invoice_download/xml/root/NfeDistribuicaoDfe.xml.slim
116
+ - lib/br_invoice_download/xml/soap_env.xml.slim
117
+ homepage: https://github.com/Brunomm/br-invoice-download
118
+ licenses:
119
+ - MIT
120
+ metadata: {}
121
+ post_install_message:
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 2.1.0
130
+ - - "<"
131
+ - !ruby/object:Gem::Version
132
+ version: 3.0.0
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubygems_version: 3.0.3
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: Download de Notas Fiscais Eletrônicas em Ruby
143
+ test_files: []