moneybird 0.9.2 → 0.9.3
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 +4 -4
- data/.gitignore +1 -0
- data/lib/moneybird.rb +9 -17
- data/lib/moneybird/client.rb +39 -34
- data/lib/moneybird/http_error/authorization_required.rb +6 -0
- data/lib/moneybird/http_error/bad_request.rb +6 -0
- data/lib/moneybird/http_error/forbidden.rb +6 -0
- data/lib/moneybird/http_error/internal_server_error.rb +6 -0
- data/lib/moneybird/http_error/method_not_allowed.rb +6 -0
- data/lib/moneybird/http_error/not_accepted.rb +6 -0
- data/lib/moneybird/http_error/not_found.rb +6 -0
- data/lib/moneybird/http_error/payment_required.rb +6 -0
- data/lib/moneybird/http_error/too_many_requests.rb +6 -0
- data/lib/moneybird/http_error/unprocessable_entity.rb +6 -0
- data/lib/moneybird/middleware/error_handling.rb +25 -0
- data/lib/moneybird/middleware/pagination.rb +29 -0
- data/lib/moneybird/middleware/pagination/links.rb +17 -0
- data/lib/moneybird/resource.rb +0 -1
- data/lib/moneybird/resource/administration.rb +20 -0
- data/lib/moneybird/resource/contact.rb +30 -29
- data/lib/moneybird/resource/documents/general_document.rb +25 -0
- data/lib/moneybird/resource/documents/general_journal_document.rb +26 -0
- data/lib/moneybird/resource/documents/purchase_invoice.rb +49 -0
- data/lib/moneybird/resource/documents/receipt.rb +35 -0
- data/lib/moneybird/resource/documents/typeless_document.rb +26 -0
- data/lib/moneybird/resource/estimate.rb +24 -23
- data/lib/moneybird/resource/financial_mutation.rb +14 -12
- data/lib/moneybird/resource/purchase_invoice.rb +1 -0
- data/lib/moneybird/resource/sales_invoice.rb +1 -0
- data/lib/moneybird/resource/synchronization.rb +13 -0
- data/lib/moneybird/service/administration.rb +6 -4
- data/lib/moneybird/service/contact.rb +7 -8
- data/lib/moneybird/service/document_style.rb +2 -0
- data/lib/moneybird/service/documents/general_document.rb +21 -0
- data/lib/moneybird/service/documents/general_journal_document.rb +21 -0
- data/lib/moneybird/service/documents/purchase_invoice.rb +21 -0
- data/lib/moneybird/service/documents/receipt.rb +21 -0
- data/lib/moneybird/service/documents/typeless_document.rb +21 -0
- data/lib/moneybird/service/estimate.rb +3 -0
- data/lib/moneybird/service/financial_account.rb +2 -0
- data/lib/moneybird/service/financial_mutation.rb +3 -0
- data/lib/moneybird/service/identity.rb +2 -0
- data/lib/moneybird/service/ledger_account.rb +2 -0
- data/lib/moneybird/service/product.rb +2 -0
- data/lib/moneybird/service/purchase_invoice.rb +2 -0
- data/lib/moneybird/service/recurring_sales_invoice.rb +3 -0
- data/lib/moneybird/service/sales_invoice.rb +3 -0
- data/lib/moneybird/service/tax_rate.rb +2 -0
- data/lib/moneybird/service/webhook.rb +2 -0
- data/lib/moneybird/service/workflow.rb +2 -0
- data/lib/moneybird/traits/delete.rb +0 -6
- data/lib/moneybird/traits/find.rb +1 -7
- data/lib/moneybird/traits/find_all.rb +33 -7
- data/lib/moneybird/traits/save.rb +10 -27
- data/lib/moneybird/traits/service.rb +1 -3
- data/lib/moneybird/traits/synchronization.rb +11 -0
- data/lib/moneybird/version.rb +1 -1
- data/moneybird.gemspec +3 -1
- metadata +69 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 496ef32fbfca566374e3a5a674d66e3ce57b25b9
|
4
|
+
data.tar.gz: 30c414e205265c5b7e163b43bcaad3dc873b8067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f7b3a30290815ec5696f8138baeb5990ce09d2d7f1697cf4c229c2396641894cd90d4dc401a31ca8595330dd3f5c9f034df9969596e926e66db3175b2c55765
|
7
|
+
data.tar.gz: 28eb63c622f6daab61bfc2f99bbc10465ad838ac5e6ecbaa26a8b21e284ed6de19a1af3977b732522ec8a435f2d95461e07e946f5b24ab5808b311ebcd0e60a9
|
data/.gitignore
CHANGED
data/lib/moneybird.rb
CHANGED
@@ -10,26 +10,18 @@ require 'json'
|
|
10
10
|
require 'net/http'
|
11
11
|
|
12
12
|
module Moneybird
|
13
|
-
module
|
14
|
-
module
|
13
|
+
module HttpError; end
|
14
|
+
module Middleware; end
|
15
|
+
module Service; end
|
16
|
+
module Traits; end
|
15
17
|
end
|
16
18
|
|
17
|
-
require
|
18
|
-
require "moneybird/traits/find"
|
19
|
-
require "moneybird/traits/find_all"
|
20
|
-
require "moneybird/traits/service"
|
21
|
-
require "moneybird/traits/save"
|
22
|
-
require "moneybird/traits/delete"
|
23
|
-
require "moneybird/client"
|
24
|
-
require "moneybird/resource"
|
25
|
-
require "moneybird/webhook"
|
19
|
+
require 'moneybird/resource'
|
26
20
|
|
27
|
-
Dir[File.join(File.dirname(__FILE__), 'moneybird
|
28
|
-
require
|
21
|
+
Dir[File.join(File.dirname(__FILE__), 'moneybird', 'traits', '*.rb')].each do |file|
|
22
|
+
require file
|
29
23
|
end
|
30
24
|
|
31
|
-
Dir[File.join(File.dirname(__FILE__), 'moneybird
|
32
|
-
require
|
25
|
+
Dir[File.join(File.dirname(__FILE__), 'moneybird', '**', '**.rb')].each do |file|
|
26
|
+
require file
|
33
27
|
end
|
34
|
-
|
35
|
-
require "moneybird/version"
|
data/lib/moneybird/client.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require 'faraday_middleware'
|
2
|
+
|
1
3
|
module Moneybird
|
2
4
|
class Client
|
3
|
-
attr_reader :bearer_token
|
5
|
+
attr_reader :bearer_token
|
4
6
|
attr_accessor :errors
|
5
7
|
attr_writer :http, :faraday_adapter
|
6
8
|
|
@@ -9,7 +11,7 @@ module Moneybird
|
|
9
11
|
end
|
10
12
|
|
11
13
|
def base_url
|
12
|
-
"https://moneybird.com/
|
14
|
+
"https://moneybird.com/"
|
13
15
|
end
|
14
16
|
|
15
17
|
def version
|
@@ -21,50 +23,53 @@ module Moneybird
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def http
|
24
|
-
@http ||=
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
@http ||= Faraday.new(url: base_url) do |faraday|
|
27
|
+
faraday.headers = faraday_headers
|
28
|
+
faraday.request :url_encoded
|
29
|
+
faraday.response :json
|
30
|
+
faraday.use Moneybird::Middleware::ErrorHandling
|
31
|
+
faraday.use Moneybird::Middleware::Pagination
|
32
|
+
# faraday.response :logger do |logger|
|
33
|
+
# logger.filter(/(Bearer)\s(\S+)/, '\1[REMOVED]')
|
34
|
+
# end
|
35
|
+
faraday.adapter faraday_adapter
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
34
|
-
|
35
|
-
{
|
36
|
-
|
37
|
-
|
38
|
-
'Authorization' => "Bearer #{bearer_token}"
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
def uri_for_path(path)
|
43
|
-
URI.parse(File.join(base_url, path))
|
39
|
+
%i[get patch post delete].each do |call|
|
40
|
+
define_method call do |path, options = {}|
|
41
|
+
http.public_send(call, "/api/#{version}/#{path}", options).body
|
42
|
+
end
|
44
43
|
end
|
45
44
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
45
|
+
def get_all_pages(path, options = {})
|
46
|
+
get_each_page(path, options).inject([]) do |array, objects|
|
47
|
+
array += objects
|
48
|
+
end
|
49
49
|
end
|
50
50
|
|
51
|
-
def
|
52
|
-
|
53
|
-
|
51
|
+
def get_each_page(path, options = {})
|
52
|
+
return enum_for(:get_each_page, path, options) unless block_given?
|
53
|
+
path = "/api/#{version}/#{path}"
|
54
|
+
while path
|
55
|
+
response = http.get(path, options)
|
56
|
+
yield response.body
|
57
|
+
path = (response[:pagination_links].next if response[:pagination_links])
|
58
|
+
end
|
54
59
|
end
|
55
60
|
|
56
|
-
def
|
57
|
-
|
58
|
-
@_last_response = http.post(uri.request_uri, body, self.headers.merge(headers))
|
61
|
+
def administrations
|
62
|
+
Moneybird::Service::Administration.new(self).all
|
59
63
|
end
|
60
64
|
|
61
|
-
|
62
|
-
uri = uri_for_path(path)
|
63
|
-
@_last_response = http.delete(uri.request_uri, nil, self.headers.merge(headers))
|
64
|
-
end
|
65
|
+
private
|
65
66
|
|
66
|
-
def
|
67
|
-
|
67
|
+
def faraday_headers
|
68
|
+
{
|
69
|
+
'Accept' => 'application/json',
|
70
|
+
'Content-Type' => 'application/json',
|
71
|
+
'Authorization' => "Bearer #{bearer_token}"
|
72
|
+
}
|
68
73
|
end
|
69
74
|
end
|
70
75
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Moneybird
|
4
|
+
module Middleware
|
5
|
+
class ErrorHandling < Faraday::Response::Middleware
|
6
|
+
ERROR_MAP = {
|
7
|
+
400 => Moneybird::HttpError::BadRequest,
|
8
|
+
401 => Moneybird::HttpError::AuthorizationRequired,
|
9
|
+
402 => Moneybird::HttpError::PaymentRequired,
|
10
|
+
403 => Moneybird::HttpError::Forbidden,
|
11
|
+
404 => Moneybird::HttpError::NotFound,
|
12
|
+
405 => Moneybird::HttpError::MethodNotAllowed,
|
13
|
+
406 => Moneybird::HttpError::NotAccepted,
|
14
|
+
422 => Moneybird::HttpError::UnprocessableEntity,
|
15
|
+
429 => Moneybird::HttpError::TooManyRequests,
|
16
|
+
500 => Moneybird::HttpError::InternalServerError
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
def on_complete(response)
|
20
|
+
key = response[:status].to_i
|
21
|
+
raise ERROR_MAP[key], response if ERROR_MAP.key? key
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'link_header'
|
2
|
+
|
3
|
+
module Moneybird
|
4
|
+
module Middleware
|
5
|
+
class Pagination < Faraday::Response::Middleware
|
6
|
+
def on_complete(response)
|
7
|
+
return unless response[:response_headers]
|
8
|
+
link_header = response[:response_headers][:link]
|
9
|
+
return unless link_header
|
10
|
+
response[:response_headers][:pagination_links] = find_links(link_header)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def find_links(link_header)
|
16
|
+
Links.new.tap do |links|
|
17
|
+
%w[prev next first last current].each do |page|
|
18
|
+
links.public_send("#{page}=", find_link(link_header, page))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def find_link(header, rel)
|
24
|
+
link = ::LinkHeader.parse(header).links.find { |l| l['rel'] == rel }
|
25
|
+
link.to_a.first if link
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'link_header'
|
2
|
+
|
3
|
+
module Moneybird
|
4
|
+
module Middleware
|
5
|
+
class Pagination < Faraday::Response::Middleware
|
6
|
+
class Links
|
7
|
+
attr_accessor :first, :prev, :current, :next, :last
|
8
|
+
alias previous prev
|
9
|
+
alias prevous= prev=
|
10
|
+
|
11
|
+
def last_page?
|
12
|
+
!current.nil? && !last.nil? && current == last
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/moneybird/resource.rb
CHANGED
@@ -63,5 +63,25 @@ module Moneybird::Resource
|
|
63
63
|
def financial_mutations
|
64
64
|
Moneybird::Service::FinancialMutation.new(@client, id)
|
65
65
|
end
|
66
|
+
|
67
|
+
def general_documents
|
68
|
+
Moneybird::Service::Document::GeneralDocument.new(@client, id)
|
69
|
+
end
|
70
|
+
|
71
|
+
def general_journal_documents
|
72
|
+
Moneybird::Service::Document::GeneralJournalDocument.new(@client, id)
|
73
|
+
end
|
74
|
+
|
75
|
+
def receipts
|
76
|
+
Moneybird::Service::Document::Receipt.new(@client, id)
|
77
|
+
end
|
78
|
+
|
79
|
+
def purchase_invoice_documents
|
80
|
+
Moneybird::Service::Document::PurchaseInvoice.new(@client, id)
|
81
|
+
end
|
82
|
+
|
83
|
+
def typeless_documents
|
84
|
+
Moneybird::Service::Document::TypelessDocument.new(@client, id)
|
85
|
+
end
|
66
86
|
end
|
67
87
|
end
|
@@ -4,50 +4,51 @@ module Moneybird::Resource
|
|
4
4
|
extend Moneybird::Resource::ClassMethods
|
5
5
|
|
6
6
|
has_attributes %i(
|
7
|
-
id
|
8
|
-
administration_id
|
9
|
-
company_name
|
10
|
-
firstname
|
11
|
-
lastname
|
12
|
-
attention
|
13
7
|
address1
|
14
8
|
address2
|
15
|
-
|
9
|
+
administration_id
|
10
|
+
attention
|
11
|
+
bank_account
|
12
|
+
chamber_of_commerce
|
16
13
|
city
|
14
|
+
company_name
|
17
15
|
country
|
16
|
+
created_at
|
17
|
+
credit_card_number
|
18
|
+
credit_card_reference
|
19
|
+
credit_card_type
|
20
|
+
custom_fields
|
21
|
+
customer_id
|
22
|
+
delivery_method
|
18
23
|
email
|
24
|
+
email_ubl
|
25
|
+
estimate_workflow_id
|
26
|
+
events
|
27
|
+
firstname
|
28
|
+
id
|
29
|
+
invoice_workflow_id
|
30
|
+
lastname
|
31
|
+
notes
|
19
32
|
phone
|
20
|
-
|
21
|
-
delivery_method
|
22
|
-
customer_id
|
23
|
-
tax_number
|
24
|
-
chamber_of_commerce
|
25
|
-
bank_account
|
26
|
-
send_invoices_to_attention
|
27
|
-
send_invoices_to_email
|
33
|
+
sales_invoices_url
|
28
34
|
send_estimates_to_attention
|
29
35
|
send_estimates_to_email
|
36
|
+
send_invoices_to_attention
|
37
|
+
send_invoices_to_email
|
38
|
+
send_method
|
30
39
|
sepa_active
|
40
|
+
sepa_bic
|
31
41
|
sepa_iban
|
32
42
|
sepa_iban_account_name
|
33
|
-
sepa_bic
|
34
|
-
sepa_mandate_id
|
35
43
|
sepa_mandate_date
|
44
|
+
sepa_mandate_id
|
36
45
|
sepa_sequence_type
|
37
|
-
|
38
|
-
credit_card_reference
|
39
|
-
credit_card_type
|
40
|
-
tax_number_validated_at
|
46
|
+
tax_number
|
41
47
|
tax_number_valid
|
42
|
-
|
48
|
+
tax_number_validated_at
|
43
49
|
updated_at
|
44
|
-
|
45
|
-
|
46
|
-
events
|
47
|
-
email_ubl
|
48
|
-
sales_invoices_url
|
49
|
-
invoice_workflow_id
|
50
|
-
estimate_workflow_id
|
50
|
+
version
|
51
|
+
zipcode
|
51
52
|
)
|
52
53
|
|
53
54
|
def notes=(notes)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Moneybird::Resource::Documents
|
2
|
+
class GeneralDocument
|
3
|
+
include Moneybird::Resource
|
4
|
+
extend Moneybird::Resource::ClassMethods
|
5
|
+
|
6
|
+
has_attributes %i(
|
7
|
+
id
|
8
|
+
administration_id
|
9
|
+
contact
|
10
|
+
contact_id
|
11
|
+
reference
|
12
|
+
date
|
13
|
+
due_date
|
14
|
+
entry_number
|
15
|
+
state
|
16
|
+
exchange_rate
|
17
|
+
created_at
|
18
|
+
updated_at
|
19
|
+
version
|
20
|
+
notes
|
21
|
+
attachments
|
22
|
+
events
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|