quaderno 1.14.0 → 1.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +56 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +2 -15
  6. data/README.md +1 -1
  7. data/Rakefile +4 -50
  8. data/changelog.md +9 -0
  9. data/lib/quaderno-ruby.rb +3 -4
  10. data/lib/quaderno-ruby/base.rb +106 -108
  11. data/lib/quaderno-ruby/behavior/block.rb +17 -19
  12. data/lib/quaderno-ruby/behavior/crud.rb +93 -95
  13. data/lib/quaderno-ruby/behavior/deliver.rb +16 -18
  14. data/lib/quaderno-ruby/behavior/payment.rb +32 -34
  15. data/lib/quaderno-ruby/behavior/retrieve.rb +23 -25
  16. data/lib/quaderno-ruby/contact.rb +6 -8
  17. data/lib/quaderno-ruby/credit.rb +10 -12
  18. data/lib/quaderno-ruby/document_item.rb +1 -3
  19. data/lib/quaderno-ruby/estimate.rb +5 -7
  20. data/lib/quaderno-ruby/evidence.rb +5 -7
  21. data/lib/quaderno-ruby/exceptions/exceptions.rb +42 -44
  22. data/lib/quaderno-ruby/expense.rb +6 -8
  23. data/lib/quaderno-ruby/helpers/authentication.rb +16 -18
  24. data/lib/quaderno-ruby/income.rb +8 -10
  25. data/lib/quaderno-ruby/invoice.rb +9 -11
  26. data/lib/quaderno-ruby/item.rb +3 -6
  27. data/lib/quaderno-ruby/payment.rb +1 -3
  28. data/lib/quaderno-ruby/receipt.rb +6 -8
  29. data/lib/quaderno-ruby/recurring.rb +4 -7
  30. data/lib/quaderno-ruby/report.rb +56 -58
  31. data/lib/quaderno-ruby/tax.rb +45 -47
  32. data/lib/quaderno-ruby/version.rb +3 -0
  33. data/lib/quaderno-ruby/webhook.rb +3 -5
  34. data/quaderno.gemspec +28 -148
  35. metadata +83 -84
  36. data/Gemfile.lock +0 -91
  37. data/VERSION +0 -1
  38. data/test/fixtures/quaderno_cassettes/.DS_Store +0 -0
  39. data/test/fixtures/quaderno_cassettes/all_contacts.yml +0 -52
  40. data/test/fixtures/quaderno_cassettes/all_contacts_by_access_token.yml +0 -56
  41. data/test/fixtures/quaderno_cassettes/all_contacts_by_authentication_token.yml +0 -57
  42. data/test/fixtures/quaderno_cassettes/all_estimates.yml +0 -52
  43. data/test/fixtures/quaderno_cassettes/all_expenses.yml +0 -55
  44. data/test/fixtures/quaderno_cassettes/all_invoices.yml +0 -56
  45. data/test/fixtures/quaderno_cassettes/all_items.yml +0 -46
  46. data/test/fixtures/quaderno_cassettes/all_receipts.yml +0 -53
  47. data/test/fixtures/quaderno_cassettes/all_webhooks.yml +0 -214
  48. data/test/fixtures/quaderno_cassettes/create_estimate_on_downgraded_API.yml +0 -156
  49. data/test/fixtures/quaderno_cassettes/create_expense_on_downgraded_API.yml +0 -278
  50. data/test/fixtures/quaderno_cassettes/create_invoice_on_downgraded_API.yml +0 -159
  51. data/test/fixtures/quaderno_cassettes/create_receipt_on_downgraded_API.yml +0 -196
  52. data/test/fixtures/quaderno_cassettes/deleted_contact.yml +0 -187
  53. data/test/fixtures/quaderno_cassettes/deleted_contact_by_access_token.yml +0 -199
  54. data/test/fixtures/quaderno_cassettes/deleted_contact_by_authentication_token.yml +0 -199
  55. data/test/fixtures/quaderno_cassettes/deleted_estimate.yml +0 -187
  56. data/test/fixtures/quaderno_cassettes/deleted_expense.yml +0 -189
  57. data/test/fixtures/quaderno_cassettes/deleted_invoice.yml +0 -190
  58. data/test/fixtures/quaderno_cassettes/deleted_item.yml +0 -128
  59. data/test/fixtures/quaderno_cassettes/deleted_receipt.yml +0 -223
  60. data/test/fixtures/quaderno_cassettes/deleted_webhook.yml +0 -257
  61. data/test/fixtures/quaderno_cassettes/delivered_estimate.yml +0 -136
  62. data/test/fixtures/quaderno_cassettes/delivered_invoice.yml +0 -143
  63. data/test/fixtures/quaderno_cassettes/delivered_receipt.yml +0 -140
  64. data/test/fixtures/quaderno_cassettes/evidence_invoice.yml +0 -98
  65. data/test/fixtures/quaderno_cassettes/found_contact.yml +0 -95
  66. data/test/fixtures/quaderno_cassettes/found_contact_by_access_token.yml +0 -99
  67. data/test/fixtures/quaderno_cassettes/found_contact_by_authentication_token.yml +0 -100
  68. data/test/fixtures/quaderno_cassettes/found_estimate.yml +0 -97
  69. data/test/fixtures/quaderno_cassettes/found_expense.yml +0 -99
  70. data/test/fixtures/quaderno_cassettes/found_invoice.yml +0 -100
  71. data/test/fixtures/quaderno_cassettes/found_item.yml +0 -91
  72. data/test/fixtures/quaderno_cassettes/found_receipt.yml +0 -98
  73. data/test/fixtures/quaderno_cassettes/found_webhook.yml +0 -130
  74. data/test/fixtures/quaderno_cassettes/new_contact.yml +0 -48
  75. data/test/fixtures/quaderno_cassettes/new_contact_by_access_token.yml +0 -48
  76. data/test/fixtures/quaderno_cassettes/new_contact_by_authentication_token.yml +0 -48
  77. data/test/fixtures/quaderno_cassettes/new_estimate.yml +0 -137
  78. data/test/fixtures/quaderno_cassettes/new_evidence.yml +0 -48
  79. data/test/fixtures/quaderno_cassettes/new_expense.yml +0 -189
  80. data/test/fixtures/quaderno_cassettes/new_invoice.yml +0 -137
  81. data/test/fixtures/quaderno_cassettes/new_item.yml +0 -48
  82. data/test/fixtures/quaderno_cassettes/new_receipt.yml +0 -173
  83. data/test/fixtures/quaderno_cassettes/new_webhook.yml +0 -87
  84. data/test/fixtures/quaderno_cassettes/paid_expense.yml +0 -98
  85. data/test/fixtures/quaderno_cassettes/paid_invoice.yml +0 -99
  86. data/test/fixtures/quaderno_cassettes/rate_limit.yml +0 -46
  87. data/test/fixtures/quaderno_cassettes/unpay_an_expense.yml +0 -138
  88. data/test/fixtures/quaderno_cassettes/unpay_an_invoice.yml +0 -138
  89. data/test/fixtures/quaderno_cassettes/updated_contact.yml +0 -97
  90. data/test/fixtures/quaderno_cassettes/updated_contact_by_access_token.yml +0 -101
  91. data/test/fixtures/quaderno_cassettes/updated_contact_by_authentication_token.yml +0 -102
  92. data/test/fixtures/quaderno_cassettes/updated_estimate.yml +0 -185
  93. data/test/fixtures/quaderno_cassettes/updated_expense.yml +0 -184
  94. data/test/fixtures/quaderno_cassettes/updated_invoice.yml +0 -184
  95. data/test/fixtures/quaderno_cassettes/updated_item.yml +0 -93
  96. data/test/fixtures/quaderno_cassettes/updated_receipt.yml +0 -220
  97. data/test/fixtures/quaderno_cassettes/updated_webhook.yml +0 -175
  98. data/test/fixtures/quaderno_cassettes/validate_invalid_VAT_number.yml +0 -44
  99. data/test/fixtures/quaderno_cassettes/validate_valid_VAT_number.yml +0 -44
  100. data/test/helper.rb +0 -32
  101. data/test/unit/test_quaderno_contacts.rb +0 -83
  102. data/test/unit/test_quaderno_contacts_thread_safe.rb +0 -104
  103. data/test/unit/test_quaderno_estimates.rb +0 -155
  104. data/test/unit/test_quaderno_evidences.rb +0 -41
  105. data/test/unit/test_quaderno_expenses.rb +0 -162
  106. data/test/unit/test_quaderno_invoices.rb +0 -177
  107. data/test/unit/test_quaderno_items.rb +0 -84
  108. data/test/unit/test_quaderno_receipts.rb +0 -156
  109. data/test/unit/test_quaderno_tax.rb +0 -46
  110. data/test/unit/test_quaderno_webhooks.rb +0 -93
@@ -1,9 +1,7 @@
1
- module Quaderno
2
- class Estimate < Base
3
- include Quaderno::Behavior::Deliver
1
+ class Quaderno::Estimate < Quaderno::Base
2
+ include Quaderno::Behavior::Deliver
4
3
 
5
- api_model Quaderno::Estimate
6
- api_path 'estimates'
7
- is_a_document? true
8
- end
4
+ api_model Quaderno::Estimate
5
+ api_path 'estimates'
6
+ is_a_document? true
9
7
  end
@@ -1,10 +1,8 @@
1
- module Quaderno
2
- class Evidence < Base
3
- api_model Quaderno::Evidence
4
- api_path 'evidences'
1
+ class Quaderno::Evidence < Quaderno::Base
2
+ api_model Quaderno::Evidence
3
+ api_path 'evidences'
5
4
 
6
- class << self
7
- undef :all, :find, :update, :delete, :parse_nested
8
- end
5
+ class << self
6
+ undef :all, :find, :update, :delete, :parse_nested
9
7
  end
10
8
  end
@@ -1,56 +1,54 @@
1
- module Quaderno
2
- module Exceptions
3
- class BaseException < StandardError
4
- end
1
+ module Quaderno::Exceptions
2
+ class BaseException < StandardError
3
+ end
5
4
 
6
- class InvalidSubdomainOrToken < BaseException
7
- end
5
+ class InvalidSubdomainOrToken < BaseException
6
+ end
8
7
 
9
- class InvalidID < BaseException
10
- end
8
+ class InvalidID < BaseException
9
+ end
11
10
 
12
- class RateLimitExceeded < BaseException
13
- end
11
+ class RateLimitExceeded < BaseException
12
+ end
14
13
 
15
- class HasAssociatedDocuments < BaseException
16
- end
14
+ class HasAssociatedDocuments < BaseException
15
+ end
17
16
 
18
- class RequiredFieldsEmptyOrInvalid < BaseException
19
- end
17
+ class RequiredFieldsEmptyOrInvalid < BaseException
18
+ end
20
19
 
21
- class ThrottleLimitExceeded < BaseException
22
- end
20
+ class ThrottleLimitExceeded < BaseException
21
+ end
23
22
 
24
- class UnsupportedApiVersion < BaseException
25
- end
23
+ class UnsupportedApiVersion < BaseException
24
+ end
26
25
 
27
- def self.included(receiver)
28
- receiver.send :extend, ClassMethods
29
- end
26
+ def self.included(receiver)
27
+ receiver.send :extend, ClassMethods
28
+ end
30
29
 
31
- module ClassMethods
32
- def check_exception_for(party_response, params = {})
33
- raise(Quaderno::Exceptions::UnsupportedApiVersion, 'Unsupported API version') if !!(party_response.body =~ /Unsupported API version/)
34
-
35
- if params[:throttle_limit].nil? == false
36
- raise(Quaderno::Exceptions::ThrottleLimitExceeded, 'Throttle limit exceeded, please try again later') if party_response.response.class == Net::HTTPServiceUnavailable
37
- end
38
- if params[:rate_limit].nil? == false
39
- raise(Quaderno::Exceptions::RateLimitExceeded, 'Rate limit exceeded') if party_response.response.class == Net::HTTPForbidden
40
- end
41
- if params[:subdomain_or_token].nil? == false
42
- raise(Quaderno::Exceptions::InvalidSubdomainOrToken, 'Invalid subdomain or token') if party_response.response.class == Net::HTTPUnauthorized
43
- end
44
- if params[:id].nil? == false
45
- raise(Quaderno::Exceptions::InvalidID, "Invalid #{ api_model } instance identifier") if (party_response.response.class == Net::HTTPInternalServerError) || (party_response.response.class == Net::HTTPNotFound)
46
- end
47
- if params[:required_fields].nil? == false
48
- raise(Quaderno::Exceptions::RequiredFieldsEmptyOrInvalid, party_response.body) if party_response.response.class == Net::HTTPUnprocessableEntity
49
- end
50
- if params[:has_documents].nil? == false
51
- raise(Quaderno::Exceptions::HasAssociatedDocuments, party_response.body) if party_response.response.class == Net::HTTPClientError
52
- end
30
+ module ClassMethods
31
+ def check_exception_for(party_response, params = {})
32
+ raise(Quaderno::Exceptions::UnsupportedApiVersion, 'Unsupported API version') if !!(party_response.body =~ /Unsupported API version/)
33
+
34
+ if params[:throttle_limit].nil? == false
35
+ raise(Quaderno::Exceptions::ThrottleLimitExceeded, 'Throttle limit exceeded, please try again later') if party_response.response.class == Net::HTTPServiceUnavailable
36
+ end
37
+ if params[:rate_limit].nil? == false
38
+ raise(Quaderno::Exceptions::RateLimitExceeded, 'Rate limit exceeded') if party_response.response.class == Net::HTTPForbidden
39
+ end
40
+ if params[:subdomain_or_token].nil? == false
41
+ raise(Quaderno::Exceptions::InvalidSubdomainOrToken, 'Invalid subdomain or token') if party_response.response.class == Net::HTTPUnauthorized
42
+ end
43
+ if params[:id].nil? == false
44
+ raise(Quaderno::Exceptions::InvalidID, "Invalid #{ api_model } instance identifier") if (party_response.response.class == Net::HTTPInternalServerError) || (party_response.response.class == Net::HTTPNotFound)
45
+ end
46
+ if params[:required_fields].nil? == false
47
+ raise(Quaderno::Exceptions::RequiredFieldsEmptyOrInvalid, party_response.body) if party_response.response.class == Net::HTTPUnprocessableEntity
48
+ end
49
+ if params[:has_documents].nil? == false
50
+ raise(Quaderno::Exceptions::HasAssociatedDocuments, party_response.body) if party_response.response.class == Net::HTTPClientError
53
51
  end
54
52
  end
55
53
  end
56
- end
54
+ end
@@ -1,10 +1,8 @@
1
- module Quaderno
2
- class Expense < Base
3
- include Quaderno::Behavior::Payment
4
- include Quaderno::Behavior::Block
1
+ class Quaderno::Expense < Quaderno::Base
2
+ include Quaderno::Behavior::Payment
3
+ include Quaderno::Behavior::Block
5
4
 
6
- api_model Quaderno::Expense
7
- api_path 'expenses'
8
- is_a_document? true
9
- end
5
+ api_model Quaderno::Expense
6
+ api_path 'expenses'
7
+ is_a_document? true
10
8
  end
@@ -1,26 +1,24 @@
1
- module Quaderno
2
- module Helpers
3
- module Authentication
1
+ module Quaderno::Helpers
2
+ module Authentication
4
3
 
5
- def get_authentication(options = {})
6
- mode = options[:mode] || :production
4
+ def get_authentication(options = {})
5
+ mode = options[:mode] || :production
7
6
 
8
- local_api_model = options[:api_model]
9
- url = options[:api_url] || (local_api_model && local_api_model.url) || (mode == :production ? 'https://quadernoapp.com/api/' : 'http://sandbox-quadernoapp.com/api/')
7
+ local_api_model = options[:api_model]
8
+ url = options[:api_url] || (local_api_model && local_api_model.url) || (mode == :production ? 'https://quadernoapp.com/api/' : 'http://sandbox-quadernoapp.com/api/')
10
9
 
11
- auth_token = options[:auth_token] || options['auth_token'] || (local_api_model && local_api_model.auth_token)
12
- access_token = options[:access_token] || options['access_token']
10
+ auth_token = options[:auth_token] || options['auth_token'] || (local_api_model && local_api_model.auth_token)
11
+ access_token = options[:access_token] || options['access_token']
13
12
 
14
- authentication = { url: url, headers: {}, basic_auth: nil }
13
+ authentication = { url: url, headers: {}, basic_auth: nil }
15
14
 
16
- if access_token
17
- authentication[:headers] = { 'Authorization' => "Bearer #{access_token}" }
18
- elsif auth_token
19
- authentication[:basic_auth] = { username: auth_token }
20
- end
21
-
22
- authentication
15
+ if access_token
16
+ authentication[:headers] = { 'Authorization' => "Bearer #{access_token}" }
17
+ elsif auth_token
18
+ authentication[:basic_auth] = { username: auth_token }
23
19
  end
20
+
21
+ authentication
24
22
  end
25
23
  end
26
- end
24
+ end
@@ -1,13 +1,11 @@
1
- module Quaderno
2
- class Income < Base
3
- include Quaderno::Behavior::Block
1
+ class Quaderno::Income < Quaderno::Base
2
+ include Quaderno::Behavior::Block
4
3
 
5
- class << self
6
- undef :find, :update, :delete
7
- end
8
-
9
- api_model Quaderno::Income
10
- api_path 'income'
11
- is_a_document? true
4
+ class << self
5
+ undef :find, :update, :delete
12
6
  end
7
+
8
+ api_model Quaderno::Income
9
+ api_path 'income'
10
+ is_a_document? true
13
11
  end
@@ -1,13 +1,11 @@
1
- module Quaderno
2
- class Invoice < Base
3
- include Quaderno::Behavior::Deliver
4
- include Quaderno::Behavior::Payment
5
- include Quaderno::Behavior::Retrieve
6
- include Quaderno::Behavior::Block
1
+ class Quaderno::Invoice < Quaderno::Base
2
+ include Quaderno::Behavior::Deliver
3
+ include Quaderno::Behavior::Payment
4
+ include Quaderno::Behavior::Retrieve
5
+ include Quaderno::Behavior::Block
7
6
 
8
- api_model Quaderno::Invoice
9
- api_path 'invoices'
10
- retrieve_path 'charges'
11
- is_a_document? true
12
- end
7
+ api_model Quaderno::Invoice
8
+ api_path 'invoices'
9
+ retrieve_path 'charges'
10
+ is_a_document? true
13
11
  end
@@ -1,7 +1,4 @@
1
- module Quaderno
2
- class Item < Base
3
-
4
- api_model Quaderno::Item
5
- api_path 'items'
6
- end
1
+ class Quaderno::Item < Quaderno::Base
2
+ api_model Quaderno::Item
3
+ api_path 'items'
7
4
  end
@@ -1,4 +1,2 @@
1
- module Quaderno
2
- class Payment < OpenStruct
3
- end
1
+ class Quaderno::Payment < OpenStruct
4
2
  end
@@ -1,10 +1,8 @@
1
- module Quaderno
2
- class Receipt < Base
3
- include Quaderno::Behavior::Deliver
4
- include Quaderno::Behavior::Block
1
+ class Quaderno::Receipt < Quaderno::Base
2
+ include Quaderno::Behavior::Deliver
3
+ include Quaderno::Behavior::Block
5
4
 
6
- api_model Quaderno::Receipt
7
- api_path 'receipts'
8
- is_a_document? true
9
- end
5
+ api_model Quaderno::Receipt
6
+ api_path 'receipts'
7
+ is_a_document? true
10
8
  end
@@ -1,8 +1,5 @@
1
- module Quaderno
2
- class Recurring < Base
3
-
4
- api_model Quaderno::Recurring
5
- api_path 'recurring'
6
- is_a_document? true
7
- end
1
+ class Quaderno::Recurring < Quaderno::Base
2
+ api_model Quaderno::Recurring
3
+ api_path 'recurring'
4
+ is_a_document? true
8
5
  end
@@ -1,80 +1,78 @@
1
- module Quaderno
2
- class Report < Base
3
- api_model Quaderno::Report
4
- api_path 'reports'
1
+ class Quaderno::Report < Quaderno::Base
2
+ api_model Quaderno::Report
3
+ api_path 'reports'
5
4
 
6
- class << self
7
- undef :all, :find, :create, :update, :delete, :parse_nested
8
- end
5
+ class << self
6
+ undef :all, :find, :create, :update, :delete, :parse_nested
7
+ end
9
8
 
10
- def self.journal(options = {})
11
- authentication = get_authentication(options.merge(api_model: api_model))
12
- filter = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
9
+ def self.journal(options = {})
10
+ authentication = get_authentication(options.merge(api_model: api_model))
11
+ filter = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
13
12
 
14
- response = get("#{authentication[:url]}#{api_model.api_path}/journal.json",
15
- query: filter,
16
- basic_auth: authentication[:basic_auth],
17
- headers: version_header.merge(authentication[:headers])
18
- )
13
+ response = get("#{authentication[:url]}#{api_model.api_path}/journal.json",
14
+ query: filter,
15
+ basic_auth: authentication[:basic_auth],
16
+ headers: version_header.merge(authentication[:headers])
17
+ )
19
18
 
20
- check_exception_for(response, { rate_limit: true, subdomain_or_token: true })
19
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true })
21
20
 
22
- response.parsed_response
23
- end
21
+ response.parsed_response
22
+ end
24
23
 
25
- def self.taxes(options = {})
26
- authentication = get_authentication(options.merge(api_model: api_model))
27
- filter = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
24
+ def self.taxes(options = {})
25
+ authentication = get_authentication(options.merge(api_model: api_model))
26
+ filter = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
28
27
 
29
- response = get("#{authentication[:url]}#{api_model.api_path}/taxes.json",
30
- query: filter,
31
- basic_auth: authentication[:basic_auth],
32
- headers: version_header.merge(authentication[:headers])
33
- )
28
+ response = get("#{authentication[:url]}#{api_model.api_path}/taxes.json",
29
+ query: filter,
30
+ basic_auth: authentication[:basic_auth],
31
+ headers: version_header.merge(authentication[:headers])
32
+ )
34
33
 
35
- check_exception_for(response, { rate_limit: true, subdomain_or_token: true })
34
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true })
36
35
 
37
- response.parsed_response
38
- end
36
+ response.parsed_response
37
+ end
39
38
 
40
- def self.domestic_taxes(options = {})
41
- request_tax_report('domestic_taxes', options)
42
- end
39
+ def self.domestic_taxes(options = {})
40
+ request_tax_report('domestic_taxes', options)
41
+ end
43
42
 
44
- def self.sales_taxes(options = {})
45
- request_tax_report('sales_taxes', options)
46
- end
43
+ def self.sales_taxes(options = {})
44
+ request_tax_report('sales_taxes', options)
45
+ end
47
46
 
48
- def self.vat_moss(options = {})
49
- request_tax_report('vat_moss', options)
50
- end
47
+ def self.vat_moss(options = {})
48
+ request_tax_report('vat_moss', options)
49
+ end
51
50
 
52
- def self.ec_sales(options = {})
53
- request_tax_report('ec_sales', options)
54
- end
51
+ def self.ec_sales(options = {})
52
+ request_tax_report('ec_sales', options)
53
+ end
55
54
 
56
- def self.international_taxes(options = {})
57
- request_tax_report('international_taxes', options)
58
- end
55
+ def self.international_taxes(options = {})
56
+ request_tax_report('international_taxes', options)
57
+ end
59
58
 
60
- private
59
+ private
61
60
 
62
- def self.request_tax_report(tax_report_type, options)
63
- authentication = get_authentication(options.merge(api_model: api_model))
64
- filter = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
61
+ def self.request_tax_report(tax_report_type, options)
62
+ authentication = get_authentication(options.merge(api_model: api_model))
63
+ filter = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
65
64
 
66
- response = get("#{authentication[:url]}#{api_model.api_path}/#{tax_report_type}.json",
67
- query: filter,
68
- basic_auth: authentication[:basic_auth],
69
- headers: version_header.merge(authentication[:headers])
70
- )
65
+ response = get("#{authentication[:url]}#{api_model.api_path}/#{tax_report_type}.json",
66
+ query: filter,
67
+ basic_auth: authentication[:basic_auth],
68
+ headers: version_header.merge(authentication[:headers])
69
+ )
71
70
 
72
- check_exception_for(response, { rate_limit: true, subdomain_or_token: true })
71
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true })
73
72
 
74
- collection = Array.new
75
- response.parsed_response.each { |tax_report| collection << self.new(tax_report) }
73
+ collection = Array.new
74
+ response.parsed_response.each { |tax_report| collection << self.new(tax_report) }
76
75
 
77
- collection
78
- end
76
+ collection
79
77
  end
80
78
  end
@@ -1,63 +1,61 @@
1
- module Quaderno
2
- class TaxReport < OpenStruct
3
- end
1
+ class Quaderno::TaxReport < OpenStruct
2
+ end
4
3
 
5
- class Tax < Base
6
- api_model Quaderno::Tax
7
- api_path 'taxes'
4
+ class Quaderno::Tax < Quaderno::Base
5
+ api_model Quaderno::Tax
6
+ api_path 'taxes'
8
7
 
9
- class << self
10
- undef :find, :create, :update, :delete, :parse_nested
11
- end
8
+ class << self
9
+ undef :find, :create, :update, :delete, :parse_nested
10
+ end
12
11
 
13
- def self.calculate(options = {})
14
- authentication = get_authentication(options.merge(api_model: api_model))
15
- params = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
12
+ def self.calculate(options = {})
13
+ authentication = get_authentication(options.merge(api_model: api_model))
14
+ params = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
16
15
 
17
- response = get("#{authentication[:url]}taxes/calculate.json",
18
- query: params,
19
- basic_auth: authentication[:basic_auth],
20
- headers: version_header.merge(authentication[:headers])
21
- )
16
+ response = get("#{authentication[:url]}taxes/calculate.json",
17
+ query: params,
18
+ basic_auth: authentication[:basic_auth],
19
+ headers: version_header.merge(authentication[:headers])
20
+ )
22
21
 
23
- check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
24
- new response.parsed_response
25
- end
22
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
23
+ new response.parsed_response
24
+ end
26
25
 
27
- def self.validate_vat_number(country, vat_number, options = {})
28
- authentication = get_authentication(options.merge(api_model: api_model))
26
+ def self.validate_vat_number(country, vat_number, options = {})
27
+ authentication = get_authentication(options.merge(api_model: api_model))
29
28
 
30
- response = get("#{authentication[:url]}taxes/validate.json",
31
- query: { country: country, vat_number: vat_number },
32
- basic_auth: authentication[:basic_auth],
33
- headers: version_header.merge(authentication[:headers])
34
- )
29
+ response = get("#{authentication[:url]}taxes/validate.json",
30
+ query: { country: country, vat_number: vat_number },
31
+ basic_auth: authentication[:basic_auth],
32
+ headers: version_header.merge(authentication[:headers])
33
+ )
35
34
 
36
- check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
35
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
37
36
 
38
- response.parsed_response['valid']
39
- end
37
+ response.parsed_response['valid']
38
+ end
40
39
 
41
- def self.reports(options = {})
42
- authentication = get_authentication(options.merge(api_model: api_model))
43
- params = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
40
+ def self.reports(options = {})
41
+ authentication = get_authentication(options.merge(api_model: api_model))
42
+ params = options.delete_if { |k,v| %w(auth_token access_token api_url mode api_model).include? k.to_s }
44
43
 
45
- response = get("#{authentication[:url]}taxes/reports.json",
46
- query: params,
47
- basic_auth: authentication[:basic_auth],
48
- headers: version_header.merge(authentication[:headers])
49
- )
44
+ response = get("#{authentication[:url]}taxes/reports.json",
45
+ query: params,
46
+ basic_auth: authentication[:basic_auth],
47
+ headers: version_header.merge(authentication[:headers])
48
+ )
50
49
 
51
- array = response.parsed_response
52
- collection = Quaderno::Collection.new
53
- collection.current_page = response.headers['x-pages-currentpage']
54
- collection.total_pages = response.headers['x-pages-totalpages']
50
+ array = response.parsed_response
51
+ collection = Quaderno::Collection.new
52
+ collection.current_page = response.headers['x-pages-currentpage']
53
+ collection.total_pages = response.headers['x-pages-totalpages']
55
54
 
56
- array.each { |report| collection << Quaderno::TaxReport.new(report) }
55
+ array.each { |report| collection << Quaderno::TaxReport.new(report) }
57
56
 
58
- check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
57
+ check_exception_for(response, { rate_limit: true, subdomain_or_token: true, id: true })
59
58
 
60
- collection
61
- end
59
+ collection
62
60
  end
63
- end
61
+ end