poseidon-api 0.0.1 → 0.0.2
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.
- data/.ruby-version +1 -0
- data/.yardopts +4 -0
- data/README.md +30 -4
- data/lib/poseidon-api.rb +91 -8
- data/lib/poseidon-api/version.rb +1 -1
- data/poseidon-api.gemspec +1 -1
- data/test/fixtures/vcr_cassetes/failed_login.yml +4 -4
- data/test/fixtures/vcr_cassetes/success_login.yml +6 -6
- data/test/fixtures/vcr_cassetes/{valid_invoice.yml → valid_client_invoice.yml} +19 -19
- data/test/fixtures/vcr_cassetes/valid_supplier_invoice.yml +108 -0
- data/test/test_poseidon_api.rb +23 -6
- metadata +16 -7
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.3-p392
|
data/.yardopts
ADDED
data/README.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
[](http://www.apslabs.com.ar/jenkins/job/poseidon-api/)
|
2
|
+
[](https://travis-ci.org/apslab/poseidon-api)
|
3
|
+
|
4
|
+
|
1
5
|
# Poseidon::Api
|
2
6
|
|
3
7
|
Cliente para interactuar con la API del sistema Poseidon.
|
@@ -18,15 +22,37 @@ O instalar directamente:
|
|
18
22
|
|
19
23
|
## Modo de uso
|
20
24
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
|
26
|
+
### Factura para clientes
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
api = Poseidon::API(url: 'http://poseidon-url.com', user: 'user@test.com', password: '12345')
|
30
|
+
invoice = Poseidon::Invoice.new(date: Date.today, sale_point: 1, number: 189122)
|
31
|
+
invoice.client = Poseidon::Client.new(name: 'Los alamos', cuit: 20243234221, iva_condition_id: 1)
|
32
|
+
invoice.details << Poseidon::Detail.new(amount: 10, unit_price: 15.50, description: 'Carpetas oficio', iva_rate: 21.0)
|
33
|
+
invoice.details << Poseidon::Detail.new(amount: 4, unit_price: 35.0, description: 'Carpetas plastificada', iva_rate: 21.0)
|
34
|
+
emitted = api.emit_invoice(invoice)
|
35
|
+
```
|
25
36
|
|
26
37
|
Retorna un booleano que indica si pudo o no emitir la factura.
|
27
38
|
|
28
39
|
En caso de no emitir la factura se pueden verificar los errores utilizando el método 'errors'
|
29
40
|
|
41
|
+
### Factura de proveedores
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
api = Poseidon::API(url: 'http://poseidon-url.com', user: 'user@test.com', password: '12345')
|
45
|
+
invoice = Poseidon::Invoice.new(date: Date.today, sale_point: 1, number: 189122)
|
46
|
+
invoice.supplier = Poseidon::Supplier.new(name: 'Los alamos', cuit: 20243234221, iva_condition_id: 1)
|
47
|
+
invoice.details << Poseidon::Detail.new(amount: 10, unit_price: 15.50, description: 'Carpetas oficio', iva_rate: 21.0)
|
48
|
+
invoice.details << Poseidon::Detail.new(amount: 4, unit_price: 35.0, description: 'Carpetas plastificada', iva_rate: 21.0)
|
49
|
+
emitted = api.emit_invoice(invoice)
|
50
|
+
```
|
51
|
+
|
52
|
+
## Links
|
53
|
+
|
54
|
+
+ RDoc: http://rubydoc.info/github/apslab/poseidon-api/master/frames
|
55
|
+
+ Source: https://github.com/apslab/poseidon-api
|
30
56
|
|
31
57
|
## Contributing
|
32
58
|
|
data/lib/poseidon-api.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require "poseidon-api/version"
|
2
3
|
require 'json'
|
3
4
|
require 'curb'
|
@@ -15,10 +16,27 @@ require 'curb'
|
|
15
16
|
#
|
16
17
|
# En caso de no emitir la factura se pueden verificar los errores utilizando el método 'errors'
|
17
18
|
#
|
19
|
+
# ## Factura de proveedores
|
20
|
+
#
|
21
|
+
# En caso de querer registrar la factura de un proveedor se procede a cargar el método supplier de invoice.
|
22
|
+
#
|
23
|
+
# Ejemplo:
|
24
|
+
#
|
25
|
+
# api = ....
|
26
|
+
# invoice = Poseidon::Invoice.new ...
|
27
|
+
# invoice.supplier = Poseidon::Supplier.new(name: ....
|
28
|
+
# ...
|
29
|
+
# ...
|
30
|
+
# emitted = api.emit_invoice(invoice)
|
31
|
+
#
|
18
32
|
module Poseidon
|
19
33
|
class API
|
20
34
|
|
21
|
-
attr_reader :token
|
35
|
+
attr_reader :token
|
36
|
+
|
37
|
+
# Retorna los errores si falló la invocación de alguno de los
|
38
|
+
# métodos.
|
39
|
+
attr_reader :errors
|
22
40
|
|
23
41
|
# El constructor requiere los atributos:
|
24
42
|
#
|
@@ -35,6 +53,11 @@ module Poseidon
|
|
35
53
|
@version = properties[:version] || 'v1'
|
36
54
|
end
|
37
55
|
|
56
|
+
# Obtiene un token para poder utilizar los servicios
|
57
|
+
#
|
58
|
+
# Retorna true o false
|
59
|
+
#
|
60
|
+
# Si ocurre un error se pueden obtener los detalles a través del método "errors"
|
38
61
|
def login
|
39
62
|
json = { :email => @user, :password => @password }.to_json
|
40
63
|
curl = post(token_uri, json)
|
@@ -49,6 +72,10 @@ module Poseidon
|
|
49
72
|
end
|
50
73
|
end
|
51
74
|
|
75
|
+
# Emite una factura a través del sistema Poseidon
|
76
|
+
#
|
77
|
+
# Retorna true o false
|
78
|
+
#
|
52
79
|
def emit_invoice(invoice)
|
53
80
|
login if @token.nil?
|
54
81
|
curl = post(facturas_uri, invoice.to_json)
|
@@ -64,10 +91,6 @@ module Poseidon
|
|
64
91
|
end
|
65
92
|
end
|
66
93
|
|
67
|
-
def hello
|
68
|
-
'world'
|
69
|
-
end
|
70
|
-
|
71
94
|
private
|
72
95
|
|
73
96
|
def post(uri, json)
|
@@ -93,36 +116,69 @@ module Poseidon
|
|
93
116
|
end
|
94
117
|
|
95
118
|
|
119
|
+
# Información de la factura a emitir
|
96
120
|
class Invoice
|
97
|
-
attr_accessor :date, :sale_point, :number, :client, :details
|
121
|
+
attr_accessor :date, :sale_point, :number, :client, :details, :supplier
|
98
122
|
|
123
|
+
# Atributos para construir:
|
124
|
+
#
|
125
|
+
# + date
|
126
|
+
# + sale_point
|
127
|
+
# + number
|
128
|
+
# + client: a Poseidon::Client instance
|
129
|
+
# + supplier: a Poseidon::Supplier instance
|
130
|
+
#
|
99
131
|
def initialize(attrs)
|
100
132
|
@date = attrs[:date] || Date.now
|
101
133
|
@sale_point = attrs[:sale_point]
|
102
134
|
@number = attrs[:number]
|
103
135
|
@client = attrs[:client]
|
136
|
+
@supplier = attrs[:supplier]
|
104
137
|
@details = []
|
138
|
+
# TODO: debe ocurrir una excepción si no se indica client o supplier
|
105
139
|
end
|
106
140
|
|
107
141
|
def to_hash
|
108
|
-
|
142
|
+
hash = {
|
143
|
+
factura: {
|
109
144
|
fecha: @date,
|
110
145
|
sale_point: @sale_point,
|
111
146
|
numero: @number,
|
112
|
-
cliente: @client.to_hash,
|
113
147
|
detalles: @details.map { |detail| detail.to_hash }
|
114
148
|
}
|
115
149
|
}
|
150
|
+
add_supplier_or_client(hash)
|
116
151
|
end
|
117
152
|
|
118
153
|
def to_json
|
119
154
|
to_hash.to_json
|
120
155
|
end
|
156
|
+
|
157
|
+
private
|
158
|
+
|
159
|
+
def add_supplier_or_client(hash)
|
160
|
+
if @client
|
161
|
+
hash[:factura][:cliente] = @client.to_hash
|
162
|
+
end
|
163
|
+
|
164
|
+
if @supplier
|
165
|
+
hash[:factura][:proveedor] = @supplier.to_hash
|
166
|
+
end
|
167
|
+
|
168
|
+
hash
|
169
|
+
end
|
170
|
+
|
121
171
|
end
|
122
172
|
|
123
173
|
class Client
|
124
174
|
attr_accessor :name, :cuit, :iva_condition_id
|
125
175
|
|
176
|
+
# Atributos necesario para la construcción:
|
177
|
+
#
|
178
|
+
# + name
|
179
|
+
# + cuit
|
180
|
+
# + iva_condition_id
|
181
|
+
#
|
126
182
|
def initialize(attrs)
|
127
183
|
@name = attrs[:name]
|
128
184
|
@cuit = attrs[:cuit]
|
@@ -134,9 +190,36 @@ module Poseidon
|
|
134
190
|
end
|
135
191
|
end
|
136
192
|
|
193
|
+
class Supplier
|
194
|
+
attr_accessor :name, :cuit, :iva_condition_id
|
195
|
+
|
196
|
+
# Atributos necesario para la construcción:
|
197
|
+
#
|
198
|
+
# + name
|
199
|
+
# + cuit
|
200
|
+
# + iva_condition_id
|
201
|
+
#
|
202
|
+
def initialize(attrs)
|
203
|
+
@name = attrs[:name]
|
204
|
+
@cuit = attrs[:cuit]
|
205
|
+
@iva_condition_id = attrs[:iva_condition_id]
|
206
|
+
end
|
207
|
+
|
208
|
+
def to_hash
|
209
|
+
{ razonsocial: @name, cuit: @cuit.to_s, condicioniva_id: @iva_condition_id }
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
137
213
|
class Detail
|
138
214
|
attr_accessor :amount, :unit_price, :description, :iva_rate
|
139
215
|
|
216
|
+
# Attributos necesarios para la construcción:
|
217
|
+
#
|
218
|
+
# + amount
|
219
|
+
# + unit_price
|
220
|
+
# + description
|
221
|
+
# + iva_rate
|
222
|
+
#
|
140
223
|
def initialize(attrs)
|
141
224
|
@amount = attrs[:amount]
|
142
225
|
@unit_price = attrs[:unit_price]
|
data/lib/poseidon-api/version.rb
CHANGED
data/poseidon-api.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.email = ["maxidr@gmail.com"]
|
11
11
|
gem.description = %q{An API to interact with the Poseidon system}
|
12
12
|
gem.summary = %q{API client for Poseidon system}
|
13
|
-
gem.homepage = ""
|
13
|
+
gem.homepage = "https://github.com/apslab/poseidon-api"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -26,13 +26,13 @@ http_interactions:
|
|
26
26
|
SUU9RWRnZQ==
|
27
27
|
!binary "WC1SdW50aW1l":
|
28
28
|
- !binary |-
|
29
|
-
|
29
|
+
MC45Mjk0MjY=
|
30
30
|
!binary "U2VydmVy":
|
31
31
|
- !binary |-
|
32
|
-
|
32
|
+
V0VCcmljay8xLjMuMSAoUnVieS8xLjkuMy8yMDEzLTAyLTIyKQ==
|
33
33
|
!binary "RGF0ZQ==":
|
34
34
|
- !binary |-
|
35
|
-
|
35
|
+
VHVlLCAzMCBBcHIgMjAxMyAwMjozMTozNiBHTVQ=
|
36
36
|
!binary "Q29udGVudC1MZW5ndGg=":
|
37
37
|
- !binary |-
|
38
38
|
NDM=
|
@@ -44,5 +44,5 @@ http_interactions:
|
|
44
44
|
string: !binary |-
|
45
45
|
eyJlcnJvciI6IkVtYWlsIG8gcGFzc3dvcmQgaW52XHUwMGUxbGlkb3MifQ==
|
46
46
|
http_version:
|
47
|
-
recorded_at:
|
47
|
+
recorded_at: Tue, 30 Apr 2013 02:31:36 GMT
|
48
48
|
recorded_with: VCR 2.4.0
|
@@ -20,7 +20,7 @@ http_interactions:
|
|
20
20
|
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
21
21
|
!binary "RXRhZw==":
|
22
22
|
- !binary |-
|
23
|
-
|
23
|
+
IjU2NmNmNjdmYTI1MWIwOGUyMmJiZWU5YWM2YTIwOTBlIg==
|
24
24
|
!binary "Q2FjaGUtQ29udHJvbA==":
|
25
25
|
- !binary |-
|
26
26
|
bWF4LWFnZT0wLCBwcml2YXRlLCBtdXN0LXJldmFsaWRhdGU=
|
@@ -29,13 +29,13 @@ http_interactions:
|
|
29
29
|
SUU9RWRnZQ==
|
30
30
|
!binary "WC1SdW50aW1l":
|
31
31
|
- !binary |-
|
32
|
-
|
32
|
+
MS40NDI3MTE=
|
33
33
|
!binary "U2VydmVy":
|
34
34
|
- !binary |-
|
35
|
-
|
35
|
+
V0VCcmljay8xLjMuMSAoUnVieS8xLjkuMy8yMDEzLTAyLTIyKQ==
|
36
36
|
!binary "RGF0ZQ==":
|
37
37
|
- !binary |-
|
38
|
-
|
38
|
+
VHVlLCAzMCBBcHIgMjAxMyAwMjozMTozNSBHTVQ=
|
39
39
|
!binary "Q29udGVudC1MZW5ndGg=":
|
40
40
|
- !binary |-
|
41
41
|
MzI=
|
@@ -45,7 +45,7 @@ http_interactions:
|
|
45
45
|
body:
|
46
46
|
encoding: ASCII-8BIT
|
47
47
|
string: !binary |-
|
48
|
-
|
48
|
+
eyJ0b2tlbiI6InJ6Z3dpc3NFMUpLWVVFRGtlNXNTIn0=
|
49
49
|
http_version:
|
50
|
-
recorded_at:
|
50
|
+
recorded_at: Tue, 30 Apr 2013 02:31:35 GMT
|
51
51
|
recorded_with: VCR 2.4.0
|
@@ -20,7 +20,7 @@ http_interactions:
|
|
20
20
|
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
21
21
|
!binary "RXRhZw==":
|
22
22
|
- !binary |-
|
23
|
-
|
23
|
+
IjU2NmNmNjdmYTI1MWIwOGUyMmJiZWU5YWM2YTIwOTBlIg==
|
24
24
|
!binary "Q2FjaGUtQ29udHJvbA==":
|
25
25
|
- !binary |-
|
26
26
|
bWF4LWFnZT0wLCBwcml2YXRlLCBtdXN0LXJldmFsaWRhdGU=
|
@@ -29,13 +29,13 @@ http_interactions:
|
|
29
29
|
SUU9RWRnZQ==
|
30
30
|
!binary "WC1SdW50aW1l":
|
31
31
|
- !binary |-
|
32
|
-
|
32
|
+
MC44MTg3NTY=
|
33
33
|
!binary "U2VydmVy":
|
34
34
|
- !binary |-
|
35
|
-
|
35
|
+
V0VCcmljay8xLjMuMSAoUnVieS8xLjkuMy8yMDEzLTAyLTIyKQ==
|
36
36
|
!binary "RGF0ZQ==":
|
37
37
|
- !binary |-
|
38
|
-
|
38
|
+
VHVlLCAzMCBBcHIgMjAxMyAwMjozMTozNiBHTVQ=
|
39
39
|
!binary "Q29udGVudC1MZW5ndGg=":
|
40
40
|
- !binary |-
|
41
41
|
MzI=
|
@@ -45,16 +45,16 @@ http_interactions:
|
|
45
45
|
body:
|
46
46
|
encoding: ASCII-8BIT
|
47
47
|
string: !binary |-
|
48
|
-
|
48
|
+
eyJ0b2tlbiI6InJ6Z3dpc3NFMUpLWVVFRGtlNXNTIn0=
|
49
49
|
http_version:
|
50
|
-
recorded_at:
|
50
|
+
recorded_at: Tue, 30 Apr 2013 02:31:36 GMT
|
51
51
|
- request:
|
52
52
|
method: post
|
53
|
-
uri: http://localhost:3000/api/v1/facturas.json?auth_token=
|
53
|
+
uri: http://localhost:3000/api/v1/facturas.json?auth_token=rzgwissE1JKYUEDke5sS
|
54
54
|
body:
|
55
55
|
encoding: UTF-8
|
56
|
-
string: ! '{"factura":{"fecha":"2013-
|
57
|
-
alerces","cuit_number":20233119354,"condicioniva_id":1}
|
56
|
+
string: ! '{"factura":{"fecha":"2013-04-29","sale_point":1,"numero":7508177,"detalles":[{"cantidad":10,"preciounitario":15.5,"descripcion":"detalle","tasaiva":21.0},{"cantidad":8,"preciounitario":35.0,"descripcion":"detalle","tasaiva":21.0}],"cliente":{"razonsocial":"Los
|
57
|
+
alerces","cuit_number":20233119354,"condicioniva_id":1}}}'
|
58
58
|
headers:
|
59
59
|
Content-Type:
|
60
60
|
- application/json
|
@@ -66,7 +66,7 @@ http_interactions:
|
|
66
66
|
headers:
|
67
67
|
!binary "TG9jYXRpb24=":
|
68
68
|
- !binary |-
|
69
|
-
|
69
|
+
aHR0cDovL2xvY2FsaG9zdDozMDAwL2NsaWVudGVzLzE4L2ZhY3R1cmFzLzI4
|
70
70
|
!binary "Q29udGVudC1UeXBl":
|
71
71
|
- !binary |-
|
72
72
|
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
@@ -78,13 +78,13 @@ http_interactions:
|
|
78
78
|
SUU9RWRnZQ==
|
79
79
|
!binary "WC1SdW50aW1l":
|
80
80
|
- !binary |-
|
81
|
-
|
81
|
+
NS4yOTA5NTI=
|
82
82
|
!binary "U2VydmVy":
|
83
83
|
- !binary |-
|
84
|
-
|
84
|
+
V0VCcmljay8xLjMuMSAoUnVieS8xLjkuMy8yMDEzLTAyLTIyKQ==
|
85
85
|
!binary "RGF0ZQ==":
|
86
86
|
- !binary |-
|
87
|
-
|
87
|
+
VHVlLCAzMCBBcHIgMjAxMyAwMjozMTo0MiBHTVQ=
|
88
88
|
!binary "Q29udGVudC1MZW5ndGg=":
|
89
89
|
- !binary |-
|
90
90
|
MQ==
|
@@ -94,15 +94,15 @@ http_interactions:
|
|
94
94
|
!binary "U2V0LUNvb2tpZQ==":
|
95
95
|
- !binary |-
|
96
96
|
X3Bvc2VpZG9uX3Nlc3Npb249QkFoN0Iwa2lHWGRoY21SbGJpNTFjMlZ5TG5W
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
97
|
+
elpYSXVhMlY1QmpvR1JWUmJDRWtpQ1ZWelpYSUdPd0JHV3dacEVFa2lJaVF5
|
98
|
+
WVNReE1DUk9TR05VVTFsb1VYRXpTV3hyU2xNMWJEVlRSa2gxQmpzQVZFa2lE
|
99
|
+
M05sYzNOcGIyNWZhV1FHT3dCR0lpVmpORFV5TURobE5HVXdOMkpqWWpBek4y
|
100
|
+
WTNNVE0zTTJGbFlUQXpPR1F3TnclM0QlM0QtLWVhMTU4ZWJiOTZkMWQ1ODkw
|
101
|
+
MDgxZmRkY2EwMTBmNGU3NTIyNTc5ZTg7IHBhdGg9LzsgSHR0cE9ubHk=
|
102
102
|
body:
|
103
103
|
encoding: ASCII-8BIT
|
104
104
|
string: !binary |-
|
105
105
|
IA==
|
106
106
|
http_version:
|
107
|
-
recorded_at:
|
107
|
+
recorded_at: Tue, 30 Apr 2013 02:31:42 GMT
|
108
108
|
recorded_with: VCR 2.4.0
|
@@ -0,0 +1,108 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: http://localhost:3000/api/v1/tokens
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ! '{"email":"lmpetek@gmail.com","password":"123456"}'
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/json
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 200
|
15
|
+
message: !binary |-
|
16
|
+
T0sg
|
17
|
+
headers:
|
18
|
+
!binary "Q29udGVudC1UeXBl":
|
19
|
+
- !binary |-
|
20
|
+
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
21
|
+
!binary "RXRhZw==":
|
22
|
+
- !binary |-
|
23
|
+
IjU2NmNmNjdmYTI1MWIwOGUyMmJiZWU5YWM2YTIwOTBlIg==
|
24
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
25
|
+
- !binary |-
|
26
|
+
bWF4LWFnZT0wLCBwcml2YXRlLCBtdXN0LXJldmFsaWRhdGU=
|
27
|
+
!binary "WC1VYS1Db21wYXRpYmxl":
|
28
|
+
- !binary |-
|
29
|
+
SUU9RWRnZQ==
|
30
|
+
!binary "WC1SdW50aW1l":
|
31
|
+
- !binary |-
|
32
|
+
MC44MjU2OTY=
|
33
|
+
!binary "U2VydmVy":
|
34
|
+
- !binary |-
|
35
|
+
V0VCcmljay8xLjMuMSAoUnVieS8xLjkuMy8yMDEzLTAyLTIyKQ==
|
36
|
+
!binary "RGF0ZQ==":
|
37
|
+
- !binary |-
|
38
|
+
VHVlLCAzMCBBcHIgMjAxMyAwMjozMTo0MyBHTVQ=
|
39
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
40
|
+
- !binary |-
|
41
|
+
MzI=
|
42
|
+
!binary "Q29ubmVjdGlvbg==":
|
43
|
+
- !binary |-
|
44
|
+
S2VlcC1BbGl2ZQ==
|
45
|
+
body:
|
46
|
+
encoding: ASCII-8BIT
|
47
|
+
string: !binary |-
|
48
|
+
eyJ0b2tlbiI6InJ6Z3dpc3NFMUpLWVVFRGtlNXNTIn0=
|
49
|
+
http_version:
|
50
|
+
recorded_at: Tue, 30 Apr 2013 02:31:43 GMT
|
51
|
+
- request:
|
52
|
+
method: post
|
53
|
+
uri: http://localhost:3000/api/v1/facturas.json?auth_token=rzgwissE1JKYUEDke5sS
|
54
|
+
body:
|
55
|
+
encoding: UTF-8
|
56
|
+
string: ! '{"factura":{"fecha":"2013-04-29","sale_point":1,"numero":411452,"detalles":[{"cantidad":10,"preciounitario":15.5,"descripcion":"detalle","tasaiva":21.0},{"cantidad":8,"preciounitario":35.0,"descripcion":"detalle","tasaiva":21.0}],"proveedor":{"razonsocial":"Los
|
57
|
+
alerces","cuit":"20233119354","condicioniva_id":1}}}'
|
58
|
+
headers:
|
59
|
+
Content-Type:
|
60
|
+
- application/json
|
61
|
+
response:
|
62
|
+
status:
|
63
|
+
code: 201
|
64
|
+
message: !binary |-
|
65
|
+
Q3JlYXRlZCA=
|
66
|
+
headers:
|
67
|
+
!binary "TG9jYXRpb24=":
|
68
|
+
- !binary |-
|
69
|
+
aHR0cDovL2xvY2FsaG9zdDozMDAwL3N1cHBsaWVycy84L2ZhY3R1cmFzLzM0
|
70
|
+
!binary "Q29udGVudC1UeXBl":
|
71
|
+
- !binary |-
|
72
|
+
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOA==
|
73
|
+
!binary "Q2FjaGUtQ29udHJvbA==":
|
74
|
+
- !binary |-
|
75
|
+
bm8tY2FjaGU=
|
76
|
+
!binary "WC1VYS1Db21wYXRpYmxl":
|
77
|
+
- !binary |-
|
78
|
+
SUU9RWRnZQ==
|
79
|
+
!binary "WC1SdW50aW1l":
|
80
|
+
- !binary |-
|
81
|
+
MS4xNDc5MjQ=
|
82
|
+
!binary "U2VydmVy":
|
83
|
+
- !binary |-
|
84
|
+
V0VCcmljay8xLjMuMSAoUnVieS8xLjkuMy8yMDEzLTAyLTIyKQ==
|
85
|
+
!binary "RGF0ZQ==":
|
86
|
+
- !binary |-
|
87
|
+
VHVlLCAzMCBBcHIgMjAxMyAwMjozMTo0NCBHTVQ=
|
88
|
+
!binary "Q29udGVudC1MZW5ndGg=":
|
89
|
+
- !binary |-
|
90
|
+
MQ==
|
91
|
+
!binary "Q29ubmVjdGlvbg==":
|
92
|
+
- !binary |-
|
93
|
+
S2VlcC1BbGl2ZQ==
|
94
|
+
!binary "U2V0LUNvb2tpZQ==":
|
95
|
+
- !binary |-
|
96
|
+
X3Bvc2VpZG9uX3Nlc3Npb249QkFoN0Iwa2lHWGRoY21SbGJpNTFjMlZ5TG5W
|
97
|
+
elpYSXVhMlY1QmpvR1JWUmJDRWtpQ1ZWelpYSUdPd0JHV3dacEVFa2lJaVF5
|
98
|
+
WVNReE1DUk9TR05VVTFsb1VYRXpTV3hyU2xNMWJEVlRSa2gxQmpzQVZFa2lE
|
99
|
+
M05sYzNOcGIyNWZhV1FHT3dCR0lpVXlOREpqTWpJeE0yUTVOemRoTVdWa05t
|
100
|
+
TTFNREE0WkdabE0yRXpZalpqTUElM0QlM0QtLWJlZTE2MGEwNmRlZDI5NjNm
|
101
|
+
NjUwYjc1YTkwNmM5ODRhNzQ3OWVmYmY7IHBhdGg9LzsgSHR0cE9ubHk=
|
102
|
+
body:
|
103
|
+
encoding: ASCII-8BIT
|
104
|
+
string: !binary |-
|
105
|
+
IA==
|
106
|
+
http_version:
|
107
|
+
recorded_at: Tue, 30 Apr 2013 02:31:44 GMT
|
108
|
+
recorded_with: VCR 2.4.0
|
data/test/test_poseidon_api.rb
CHANGED
@@ -18,9 +18,16 @@ def login
|
|
18
18
|
api
|
19
19
|
end
|
20
20
|
|
21
|
-
def generate_invoice
|
21
|
+
def generate_invoice(type)
|
22
22
|
invoice = Poseidon::Invoice.new(date: Date.today, sale_point: 1, number: Random.rand(1..9999999))
|
23
|
-
|
23
|
+
if type == :client
|
24
|
+
invoice.client = Poseidon::Client.new(name: 'Los alerces', cuit: 20233119354, iva_condition_id: 1)
|
25
|
+
end
|
26
|
+
|
27
|
+
if type == :supplier
|
28
|
+
invoice.supplier = Poseidon::Supplier.new(name: 'Los alerces', cuit: 20233119354, iva_condition_id: 1)
|
29
|
+
end
|
30
|
+
|
24
31
|
[ { amount: 10, unit_price: 15.50, description: 'detalle', iva_rate: 21.0 },
|
25
32
|
{ amount: 8, unit_price: 35.0, description: 'detalle', iva_rate: 21.0 } ].each do |params|
|
26
33
|
invoice.details << Poseidon::Detail.new(params)
|
@@ -48,13 +55,23 @@ Protest.describe('api') do
|
|
48
55
|
end
|
49
56
|
end
|
50
57
|
|
51
|
-
test 'emit invoice
|
52
|
-
VCR.use_cassette('
|
58
|
+
test 'emit invoice for client successful' do
|
59
|
+
VCR.use_cassette('valid_client_invoice') do
|
53
60
|
api = Poseidon::API.new(valid_properties)
|
54
|
-
result = api.emit_invoice(generate_invoice)
|
55
|
-
|
61
|
+
result = api.emit_invoice(generate_invoice(:client))
|
62
|
+
puts api.errors
|
63
|
+
assert result, api.errors
|
56
64
|
assert api.errors.empty?
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
68
|
+
test 'emit invoice for supplier successful' do
|
69
|
+
VCR.use_cassette('valid_supplier_invoice') do
|
70
|
+
api = Poseidon::API.new(valid_properties)
|
71
|
+
result = api.emit_invoice(generate_invoice(:supplier))
|
72
|
+
assert result
|
73
|
+
assert api.errors.empty?
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
60
77
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poseidon-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: protest
|
@@ -83,6 +83,8 @@ extensions: []
|
|
83
83
|
extra_rdoc_files: []
|
84
84
|
files:
|
85
85
|
- .gitignore
|
86
|
+
- .ruby-version
|
87
|
+
- .yardopts
|
86
88
|
- Gemfile
|
87
89
|
- LICENSE.txt
|
88
90
|
- README.md
|
@@ -92,9 +94,10 @@ files:
|
|
92
94
|
- poseidon-api.gemspec
|
93
95
|
- test/fixtures/vcr_cassetes/failed_login.yml
|
94
96
|
- test/fixtures/vcr_cassetes/success_login.yml
|
95
|
-
- test/fixtures/vcr_cassetes/
|
97
|
+
- test/fixtures/vcr_cassetes/valid_client_invoice.yml
|
98
|
+
- test/fixtures/vcr_cassetes/valid_supplier_invoice.yml
|
96
99
|
- test/test_poseidon_api.rb
|
97
|
-
homepage:
|
100
|
+
homepage: https://github.com/apslab/poseidon-api
|
98
101
|
licenses: []
|
99
102
|
post_install_message:
|
100
103
|
rdoc_options: []
|
@@ -106,21 +109,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
109
|
- - ! '>='
|
107
110
|
- !ruby/object:Gem::Version
|
108
111
|
version: '0'
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
hash: 3683816868212074486
|
109
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
116
|
none: false
|
111
117
|
requirements:
|
112
118
|
- - ! '>='
|
113
119
|
- !ruby/object:Gem::Version
|
114
120
|
version: '0'
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
hash: 3683816868212074486
|
115
124
|
requirements: []
|
116
125
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.8.
|
126
|
+
rubygems_version: 1.8.23
|
118
127
|
signing_key:
|
119
128
|
specification_version: 3
|
120
129
|
summary: API client for Poseidon system
|
121
130
|
test_files:
|
122
131
|
- test/fixtures/vcr_cassetes/failed_login.yml
|
123
132
|
- test/fixtures/vcr_cassetes/success_login.yml
|
124
|
-
- test/fixtures/vcr_cassetes/
|
133
|
+
- test/fixtures/vcr_cassetes/valid_client_invoice.yml
|
134
|
+
- test/fixtures/vcr_cassetes/valid_supplier_invoice.yml
|
125
135
|
- test/test_poseidon_api.rb
|
126
|
-
has_rdoc:
|