ruconomic 0.9.12 → 0.9.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -2
- data/Rakefile +3 -0
- data/lib/ruconomic/api/cash_book.rb +3 -5
- data/lib/ruconomic/api/current_invoice.rb +10 -10
- data/lib/ruconomic/api/debtor.rb +5 -6
- data/lib/ruconomic/api/invoice.rb +3 -3
- data/lib/ruconomic/api/invoice_line.rb +47 -3
- data/lib/ruconomic/soap/document.rb +20 -0
- data/lib/ruconomic/version.rb +1 -1
- data/lib/tasks/test.rake +8 -0
- data/test/soap/test_document.rb +52 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7cef861a618b0e6ac0caebb03a6f01ab6b8df45
|
4
|
+
data.tar.gz: df1d3875ce8cc8d9647dd347d7323b98c8ce76be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3571616a5ac4954aa312eea60e611d761a30e33d9baa7215b27dec28ef16e4bc636f259db81f69bbb0b28c5f08fcbd3af376012d55f814f3e6e6e8ef7e75187
|
7
|
+
data.tar.gz: 7a27d759d3f6a6a7efc40106ba84c5aa3f1d46b41bf69044162740420ba477fe8046e76bc8d8da4ede73b1ab44aac4f605aff7ab7b705ca0d49794b702713ac9
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
The ruconomic gem provides a lightweight, speedy and easy-to-use ruby wrapper for the [e-conomic](http://www.e-conomic.com) SOAP web service - it will build, parse and transport some XML and little else. For a more full SOAPedelic experience, have a look at [rconomic](https://github.com/lokalebasen/rconomic).
|
4
4
|
|
5
|
-
This gem is intended to be a crowd source project. The [e-conomic webservice](https://api.e-conomic.com/secure/api1/EconomicWebService.asmx) implements ~1500 operations(!), and all those operations are mapped to ruby classes and methods under
|
5
|
+
This gem is intended to be a crowd source project. The [e-conomic webservice](https://api.e-conomic.com/secure/api1/EconomicWebService.asmx) implements ~1500 operations(!), and all those operations are mapped to ruby classes and methods under `lib/ruconomic/api` - but not fully implemented. As always, the best way to understand is to [browse the source](https://github.com/coherify/ruconomic/tree/master/lib/ruconomic/api).
|
6
6
|
|
7
7
|
So, the idea is that we [add functionality](https://github.com/coherify/ruconomic#contributing) as needed.
|
8
8
|
|
@@ -71,7 +71,11 @@ end
|
|
71
71
|
|
72
72
|
## Documentation
|
73
73
|
|
74
|
-
You can find the latest API documentation at
|
74
|
+
You can find the latest API documentation at http://rdoc.info/github/coherify/ruconomic/index or generate your own copy with `bundle install && bundle exec yardoc` after cloning the repository.
|
75
|
+
|
76
|
+
## Testing
|
77
|
+
|
78
|
+
Run the minitest suite with `bundle exec rake`
|
75
79
|
|
76
80
|
## Contributing
|
77
81
|
|
data/Rakefile
CHANGED
@@ -39,8 +39,7 @@ module Ruconomic
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
response.
|
43
|
-
[:cash_book_get_data_result]
|
42
|
+
response.fetch(:cash_book_get_data_response, :cash_book_get_data_result)
|
44
43
|
end
|
45
44
|
|
46
45
|
# Returns cash book data objects for a given set of cash book handles.
|
@@ -62,7 +61,7 @@ module Ruconomic
|
|
62
61
|
def self.get_all
|
63
62
|
response = invoke('CashBook_GetAll')
|
64
63
|
|
65
|
-
response.
|
64
|
+
response.fetch(:cash_book_get_all_response, :cash_book_get_all_result)
|
66
65
|
end
|
67
66
|
|
68
67
|
# Returns a handle for the cash book with the given number.
|
@@ -151,8 +150,7 @@ module Ruconomic
|
|
151
150
|
end
|
152
151
|
end
|
153
152
|
|
154
|
-
response.
|
155
|
-
[:cash_book_get_entries_result]
|
153
|
+
response.fetch(:cash_book_get_entries_response, :cash_book_get_entries_result)
|
156
154
|
end
|
157
155
|
|
158
156
|
# Delete all entries from a cash book. Action that cannot be undone.
|
@@ -279,8 +279,7 @@ module Ruconomic
|
|
279
279
|
end
|
280
280
|
end
|
281
281
|
|
282
|
-
response.
|
283
|
-
[:current_invoice_get_text_line1_result]
|
282
|
+
response.fetch(:current_invoice_get_text_line1_response, :current_invoice_get_text_line1_result)
|
284
283
|
end
|
285
284
|
|
286
285
|
# Set the primary line of a current invoice.
|
@@ -296,7 +295,7 @@ module Ruconomic
|
|
296
295
|
message.add 'value', text
|
297
296
|
end
|
298
297
|
|
299
|
-
response.
|
298
|
+
response.fetch(:current_invoice_set_text_line1)
|
300
299
|
end
|
301
300
|
|
302
301
|
# Gets the secondary line of text of a current invoice.
|
@@ -324,7 +323,7 @@ module Ruconomic
|
|
324
323
|
message.add 'value', text
|
325
324
|
end
|
326
325
|
|
327
|
-
response.
|
326
|
+
response.fetch(:current_invoice_set_text_line2)
|
328
327
|
end
|
329
328
|
|
330
329
|
# Gets the other reference of a current invoice.
|
@@ -498,6 +497,7 @@ module Ruconomic
|
|
498
497
|
data.add_optional('DebtorCountry', invoice_data.dig(:debtor_country))
|
499
498
|
data.add_optional('DebtorEan', invoice_data.dig(:debtor_ean))
|
500
499
|
data.add_handle('AttentionHandle', invoice_data.dig(:attention_handle, :id), 'Id')
|
500
|
+
data.add_handle('YourReferenceHandle', invoice_data.dig(:your_reference_handle, :id), 'Id')
|
501
501
|
data.add('Date', invoice_data.dig(:date))
|
502
502
|
data.add_handle('TermOfPaymentHandle', invoice_data.dig(:term_of_payment_handle, :id), 'Id')
|
503
503
|
data.add('DueDate', invoice_data.dig(:due_date))
|
@@ -573,7 +573,7 @@ module Ruconomic
|
|
573
573
|
end
|
574
574
|
end
|
575
575
|
|
576
|
-
response.
|
576
|
+
response.fetch(:current_invoice_get_data_response, :current_invoice_get_data_result)
|
577
577
|
end
|
578
578
|
|
579
579
|
# Returns current invoice data objects for a given set of current invoice handles.
|
@@ -599,7 +599,7 @@ module Ruconomic
|
|
599
599
|
end
|
600
600
|
end
|
601
601
|
|
602
|
-
response.
|
602
|
+
response.fetch(:current_invoice_create_response, :current_invoice_create_result, :id)
|
603
603
|
end
|
604
604
|
|
605
605
|
# Returns handles for all current invoices.
|
@@ -609,7 +609,7 @@ module Ruconomic
|
|
609
609
|
def self.get_all
|
610
610
|
response = invoke('CurrentInvoice_GetAll')
|
611
611
|
|
612
|
-
response.
|
612
|
+
response.fetch(:current_invoice_get_all_response, :current_invoice_get_all_result)
|
613
613
|
end
|
614
614
|
|
615
615
|
# Returns handles for the current invoices which have the given employee as OurReference.
|
@@ -682,7 +682,7 @@ module Ruconomic
|
|
682
682
|
end
|
683
683
|
end
|
684
684
|
|
685
|
-
response.
|
685
|
+
response.fetch(:current_invoice_book_response, :current_invoice_book_result, :number)
|
686
686
|
end
|
687
687
|
|
688
688
|
# Books a current invoice.
|
@@ -709,7 +709,7 @@ module Ruconomic
|
|
709
709
|
end
|
710
710
|
end
|
711
711
|
|
712
|
-
response.
|
712
|
+
response.fetch(:current_invoice_delete_response)
|
713
713
|
end
|
714
714
|
|
715
715
|
# Gets handles for the lines of a current invoice.
|
@@ -1110,7 +1110,7 @@ module Ruconomic
|
|
1110
1110
|
message.add 'value', due_date
|
1111
1111
|
end
|
1112
1112
|
|
1113
|
-
response.
|
1113
|
+
response.fetch(:current_invoice_set_due_date_response)
|
1114
1114
|
end
|
1115
1115
|
|
1116
1116
|
# Gets the currency of a current invoice.
|
data/lib/ruconomic/api/debtor.rb
CHANGED
@@ -307,8 +307,7 @@ module Ruconomic
|
|
307
307
|
end
|
308
308
|
end
|
309
309
|
|
310
|
-
response.
|
311
|
-
[:debtor_update_from_data_result][:number]
|
310
|
+
response.fetch(:debtor_update_from_data_response, :debtor_update_from_data_result, :number)
|
312
311
|
end
|
313
312
|
|
314
313
|
# Returns a debtor data object for a given debtor.
|
@@ -323,7 +322,7 @@ module Ruconomic
|
|
323
322
|
end
|
324
323
|
end
|
325
324
|
|
326
|
-
response.
|
325
|
+
response.fetch(:debtor_get_data_response, :debtor_get_data_result)
|
327
326
|
end
|
328
327
|
|
329
328
|
# Returns debtor data objects for a given set of debtor handles.
|
@@ -828,7 +827,7 @@ module Ruconomic
|
|
828
827
|
end
|
829
828
|
end
|
830
829
|
|
831
|
-
response.
|
830
|
+
response.fetch(:debtor_get_term_of_payment_response, :debtor_get_term_of_payment_result, :id)
|
832
831
|
end
|
833
832
|
|
834
833
|
# Sets the layout of a debtor. The value may be omitted.
|
@@ -855,7 +854,7 @@ module Ruconomic
|
|
855
854
|
end
|
856
855
|
end
|
857
856
|
|
858
|
-
response.
|
857
|
+
response.fetch(:debtor_get_layout_response, :debtor_get_layout_result, :id)
|
859
858
|
end
|
860
859
|
|
861
860
|
# Gets a handle for the attention of a debtor.
|
@@ -971,7 +970,7 @@ module Ruconomic
|
|
971
970
|
message.add 'vatZone', vat_zone
|
972
971
|
end
|
973
972
|
|
974
|
-
response.
|
973
|
+
response.fetch(:debtor_create_response, :debtor_create_result, :number)
|
975
974
|
end
|
976
975
|
|
977
976
|
# Return handles for all debtors
|
@@ -192,7 +192,7 @@ module Ruconomic
|
|
192
192
|
def self.get_all
|
193
193
|
response = invoke('Invoice_GetAll')
|
194
194
|
|
195
|
-
response.
|
195
|
+
response.fetch(:invoice_get_all_response, :invoice_get_all_result)
|
196
196
|
end
|
197
197
|
|
198
198
|
# Returns a handle for the invoice with the given number.
|
@@ -304,7 +304,7 @@ module Ruconomic
|
|
304
304
|
end
|
305
305
|
end
|
306
306
|
|
307
|
-
response.
|
307
|
+
response.fetch(:invoice_get_pdf_response, :invoice_get_pdf_result)
|
308
308
|
end
|
309
309
|
|
310
310
|
# Gets an OIO XML string representing an invoice.
|
@@ -331,7 +331,7 @@ module Ruconomic
|
|
331
331
|
end
|
332
332
|
end
|
333
333
|
|
334
|
-
response.
|
334
|
+
response.fetch(:invoice_get_data_response, :invoice_get_data_result)
|
335
335
|
end
|
336
336
|
|
337
337
|
# Returns invoice data objects for a given set of invoice handles.
|
@@ -3,6 +3,31 @@ module Ruconomic
|
|
3
3
|
module InvoiceLine
|
4
4
|
extend Ruconomic::WebService
|
5
5
|
|
6
|
+
def self.find_by_invoice_list(invoice_numbers)
|
7
|
+
response = invoke('InvoiceLine_FindByInvoiceList') do |message|
|
8
|
+
message.add 'invoiceHandles' do |handles|
|
9
|
+
invoice_numbers.each do |invoice_number|
|
10
|
+
handles.add 'InvoiceHandle' do |handle|
|
11
|
+
handle.add 'Number', invoice_number
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
result = response.to_hash.dig(
|
18
|
+
:invoice_line_find_by_invoice_list_response,
|
19
|
+
:invoice_line_find_by_invoice_list_result,
|
20
|
+
:invoice_line_handle
|
21
|
+
)
|
22
|
+
|
23
|
+
case result
|
24
|
+
when Array
|
25
|
+
result
|
26
|
+
when Hash
|
27
|
+
[result]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
6
31
|
# Returns an invoice line data object for a given invoice line.
|
7
32
|
# Parameters: entityHandle: A handle for the invoice line.
|
8
33
|
#
|
@@ -18,12 +43,31 @@ module Ruconomic
|
|
18
43
|
# Returns invoice line data objects for a given set of invoice line handles.
|
19
44
|
# Parameters: entityHandles: An array of the invoice line handles.
|
20
45
|
#
|
21
|
-
# @note TODO: This method was autogenerated from the WSDL - see https://github.com/coherify/ruconomic#contributing"
|
22
46
|
# @see https://api.e-conomic.com/secure/api1/EconomicWebService.asmx?op=InvoiceLine_GetDataArray
|
23
47
|
# @return [Hash] The body content of the SOAP response.
|
24
|
-
def self.get_data_array
|
48
|
+
def self.get_data_array(invoice_line_handles)
|
25
49
|
response = invoke('InvoiceLine_GetDataArray') do |message|
|
26
|
-
|
50
|
+
message.add 'entityHandles' do |handles|
|
51
|
+
invoice_line_handles.each do |invoice_line_handle|
|
52
|
+
handles.add 'InvoiceLineHandle' do |handle|
|
53
|
+
handle.add 'Id', invoice_line_handle.fetch(:id)
|
54
|
+
handle.add 'Number', invoice_line_handle.fetch(:number)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
result = response.to_hash.dig(
|
61
|
+
:invoice_line_get_data_array_response,
|
62
|
+
:invoice_line_get_data_array_result,
|
63
|
+
:invoice_line_data
|
64
|
+
)
|
65
|
+
|
66
|
+
case result
|
67
|
+
when Array
|
68
|
+
result
|
69
|
+
when Hash
|
70
|
+
[result]
|
27
71
|
end
|
28
72
|
end
|
29
73
|
|
@@ -4,6 +4,7 @@ require "ruconomic/soap/node"
|
|
4
4
|
module Ruconomic
|
5
5
|
module SOAP
|
6
6
|
class Document < LibXML::XML::Document
|
7
|
+
class KeyError < StandardError; end
|
7
8
|
|
8
9
|
def initialize(xml_version = "1.0")
|
9
10
|
super(xml_version)
|
@@ -29,6 +30,25 @@ module Ruconomic
|
|
29
30
|
h[:Envelope][:body]
|
30
31
|
end
|
31
32
|
|
33
|
+
# Fetches a subnode as a hash. Errors if the path does not exist
|
34
|
+
# To be backwards compatible, it returns nil instead of error if the last part of the path is not found
|
35
|
+
def fetch(*path)
|
36
|
+
path.each.with_index.reduce(to_hash) do |hash, (key, index)|
|
37
|
+
case hash
|
38
|
+
when Hash
|
39
|
+
hash.fetch(key) do
|
40
|
+
if index == path.size - 1
|
41
|
+
nil
|
42
|
+
else
|
43
|
+
raise KeyError, "No such key path #{path.inspect} in document #{to_hash.inspect}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
else
|
47
|
+
raise KeyError, "Key path #{path.inspect} does not represent a hash in document #{to_hash.inspect}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
32
52
|
# We want #string to return a Ruconomic::SOAP::Document and not a LibXML::XML::Document
|
33
53
|
def self.string(value, options = {})
|
34
54
|
document = Ruconomic::SOAP::Document.new
|
data/lib/ruconomic/version.rb
CHANGED
data/lib/tasks/test.rake
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "ruconomic/soap/document"
|
3
|
+
|
4
|
+
module Ruconomic
|
5
|
+
module SOAP
|
6
|
+
describe Document do
|
7
|
+
describe "fetch" do
|
8
|
+
it "gets existing subnode" do
|
9
|
+
node = Node.new("foo")
|
10
|
+
node.add("bar", "baz")
|
11
|
+
document = Document.new
|
12
|
+
document << node
|
13
|
+
|
14
|
+
assert_equal("baz", document.fetch(:foo, :bar))
|
15
|
+
assert_equal({bar: "baz"}, document.fetch(:foo))
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns nil if it is the last path part that does not match" do
|
19
|
+
node = Node.new("foo")
|
20
|
+
node.add("bar", "baz")
|
21
|
+
document = Document.new
|
22
|
+
document << node
|
23
|
+
|
24
|
+
assert_nil(document.fetch(:bogus))
|
25
|
+
assert_nil(document.fetch(:foo, :bogus))
|
26
|
+
end
|
27
|
+
|
28
|
+
it "errors on missing key" do
|
29
|
+
node = Node.new("foo")
|
30
|
+
node.add("bar", "baz")
|
31
|
+
document = Document.new
|
32
|
+
document << node
|
33
|
+
|
34
|
+
assert_raises(Document::KeyError) do
|
35
|
+
document.fetch(:bogus, :foo)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "errors on middle value not being a hash" do
|
40
|
+
node = Node.new("foo")
|
41
|
+
node.add("bar", "baz")
|
42
|
+
document = Document.new
|
43
|
+
document << node
|
44
|
+
|
45
|
+
assert_raises(Document::KeyError) do
|
46
|
+
document.fetch(:foo, :bar, :baz)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruconomic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tonni Tølbøll Lund Aagesen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curb
|
@@ -189,7 +189,9 @@ files:
|
|
189
189
|
- lib/ruconomic/soap/node.rb
|
190
190
|
- lib/ruconomic/version.rb
|
191
191
|
- lib/ruconomic/web_service.rb
|
192
|
+
- lib/tasks/test.rake
|
192
193
|
- ruconomic.gemspec
|
194
|
+
- test/soap/test_document.rb
|
193
195
|
homepage: https://github.com/coherify/ruconomic
|
194
196
|
licenses:
|
195
197
|
- MIT
|
@@ -210,9 +212,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
212
|
version: '0'
|
211
213
|
requirements: []
|
212
214
|
rubyforge_project:
|
213
|
-
rubygems_version: 2.
|
215
|
+
rubygems_version: 2.5.2
|
214
216
|
signing_key:
|
215
217
|
specification_version: 4
|
216
218
|
summary: Lightweight, speedy and easy-to-use ruby wrapper for the e-conomic.com SOAP
|
217
219
|
web service
|
218
|
-
test_files:
|
220
|
+
test_files:
|
221
|
+
- test/soap/test_document.rb
|