cfdi_processor 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: d34c400420a533b160065f7a9d86ab6e5bcdccf17df4eb50471b1b662e145b27
4
+ data.tar.gz: a70f5fb37aa9c54143c5a47b0aa1c12d00ed46fdd510a8b527b0b0109e0e7832
5
+ SHA512:
6
+ metadata.gz: 8ae268c20f3050453d38737e779ef4fac26535748b9cb98e452341a90bd96a8c7711ad723a51bf65ebe8b1682802e44fbc4df18ee053c4fcc507444a78fc50b7
7
+ data.tar.gz: 22dae7b928933148665bb5b6fc22fad9aac1c6833980632a5e39011594421291b0634fc3caa089ae0214c2b3bb1790e166caf7ae5289da205ef35f1e0bdca118
@@ -0,0 +1 @@
1
+ service_name: travis-ci
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,6 @@
1
+ sudo: false
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 2.6.5
6
+ before_install: gem install bundler -v 1.17.3
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ group :development, :test do
6
+ gem 'coveralls', require: false
7
+ end
8
+
9
+ # Specify your gem's dependencies in cfdi_processor.gemspec
10
+ gemspec
@@ -0,0 +1,83 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cfdi_processor (1.0.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ activesupport (6.0.3.1)
10
+ concurrent-ruby (~> 1.0, >= 1.0.2)
11
+ i18n (>= 0.7, < 2)
12
+ minitest (~> 5.1)
13
+ tzinfo (~> 1.1)
14
+ zeitwerk (~> 2.2, >= 2.2.2)
15
+ coderay (1.1.3)
16
+ concurrent-ruby (1.1.6)
17
+ coveralls (0.8.23)
18
+ json (>= 1.8, < 3)
19
+ simplecov (~> 0.16.1)
20
+ term-ansicolor (~> 1.3)
21
+ thor (>= 0.19.4, < 2.0)
22
+ tins (~> 1.6)
23
+ diff-lcs (1.3)
24
+ docile (1.3.2)
25
+ i18n (1.8.3)
26
+ concurrent-ruby (~> 1.0)
27
+ json (2.3.0)
28
+ method_source (1.0.0)
29
+ mini_portile2 (2.4.0)
30
+ minitest (5.14.1)
31
+ nokogiri (1.10.9)
32
+ mini_portile2 (~> 2.4.0)
33
+ pry (0.13.1)
34
+ coderay (~> 1.1)
35
+ method_source (~> 1.0)
36
+ rake (13.0.1)
37
+ rspec (3.9.0)
38
+ rspec-core (~> 3.9.0)
39
+ rspec-expectations (~> 3.9.0)
40
+ rspec-mocks (~> 3.9.0)
41
+ rspec-core (3.9.2)
42
+ rspec-support (~> 3.9.3)
43
+ rspec-expectations (3.9.2)
44
+ diff-lcs (>= 1.2.0, < 2.0)
45
+ rspec-support (~> 3.9.0)
46
+ rspec-mocks (3.9.1)
47
+ diff-lcs (>= 1.2.0, < 2.0)
48
+ rspec-support (~> 3.9.0)
49
+ rspec-support (3.9.3)
50
+ shoulda-matchers (4.3.0)
51
+ activesupport (>= 4.2.0)
52
+ simplecov (0.16.1)
53
+ docile (~> 1.1)
54
+ json (>= 1.8, < 3)
55
+ simplecov-html (~> 0.10.0)
56
+ simplecov-html (0.10.2)
57
+ sync (0.5.0)
58
+ term-ansicolor (1.7.1)
59
+ tins (~> 1.0)
60
+ thor (1.0.1)
61
+ thread_safe (0.3.6)
62
+ tins (1.25.0)
63
+ sync
64
+ tzinfo (1.2.7)
65
+ thread_safe (~> 0.1)
66
+ zeitwerk (2.3.0)
67
+
68
+ PLATFORMS
69
+ ruby
70
+
71
+ DEPENDENCIES
72
+ bundler (~> 2.1.4)
73
+ cfdi_processor!
74
+ coveralls
75
+ i18n (~> 1.8, >= 1.8.3)
76
+ nokogiri (~> 1.6, >= 1.6.8)
77
+ pry (~> 0.13.0)
78
+ rake (>= 12.3.3)
79
+ rspec (~> 3.0)
80
+ shoulda-matchers (~> 4.3)
81
+
82
+ BUNDLED WITH
83
+ 2.1.4
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 TODO: Write your name
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,72 @@
1
+ # CfdiProcessor
2
+
3
+ Extracts the information from the CFDI (Mexico) and converts it into a hash.
4
+
5
+ [![Build Status](https://travis-ci.com/armando1339/cfdi_processor.svg?branch=master)](https://travis-ci.com/armando1339/cfdi_processor) [![Coverage Status](https://coveralls.io/repos/github/armando1339/cfdi_processor/badge.svg?branch=master)](https://coveralls.io/github/armando1339/cfdi_processor?branch=master)
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'cfdi_processor'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install cfdi_processor
22
+
23
+ ## Usage
24
+
25
+ ### Extract CFDI Data
26
+
27
+ Create an instance of `CfdiProcessor::StampedExtractor` and pass to it a xml string.
28
+
29
+ ```ruby
30
+ xml_data = CfdiProcessor::StampedExtractor.new(xml_string)
31
+ ```
32
+
33
+ To access to the data extracted.
34
+
35
+ ```ruby
36
+
37
+ # => Execute the instance methods
38
+ xml_data.receipt
39
+ xml_data.issuer
40
+ xml_data.receiver
41
+ xml_data.concepts
42
+ xml_data.taxes
43
+
44
+ ```
45
+
46
+ To access to the XML string and Nokogiri document.
47
+
48
+ ```ruby
49
+
50
+ # =>
51
+ xml_data.xml
52
+
53
+ # =>
54
+ xml_data.nokogiri_xml
55
+
56
+ ```
57
+
58
+ ## Contributing
59
+
60
+ Bug report or pull request are welcome. Make a pull request:
61
+
62
+ - Clone the repo
63
+ - Create a new feature branch
64
+ - Commit your changes
65
+ - Push the new branch
66
+ - Create new pull-request
67
+
68
+ Please write tests if necessary.
69
+
70
+ ## License
71
+
72
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "cfdi_processor"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,46 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "cfdi_processor/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "cfdi_processor"
8
+ spec.version = CfdiProcessor::VERSION
9
+ spec.authors = ["Armando Alejandre"]
10
+ spec.email = ["armando1339@gmail.com"]
11
+
12
+ spec.summary = %q{Extracts the information from the cfdi and converts it into a hash}
13
+ spec.description = %q{Extracts the information from the cfdi and converts it into a hash}
14
+ spec.homepage = "https://buhocontable.com/"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org/"
21
+
22
+ spec.metadata["homepage_uri"] = spec.homepage
23
+ spec.metadata["source_code_uri"] = "https://github.com/armando1339/cfdi_processor"
24
+ # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
25
+ else
26
+ raise "RubyGems 2.0 or newer is required to protect against " \
27
+ "public gem pushes."
28
+ end
29
+
30
+ # Specify which files should be added to the gem when it is released.
31
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
+ end
35
+ spec.bindir = "exe"
36
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
+ spec.require_paths = ["lib"]
38
+
39
+ spec.add_development_dependency "nokogiri", "~> 1.6", ">= 1.6.8"
40
+ spec.add_development_dependency "i18n", "~> 1.8", ">= 1.8.3"
41
+ spec.add_development_dependency "bundler", "~> 2.1.4"
42
+ spec.add_development_dependency "rake", ">= 12.3.3"
43
+ spec.add_development_dependency "rspec", "~> 3.0"
44
+ spec.add_development_dependency "shoulda-matchers", "~> 4.3"
45
+ spec.add_development_dependency "pry", "~> 0.13.0"
46
+ end
@@ -0,0 +1,4 @@
1
+ require "cfdi_processor/version"
2
+ require "cfdi_processor/i18n"
3
+ require "cfdi_processor/data_extractor_base"
4
+ require "cfdi_processor/stamped_extractor"
@@ -0,0 +1,63 @@
1
+ require "nokogiri"
2
+
3
+ module CfdiProcessor
4
+ class DataExtractorBase
5
+ attr_accessor :xml, :nokogiri_xml
6
+
7
+ def initialize(xml)
8
+ @xml = xml
9
+ @nokogiri_xml = ::Nokogiri::XML(xml)
10
+ @nokogiri_xml.remove_namespaces!
11
+
12
+ # => Hook methods:
13
+ #
14
+ # * Execute data extraction
15
+ # * Translate data extracted
16
+ #
17
+ extract_data_from_xml
18
+ translate_data
19
+ end
20
+
21
+ def extract_data_from_xml
22
+ raise 'Undefined abstract method: #extract_data_from_xml'
23
+ end
24
+
25
+ def translate_data
26
+ raise 'Undefined abstract method: #translate_data'
27
+ end
28
+
29
+ # => Search for the _translate_ pattern at the beginning of the method,
30
+ # if it is found, look for the translation based on the end of the
31
+ # method name and the argument that is passed to it.
32
+ #
33
+ def method_missing(name, *args, &block)
34
+ if name.to_s.start_with?('_translate_')
35
+ resource_name = name.to_s.sub('_translate_', '')
36
+
37
+ instance_variable_get("@#{resource_name}").inject({}) do |translated, (key,value)|
38
+ if value.kind_of?(Array)
39
+ next if value.empty?
40
+ items = value.each do |item|
41
+ item.transform_keys!{ |k| I18n.t("#{args.first}.#{key}.#{k}") }
42
+ end
43
+
44
+ translated.merge!(I18n.t("#{args.first}.#{resource_name}.#{key}") => items)
45
+ else
46
+ translated.merge!(I18n.t("#{args.first}.#{resource_name}.#{key}") => value)
47
+ end
48
+
49
+ instance_variable_set("@#{resource_name}", translated)
50
+ end
51
+ else
52
+ super
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+
59
+
60
+
61
+
62
+
63
+
@@ -0,0 +1,9 @@
1
+ begin
2
+ require "i18n"
3
+ rescue LoadError => e
4
+ puts "The i18n gem is not available. Please add it to your Gemfile and run bundle install"
5
+ raise e
6
+ end
7
+
8
+ I18n.load_path << File.expand_path("locale/en.yml", __dir__)
9
+ I18n.locale = :en
@@ -0,0 +1,96 @@
1
+ en:
2
+ cfdi:
3
+ receipt:
4
+ Version: version
5
+ Serie: serie
6
+ Folio: folio_ui
7
+ Fecha: date_issued
8
+ Sello: stamp
9
+ FormaPago: payment_form
10
+ NoCertificado: certificate_number
11
+ Certificado: certificate
12
+ CondicionesDePago: payment_conditions
13
+ SubTotal: subtotal
14
+ Descuento: discount
15
+ Moneda: currency
16
+ TipoCambio: exchange_rate
17
+ Total: total
18
+ TipoDeComprobante: invoice_type
19
+ MetodoPago: payment_method
20
+ LugarExpedicion: expedition_place
21
+ Confirmacion: confirmation
22
+ issuer:
23
+ Rfc: rfc
24
+ Nombre: legal_name
25
+ RegimenFiscal: fiscal_regime
26
+ receiver:
27
+ Rfc: rfc
28
+ Nombre: legal_name
29
+ ResidenciaFiscal: tax_residency
30
+ NumRegIdTrib: tax_identity_registration_number
31
+ UsoCFDI: cfdi_use
32
+ concepts:
33
+ ClaveProdServ: sat_product_id
34
+ NoIdentificacion: identification_number
35
+ Cantidad: quantity
36
+ ClaveUnidad: unit
37
+ Unidad: unit_measure
38
+ Descripcion: description
39
+ ValorUnitario: unit_value
40
+ Importe: price
41
+ Descuento: discount
42
+ Traslados: transferred
43
+ Retenidos: detained
44
+ taxes:
45
+ TotalImpuestosTrasladados: total_taxes_transferred
46
+ TotalImpuestosRetenidos: total_taxes_detained
47
+ Traslados: transferred
48
+ Retenidos: detained
49
+ Traslados:
50
+ Base: base
51
+ Impuesto: tax
52
+ TipoFactor: factor_type
53
+ TasaOCuota: rate_or_fee
54
+ Importe: import
55
+ Retenidos:
56
+ Base: base
57
+ Impuesto: tax
58
+ TipoFactor: factor_type
59
+ TasaOCuota: rate_or_fee
60
+ Importe: import
61
+
62
+ # cfdi_related:
63
+ # TipoRelacion: relationship_type
64
+ # related:
65
+ # UUID: uuid
66
+
67
+ # tax_transferred:
68
+
69
+ # tax_detained:
70
+ # Base: base
71
+ # Impuesto: tax
72
+ # TipoFactor: factor_type
73
+ # TasaOCuota: rate_or_fee
74
+ # Importe: import
75
+ # customs_information: # InformacionAduanera
76
+ # NumeroPedimento: requirement_number
77
+ # property_account: # CuentaPredial
78
+ # Numero: number
79
+ # part: # Parte
80
+ # ClaveProdServ: prod_or_svc_key
81
+ # NoIdentificacion: identification_number
82
+ # Cantidad: quantity
83
+ # Unidad: unit_measure
84
+ # Descripcion: description
85
+ # ValorUnitario: unit_value
86
+ # Importe: amount
87
+
88
+ # detained:
89
+
90
+ # transferred:
91
+
92
+ # cancellation:
93
+ # Fecha: date
94
+ # RfcEmisor: rfc
95
+ # uuid:
96
+ # UUID: folio_fiscal
@@ -0,0 +1,55 @@
1
+ module CfdiProcessor
2
+ class StampedExtractor < CfdiProcessor::DataExtractorBase
3
+ attr_accessor :receipt, :issuer, :receiver, :concepts, :taxes
4
+
5
+ def extract_data_from_xml
6
+ receipt_data_from_xml
7
+ issuer_data_from_xml
8
+ receiver_data_from_xml
9
+ concepts_data_from_xml
10
+ taxes_data_from_xml
11
+
12
+ self
13
+ end
14
+
15
+ def translate_data
16
+ _translate_receipt(:cfdi)
17
+ _translate_issuer(:cfdi)
18
+ _translate_receiver(:cfdi)
19
+ _translate_concepts(:cfdi)
20
+ _translate_taxes(:cfdi)
21
+
22
+ self
23
+ end
24
+
25
+ private
26
+
27
+ def receipt_data_from_xml
28
+ @receipt = nokogiri_xml.at('Comprobante').to_h
29
+ end
30
+
31
+ def issuer_data_from_xml
32
+ @issuer = nokogiri_xml.at('Emisor').to_h
33
+ end
34
+
35
+ def receiver_data_from_xml
36
+ @receiver = nokogiri_xml.at('Receptor').to_h
37
+ end
38
+
39
+ def concepts_data_from_xml
40
+ nokogiri_xml.at('Conceptos').element_children.map do |e|
41
+ @concepts = e.to_h
42
+ concepts["Traslados"] = (e.at('Impuestos').css("Traslado").map{|e| e.to_h})
43
+ concepts["Retenciones"] = (e.at('Impuestos').css("Retencion").map{|e| e.to_h})
44
+ end
45
+ end
46
+
47
+ def taxes_data_from_xml
48
+ nokogiri_xml.css('Comprobante Impuestos').last.element_children.map do |e|
49
+ @taxes = nokogiri_xml.css('Comprobante Impuestos').last.to_h
50
+ taxes["Traslados"] = (e.css("Traslado").map{|e| e.to_h})
51
+ taxes["Retenciones"] = (e.css("Retencion").map{|e| e.to_h})
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ module CfdiProcessor
2
+ VERSION = "1.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cfdi_processor
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Armando Alejandre
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-06-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.6.8
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.6'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.6.8
33
+ - !ruby/object:Gem::Dependency
34
+ name: i18n
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.8'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.8.3
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.8'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.8.3
53
+ - !ruby/object:Gem::Dependency
54
+ name: bundler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 2.1.4
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 2.1.4
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 12.3.3
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 12.3.3
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '3.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: shoulda-matchers
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '4.3'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '4.3'
109
+ - !ruby/object:Gem::Dependency
110
+ name: pry
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 0.13.0
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 0.13.0
123
+ description: Extracts the information from the cfdi and converts it into a hash
124
+ email:
125
+ - armando1339@gmail.com
126
+ executables: []
127
+ extensions: []
128
+ extra_rdoc_files: []
129
+ files:
130
+ - ".coveralls.yml"
131
+ - ".gitignore"
132
+ - ".rspec"
133
+ - ".travis.yml"
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.md
138
+ - Rakefile
139
+ - bin/console
140
+ - bin/setup
141
+ - cfdi_processor.gemspec
142
+ - lib/cfdi_processor.rb
143
+ - lib/cfdi_processor/data_extractor_base.rb
144
+ - lib/cfdi_processor/i18n.rb
145
+ - lib/cfdi_processor/locale/en.yml
146
+ - lib/cfdi_processor/stamped_extractor.rb
147
+ - lib/cfdi_processor/version.rb
148
+ homepage: https://buhocontable.com/
149
+ licenses:
150
+ - MIT
151
+ metadata:
152
+ allowed_push_host: https://rubygems.org/
153
+ homepage_uri: https://buhocontable.com/
154
+ source_code_uri: https://github.com/armando1339/cfdi_processor
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubygems_version: 3.0.6
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: Extracts the information from the cfdi and converts it into a hash
174
+ test_files: []