cfdi 0.1.6 → 0.1.7
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.
- checksums.yaml +4 -4
- data/.travis.yml +6 -0
- data/Gemfile +4 -1
- data/Gemfile.lock +29 -0
- data/Rakefile +3 -1
- data/cfdi.gemspec +3 -3
- data/examples/data/certPAC.cer +0 -0
- data/examples/data/timbrado.xml +24 -0
- data/lib/cfdi.rb +3 -5
- data/lib/comprobante.rb +27 -1
- data/lib/version.rb +4 -0
- data/readme.md +1 -0
- data/test/comprobante_spec.rb +13 -6
- data/test/{entidar_spec.rb → entidad_spec.rb} +1 -1
- metadata +20 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df68b45a858a0e73411f9cf57dac1c7bdfeb26d7
|
4
|
+
data.tar.gz: 6eb6a1ee3742c074c8238703a62eec4e03f14b66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1670b91ea68a31f48699cd42c8ccef9b12d99b9b32a074ea1b75762b77b33e09431747d4a343a03fe3f399e6082691add443d3668df595128b581f4bc7cdffaf
|
7
|
+
data.tar.gz: ad25fd3211d6e49e3ac05731544ddff1067dabc67868994579b7d7199a20db1dd26b69cb90fb9800876031dae40f98b152f21441d1a08502307f95c821273f72
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
cfdi (0.1.6)
|
5
|
+
nokogiri (~> 1.5.11)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.2.5)
|
11
|
+
nokogiri (1.5.11)
|
12
|
+
rake (10.1.1)
|
13
|
+
rspec (2.14.1)
|
14
|
+
rspec-core (~> 2.14.0)
|
15
|
+
rspec-expectations (~> 2.14.0)
|
16
|
+
rspec-mocks (~> 2.14.0)
|
17
|
+
rspec-core (2.14.7)
|
18
|
+
rspec-expectations (2.14.5)
|
19
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
20
|
+
rspec-mocks (2.14.5)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
cfdi!
|
27
|
+
nokogiri (~> 1.5.11)
|
28
|
+
rake
|
29
|
+
rspec
|
data/Rakefile
CHANGED
data/cfdi.gemspec
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
|
4
|
+
|
5
|
+
require 'version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |gem|
|
7
8
|
gem.name = "cfdi"
|
@@ -20,8 +21,7 @@ Gem::Specification.new do |gem|
|
|
20
21
|
gem.require_paths = ["lib"]
|
21
22
|
gem.rdoc_options = '--no-private'
|
22
23
|
|
23
|
-
|
24
|
-
gem.add_runtime_dependency 'nokogiri'
|
24
|
+
gem.add_runtime_dependency 'nokogiri', '~>1.5.11'
|
25
25
|
gem.add_development_dependency 'rspec'
|
26
26
|
|
27
27
|
end
|
Binary file
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" version="3.2" folio="1" fecha="2014-06-10T13:39:19" formaDePago="PAGO EN UNA SOLA EXHIBICION" condicionesDePago="Sera marcada como pagada en cuanto el receptor haya cubierto el pago." subTotal="11000.00" Moneda="pesos" total="12760.00" metodoDePago="Transferencia Bancaria" tipoDeComprobante="ingreso" LugarExpedicion="Nutopia, Nutopia" noCertificado="20001000000200000293" certificado="MIIE2jCCA8KgAwIBAgIUMjAwMDEwMDAwMDAyMDAwMDAyOTMwDQYJKoZIhvcNAQEFBQAwggFcMRowGAYDVQQDDBFBLkMuIDIgZGUgcHJ1ZWJhczEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMTQwMgYJKoZIhvcNAQkCDCVSZXNwb25zYWJsZTogQXJhY2VsaSBHYW5kYXJhIEJhdXRpc3RhMB4XDTEyMTAyNjE5MjI0M1oXDTE2MTAyNjE5MjI0M1owggFTMUkwRwYDVQQDE0BBU09DSUFDSU9OIERFIEFHUklDVUxUT1JFUyBERUwgRElTVFJJVE8gREUgUklFR08gMDA0IERPTiBNQVJUSU4gMWEwXwYDVQQpE1hBU09DSUFDSU9OIERFIEFHUklDVUxUT1JFUyBERUwgRElTVFJJVE8gREUgUklFR08gMDA0IERPTiBNQVJUSU4gQ09BSFVJTEEgWSBOVUVWTyBMRU9OIEFDMUkwRwYDVQQKE0BBU09DSUFDSU9OIERFIEFHUklDVUxUT1JFUyBERUwgRElTVFJJVE8gREUgUklFR08gMDA0IERPTiBNQVJUSU4gMSUwIwYDVQQtExxBQUQ5OTA4MTRCUDcgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQFExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxETAPBgNVBAsTCFNlcnZpZG9yMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlrI9loozd+UcW7YHtqJimQjzX9wHIUcc1KZyBBB8/5fZsgZ/smWS4Sd6HnPs9GSTtnTmM4bEgx28N3ulUshaaBEtZo3tsjwkBV/yVQ3SRyMDkqBA2NEjbcum+e/MdCMHiPI1eSGHEpdESt55a0S6N24PW732Xm3ZbGgOp1tht1wIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEAuoPXe+BBIrmJn+IGeI+m97OlP3RC4Ct3amjGmZICbvhI9BTBLCL/PzQjjWBwU0MG8uK6e/gcB9f+klPiXhQTeI1YKzFtWrzctpNEJYo0KXMgvDiputKphQ324dP0nzkKUfXlRIzScJJCSgRw9ZifKWN0D9qTdkNkjk83ToPgwnldg5lzU62woXo4AKbcuabAYOVoC7owM5bfNuWJe566UzD6i5PFY15jYMzi1+ICriDItCv3S+JdqyrBrX3RloZhdyXqs2Htxfw4b1OcYboPCu4+9qM3OV02wyGKlGQMhfrXNwYyj8huxS1pHghEROM2Zs0paZUOy+6ajM+Xh0LX2w==" sello="ZU+mhhuDCnTKUJtl1uDa+6YBIXbMAIMKqjGCLaAeC/DIxuIIiwvNxmefkZtTdX2pQa3FCBAVYmv3mYABe36YwhsNsh1vaMoq/+L2sJ2Pyz17siF27XKYWc1C0qswwbm7Z3t5OSA/qnrSTgYd7O54HtRTYvyfhkeJypgrGrcqKAo=">
|
3
|
+
<cfdi:Emisor nombre="Me cago en sus estándares S.A. de C.V." rfc="XAXX010101000">
|
4
|
+
<cfdi:DomicilioFiscal calle="Calle Feliz" noExterior="42" noInterior="314" colonia="Centro" localidad="No se que sea esto, pero va" referencia="Sin Referencia" municipio="Nutopía" estado="Nutopía" pais="Nutopía" codigoPostal="31415"/>
|
5
|
+
<cfdi:ExpedidoEn calle="Calle Feliz" noExterior="42" noInterior="314" colonia="Centro" localidad="No se que sea esto, pero va" referencia="Sin Referencia" municipio="Nutopía" estado="Nutopía" pais="Nutopía" codigoPostal="31415"/>
|
6
|
+
<cfdi:RegimenFiscal Regimen="Pruebas Fiscales"/>
|
7
|
+
</cfdi:Emisor>
|
8
|
+
<cfdi:Receptor nombre="El SAT apesta S. de R.L." rfc="XAXX010101000">
|
9
|
+
<cfdi:Domicilio referencia="Sin Referencia" estado="Nutopía" pais="Nutopía"/>
|
10
|
+
</cfdi:Receptor>
|
11
|
+
<cfdi:Conceptos>
|
12
|
+
<cfdi:Concepto cantidad="2" unidad="Kilos" noIdentificacion="KDV" descripcion="Verga Ción" valorUnitario="5500.00" importe="11000.00">
|
13
|
+
<cfdi:ComplementoConcepto/>
|
14
|
+
</cfdi:Concepto>
|
15
|
+
</cfdi:Conceptos>
|
16
|
+
<cfdi:Impuestos totalImpuestosTrasladados="1760.00">
|
17
|
+
<cfdi:Traslados>
|
18
|
+
<cfdi:Traslado impuesto="IVA" tasa="16.00" importe="1760.00"/>
|
19
|
+
</cfdi:Traslados>
|
20
|
+
</cfdi:Impuestos>
|
21
|
+
<cfdi:Complemento>
|
22
|
+
<tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" UUID="7A4E280E-4069-4675-8E64-A2B46D6348E8" FechaTimbrado="2014-06-10T13:39:19" selloCFD="ZU+mhhuDCnTKUJtl1uDa+6YBIXbMAIMKqjGCLaAeC/DIxuIIiwvNxmefkZtTdX2pQa3FCBAVYmv3mYABe36YwhsNsh1vaMoq/+L2sJ2Pyz17siF27XKYWc1C0qswwbm7Z3t5OSA/qnrSTgYd7O54HtRTYvyfhkeJypgrGrcqKAo=" noCertificadoSAT="00001000000203220518" selloSAT="ByQZNqyNxIapyz0WgsRUgOmucka3vl9rz9bIvaFVNtWqTVIIFyVuRH/ptfOG15aAtqyKUY3m7eVbNVdJOzSFLzeLS3Z4lFOQwi1jGwyrYabgBabDgSEVAhtQ+kwyPUPyqKDgvCQkF4BbAPB/H2E5Xv69KJtT2pyLD3BrumNO6vE=" version="1.0" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd"/>
|
23
|
+
</cfdi:Complemento>
|
24
|
+
</cfdi:Comprobante>
|
data/lib/cfdi.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
gem 'nokogiri', '
|
2
|
+
gem 'nokogiri', '1.5.11'
|
3
3
|
|
4
|
+
require_relative 'version.rb'
|
4
5
|
require_relative 'comun.rb'
|
5
6
|
require_relative 'addenda.rb'
|
6
7
|
require_relative 'comprobante.rb'
|
@@ -15,12 +16,9 @@ require_relative 'key.rb'
|
|
15
16
|
#
|
16
17
|
# El sistema de generación y sellado de facturas es una patada en los genitales. Este gem pretende ser una bolsa de hielos. Igual va a doler, pero espero que al menos no quede moretón.
|
17
18
|
module CFDI
|
18
|
-
|
19
|
+
|
19
20
|
require 'nokogiri'
|
20
21
|
require 'time'
|
21
22
|
require 'base64'
|
22
23
|
|
23
|
-
# La versión de este gem
|
24
|
-
VERSION = '0.1.6'
|
25
|
-
|
26
24
|
end
|
data/lib/comprobante.rb
CHANGED
@@ -304,7 +304,33 @@ module CFDI
|
|
304
304
|
|
305
305
|
return "||#{params.join '|'}||"
|
306
306
|
end
|
307
|
-
|
307
|
+
|
308
|
+
|
309
|
+
# Revisa que el timbre de un comprobante sea válido
|
310
|
+
# @param [String] El certificado del PAC
|
311
|
+
#
|
312
|
+
# @return [Boolean] El resultado de la validación
|
313
|
+
def timbre_valido? cert=nil
|
314
|
+
return false unless complemento && complemento.selloSAT
|
315
|
+
|
316
|
+
unless cert
|
317
|
+
require 'open-uri'
|
318
|
+
comps = complemento.noCertificadoSAT.scan(/(\d{6})(\d{6})(\d{2})(\d{2})(\d{2})?/)
|
319
|
+
base_url = 'ftp://ftp2.sat.gob.mx/Certificados/FEA'
|
320
|
+
url = "#{base_url}/#{comps.join('/')}/#{cert}.cer"
|
321
|
+
begin
|
322
|
+
cert = open(url).read
|
323
|
+
rescue Exception => e
|
324
|
+
raise "No pude descargar el certificado <#{url}>: #{e}"
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
cert = OpenSSL::X509::Certificate.new cert
|
329
|
+
selloBytes = Base64::decode64(complemento.selloSAT)
|
330
|
+
cert.public_key.verify(OpenSSL::Digest::SHA1.new, selloBytes, complemento.cadena)
|
331
|
+
end
|
332
|
+
|
333
|
+
|
308
334
|
# @private
|
309
335
|
def self.rmerge defaults, other_hash
|
310
336
|
result = defaults.merge(other_hash) do |key, oldval, newval|
|
data/lib/version.rb
ADDED
data/readme.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# CFDI para principiantes en CFDI
|
2
|
+
[](https://travis-ci.org/unRob/CFDI)
|
2
3
|
|
3
4
|
El sistema de generación y sellado de facturas es una patada en los genitales. Este gem pretende ser una bolsa de hielos. Igual va a doler, pero espero que al menos no quede moretón.
|
4
5
|
|
data/test/comprobante_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require_relative '../lib/cfdi.rb'
|
2
3
|
|
3
4
|
describe CFDI::Comprobante do
|
@@ -29,29 +30,35 @@ describe CFDI::Comprobante do
|
|
29
30
|
:cancelada=>nil,
|
30
31
|
:impuestos=>[]
|
31
32
|
}
|
32
|
-
comprobante.to_h.
|
33
|
+
expect(comprobante.to_h).to be_eql(defaults)
|
33
34
|
end
|
34
35
|
|
35
36
|
it "debe de poder settear defaults" do
|
36
|
-
|
37
|
+
CFDI::Comprobante.configure({defaults: {version: '2.0'}})
|
37
38
|
comprobante = CFDI::Comprobante.new
|
38
|
-
comprobante.version.
|
39
|
+
expect(comprobante.version).to eq '2.0'
|
39
40
|
end
|
40
41
|
|
41
42
|
it "debe de generar un comprobante desde XML" do
|
42
43
|
comprobante = CFDI.from_xml(File.read('./examples/data/cfdi.xml'))
|
43
44
|
returns = {:version=>"3.2", :fecha=>"2013-10-15T01:33:32", :tipoDeComprobante=>"ingreso", :formaDePago=>"PAGO EN UNA SOLA EXHIBICION", :condicionesDePago=>"Sera marcada como pagada en cuanto el receptor haya cubierto el pago.", :subTotal=>11000.0, :TipoCambio=>1, :moneda=>"pesos", :total=>12760.0, :metodoDePago=>"Transferencia Bancaria", :lugarExpedicion=>"Nutopia, Nutopia", :NumCtaPago=>nil, :emisor=>{:rfc=>"XAXX010101000", :nombre=>"Me cago en sus estándares S.A. de C.V.", :domicilioFiscal=>{:calle=>"Calle Feliz", :noExterior=>"42", :noInterior=>"314", :colonia=>"Centro", :localidad=>"No se que sea esto, pero va", :referencia=>"Sin Referencia", :municipio=>"Nutopía", :estado=>"Nutopía", :pais=>"Nutopía", :codigoPostal=>"31415"}, :expedidoEn=>{:calle=>"Calle Feliz", :noExterior=>"42", :noInterior=>nil, :colonia=>"Centro", :localidad=>"No se que sea esto, pero va", :referencia=>"Sin Referencia", :municipio=>"Nutopía", :estado=>"Nutopía", :pais=>"Nutopía", :codigoPostal=>"31415"}, :regimenFiscal=>"Pruebas Fiscales"}, :receptor=>{:rfc=>"XAXX010101000", :nombre=>"El SAT apesta S. de R.L.", :domicilioFiscal=>{:calle=>nil, :noExterior=>nil, :noInterior=>nil, :colonia=>nil, :localidad=>nil, :referencia=>"Sin Referencia", :municipio=>nil, :estado=>"Nutopía", :pais=>"Nutopía", :codigoPostal=>nil}, :expedidoEn=>nil, :regimenFiscal=>nil}, :conceptos=>[{:cantidad=>2, :unidad=>"Kilos", :noIdentificacion=>"KDV", :descripcion=>"Verga Ción", :valorUnitario=>5500.0, :importe=>11000.0}], :serie=>nil, :folio=>"1", :sello=>"igFu7Q9Z98n6xFSLMv7a2y8ZlJCO+pgTX3xDAUt5xSpX3dHOKXkTHBAf4P/oHHDm3xkYkaNBfPEzpVFDrRVjL2rvkR5T9rsFqb4cl6DOo4RrRIpSR9vojLp7mFWiON9H6OFPi2b9PVAnyIx1Skb5iGIAmSQIhVYyt2DSauObY2c=", :noCertificado=>"20001000000200000293", :certificado=>"MIIE2jCCA8KgAwIBAgIUMjAwMDEwMDAwMDAyMDAwMDAyOTMwDQYJKoZIhvcNAQEFBQAwggFcMRowGAYDVQQDDBFBLkMuIDIgZGUgcHJ1ZWJhczEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMTQwMgYJKoZIhvcNAQkCDCVSZXNwb25zYWJsZTogQXJhY2VsaSBHYW5kYXJhIEJhdXRpc3RhMB4XDTEyMTAyNjE5MjI0M1oXDTE2MTAyNjE5MjI0M1owggFTMUkwRwYDVQQDE0BBU09DSUFDSU9OIERFIEFHUklDVUxUT1JFUyBERUwgRElTVFJJVE8gREUgUklFR08gMDA0IERPTiBNQVJUSU4gMWEwXwYDVQQpE1hBU09DSUFDSU9OIERFIEFHUklDVUxUT1JFUyBERUwgRElTVFJJVE8gREUgUklFR08gMDA0IERPTiBNQVJUSU4gQ09BSFVJTEEgWSBOVUVWTyBMRU9OIEFDMUkwRwYDVQQKE0BBU09DSUFDSU9OIERFIEFHUklDVUxUT1JFUyBERUwgRElTVFJJVE8gREUgUklFR08gMDA0IERPTiBNQVJUSU4gMSUwIwYDVQQtExxBQUQ5OTA4MTRCUDcgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQFExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxETAPBgNVBAsTCFNlcnZpZG9yMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlrI9loozd+UcW7YHtqJimQjzX9wHIUcc1KZyBBB8/5fZsgZ/smWS4Sd6HnPs9GSTtnTmM4bEgx28N3ulUshaaBEtZo3tsjwkBV/yVQ3SRyMDkqBA2NEjbcum+e/MdCMHiPI1eSGHEpdESt55a0S6N24PW732Xm3ZbGgOp1tht1wIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEAuoPXe+BBIrmJn+IGeI+m97OlP3RC4Ct3amjGmZICbvhI9BTBLCL/PzQjjWBwU0MG8uK6e/gcB9f+klPiXhQTeI1YKzFtWrzctpNEJYo0KXMgvDiputKphQ324dP0nzkKUfXlRIzScJJCSgRw9ZifKWN0D9qTdkNkjk83ToPgwnldg5lzU62woXo4AKbcuabAYOVoC7owM5bfNuWJe566UzD6i5PFY15jYMzi1+ICriDItCv3S+JdqyrBrX3RloZhdyXqs2Htxfw4b1OcYboPCu4+9qM3OV02wyGKlGQMhfrXNwYyj8huxS1pHghEROM2Zs0paZUOy+6ajM+Xh0LX2w==", :complemento=>nil, :cancelada=>nil, :impuestos=>[{:impuesto=>"IVA"}]}
|
44
|
-
comprobante.to_h.
|
45
|
+
expect(comprobante.to_h).to eq returns
|
45
46
|
end
|
46
47
|
|
47
48
|
it "no debe de generar atributos vacios" do
|
48
49
|
comprobante = CFDI.from_xml(File.read('./examples/data/cfdi.xml'))
|
49
50
|
#el comprobante de XML no tiene numero de cuenta de pago
|
50
|
-
comprobante.to_xml.
|
51
|
+
expect(comprobante.to_xml).not_to match(/NumCtaPago/)
|
51
52
|
|
52
53
|
#si quitamos referencia
|
53
54
|
comprobante.emisor.domicilioFiscal.referencia = nil
|
54
|
-
comprobante.to_xml.
|
55
|
+
expect(comprobante.to_xml).not_to match(/DomicilioFiscal.+referencia/)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "debe validar un Timbre Fiscal Digital" do
|
59
|
+
comprobante = CFDI.from_xml(File.read('./examples/data/timbrado.xml'))
|
60
|
+
cert = File.read('./examples/data/certPAC.cer')
|
61
|
+
expect(comprobante.timbre_valido? cert).to be false
|
55
62
|
end
|
56
63
|
|
57
64
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfdi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Hidalgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.5.11
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.5.11
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: Comprobantes fiscales digitales por internet
|
@@ -45,8 +45,10 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
- .gitignore
|
48
|
+
- ".gitignore"
|
49
|
+
- ".travis.yml"
|
49
50
|
- Gemfile
|
51
|
+
- Gemfile.lock
|
50
52
|
- LICENSE.txt
|
51
53
|
- Rakefile
|
52
54
|
- cfdi.gemspec
|
@@ -75,7 +77,9 @@ files:
|
|
75
77
|
- doc/top-level-namespace.html
|
76
78
|
- examples/crear_factura.rb
|
77
79
|
- examples/data/_empty
|
80
|
+
- examples/data/certPAC.cer
|
78
81
|
- examples/data/cfdi.xml
|
82
|
+
- examples/data/timbrado.xml
|
79
83
|
- examples/desde_xml.rb
|
80
84
|
- lib/addenda.rb
|
81
85
|
- lib/certificado.rb
|
@@ -86,10 +90,11 @@ files:
|
|
86
90
|
- lib/concepto.rb
|
87
91
|
- lib/entidad.rb
|
88
92
|
- lib/key.rb
|
93
|
+
- lib/version.rb
|
89
94
|
- lib/xml.rb
|
90
95
|
- readme.md
|
91
96
|
- test/comprobante_spec.rb
|
92
|
-
- test/
|
97
|
+
- test/entidad_spec.rb
|
93
98
|
homepage: https://github.com/unRob/cfdi
|
94
99
|
licenses:
|
95
100
|
- WTFPL
|
@@ -97,26 +102,25 @@ licenses:
|
|
97
102
|
metadata: {}
|
98
103
|
post_install_message:
|
99
104
|
rdoc_options:
|
100
|
-
- --no-private
|
105
|
+
- "--no-private"
|
101
106
|
require_paths:
|
102
107
|
- lib
|
103
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
109
|
requirements:
|
105
|
-
- -
|
110
|
+
- - ">="
|
106
111
|
- !ruby/object:Gem::Version
|
107
112
|
version: '0'
|
108
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
114
|
requirements:
|
110
|
-
- -
|
115
|
+
- - ">="
|
111
116
|
- !ruby/object:Gem::Version
|
112
117
|
version: '0'
|
113
118
|
requirements: []
|
114
119
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.
|
120
|
+
rubygems_version: 2.2.2
|
116
121
|
signing_key:
|
117
122
|
specification_version: 4
|
118
123
|
summary: Digitales!! por Internet!!
|
119
124
|
test_files:
|
120
125
|
- test/comprobante_spec.rb
|
121
|
-
- test/
|
122
|
-
has_rdoc: true
|
126
|
+
- test/entidad_spec.rb
|