interfactura-ruby 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +54 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +73 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +78 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/interfactura-ruby.gemspec +32 -0
  13. data/lib/.DS_Store +0 -0
  14. data/lib/interfactura/.DS_Store +0 -0
  15. data/lib/interfactura/parser/addenda.rb +13 -0
  16. data/lib/interfactura/parser/complemento.rb +12 -0
  17. data/lib/interfactura/parser/comprobante.rb +32 -0
  18. data/lib/interfactura/parser/concepto.rb +14 -0
  19. data/lib/interfactura/parser/conceptos.rb +12 -0
  20. data/lib/interfactura/parser/domicilio.rb +17 -0
  21. data/lib/interfactura/parser/domicilio_fiscal.rb +19 -0
  22. data/lib/interfactura/parser/emisor.rb +17 -0
  23. data/lib/interfactura/parser/factura_interfactura.rb +77 -0
  24. data/lib/interfactura/parser/impuestos.rb +14 -0
  25. data/lib/interfactura/parser/receptor.rb +15 -0
  26. data/lib/interfactura/parser/regimen_fiscal.rb +10 -0
  27. data/lib/interfactura/parser/resultado.rb +22 -0
  28. data/lib/interfactura/parser/timbre_fiscal_digital.rb +15 -0
  29. data/lib/interfactura/parser/traslado.rb +12 -0
  30. data/lib/interfactura/parser/traslados.rb +12 -0
  31. data/lib/interfactura/ruby.rb +6 -0
  32. data/lib/interfactura/ruby/.DS_Store +0 -0
  33. data/lib/interfactura/ruby/client.rb +25 -0
  34. data/lib/interfactura/ruby/invoice.rb +44 -0
  35. data/lib/interfactura/ruby/response.rb +14 -0
  36. data/lib/interfactura/ruby/templates/message_template.xml.erb +10 -0
  37. data/lib/interfactura/ruby/templates/output_sample.xml +32 -0
  38. data/lib/interfactura/ruby/templates/sample.xml +1 -0
  39. data/lib/interfactura/ruby/version.rb +5 -0
  40. metadata +168 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b17a71f2abaf7f29373e099e2f617f8d3c76b0fd
4
+ data.tar.gz: d6c9853a54f3b280850da08d33b770a75490048c
5
+ SHA512:
6
+ metadata.gz: e1e61d571910f8fd512915d841806ced6e51aacc7ad86c44f2ae72c6bfcbb5d277340d3de0d9ef5aa01bbf217ac65573f12e7ad3ed66c1bba63c26b55880d965
7
+ data.tar.gz: 10e2b2cb4348ab8557e08046f373957611188302d9518deb1e2c0249807f32631ce4b149393f3f534a71d824bf7c5d760939bedd2138586be4a653f0fafc1f22
Binary file
@@ -0,0 +1,54 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ # Gemfile.lock
46
+ # .ruby-version
47
+ # .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
51
+
52
+ # Emacs backups
53
+ .#*
54
+ .\#*
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at TODO: Write your email address. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in interfactura-ruby.gemspec
4
+ gemspec
@@ -0,0 +1,73 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ interfactura-ruby (0.1.0)
5
+ nokogiri-happymapper (~> 0.5)
6
+ pry (~> 0.10)
7
+ savon (~> 2.11.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ akami (1.3.1)
13
+ gyoku (>= 0.4.0)
14
+ nokogiri
15
+ builder (3.2.2)
16
+ coderay (1.1.1)
17
+ diff-lcs (1.2.5)
18
+ gyoku (1.3.1)
19
+ builder (>= 2.1.2)
20
+ httpi (2.4.2)
21
+ rack
22
+ socksify
23
+ method_source (0.8.2)
24
+ mini_portile2 (2.1.0)
25
+ nokogiri (1.7.0.1)
26
+ mini_portile2 (~> 2.1.0)
27
+ nokogiri-happymapper (0.5.9)
28
+ nokogiri (~> 1.5)
29
+ nori (2.6.0)
30
+ pry (0.10.4)
31
+ coderay (~> 1.1.0)
32
+ method_source (~> 0.8.1)
33
+ slop (~> 3.4)
34
+ rack (2.0.1)
35
+ rake (10.5.0)
36
+ rspec (3.5.0)
37
+ rspec-core (~> 3.5.0)
38
+ rspec-expectations (~> 3.5.0)
39
+ rspec-mocks (~> 3.5.0)
40
+ rspec-core (3.5.4)
41
+ rspec-support (~> 3.5.0)
42
+ rspec-expectations (3.5.0)
43
+ diff-lcs (>= 1.2.0, < 2.0)
44
+ rspec-support (~> 3.5.0)
45
+ rspec-mocks (3.5.0)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.5.0)
48
+ rspec-support (3.5.0)
49
+ savon (2.11.1)
50
+ akami (~> 1.2)
51
+ builder (>= 2.1.2)
52
+ gyoku (~> 1.2)
53
+ httpi (~> 2.3)
54
+ nokogiri (>= 1.4.0)
55
+ nori (~> 2.4)
56
+ wasabi (~> 3.4)
57
+ slop (3.6.0)
58
+ socksify (1.7.0)
59
+ wasabi (3.5.0)
60
+ httpi (~> 2.0)
61
+ nokogiri (>= 1.4.2)
62
+
63
+ PLATFORMS
64
+ ruby
65
+
66
+ DEPENDENCIES
67
+ bundler (~> 1.13)
68
+ interfactura-ruby!
69
+ rake (~> 10.0)
70
+ rspec (~> 3.0)
71
+
72
+ BUNDLED WITH
73
+ 1.13.7
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 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,78 @@
1
+ # Interfactura::Ruby
2
+
3
+ Interfactura Ruby is a small SDK written in Ruby to interact with the [Interfactura](https://www.interfactura.com) web services.
4
+
5
+ ## Table of contents
6
+
7
+ - [Installation instructions](#installation-instructions)
8
+ - [Usage](#usage)
9
+ - [Development](#development)
10
+ - [Contributing](#contributing)
11
+ - [License](#license)
12
+
13
+ ## Installation instructions
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'interfactura-ruby'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ ```console
24
+ $ bundle
25
+ ```
26
+
27
+ Or install it yourself as:
28
+
29
+ ```console
30
+ $ gem install interfactura-ruby
31
+ ```
32
+
33
+ ## Usage
34
+
35
+ We currently only support one operation from the web services, which is the invoice generation, an example on how to run this would be:
36
+
37
+ ```ruby
38
+
39
+ # We first create the client
40
+ client = Interfactura::Ruby::Client.new(wsdl: "https://pruebas2.interfactura.com/OnLiveIFWebService/OnLiveIFWebService.asmx?WSDL", ssl_cert_file: "/certs/certificate.pem", ssl_cert_key_file: "/certs/key.pem")
41
+
42
+ # Then we create an invoice object
43
+ invoice = Interfactura::Ruby::Invoice.new({
44
+ id: "fake_id_1234",
45
+ total: 123.50,
46
+ rfc: "AAAA881217TT1",
47
+ name: "Nachito",
48
+ phone: "1111111111",
49
+ email: "example@example.com",
50
+ city: "Mexico City",
51
+ municipality: "Monterrey",
52
+ street: "Foo",
53
+ number: "1234",
54
+ zipcode: "64770",
55
+ state: "NL",
56
+ colony: "foo bar"
57
+ })
58
+
59
+ # And then we sign it through Interfactura
60
+
61
+ client.generate_document(invoice)
62
+ ```
63
+
64
+ ## Development
65
+
66
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
67
+
68
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
69
+
70
+ ## Contributing
71
+
72
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/interfactura-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
73
+
74
+
75
+ ## License
76
+
77
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
78
+
@@ -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 "interfactura/ruby"
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
@@ -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,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'interfactura/ruby/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "interfactura-ruby"
8
+ spec.version = Interfactura::Ruby::VERSION
9
+ spec.authors = ["Icalia Labs"]
10
+ spec.email = ["weare@icalialabs.com"]
11
+
12
+ spec.summary = %q{ A Ruby SDK to connect to Interfactura Web Services }
13
+ spec.description = %q{ A Ruby SDK to interact with the Interfactura Web Services }
14
+ spec.homepage = "https://github.com/IcaliaLabs/interfactura-ruby"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+
21
+ spec.bindir = "bin"
22
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_dependency "nokogiri-happymapper", "~> 0.5"
26
+ spec.add_dependency "savon", "~> 2.11"
27
+ spec.add_dependency "pry", "~> 0.10"
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.13"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ spec.add_development_dependency "rspec", "~> 3.0"
32
+ end
Binary file
@@ -0,0 +1,13 @@
1
+ require 'interfactura/parser/factura_interfactura'
2
+
3
+ module Interfactura
4
+ module Parser
5
+ class Addenda
6
+ include HappyMapper
7
+
8
+ tag "cfdi:Addenda"
9
+
10
+ element "factura_interfactura", Interfactura::Parser::FacturaInterfactura, tag: "if:FacturaInterfactura"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require 'interfactura/parser/timbre_fiscal_digital'
2
+
3
+ module Interfactura
4
+ module Parser
5
+ class Complemento
6
+ include HappyMapper
7
+
8
+ tag "cfdi:Complemento"
9
+ element "timbre_fiscal_digital", Interfactura::Parser::TimbreFiscalDigital, tag: "tfd:TimbreFiscalDigital"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,32 @@
1
+ require 'interfactura/parser/emisor'
2
+ require 'interfactura/parser/receptor'
3
+ require 'interfactura/parser/conceptos'
4
+ require 'interfactura/parser/impuestos'
5
+ require 'interfactura/parser/complemento'
6
+ require 'interfactura/parser/addenda'
7
+
8
+ module Interfactura
9
+ module Parser
10
+ class Comprobante
11
+ include HappyMapper
12
+
13
+ tag 'cfdi:Comprobante'
14
+ attribute "forma_de_pago", String, tag: "formaDePago"
15
+ attribute "condiciones_de_pago", String, tag: "condicionesDePago"
16
+ attribute "sub_total", String, tag: "subTotal"
17
+ attribute "tipo_cambio", String, tag: "TipoCambio"
18
+ attribute "moneda", String, tag: "Moneda"
19
+ attribute "total", String
20
+ attribute "tipo_de_comprobante", String, tag: "tipoDeComprobante"
21
+ attribute "metodo_de_pago", String, tag: "metodoDePago"
22
+ attribute "lugar_expedicion", String, tag: "LugarExpedicion"
23
+
24
+ element "emisor", Interfactura::Parser::Emisor, tag: "cfdi:Emisor"
25
+ element "receptor", Interfactura::Parser::Receptor, tag: "cfdi:Receptor"
26
+ element "conceptos", Interfactura::Parser::Conceptos, tag: "cfdi:Conceptos"
27
+ element "impuestos", Interfactura::Parser::Impuestos, tag: "cfdi:Impuestos"
28
+ element "complemento", Interfactura::Parser::Complemento, tag: "cfdi:Complemento"
29
+ element "addenda", Interfactura::Parser::Addenda, tag: "cfdi:Addenda"
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,14 @@
1
+ module Interfactura
2
+ module Parser
3
+ class Concepto
4
+ include HappyMapper
5
+
6
+ tag "cfdi:Concepto"
7
+ attribute "cantidad", String
8
+ attribute "unidad", String
9
+ attribute "descripcion", String
10
+ attribute "valor_unitario", String, tag: "valorUnitario"
11
+ attribute "importe", String
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ require 'interfactura/parser/concepto'
2
+
3
+ module Interfactura
4
+ module Parser
5
+ class Conceptos
6
+ include HappyMapper
7
+
8
+ tag "cfdi:Conceptos"
9
+ element "concepto", Interfactura::Parser::Concepto, single: false, tag: "cfdi:Concepto"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ module Interfactura
2
+ module Parser
3
+ class Domicilio
4
+ include HappyMapper
5
+
6
+ tag "cfdi:Domicilio"
7
+ attribute "calle", String
8
+ attribute "no_exterior", String, tag: "noExterior"
9
+ attribute "colonia", String
10
+ attribute "localidad", String
11
+ attribute "municipio", String
12
+ attribute "estado", String
13
+ attribute "pais", String
14
+ attribute "codigo_postal", String, tag: "codigoPostal"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module Interfactura
2
+ module Parser
3
+ class DomicilioFiscal
4
+ include HappyMapper
5
+
6
+ tag "cfdi:DomicilioFiscal"
7
+ attribute "calle", String
8
+ attribute "no_exterior", String, tag: "noExterior"
9
+ attribute "no_interior", String, tag: "noInterior"
10
+ attribute "colonia", String
11
+ attribute "localidad", String
12
+ attribute "referencia", String
13
+ attribute "municipio", String
14
+ attribute "estado", String
15
+ attribute "pais", String
16
+ attribute "codigo_postal", String, tag: "codigoPostal"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ require 'interfactura/parser/domicilio_fiscal'
2
+ require 'interfactura/parser/regimen_fiscal'
3
+
4
+ module Interfactura
5
+ module Parser
6
+ class Emisor
7
+ include HappyMapper
8
+
9
+ tag "cfdi:Emisor"
10
+ attribute "rfc", String
11
+ attribute "nombre", String
12
+
13
+ element "domicilio_fiscal", Interfactura::Parser::DomicilioFiscal, tag: "cfdi:DomicilioFiscal"
14
+ element "regimen_fiscal", Interfactura::Parser::RegimenFiscal, tag: "cfdi:RegimenFiscal"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,77 @@
1
+ module Interfactura
2
+ module Parser
3
+ class FacturaInterfacturaEmisor
4
+ include HappyMapper
5
+
6
+ tag "if:Emisor"
7
+ attribute "ri", String, tag: "RI"
8
+ end
9
+
10
+ class FacturaInterfacturaReceptor
11
+ include HappyMapper
12
+
13
+ tag "if:Receptor"
14
+ attribute "ri", String, tag: "RI"
15
+ attribute "activo", String, tag: "Activo"
16
+ end
17
+
18
+ class FacturaInterfacturaEncabezado
19
+ include HappyMapper
20
+
21
+ tag "if:Encabezado"
22
+ attribute "id_interno", String, tag: "IdInterno"
23
+ attribute "template_id", String, tag: "TemplateId"
24
+ attribute "folio", String, tag: "Folio"
25
+ attribute "folio_serie", String, tag: "FolioSerie"
26
+ attribute "serie_folio", String, tag: "SerieFolio"
27
+ attribute "serie", String, tag: "Serie"
28
+ attribute "uuid", String, tag: "UUID"
29
+ attribute "sub_total", String, tag: "SubTotal"
30
+ attribute "iva", String, tag: "Iva"
31
+ attribute "total", String, tag: "Total"
32
+ attribute "observaciones", String, tag: "Observaciones"
33
+ attribute "ivapct", String, tag: "IVAPCT"
34
+ attribute "moneda", String, tag: "Moneda"
35
+ attribute "lugar_expedicion", String, tag: "LugarExpedicion"
36
+ attribute "tipo_cambio", String, tag: "TipoCambio"
37
+ attribute "tipo_documento", String, tag: "tipo_documento"
38
+ attribute "metodo_de_pago", String, tag: "metodoDePago"
39
+ attribute "tipo_documento", String, tag: "totalImpuestosTrasladados"
40
+ attribute "forma_de_pago", String, tag: "formaDePago"
41
+ attribute "folio_referencia", String, tag: "FolioReferencia"
42
+ attribute "regimen_fiscal_emisor", String, tag: "RegimenFiscalEmisor"
43
+ attribute "email_tracking", String, tag: "EmailTracking"
44
+ attribute "fecha", String, tag: "Fecha"
45
+ attribute "cadena_original", String, tag: "cadenaOriginal"
46
+ attribute "cadena_original_timbre", String, tag: "cadenaOriginalTimbre"
47
+ attribute "cadena_original_emisor", String, tag: "cadenaOriginalEmisor"
48
+ attribute "import_con_letra", String, tag: "importeConLetra"
49
+ end
50
+
51
+ class FacturaInterfacturaCuerpo
52
+ include HappyMapper
53
+
54
+ tag "if:Cuerpo"
55
+ attribute "renglon", String, tag: "Renglon"
56
+ attribute "cantidad", String, tag: "Cantidad"
57
+ attribute "concepto", String, tag: "Concepto"
58
+ attribute "p_unitario", String, tag: "PUnitario"
59
+ attribute "importe", String, tag: "Importe"
60
+ attribute "um", String, tag: "UM"
61
+ end
62
+
63
+ class FacturaInterfactura
64
+ include HappyMapper
65
+
66
+ tag "if:FacturaInterfactura"
67
+ attribute "tido_documento_id", String, tag: "TipoDocumentoId"
68
+ attribute "tipo_documento", String, tag: "TipoDocumento"
69
+ attribute "id", String, tag: "Id"
70
+
71
+ element "emisor", FacturaInterfacturaEmisor, tag: "if:Emisor"
72
+ element "receptor", FacturaInterfacturaReceptor, tag: "if:Receptor"
73
+ element "encabezado", FacturaInterfacturaEncabezado, tag: "if:Encabezado"
74
+ element "cuerpo", FacturaInterfacturaCuerpo, tag: "if:Cuerpo"
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,14 @@
1
+ require 'interfactura/parser/traslados'
2
+
3
+ module Interfactura
4
+ module Parser
5
+ class Impuestos
6
+ include HappyMapper
7
+
8
+ tag "cfdi:Impuestos"
9
+ attribute "total_impuestos_trasladados", String, tag: "totalImpuestosTrasladados"
10
+
11
+ element "traslados", Interfactura::Parser::Traslados, tag: "cfdi:Traslados"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ require 'interfactura/parser/domicilio'
2
+
3
+ module Interfactura
4
+ module Parser
5
+ class Receptor
6
+ include HappyMapper
7
+
8
+ tag "cfdi:Receptor"
9
+ attribute "rfc", String
10
+ attribute "nombre", String
11
+
12
+ element "domicilio", Interfactura::Parser::Domicilio, tag: "cfdi:Domicilio"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module Interfactura
2
+ module Parser
3
+ class RegimenFiscal
4
+ include HappyMapper
5
+
6
+ tag "cfdi:RegimenFiscal"
7
+ attribute "regimen", String, tag: "Regimen"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ require 'interfactura/parser/comprobante'
2
+
3
+ module Interfactura
4
+ module Parser
5
+ class Resultado
6
+ include HappyMapper
7
+
8
+ tag 'Resultado'
9
+ attribute "estado", String, tag: "Estado"
10
+ attribute "detalle", String, tag: "Detalle"
11
+
12
+ attribute "description", String, tag: "Descripcion"
13
+
14
+ element "comprobante", Interfactura::Parser::Comprobante, tag: "cfdi:Comprobante"
15
+ element "pdf", String, tag: "PDF"
16
+
17
+ def success?
18
+ estado == "OK" && detalle == "OK"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ module Interfactura
2
+ module Parser
3
+ class TimbreFiscalDigital
4
+ include HappyMapper
5
+
6
+ tag "tfd:TimbreFiscalDigital"
7
+ attribute "version", String
8
+ attribute "uuid", String, tag: "UUID"
9
+ attribute "fecha_timbrado", String, tag: "FechaTimbrado"
10
+ attribute "sello_cfd", String, tag: "selloCFD"
11
+ attribute "sello_sat", String, tag: "selloSAT"
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,12 @@
1
+ module Interfactura
2
+ module Parser
3
+ class Traslado
4
+ include HappyMapper
5
+
6
+ tag "cfdi:Traslado"
7
+ attribute "impuesto", String
8
+ attribute "tasa", String
9
+ attribute "importe", String
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'interfactura/parser/traslado'
2
+
3
+ module Interfactura
4
+ module Parser
5
+ class Traslados
6
+ include HappyMapper
7
+
8
+ tag "cfdi:Traslados"
9
+ element "traslado", Interfactura::Parser::Traslado, single: false, tag: "cfdi:Traslado"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ require "erb"
2
+ require "happymapper"
3
+ require "interfactura/ruby/version"
4
+ require "interfactura/ruby/invoice"
5
+ require "interfactura/ruby/client"
6
+ require "interfactura/parser/resultado"
@@ -0,0 +1,25 @@
1
+ # encoding: UT-8
2
+
3
+ require "savon"
4
+
5
+ module Interfactura
6
+ module Ruby
7
+ class Client
8
+ attr_reader :soap
9
+
10
+ def initialize(options = {})
11
+ @soap = Savon.client(options[:wsdl]) do
12
+ wsse_signature Akami::WSSE::Signature.new(Akami::WSSE::Certs.new(cert_string: options[:ssl_cert_string], private_key_string: options[:ssl_cert_key_string]))
13
+ end
14
+ end
15
+
16
+ def generate_document(invoice)
17
+ response = @soap.call(:generar_documento, message: { sourceXmlDoc: invoice.to_xml, IsConsulta: true })
18
+ result = response.body[:generar_documento_response][:generar_documento_result]
19
+ puts "#{result}"
20
+ Interfactura::Parser::Resultado.parse(result)
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,44 @@
1
+ module Interfactura
2
+ module Ruby
3
+ class Invoice
4
+ attr_accessor :total, :rfc, :name, :phone, :email,
5
+ :city, :municipality, :street, :number,
6
+ :zipcode, :state, :id, :colony
7
+
8
+ IVA = 0.16
9
+
10
+ def initialize(attributes = {})
11
+ @id = attributes[:id]
12
+ @total = attributes[:total]
13
+ @zipcode = attributes[:zipcode]
14
+ @state = attributes[:state]
15
+ @colony = attributes[:colony]
16
+ @rfc = attributes[:rfc]
17
+ @name = attributes[:name]
18
+ @phone = attributes[:phone]
19
+ @email = attributes[:email]
20
+ @city = attributes[:city]
21
+ @municipality = attributes[:municipality]
22
+ @street = attributes[:street]
23
+ @number = attributes[:number]
24
+ end
25
+
26
+ def subtotal
27
+ (total / 1.16).ceil(2)
28
+ end
29
+
30
+ def iva
31
+ (total - subtotal).ceil(2)
32
+ end
33
+
34
+ def to_xml
35
+ path = "#{File.dirname(__FILE__)}/templates/message_template.xml.erb"
36
+ ERB.new(File.read(path), nil, '-').result(self.get_binding)
37
+ end
38
+
39
+ def get_binding
40
+ binding()
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,14 @@
1
+ module Interfactura
2
+ module Ruby
3
+ class Response
4
+ include HappyMapper
5
+
6
+ tag ''
7
+ element :street, String, :tag => 'street'
8
+ element :postcode, String, :tag => 'postcode'
9
+ element :housenumber, Integer, :tag => 'housenumber'
10
+ element :city, String, :tag => 'city'
11
+ element :country, String, :tag => 'country'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ <?xml version='1.0' encoding='UTF-8'?>
2
+ <FacturaInterfactura>
3
+ <Encabezado Moneda='MXN' TipoCambio='1' Total='<%= total %>' Observaciones='ninguna' SubTotal='<%= subtotal %>' IVAPCT='16' Iva='<%= iva %>' TipoDocumento='Factura' CondicionPago='' formaDePago='PAGO EN UNA SOLA EXHIBICION' FolioReferencia='<%= id %>' metodoDePago='tarjeta de debito/credito' RegimenFiscalEmisor='persona moral'>
4
+ <Cuerpo Renglon='1' Cantidad='1' Concepto='Traduccion' PUnitario='<%= total %>' Importe='<%= total %>' UM='UN'/>
5
+ </Encabezado>
6
+ <Emisor RI='0113086'/>
7
+ <Receptor RFC='<%= rfc %>' nombre='<%= name %>' Telefono='<%= phone %>' Email='<%= email %>'>
8
+ <Domicilio calle='<%= street %>' noExterior='<%= number %>' colonia='<%= colony %>' localidad='<%= city %>' municipio='<%= municipality %>' estado='<%= state %>' pais='MX' codigoPostal='<%= zipcode %>'/>
9
+ </Receptor>
10
+ </FacturaInterfactura>
@@ -0,0 +1,32 @@
1
+ <Resultado Estado="OK" Detalle="OK">
2
+ <cfdi:Comprobante xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" version="3.2" serie="CFDI " folio="4" fecha="2017-01-10T13:14:59" sello="pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=" formaDePago="PAGO EN UNA SOLA EXHIBICION" noCertificado="20001000000100005867" certificado="MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMjA3MjcxNzAyMDBaFw0xNjA3MjcxNzAyMDBaMIHbMSkwJwYDVQQDEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcGA1UEKRMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxKTAnBgNVBAoTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFNDMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQFExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxETAPBgNVBAsTCFVuaWRhZCAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2TTQSPONBOVxpXv9wLYo8jezBrb34i/tLx8jGdtyy27BcesOav2c1NS/Gdv10u9SkWtwdy34uRAVe7H0a3VMRLHAkvp2qMCHaZc4T8k47Jtb9wrOEh/XFS8LgT4y5OQYo6civfXXdlvxWU/gdM/e6I2lg6FGorP8H4GPAJ/qCNwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEATxMecTpMbdhSHo6KVUg4QVF4Op2IBhiMaOrtrXBdJgzGotUFcJgdBCMjtTZXSlq1S4DG1jr8p4NzQlzxsdTxaB8nSKJ4KEMgIT7E62xRUj15jI49qFz7f2uMttZLNThipunsN/NF1XtvESMTDwQFvas/Ugig6qwEfSZc0MDxMpKLEkEePmQwtZD+zXFSMVa6hmOu4M+FzGiRXbj4YJXn9Myjd8xbL/c+9UIcrYoZskxDvMxc6/6M3rNNDY3OFhBK+V/sPMzWWGt8S1yjmtPfXgFs1t65AZ2hcTwTAuHrKwDatJ1ZPfa482ZBROAAX1waz7WwXp0gso7sDCm2/yUVww==" condicionesDePago="Vencimiento 90 días" subTotal="900.00" TipoCambio="1" Moneda="MXN" total="1028" tipoDeComprobante="ingreso" metodoDePago="efectivo" LugarExpedicion="SAN PEDRO GARZA GARCÍA, NUEVO LEÓN">
3
+ <cfdi:Emisor rfc="PPE0902134I7" nombre="PARTNER PROYECTOS ESTRATÉGICOS SA DE CV.">
4
+ <cfdi:DomicilioFiscal calle="RÍO DE LA PLATA" noExterior="309 Ote" noInterior="Piso 3" colonia="COLONIA DEL VALLE" localidad="SAN PEDRO GARZA GARCÍA" referencia="011308699" municipio="SAN PEDRO GARZA GARCÍA" estado="NUEVO LEÓN" pais="México" codigoPostal="66220"/>
5
+ <cfdi:RegimenFiscal Regimen="persona moral"/>
6
+ </cfdi:Emisor>
7
+ <cfdi:Receptor rfc="SAD560528573" nombre="SERVICIOS DE AGUA Y DRENAJE DE MONTERREY, I.P.D.">
8
+ <cfdi:Domicilio calle="MATAMOROS PONIENTE" noExterior="1719" colonia="OBISPADO" localidad="MONTERREY" municipio="MONTERREY" estado="NL" pais="MX" codigoPostal="64010"/>
9
+ </cfdi:Receptor>
10
+ <cfdi:Conceptos>
11
+ <cfdi:Concepto cantidad="3" unidad="UN" descripcion="COMPOSICION GRANULOMETRICA" valorUnitario="300.00" importe="900.00"/>
12
+ </cfdi:Conceptos>
13
+ <cfdi:Impuestos totalImpuestosTrasladados="128.00">
14
+ <cfdi:Traslados>
15
+ <cfdi:Traslado impuesto="IVA" tasa="16" importe="128.00"/>
16
+ </cfdi:Traslados>
17
+ </cfdi:Impuestos>
18
+ <cfdi:Complemento>
19
+ <tfd:TimbreFiscalDigital version="1.0" UUID="BDE349C3-632A-4F0A-9DE7-78FA25F5408B" FechaTimbrado="2017-01-10T13:17:44" selloCFD="pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=" noCertificadoSAT="20001000000300004850" selloSAT="RGSQoDrPkEr+JuvZCIjPLU8F9mKI3BTTeqMZWUtRw9lF8XJHQlE67jEsWlu+dYcBE0ZkxqGYXW2mP3Us/w/0Gl4nnxeSu9syO2zHC9RzYdNL0wyAsW3mG7035nMZqQ2i5jjNM0r3kSTzgNGaMATsGVBhuBkFi5Pl4NplCZHDTm3YTHtuEt6wpOKrIQGEgxjDBQI18tFr7+mUU09HQLx2oBqexmf15X/HLnyEgfsHLPBYwO1mFsez3LAe0XhP2CKq65lsQeXFgpfSrCqpfpSWuBl67NVJZUd4B0Mf98wvFSoK3LMSlPYZxFCoxNCHamUv8Vmj9T0exX6bmFRXSkfFCg==" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital"/>
20
+ </cfdi:Complemento>
21
+ <cfdi:Addenda xmlns:if="https://www.interfactura.com/Schemas/Documentos" xsi:schemaLocation="https://www.interfactura.com/Schemas/Documentos https://www.interfactura.com/Schemas/Documentos/DocumentoInterfactura.xsd ">
22
+ <if:FacturaInterfactura TipoDocumentoId="0" TipoDocumento="Factura" Id="302944372">
23
+ <if:Emisor RI="0113086"/>
24
+ <if:Receptor RI="9900122831" Activo="False"/>
25
+ <if:Encabezado IdInterno="302944372" TemplateId="78000921" Folio="4" FolioSerie="4-CFDI " SerieFolio="CFDI -4" Serie="CFDI " UUID="BDE349C3-632A-4F0A-9DE7-78FA25F5408B" MonedaDoc="MXN" MonedaDesc="Pesos" Status="1" CFD="True" Estatus="Por Pagar" ProcesoId="0" CondicionPago="Vencimiento 90 días" SubTotal="900.00" Iva="128.00" Total="1028" Observaciones="ninguna" IVAPCT="16" Moneda="MXN" LugarExpedicion="SAN PEDRO GARZA GARCÍA, NUEVO LEÓN" TipoCambio="1" TipoDocumento="Factura" metodoDePago="efectivo" totalImpuestosTrasladados="128.00" formaDePago="PAGO EN UNA SOLA EXHIBICION" FolioReferencia="IF-Prueba04" RegimenFiscalEmisor="persona moral" EmailTracking="davhira@hotmail.com" Fecha="2017-01-10T13:14:59" cadenaOriginal="||1.0|BDE349C3-632A-4F0A-9DE7-78FA25F5408B|2017-01-10T13:17:44|pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=|20001000000300004850||" cadenaOriginalTimbre="||1.0|BDE349C3-632A-4F0A-9DE7-78FA25F5408B|2017-01-10T13:17:44|pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=|20001000000300004850||" cadenaOriginalEmisor="||3.2|2017-01-10T13:14:59|ingreso|PAGO EN UNA SOLA EXHIBICION|Vencimiento 90 días|900.00|1|MXN|1028|efectivo|SAN PEDRO GARZA GARCÍA, NUEVO LEÓN|PPE0902134I7|PARTNER PROYECTOS ESTRATÉGICOS SA DE CV.|RÍO DE LA PLATA|309 Ote|Piso 3|COLONIA DEL VALLE|SAN PEDRO GARZA GARCÍA|011308699|SAN PEDRO GARZA GARCÍA|NUEVO LEÓN|México|66220|persona moral|SAD560528573|SERVICIOS DE AGUA Y DRENAJE DE MONTERREY, I.P.D.|MATAMOROS PONIENTE|1719|OBISPADO|MONTERREY|MONTERREY|NL|MX|64010|3|UN|COMPOSICION GRANULOMETRICA|300.00|900.00|IVA|16|128.00|128.00||" importeConLetra="**********************UN MIL VEINTIOCHO PESOS 00/100 M.N.**********************">
26
+ <if:Cuerpo Renglon="1" Cantidad="3.000" Concepto="COMPOSICION GRANULOMETRICA" PUnitario="300.00" Importe="900.00" UM="UN"/>
27
+ </if:Encabezado>
28
+ </if:FacturaInterfactura>
29
+ </cfdi:Addenda>
30
+ </cfdi:Comprobante>
31
+ <PDF>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</PDF>
32
+ </Resultado>
@@ -0,0 +1 @@
1
+ <?xml version='1.0' encoding='UTF-8'?><FacturaInterfactura><Encabezado Moneda='MXN' TipoCambio='1' Total='1028' Observaciones='ninguna' SubTotal='900.00' IVAPCT='16' Iva='128.00' TipoDocumento='Factura' CondicionPago='Vencimiento 90 días' formaDePago='PAGO EN UNA SOLA EXHIBICION' FolioReferencia='IF-Prueba01' metodoDePago='efectivo' RegimenFiscalEmisor='persona moral'><Cuerpo Renglon='1' Cantidad='3.000' Concepto='COMPOSICION GRANULOMETRICA' PUnitario='300.00' Importe='900.00' UM='UN'/></Encabezado><Emisor RI='0113086'/><Receptor RFC='SAD560528573' nombre='SERVICIOS DE AGUA Y DRENAJE DE MONTERREY, I.P.D.' Telefono='018120346930' Email='prueba@gmail.com' NombreContacto='Enrique Beltran'><Domicilio calle='MATAMOROS PONIENTE' noExterior='1719' colonia='OBISPADO' localidad='MONTERREY' municipio='MONTERREY' estado='NL' pais='MX' codigoPostal='64010'/></Receptor></FacturaInterfactura>
@@ -0,0 +1,5 @@
1
+ module Interfactura
2
+ module Ruby
3
+ VERSION = "0.1.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: interfactura-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Icalia Labs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri-happymapper
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.5'
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: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.10'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ description: " A Ruby SDK to interact with the Interfactura Web Services "
98
+ email:
99
+ - weare@icalialabs.com
100
+ executables:
101
+ - console
102
+ - setup
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - ".DS_Store"
107
+ - ".gitignore"
108
+ - CODE_OF_CONDUCT.md
109
+ - Gemfile
110
+ - Gemfile.lock
111
+ - LICENSE.txt
112
+ - README.md
113
+ - Rakefile
114
+ - bin/console
115
+ - bin/setup
116
+ - interfactura-ruby.gemspec
117
+ - lib/.DS_Store
118
+ - lib/interfactura/.DS_Store
119
+ - lib/interfactura/parser/addenda.rb
120
+ - lib/interfactura/parser/complemento.rb
121
+ - lib/interfactura/parser/comprobante.rb
122
+ - lib/interfactura/parser/concepto.rb
123
+ - lib/interfactura/parser/conceptos.rb
124
+ - lib/interfactura/parser/domicilio.rb
125
+ - lib/interfactura/parser/domicilio_fiscal.rb
126
+ - lib/interfactura/parser/emisor.rb
127
+ - lib/interfactura/parser/factura_interfactura.rb
128
+ - lib/interfactura/parser/impuestos.rb
129
+ - lib/interfactura/parser/receptor.rb
130
+ - lib/interfactura/parser/regimen_fiscal.rb
131
+ - lib/interfactura/parser/resultado.rb
132
+ - lib/interfactura/parser/timbre_fiscal_digital.rb
133
+ - lib/interfactura/parser/traslado.rb
134
+ - lib/interfactura/parser/traslados.rb
135
+ - lib/interfactura/ruby.rb
136
+ - lib/interfactura/ruby/.DS_Store
137
+ - lib/interfactura/ruby/client.rb
138
+ - lib/interfactura/ruby/invoice.rb
139
+ - lib/interfactura/ruby/response.rb
140
+ - lib/interfactura/ruby/templates/message_template.xml.erb
141
+ - lib/interfactura/ruby/templates/output_sample.xml
142
+ - lib/interfactura/ruby/templates/sample.xml
143
+ - lib/interfactura/ruby/version.rb
144
+ homepage: https://github.com/IcaliaLabs/interfactura-ruby
145
+ licenses:
146
+ - MIT
147
+ metadata: {}
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ requirements: []
163
+ rubyforge_project:
164
+ rubygems_version: 2.6.8
165
+ signing_key:
166
+ specification_version: 4
167
+ summary: A Ruby SDK to connect to Interfactura Web Services
168
+ test_files: []