moneybird 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|