snoopy_afip 2.1.1 → 3.0.1
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 +7 -7
- data/CHANGELOG +23 -23
- data/README.textile +236 -0
- data/lib/snoopy_afip/authentication_adapter.rb +119 -0
- data/lib/snoopy_afip/authorize_adapter.rb +178 -0
- data/lib/snoopy_afip/bill.rb +124 -203
- data/lib/snoopy_afip/client.rb +20 -0
- data/lib/snoopy_afip/constants.rb +69 -65
- data/lib/snoopy_afip/core_ext/hash.rb +11 -0
- data/lib/snoopy_afip/exceptions.rb +74 -0
- data/lib/snoopy_afip/version.rb +1 -1
- data/lib/snoopy_afip.rb +10 -10
- data/snoopy_afip.gemspec +7 -7
- metadata +74 -89
- data/lib/snoopy_afip/auth_data.rb +0 -46
- data/lib/snoopy_afip/authorizer.rb +0 -10
- data/spec/snoopy_afip/auth_data_spec.rb +0 -12
data/lib/snoopy_afip.rb
CHANGED
@@ -1,23 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require "bundler/setup"
|
2
3
|
require "snoopy_afip/version"
|
3
4
|
require "snoopy_afip/constants"
|
5
|
+
require "snoopy_afip/exceptions"
|
4
6
|
require "savon"
|
5
7
|
require "snoopy_afip/core_ext/float"
|
6
8
|
require "snoopy_afip/core_ext/hash"
|
7
9
|
require "snoopy_afip/core_ext/string"
|
8
|
-
module Snoopy
|
9
|
-
|
10
|
-
class NullOrInvalidAttribute < StandardError; end
|
11
|
-
|
12
|
-
autoload :Authorizer, "snoopy_afip/authorizer"
|
13
|
-
autoload :AuthData, "snoopy_afip/auth_data"
|
14
|
-
autoload :Bill, "snoopy_afip/bill"
|
15
|
-
autoload :Constants, "snoopy_afip/constants"
|
16
10
|
|
11
|
+
module Snoopy
|
12
|
+
autoload :Constants, 'snoopy_afip/constants'
|
13
|
+
autoload :Bill, 'snoopy_afip/bill'
|
14
|
+
autoload :Client, 'snoopy_afip/client'
|
15
|
+
autoload :AuthorizeAdapter, 'snoopy_afip/authorize_adapter'
|
16
|
+
autoload :AuthenticationAdapter, 'snoopy_afip/authentication_adapter'
|
17
17
|
|
18
18
|
extend self
|
19
|
-
attr_accessor :cuit, :sale_point, :service_url, :
|
20
|
-
:default_concepto, :default_moneda, :own_iva_cond, :verbose, :auth_url
|
19
|
+
attr_accessor :cuit, :sale_point, :service_url, :default_document_type, :pkey, :cert, :default_concept, :default_currency, :own_iva_cond, :verbose, :auth_url
|
21
20
|
|
22
21
|
def auth_hash
|
23
22
|
{"Token" => Snoopy::TOKEN, "Sign" => Snoopy::SIGN, "Cuit" => Snoopy.cuit}
|
@@ -56,3 +55,4 @@ module Snoopy
|
|
56
55
|
# end
|
57
56
|
|
58
57
|
end
|
58
|
+
|
data/snoopy_afip.gemspec
CHANGED
@@ -9,21 +9,21 @@ Gem::Specification.new do |s|
|
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["g.edera"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2017-06-29"
|
13
13
|
s.description = "Adaptador para Web Service de Facturación Electrónica Argentina (AFIP)"
|
14
14
|
s.email = ["gab.edera@gmail.com"]
|
15
15
|
s.extra_rdoc_files = ["LICENSE.txt", "README.textile"]
|
16
|
-
s.files = [".document", "CHANGELOG", "Gemfile", "Gemfile.lock", "LICENSE.txt", "README.textile", "Rakefile", "VERSION", "autotest/discover.rb", "snoopy_afip.gemspec", "lib/snoopy_afip.rb", "lib/snoopy_afip/
|
16
|
+
s.files = [".document", "CHANGELOG", "Gemfile", "Gemfile.lock", "LICENSE.txt", "README.textile", "Rakefile", "VERSION", "autotest/discover.rb", "snoopy_afip.gemspec", "lib/snoopy_afip.rb", "lib/snoopy_afip/authentication_adapter.rb", "lib/snoopy_afip/authorize_adapter.rb", "lib/snoopy_afip/bill.rb", "lib/snoopy_afip/client.rb", "lib/snoopy_afip/constants.rb", "lib/snoopy_afip/core_ext/float.rb", "lib/snoopy_afip/core_ext/hash.rb", "lib/snoopy_afip/core_ext/string.rb", "lib/snoopy_afip/exceptions.rb", "lib/snoopy_afip/version.rb", "spec/snoopy_afip/authorizer_spec.rb", "spec/snoopy_afip/bill_spec.rb", "spec/spec_helper.rb", "wsaa-client.sh"]
|
17
17
|
s.homepage = "https://github.com/gedera/snoopy_afip"
|
18
18
|
s.licenses = ["MIT"]
|
19
19
|
s.require_paths = ["lib"]
|
20
|
-
s.rubygems_version = "1.8.25"
|
20
|
+
# s.rubygems_version = "1.8.25"
|
21
21
|
s.summary = "Adaptador AFIP wsfe."
|
22
|
-
s.test_files = ["spec/snoopy_afip/
|
22
|
+
s.test_files = ["spec/snoopy_afip/authorizer_spec.rb", "spec/snoopy_afip/bill_spec.rb", "spec/spec_helper.rb"]
|
23
23
|
|
24
|
-
s.add_runtime_dependency('savon', ["~> 2.4
|
24
|
+
s.add_runtime_dependency('savon', ["~> 2.4"])
|
25
25
|
s.add_runtime_dependency('nokogiri', ["~> 1.6"])
|
26
|
-
s.add_runtime_dependency('wasabi', ["~> 3.2
|
26
|
+
s.add_runtime_dependency('wasabi', ["~> 3.2"])
|
27
27
|
s.add_runtime_dependency('akami', ["~> 1.2"])
|
28
|
-
s.add_runtime_dependency('nori', ["~> 2.3
|
28
|
+
s.add_runtime_dependency('nori', ["~> 2.3"])
|
29
29
|
end
|
metadata
CHANGED
@@ -1,95 +1,78 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: snoopy_afip
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- g.edera
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
|
12
|
+
date: 2017-06-29 00:00:00 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
14
15
|
name: savon
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 2.4.0
|
20
|
-
type: :runtime
|
21
16
|
prerelease: false
|
22
|
-
|
23
|
-
requirements:
|
24
|
-
- -
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 2.4
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: nokogiri
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.6'
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: "2.4"
|
34
22
|
type: :runtime
|
23
|
+
version_requirements: *id001
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: nokogiri
|
35
26
|
prerelease: false
|
36
|
-
|
37
|
-
requirements:
|
38
|
-
- -
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: wasabi
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 3.2.3
|
27
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ~>
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: "1.6"
|
48
32
|
type: :runtime
|
33
|
+
version_requirements: *id002
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: wasabi
|
49
36
|
prerelease: false
|
50
|
-
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 3.2
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: akami
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '1.2'
|
37
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: "3.2"
|
62
42
|
type: :runtime
|
43
|
+
version_requirements: *id003
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: akami
|
63
46
|
prerelease: false
|
64
|
-
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: nori
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 2.3.0
|
47
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ~>
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: "1.2"
|
76
52
|
type: :runtime
|
53
|
+
version_requirements: *id004
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: nori
|
77
56
|
prerelease: false
|
78
|
-
|
79
|
-
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 2.3
|
83
|
-
|
84
|
-
|
57
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "2.3"
|
62
|
+
type: :runtime
|
63
|
+
version_requirements: *id005
|
64
|
+
description: "Adaptador para Web Service de Facturaci\xC3\xB3n Electr\xC3\xB3nica Argentina (AFIP)"
|
65
|
+
email:
|
85
66
|
- gab.edera@gmail.com
|
86
67
|
executables: []
|
68
|
+
|
87
69
|
extensions: []
|
88
|
-
|
70
|
+
|
71
|
+
extra_rdoc_files:
|
89
72
|
- LICENSE.txt
|
90
73
|
- README.textile
|
91
|
-
files:
|
92
|
-
-
|
74
|
+
files:
|
75
|
+
- .document
|
93
76
|
- CHANGELOG
|
94
77
|
- Gemfile
|
95
78
|
- Gemfile.lock
|
@@ -99,46 +82,48 @@ files:
|
|
99
82
|
- VERSION
|
100
83
|
- autotest/discover.rb
|
101
84
|
- lib/snoopy_afip.rb
|
102
|
-
- lib/snoopy_afip/
|
103
|
-
- lib/snoopy_afip/
|
85
|
+
- lib/snoopy_afip/authentication_adapter.rb
|
86
|
+
- lib/snoopy_afip/authorize_adapter.rb
|
104
87
|
- lib/snoopy_afip/bill.rb
|
88
|
+
- lib/snoopy_afip/client.rb
|
105
89
|
- lib/snoopy_afip/constants.rb
|
106
90
|
- lib/snoopy_afip/core_ext/float.rb
|
107
91
|
- lib/snoopy_afip/core_ext/hash.rb
|
108
92
|
- lib/snoopy_afip/core_ext/string.rb
|
93
|
+
- lib/snoopy_afip/exceptions.rb
|
109
94
|
- lib/snoopy_afip/version.rb
|
110
95
|
- snoopy_afip.gemspec
|
111
|
-
- spec/snoopy_afip/auth_data_spec.rb
|
112
96
|
- spec/snoopy_afip/authorizer_spec.rb
|
113
97
|
- spec/snoopy_afip/bill_spec.rb
|
114
98
|
- spec/spec_helper.rb
|
115
99
|
- wsaa-client.sh
|
116
100
|
homepage: https://github.com/gedera/snoopy_afip
|
117
|
-
licenses:
|
101
|
+
licenses:
|
118
102
|
- MIT
|
119
103
|
metadata: {}
|
104
|
+
|
120
105
|
post_install_message:
|
121
106
|
rdoc_options: []
|
122
|
-
|
107
|
+
|
108
|
+
require_paths:
|
123
109
|
- lib
|
124
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
-
requirements:
|
126
|
-
-
|
127
|
-
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
version: '0'
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- &id006
|
113
|
+
- ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: "0"
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- *id006
|
134
119
|
requirements: []
|
120
|
+
|
135
121
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.
|
122
|
+
rubygems_version: 2.6.12
|
137
123
|
signing_key:
|
138
124
|
specification_version: 4
|
139
125
|
summary: Adaptador AFIP wsfe.
|
140
|
-
test_files:
|
141
|
-
- spec/snoopy_afip/auth_data_spec.rb
|
126
|
+
test_files:
|
142
127
|
- spec/snoopy_afip/authorizer_spec.rb
|
143
128
|
- spec/snoopy_afip/bill_spec.rb
|
144
129
|
- spec/spec_helper.rb
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
module Snoopy
|
3
|
-
module AuthData
|
4
|
-
def generate_auth_file
|
5
|
-
Snoopy::AuthData.generate_auth_file(:cuit => cuit, :pkey => pkey, :cert => cert)
|
6
|
-
|
7
|
-
todays_datafile = "/tmp/snoopy_afip_#{cuit}_#{Time.new.strftime('%d_%m_%Y')}.yml"
|
8
|
-
current_token_sign_file = YAML.load_file(todays_datafile)
|
9
|
-
|
10
|
-
{ "Token" => current_token_sign_file["token"], "Sign" => current_token_sign_file["sign"], "Cuit" => cuit }
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.generate_auth_file invoicing_firm
|
14
|
-
raise "Debe definir el cuit del emisor" unless invoicing_firm[:cuit]
|
15
|
-
raise "Archivo certificado no encontrado en #{invoicing_firm[:cert]}" unless File.exists?(invoicing_firm[:cert])
|
16
|
-
raise "Archivo de llave privada no encontrado en #{invoicing_firm[:pkey]}" unless File.exists?(invoicing_firm[:pkey])
|
17
|
-
|
18
|
-
todays_datafile = "/tmp/snoopy_afip_#{invoicing_firm[:cuit]}_#{Time.new.strftime('%d_%m_%Y')}.yml"
|
19
|
-
opts = "-u #{Snoopy.auth_url} -k #{invoicing_firm[:pkey]} -c #{invoicing_firm[:cert]} -i #{invoicing_firm[:cuit]}"
|
20
|
-
|
21
|
-
%x(#{File.dirname(__FILE__)}/../../wsaa-client.sh #{opts}) unless File.exists?(todays_datafile)
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.generate_pkey file
|
25
|
-
begin
|
26
|
-
%x(openssl genrsa -out #{file} 8192)
|
27
|
-
rescue => e
|
28
|
-
raise "command fail: 'openssl genrsa -out #{file} 8192' error al generar pkey: #{e.message}, error: #{e.message}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# pkey: clave privada generada por el metodo generate_pkey.
|
33
|
-
# subj_o: Nombre de la empresa, registrado en AFIP.
|
34
|
-
# subj_cn: hostname del servidor que realizara la comunicación con AFIP.
|
35
|
-
# subj_cuit: Cuit registado en AFIP.
|
36
|
-
# out_path: donde se almacenara el certificado generado.
|
37
|
-
# Snoopy::AuthData.generate_certificate_request(generate_pkey, subj_o, subj_cn, subj_cuit, tmp_cert_req_path)
|
38
|
-
def self.generate_certificate_request(pkey, subj_o, subj_cn, subj_cuit, out_path)
|
39
|
-
begin
|
40
|
-
%x(openssl req -new -key #{pkey} -subj "/C=AR/O=#{subj_o}/CN=#{subj_cn}/serialNumber=CUIT #{subj_cuit}" -out #{out_path})
|
41
|
-
rescue => e
|
42
|
-
raise "command fail: openssl req -new -key #{pkey} -subj /C=AR/O=#{subj_o}/CN=#{subj_cn}/serialNumber=CUIT #{subj_cuit} -out #{out_path}, error: #{e.message}"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe "AuthData" do
|
4
|
-
it "should create constants for todays data" do
|
5
|
-
Snoopy::AuthData.fetch
|
6
|
-
if RUBY_VERSION >= "1.9"
|
7
|
-
Snoopy.constants.should include(:TOKEN, :SIGN)
|
8
|
-
else
|
9
|
-
Snoopy.constants.should include("TOKEN", "SIGN")
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|