moneybird 0.9.6 → 0.10.1

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.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +1 -75
  3. data/.github/dependabot.yml +13 -0
  4. data/.github/workflows/ruby.yml +38 -0
  5. data/README.md +5 -3
  6. data/lib/moneybird/client.rb +7 -4
  7. data/lib/moneybird/http_error/authorization_required.rb +1 -1
  8. data/lib/moneybird/http_error/bad_request.rb +1 -1
  9. data/lib/moneybird/http_error/forbidden.rb +1 -1
  10. data/lib/moneybird/http_error/internal_server_error.rb +1 -1
  11. data/lib/moneybird/http_error/method_not_allowed.rb +1 -1
  12. data/lib/moneybird/http_error/not_accepted.rb +1 -1
  13. data/lib/moneybird/http_error/not_found.rb +1 -1
  14. data/lib/moneybird/http_error/payment_required.rb +1 -1
  15. data/lib/moneybird/http_error/too_many_requests.rb +1 -1
  16. data/lib/moneybird/http_error/unprocessable_entity.rb +1 -1
  17. data/lib/moneybird/middleware/error_handling.rb +5 -1
  18. data/lib/moneybird/resource/administration.rb +12 -0
  19. data/lib/moneybird/resource/contact.rb +8 -2
  20. data/lib/moneybird/resource/custom_field.rb +16 -0
  21. data/lib/moneybird/resource/documents/purchase_invoice.rb +32 -24
  22. data/lib/moneybird/resource/documents/receipt.rb +38 -16
  23. data/lib/moneybird/resource/estimate.rb +4 -4
  24. data/lib/moneybird/resource/{purchase_invoice.rb → external_sales_invoice.rb} +26 -22
  25. data/lib/moneybird/resource/financial_mutation.rb +5 -0
  26. data/lib/moneybird/resource/identity.rb +5 -1
  27. data/lib/moneybird/resource/invoice/details.rb +1 -0
  28. data/lib/moneybird/resource/invoice/payment.rb +1 -0
  29. data/lib/moneybird/resource/recurring_sales_invoice.rb +2 -2
  30. data/lib/moneybird/resource/sales_invoice.rb +23 -4
  31. data/lib/moneybird/resource/webhook.rb +1 -0
  32. data/lib/moneybird/resource.rb +1 -0
  33. data/lib/moneybird/service/administration.rb +3 -2
  34. data/lib/moneybird/service/custom_field.rb +17 -0
  35. data/lib/moneybird/service/{purchase_invoice.rb → external_sales_invoice.rb} +3 -3
  36. data/lib/moneybird/service/financial_mutation.rb +4 -0
  37. data/lib/moneybird/service/payment.rb +19 -0
  38. data/lib/moneybird/service/sales_invoice.rb +3 -1
  39. data/lib/moneybird/traits/administration_service.rb +4 -2
  40. data/lib/moneybird/traits/download_pdf.rb +9 -0
  41. data/lib/moneybird/traits/find_all.rb +9 -3
  42. data/lib/moneybird/traits/mark_as_uncollectible.rb +15 -0
  43. data/lib/moneybird/traits/save.rb +0 -4
  44. data/lib/moneybird/traits/send_invoice.rb +3 -1
  45. data/lib/moneybird/traits/service.rb +4 -0
  46. data/lib/moneybird/version.rb +1 -1
  47. data/lib/moneybird/webhook.rb +3 -2
  48. data/lib/moneybird.rb +9 -4
  49. data/moneybird.gemspec +3 -3
  50. metadata +27 -16
  51. data/.travis.yml +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: fd3bbfa23e8c17db1d1acdec2a586d9cea28276e
4
- data.tar.gz: e2ad36cff2837ac4f4e760620bbff99124751d5f
2
+ SHA256:
3
+ metadata.gz: 4e51db36506d93746d8be9c4c38e3b7a1aff68caac9dbf23bfc246c32ec55a09
4
+ data.tar.gz: a69bcfe1969ee0a04188dd7818c5d4efcba26ab317823fdd44707e4d6e934582
5
5
  SHA512:
6
- metadata.gz: 69b3618158f91006fd4f956ffe2d3384dd247c0891b1f6600c450b735a56ee171da47b854e92237cf43733a97406214c2c25425b838ca2399dc086848c61289a
7
- data.tar.gz: e7af996d8a016de028db757602dc0697a14a64746fe592d29a12ef315f4d165e6aefc0b95802c702ea51252e053e8a939aeb6c607465f2476751139b7f7551ff
6
+ metadata.gz: ab851017c096b28964609330aaebc76a4607214585ff9440c06bc005ffed4db5ae9bdbcc075aa18905dc0d33da68b92bca1640531c0292a5eb339641617d2fd6
7
+ data.tar.gz: '048064af32f069dcc729cbddb3e8e867825a0fda4ad4964b0b2d9d6a3fec303f55d63d8a67bca39d9b437c45c261991da59bae64ee4f2245c36a8e0c3ccababe'
data/.codeclimate.yml CHANGED
@@ -23,78 +23,4 @@ ratings:
23
23
  - "**.rb"
24
24
  exclude_paths:
25
25
  - spec/
26
- ---
27
- engines:
28
- duplication:
29
- enabled: true
30
- config:
31
- languages:
32
- - ruby
33
- - javascript
34
- - python
35
- - php
36
- fixme:
37
- enabled: true
38
- rubocop:
39
- enabled: true
40
- ratings:
41
- paths:
42
- - "**.inc"
43
- - "**.js"
44
- - "**.jsx"
45
- - "**.module"
46
- - "**.php"
47
- - "**.py"
48
- - "**.rb"
49
- exclude_paths:
50
- - spec/
51
- ---
52
- engines:
53
- duplication:
54
- enabled: true
55
- config:
56
- languages:
57
- - ruby
58
- - javascript
59
- - python
60
- - php
61
- fixme:
62
- enabled: true
63
- rubocop:
64
- enabled: true
65
- ratings:
66
- paths:
67
- - "**.inc"
68
- - "**.js"
69
- - "**.jsx"
70
- - "**.module"
71
- - "**.php"
72
- - "**.py"
73
- - "**.rb"
74
- exclude_paths:
75
- - spec/
76
- ---
77
- engines:
78
- duplication:
79
- enabled: true
80
- config:
81
- languages:
82
- - ruby
83
- - javascript
84
- - python
85
- - php
86
- fixme:
87
- enabled: true
88
- rubocop:
89
- enabled: true
90
- ratings:
91
- paths:
92
- - "**.inc"
93
- - "**.js"
94
- - "**.jsx"
95
- - "**.module"
96
- - "**.php"
97
- - "**.py"
98
- - "**.rb"
99
- exclude_paths:
100
- - spec/
26
+
@@ -0,0 +1,13 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "04:00"
8
+ open-pull-requests-limit: 10
9
+
10
+ - package-ecosystem: "github-actions"
11
+ directory: "/"
12
+ schedule:
13
+ interval: "daily"
@@ -0,0 +1,38 @@
1
+ name: Ruby
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-latest
8
+
9
+ strategy:
10
+ matrix:
11
+ ruby_version: [2.5, 2.6, 2.7, 3.0]
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2.3.5
15
+
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby_version }}
20
+
21
+ - uses: amancevice/setup-code-climate@v0
22
+ name: CodeClimate Install
23
+ with:
24
+ cc_test_reporter_id: 0b8e41ecbc26637a7db4e6e9d4581c445441674f689016ab45fb5c51242b59bf
25
+
26
+ - name: CodeClimate Pre-build Notification
27
+ run: cc-test-reporter before-build
28
+
29
+ - name: Build and test with Rake
30
+ env:
31
+ CI: true
32
+ run: |
33
+ gem install bundler
34
+ bundle install --jobs 4 --retry 3
35
+ bundle exec rake
36
+
37
+ - name: CodeClimate Post-build Notification
38
+ run: cc-test-reporter after-build
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Moneybird [![Build Status](https://travis-ci.org/maartenvanvliet/moneybird.svg?branch=master)](https://travis-ci.org/maartenvanvliet/moneybird) [![Code Climate](https://codeclimate.com/github/maartenvanvliet/moneybird/badges/gpa.svg)](https://codeclimate.com/github/maartenvanvliet/moneybird) [![Test Coverage](https://codeclimate.com/github/maartenvanvliet/moneybird/badges/coverage.svg)](https://codeclimate.com/github/maartenvanvliet/moneybird/coverage)
1
+ # Moneybird [![Build Status](https://github.com/maartenvanvliet/moneybird/workflows/Ruby/badge.svg?branch=master)](https://github.com/maartenvanvliet/moneybird/actions?query=workflow%3ARuby) [![Code Climate](https://codeclimate.com/github/maartenvanvliet/moneybird/badges/gpa.svg)](https://codeclimate.com/github/maartenvanvliet/moneybird) [![Test Coverage](https://codeclimate.com/github/maartenvanvliet/moneybird/badges/coverage.svg)](https://codeclimate.com/github/maartenvanvliet/moneybird/coverage)
2
2
 
3
3
  Gem to talk to the Moneybird REST API. Right now you'll need to get a 'bearer' token for the client to work, oauth2 support may added later. This gem is still under construction and any methods may still change signature without notice until 1.0 is released.
4
4
 
@@ -36,6 +36,9 @@ administration = administrations.first
36
36
  # List invoices
37
37
  administration.sales_invoices.all
38
38
 
39
+ # List invoices with a specific state
40
+ administration.sales_invoices.all(filter: 'state:uncollectible')
41
+
39
42
  # List contacts
40
43
  administration.contacts.all
41
44
 
@@ -46,7 +49,7 @@ administration.contacts.find(moneybird_id)
46
49
  administration.contacts.find_by_customer_id(customer_id)
47
50
 
48
51
  # Create contact
49
- administrations.contacts.create(company_name: 'ACME', firstname: 'Foo', lastname: 'Bar')
52
+ administration.contacts.create(company_name: 'ACME', firstname: 'Foo', lastname: 'Bar')
50
53
 
51
54
  # Update contact
52
55
  contact = administration.contacts.all.first
@@ -82,4 +85,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/maarte
82
85
  ## License
83
86
 
84
87
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
85
-
@@ -29,9 +29,7 @@ module Moneybird
29
29
  faraday.response :json
30
30
  faraday.use Moneybird::Middleware::ErrorHandling
31
31
  faraday.use Moneybird::Middleware::Pagination
32
- # faraday.response :logger do |logger|
33
- # logger.filter(/(Bearer)\s(\S+)/, '\1[REMOVED]')
34
- # end
32
+
35
33
  faraday.adapter faraday_adapter
36
34
  end
37
35
  end
@@ -39,6 +37,11 @@ module Moneybird
39
37
  %i[get patch post delete].each do |call|
40
38
  define_method call do |path, options = {}|
41
39
  http.public_send(call, "/api/#{version}/#{path}", options).body
40
+
41
+ rescue Faraday::ParsingError => e
42
+ return e.response['Location'] if e.response.status == 302
43
+
44
+ raise e
42
45
  end
43
46
  end
44
47
 
@@ -72,4 +75,4 @@ module Moneybird
72
75
  }
73
76
  end
74
77
  end
75
- end
78
+ end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class AuthorizationRequired < StandardError
3
+ class AuthorizationRequired < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class BadRequest < StandardError
3
+ class BadRequest < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class Forbidden < StandardError
3
+ class Forbidden < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class InternalServerError < StandardError
3
+ class InternalServerError < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class MethodNotAllowed < StandardError
3
+ class MethodNotAllowed < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class NotAccepted < StandardError
3
+ class NotAccepted < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class NotFound < StandardError
3
+ class NotFound < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class PaymentRequired < StandardError
3
+ class PaymentRequired < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class TooManyRequests < StandardError
3
+ class TooManyRequests < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Moneybird
2
2
  module HttpError
3
- class UnprocessableEntity < StandardError
3
+ class UnprocessableEntity < Faraday::Error
4
4
  end
5
5
  end
6
6
  end
@@ -18,7 +18,11 @@ module Moneybird
18
18
 
19
19
  def on_complete(response)
20
20
  key = response[:status].to_i
21
- raise ERROR_MAP[key], response if ERROR_MAP.key? key
21
+ raise ERROR_MAP[key], response_values(response) if ERROR_MAP.key? key
22
+ end
23
+
24
+ def response_values(response)
25
+ { status: response.status, headers: response.response_headers, body: response.body }
22
26
  end
23
27
  end
24
28
  end
@@ -24,6 +24,10 @@ module Moneybird::Resource
24
24
  Moneybird::Service::SalesInvoice.new(@client, id)
25
25
  end
26
26
 
27
+ def external_sales_invoices
28
+ Moneybird::Service::ExternalSalesInvoice.new(@client, id)
29
+ end
30
+
27
31
  def recurring_sales_invoices
28
32
  Moneybird::Service::RecurringSalesInvoice.new(@client, id)
29
33
  end
@@ -52,6 +56,14 @@ module Moneybird::Resource
52
56
  Moneybird::Service::Workflow.new(@client, id)
53
57
  end
54
58
 
59
+ def custom_fields
60
+ Moneybird::Service::CustomField.new(@client, id)
61
+ end
62
+
63
+ def document_styles
64
+ Moneybird::Service::DocumentStyle.new(@client, id)
65
+ end
66
+
55
67
  def tax_rates
56
68
  Moneybird::Service::TaxRate.new(@client, id)
57
69
  end
@@ -43,6 +43,8 @@ module Moneybird::Resource
43
43
  sepa_mandate_date
44
44
  sepa_mandate_id
45
45
  sepa_sequence_type
46
+ si_identifier
47
+ si_identifier_type
46
48
  tax_number
47
49
  tax_number_valid
48
50
  tax_number_validated_at
@@ -52,11 +54,15 @@ module Moneybird::Resource
52
54
  )
53
55
 
54
56
  def notes=(notes)
55
- @notes ||= notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
57
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
56
58
  end
57
59
 
58
60
  def events=(events)
59
- @events ||= events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
61
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
62
+ end
63
+
64
+ def custom_fields=(custom_fields)
65
+ @custom_fields = custom_fields.map { |custom_field| Moneybird::Resource::CustomField.build(custom_field) }
60
66
  end
61
67
  end
62
68
  end
@@ -0,0 +1,16 @@
1
+ module Moneybird::Resource
2
+ class CustomField
3
+ include Moneybird::Resource
4
+ extend Moneybird::Resource::ClassMethods
5
+
6
+ has_attributes %i(
7
+ administration_id
8
+ created_at
9
+ id
10
+ name
11
+ source
12
+ updated_at
13
+ value
14
+ )
15
+ end
16
+ end
@@ -4,46 +4,54 @@ module Moneybird::Resource::Documents
4
4
  extend Moneybird::Resource::ClassMethods
5
5
 
6
6
  has_attributes %i(
7
- id
8
7
  administration_id
8
+ attachments
9
9
  contact
10
10
  contact_id
11
- reference
11
+ created_at
12
+ currency
12
13
  date
14
+ details
13
15
  due_date
14
16
  entry_number
15
- state
17
+ events
16
18
  exchange_rate
17
- created_at
18
- updated_at
19
- version
19
+ id
20
20
  notes
21
- attachments
22
- events
23
- currency
24
- revenue_invoice
25
- prices_are_incl_tax
26
21
  origin
27
22
  paid_at
28
- tax_number
29
- total_price_excl_tax
30
- total_price_excl_tax_base
31
- total_price_incl_tax
32
- total_price_incl_tax_base
33
- details
34
23
  payments
35
- currency
36
- revenue_invoice
37
24
  prices_are_incl_tax
38
- origin
39
- paid_at
25
+ reference
26
+ revenue_invoice
27
+ state
40
28
  tax_number
41
29
  total_price_excl_tax
42
30
  total_price_excl_tax_base
43
31
  total_price_incl_tax
44
32
  total_price_incl_tax_base
45
- details
46
- payments
33
+ updated_at
34
+ version
47
35
  )
36
+
37
+ def notes=(notes)
38
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
39
+ end
40
+
41
+ def contact=(attributes)
42
+ @contact = Moneybird::Resource::Contact.build(attributes)
43
+ end
44
+
45
+ def details=(line_items)
46
+ @details = line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
47
+ end
48
+
49
+ def events=(events)
50
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
51
+ end
52
+
53
+ def payments=(payments)
54
+ @payments = payments.map{ |payment| Moneybird::Resource::Invoice::Payment.build(payment) }
55
+ end
48
56
  end
49
- end
57
+ end
@@ -4,32 +4,54 @@ module Moneybird::Resource::Documents
4
4
  extend Moneybird::Resource::ClassMethods
5
5
 
6
6
  has_attributes %i(
7
- id
8
7
  administration_id
8
+ attachments
9
+ contact
10
+ contact_id
11
+ created_at
9
12
  currency
10
- revenue_invoice
11
- prices_are_incl_tax
13
+ date
14
+ details
15
+ due_date
16
+ entry_number
17
+ events
18
+ exchange_rate
19
+ id
20
+ notes
12
21
  origin
13
22
  paid_at
14
- tax_number
15
- total_price_excl_tax
16
- total_price_excl_tax_base
17
- total_price_incl_tax
18
- total_price_incl_tax_base
19
- details
20
23
  payments
21
- currency
22
- revenue_invoice
23
24
  prices_are_incl_tax
24
- origin
25
- paid_at
25
+ reference
26
+ revenue_invoice
27
+ state
26
28
  tax_number
27
29
  total_price_excl_tax
28
30
  total_price_excl_tax_base
29
31
  total_price_incl_tax
30
32
  total_price_incl_tax_base
31
- details
32
- payments
33
+ updated_at
34
+ version
33
35
  )
36
+
37
+ def notes=(notes)
38
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
39
+ end
40
+
41
+ def contact=(attributes)
42
+ @contact = Moneybird::Resource::Contact.build(attributes)
43
+ end
44
+
45
+ def details=(line_items)
46
+ @details = line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
47
+ end
48
+
49
+ def events=(events)
50
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
51
+ end
52
+
53
+ def payments=(payments)
54
+ @payments = payments.map{ |payment| Moneybird::Resource::Invoice::Payment.build(payment) }
55
+ end
34
56
  end
35
- end
57
+ end
@@ -48,15 +48,15 @@ module Moneybird::Resource
48
48
  )
49
49
 
50
50
  def notes=(notes)
51
- @notes ||= notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
51
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
52
52
  end
53
53
 
54
54
  def contact=(attributes)
55
- @contact ||= Moneybird::Resource::Contact.build(attributes)
55
+ @contact = Moneybird::Resource::Contact.build(attributes)
56
56
  end
57
57
 
58
58
  def details=(line_items)
59
- @details ||= line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
59
+ @details = line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
60
60
  end
61
61
  end
62
- end
62
+ end
@@ -1,57 +1,61 @@
1
1
  module Moneybird::Resource
2
- class PurchaseInvoice
2
+ class ExternalSalesInvoice
3
3
  include Moneybird::Resource
4
4
  extend Moneybird::Resource::ClassMethods
5
5
 
6
6
  has_attributes %i(
7
+ id
7
8
  administration_id
8
- attachments
9
- contact
10
9
  contact_id
11
- created_at
12
- currency
10
+ contact
13
11
  date
14
- details
12
+ state
15
13
  due_date
14
+ reference
16
15
  entry_number
17
- events
18
- exchange_rate
19
- id
20
- notes
21
16
  origin
17
+ source
18
+ source_url
19
+ currency
22
20
  paid_at
21
+ created_at
22
+ updated_at
23
+ version
24
+ details
23
25
  payments
26
+ notes
27
+ attachments
28
+ events
29
+ tax_totals
30
+ total_paid
31
+ total_unpaid
32
+ total_unpaid_base
24
33
  prices_are_incl_tax
25
- reference
26
- revenue_invoice
27
- state
28
- tax_number
29
34
  total_price_excl_tax
30
35
  total_price_excl_tax_base
31
36
  total_price_incl_tax
32
37
  total_price_incl_tax_base
33
- updated_at
34
- version
35
38
  )
36
39
 
37
40
  def notes=(notes)
38
- @notes ||= notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
41
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
39
42
  end
40
43
 
41
44
  def contact=(attributes)
42
45
  @contact = Moneybird::Resource::Contact.build(attributes)
43
46
  end
44
47
 
48
+ def payments=(payments)
49
+ payment_data = payments.map{ |payment| Moneybird::Resource::Invoice::Payment.build(payment) }
50
+ @payments = Moneybird::Service::Payment.new(client, administration_id, preloaded_data: payment_data, invoice_id: id)
51
+ end
52
+
45
53
  def details=(line_items)
46
54
  @details = line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
47
55
  end
48
56
 
49
57
  def events=(events)
50
- @events ||= events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
51
- end
52
-
53
- def payments=(payments)
54
- @payments ||= payments.map{ |payment| Moneybird::Resource::Invoice::Payment.build(payment) }
58
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
55
59
  end
56
60
  end
57
61
  end
@@ -29,4 +29,9 @@ module Moneybird::Resource
29
29
  version
30
30
  )
31
31
  end
32
+
33
+ def link_booking(booking)
34
+ financial_mutation_service = Moneybird::Service::FinancialMutation.new(client, administration_id)
35
+ financial_mutation_service.link_booking(self, booking)
36
+ end
32
37
  end
@@ -22,4 +22,8 @@ module Moneybird::Resource
22
22
  updated_at
23
23
  )
24
24
  end
25
- end
25
+
26
+ def custom_fields=(custom_fields)
27
+ @custom_fields = custom_fields.map { |custom_field| Moneybird::Resource::CustomField.build(custom_field) }
28
+ end
29
+ end
@@ -14,6 +14,7 @@ module Moneybird::Resource::Invoice
14
14
  period
15
15
  price
16
16
  product_id
17
+ project_id
17
18
  row_order
18
19
  tax_rate_id
19
20
  tax_report_reference
@@ -16,6 +16,7 @@ module Moneybird::Resource::Invoice
16
16
  payment_transaction_id
17
17
  price
18
18
  price_base
19
+ transaction_identifier
19
20
  updated_at
20
21
  user_id
21
22
  )
@@ -40,7 +40,7 @@ module Moneybird::Resource
40
40
  )
41
41
 
42
42
  def notes=(notes)
43
- @notes ||= notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
43
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
44
44
  end
45
45
 
46
46
  def contact=(attributes)
@@ -52,7 +52,7 @@ module Moneybird::Resource
52
52
  end
53
53
 
54
54
  def events=(events)
55
- @events ||= events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
55
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
56
56
  end
57
57
  end
58
58
  end
@@ -22,12 +22,18 @@ module Moneybird::Resource
22
22
  invoice_id
23
23
  invoice_sequence_id
24
24
  language
25
+ marked_dubious_on
26
+ marked_uncollectible_on
25
27
  notes
26
28
  original_sales_invoice_id
27
29
  paid_at
30
+ paused
28
31
  payment_conditions
32
+ payment_reference
33
+ payment_url
29
34
  payments
30
35
  prices_are_incl_tax
36
+ public_view_code
31
37
  recurring_sales_invoice_id
32
38
  reference
33
39
  sent_at
@@ -49,7 +55,7 @@ module Moneybird::Resource
49
55
  )
50
56
 
51
57
  def notes=(notes)
52
- @notes ||= notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
58
+ @notes = notes.map{ |note| Moneybird::Resource::Generic::Note.build(note) }
53
59
  end
54
60
 
55
61
  def contact=(attributes)
@@ -57,17 +63,30 @@ module Moneybird::Resource
57
63
  end
58
64
 
59
65
  def send_invoice(options = {})
60
- invoice_service = Moneybird::Service::SalesInvoice.new(@client, administration_id)
66
+ invoice_service = Moneybird::Service::SalesInvoice.new(client, administration_id)
61
67
  invoice_service.send_invoice(self, options)
62
68
  end
63
69
 
70
+ def mark_as_uncollectible(options = {})
71
+ invoice_service = Moneybird::Service::SalesInvoice.new(client, administration_id)
72
+ invoice_service.mark_as_uncollectible(self, options)
73
+ end
74
+
75
+ def payments=(payments)
76
+ payment_data = payments.map{ |payment| Moneybird::Resource::Invoice::Payment.build(payment) }
77
+ @payments = Moneybird::Service::Payment.new(client, administration_id, preloaded_data: payment_data, invoice_id: id)
78
+ end
79
+
64
80
  def details=(line_items)
65
81
  @details = line_items.map{ |line_item| Moneybird::Resource::Invoice::Details.build(line_item) }
66
82
  end
67
83
 
68
84
  def events=(events)
69
- @events ||= events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
85
+ @events = events.map{ |event| Moneybird::Resource::Generic::Event.build(event) }
86
+ end
87
+
88
+ def custom_fields=(custom_fields)
89
+ @custom_fields = custom_fields.map { |custom_field| Moneybird::Resource::CustomField.build(custom_field) }
70
90
  end
71
91
  end
72
92
  end
73
-
@@ -10,6 +10,7 @@ module Moneybird::Resource
10
10
  last_http_status
11
11
  last_http_body
12
12
  events
13
+ token
13
14
  )
14
15
 
15
16
  def to_json
@@ -16,6 +16,7 @@ module Moneybird
16
16
 
17
17
  def attributes=(attributes)
18
18
  @attributes = attributes
19
+ self.client ||= attributes[:client]
19
20
  attributes.each do |attribute, value|
20
21
  if respond_to?(writer = attribute.to_s + '=')
21
22
  send(writer, value)
@@ -3,10 +3,11 @@ module Moneybird::Service
3
3
  include Moneybird::Traits::FindAll
4
4
  include Moneybird::Traits::Service
5
5
 
6
- attr_reader :client
6
+ attr_reader :client, :preloaded_data
7
7
 
8
8
  def initialize(client)
9
9
  @client = client
10
+ @preloaded_data = nil
10
11
  end
11
12
 
12
13
  def find(id)
@@ -20,7 +21,7 @@ module Moneybird::Service
20
21
  end
21
22
 
22
23
  def path
23
- '/administrations'
24
+ 'administrations'
24
25
  end
25
26
  end
26
27
  end
@@ -0,0 +1,17 @@
1
+ module Moneybird::Service
2
+ class CustomField
3
+ include Moneybird::Traits::AdministrationService
4
+ include Moneybird::Traits::Service
5
+ include Moneybird::Traits::FindAll
6
+
7
+ private
8
+
9
+ def resource_class
10
+ Moneybird::Resource::CustomField
11
+ end
12
+
13
+ def path
14
+ "#{administration_id}/custom_fields"
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  module Moneybird::Service
2
- class PurchaseInvoice
2
+ class ExternalSalesInvoice
3
3
  include Moneybird::Traits::AdministrationService
4
4
  include Moneybird::Traits::Service
5
5
  include Moneybird::Traits::Find
@@ -10,11 +10,11 @@ module Moneybird::Service
10
10
  private
11
11
 
12
12
  def resource_class
13
- Moneybird::Resource::PurchaseInvoice
13
+ Moneybird::Resource::ExternalSalesInvoice
14
14
  end
15
15
 
16
16
  def path
17
- "#{administration_id}/documents/purchase_invoices"
17
+ "#{administration_id}/external_sales_invoices"
18
18
  end
19
19
  end
20
20
  end
@@ -5,6 +5,10 @@ module Moneybird::Service
5
5
  include Moneybird::Traits::FindAll
6
6
  include Moneybird::Traits::Synchronization
7
7
 
8
+ def link_booking(resource, booking)
9
+ client.patch("#{resource_path(resource)}/link_booking", booking.to_json)
10
+ end
11
+
8
12
  private
9
13
 
10
14
  def resource_class
@@ -0,0 +1,19 @@
1
+ module Moneybird::Service
2
+ class Payment
3
+ include Moneybird::Traits::AdministrationService
4
+ include Moneybird::Traits::Service
5
+ include Moneybird::Traits::FindAll
6
+ include Moneybird::Traits::Save
7
+ include Moneybird::Traits::Delete
8
+
9
+ private
10
+
11
+ def resource_class
12
+ Moneybird::Resource::Invoice::Payment
13
+ end
14
+
15
+ def path
16
+ "#{administration_id}/sales_invoices/#{options[:invoice_id]}/payments"
17
+ end
18
+ end
19
+ end
@@ -7,7 +7,9 @@ module Moneybird::Service
7
7
  include Moneybird::Traits::Save
8
8
  include Moneybird::Traits::Delete
9
9
  include Moneybird::Traits::Synchronization
10
+ include Moneybird::Traits::DownloadPdf
10
11
  include Moneybird::Traits::SendInvoice
12
+ include Moneybird::Traits::MarkAsUncollectible
11
13
 
12
14
  private
13
15
 
@@ -19,4 +21,4 @@ module Moneybird::Service
19
21
  "#{administration_id}/sales_invoices"
20
22
  end
21
23
  end
22
- end
24
+ end
@@ -1,11 +1,13 @@
1
1
  module Moneybird
2
2
  module Traits
3
3
  module AdministrationService
4
- attr_reader :client, :administration_id
4
+ attr_reader :client, :administration_id, :preloaded_data, :options
5
5
 
6
- def initialize(client, administration_id)
6
+ def initialize(client, administration_id, options = {})
7
7
  @client = client
8
8
  @administration_id = administration_id
9
+ @preloaded_data = options.delete(:preloaded_data)
10
+ @options = options
9
11
  end
10
12
  end
11
13
  end
@@ -0,0 +1,9 @@
1
+ module Moneybird
2
+ module Traits
3
+ module DownloadPdf
4
+ def download_pdf(id)
5
+ client.get("#{path}/#{id}/download_pdf")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -14,9 +14,15 @@ module Moneybird
14
14
 
15
15
  def each(params = {})
16
16
  return enum_for(:each, params) unless block_given?
17
- each_page(params).each do |resources|
18
- resources.each do |resource|
19
- yield resource
17
+ if preloaded_data
18
+ preloaded_data.each do |data|
19
+ yield data
20
+ end
21
+ else
22
+ each_page(params).each do |resources|
23
+ resources.each do |resource|
24
+ yield resource
25
+ end
20
26
  end
21
27
  end
22
28
  end
@@ -0,0 +1,15 @@
1
+ module Moneybird
2
+ module Traits
3
+ module MarkAsUncollectible
4
+ def mark_as_uncollectible_path(resource)
5
+ [path, resource.path, '/mark_as_uncollectible'].join('')
6
+ end
7
+
8
+ def mark_as_uncollectible(resource, options = {})
9
+ response = client.patch(mark_as_uncollectible_path(resource), options.to_json)
10
+ resource.attributes = response
11
+ resource
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,10 +1,6 @@
1
1
  module Moneybird
2
2
  module Traits
3
3
  module Save
4
- def resource_path(resource)
5
- [path, resource.path].join('')
6
- end
7
-
8
4
  def save(resource)
9
5
  response =
10
6
  if resource.persisted?
@@ -6,7 +6,9 @@ module Moneybird
6
6
  end
7
7
 
8
8
  def send_invoice(resource, options = {})
9
- client.patch(send_invoice_path(resource), options.to_json)
9
+ response = client.patch(send_invoice_path(resource), options.to_json)
10
+ resource.attributes = response
11
+ resource
10
12
  end
11
13
  end
12
14
  end
@@ -4,6 +4,10 @@ module Moneybird
4
4
  def build(attributes)
5
5
  resource_class.build attributes.merge(client: client)
6
6
  end
7
+
8
+ def resource_path(resource)
9
+ [path, resource.path].join('')
10
+ end
7
11
  end
8
12
  end
9
13
  end
@@ -1,3 +1,3 @@
1
1
  module Moneybird
2
- VERSION = "0.9.6"
2
+ VERSION = "0.10.1"
3
3
  end
@@ -6,6 +6,7 @@ module Moneybird
6
6
  has_attributes %i(
7
7
  administration_id
8
8
  webhook_id
9
+ webhook_token
9
10
  entity_type
10
11
  entity_id
11
12
  state
@@ -14,7 +15,7 @@ module Moneybird
14
15
  )
15
16
 
16
17
  def build_entity
17
- entity_resource_class.new(entity)
18
+ entity_resource_class.new(entity) if entity
18
19
  end
19
20
 
20
21
  def entity_resource_class
@@ -25,4 +26,4 @@ module Moneybird
25
26
  build(JSON.parse(payload))
26
27
  end
27
28
  end
28
- end
29
+ end
data/lib/moneybird.rb CHANGED
@@ -50,15 +50,16 @@ require 'moneybird/resource/invoice/details'
50
50
  require 'moneybird/resource/invoice/payment'
51
51
  require 'moneybird/resource/contact' # Depends on generic resources
52
52
  require 'moneybird/resource/document_style'
53
+ require 'moneybird/resource/custom_field'
53
54
  require 'moneybird/resource/estimate'
54
55
  require 'moneybird/resource/financial_account'
55
56
  require 'moneybird/resource/financial_mutation'
56
57
  require 'moneybird/resource/identity'
57
58
  require 'moneybird/resource/ledger_account'
58
59
  require 'moneybird/resource/product'
59
- require 'moneybird/resource/purchase_invoice' # Depends on generic and invoice resources
60
60
  require 'moneybird/resource/recurring_sales_invoice' # Depends on generic and invoice resources
61
61
  require 'moneybird/resource/sales_invoice' # Depends on generic and invoice resources
62
+ require 'moneybird/resource/external_sales_invoice'
62
63
  require 'moneybird/resource/synchronization'
63
64
  require 'moneybird/resource/tax_rate'
64
65
  require 'moneybird/resource/webhook'
@@ -68,12 +69,14 @@ require 'moneybird/resource/workflow'
68
69
  # Traits
69
70
  require 'moneybird/traits/administration_service'
70
71
  require 'moneybird/traits/delete'
72
+ require 'moneybird/traits/download_pdf'
71
73
  require 'moneybird/traits/find'
72
74
  require 'moneybird/traits/find_all'
75
+ require 'moneybird/traits/mark_as_uncollectible'
73
76
  require 'moneybird/traits/save'
77
+ require 'moneybird/traits/send_invoice'
74
78
  require 'moneybird/traits/service'
75
79
  require 'moneybird/traits/synchronization' # Depends on synchronization resource
76
- require 'moneybird/traits/send_invoice'
77
80
 
78
81
  ##
79
82
  # Services (all depend on traits and it's associated resource)
@@ -84,18 +87,20 @@ require 'moneybird/service/documents/receipt'
84
87
  require 'moneybird/service/documents/typeless_document'
85
88
  require 'moneybird/service/contact'
86
89
  require 'moneybird/service/document_style'
90
+ require 'moneybird/service/custom_field'
87
91
  require 'moneybird/service/estimate'
88
92
  require 'moneybird/service/financial_account'
89
93
  require 'moneybird/service/financial_mutation'
90
94
  require 'moneybird/service/identity'
91
95
  require 'moneybird/service/ledger_account'
92
96
  require 'moneybird/service/product'
93
- require 'moneybird/service/purchase_invoice'
94
97
  require 'moneybird/service/recurring_sales_invoice'
95
98
  require 'moneybird/service/sales_invoice'
99
+ require 'moneybird/service/external_sales_invoice'
96
100
  require 'moneybird/service/tax_rate'
97
101
  require 'moneybird/service/webhook'
98
102
  require 'moneybird/service/workflow'
103
+ require 'moneybird/service/payment'
99
104
 
100
105
  ##
101
106
  # Special cases
@@ -103,4 +108,4 @@ require 'moneybird/resource/administration' # Depends on services
103
108
  require 'moneybird/service/administration' # Depends on administration resource
104
109
  require 'moneybird/client'
105
110
  require 'moneybird/version'
106
- require 'moneybird/webhook'
111
+ require 'moneybird/webhook'
data/moneybird.gemspec CHANGED
@@ -24,9 +24,9 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency "faraday_middleware"
25
25
  spec.add_dependency "link_header", "~> 0.0.8"
26
26
 
27
- spec.add_development_dependency "bundler", "~> 1.11"
28
- spec.add_development_dependency "rake", "~> 10.0"
29
- spec.add_development_dependency "codeclimate-test-reporter"
27
+ spec.add_development_dependency "bundler", [">= 1.11", "< 3.0"]
28
+ spec.add_development_dependency "rake", "~> 13.0"
29
+ spec.add_development_dependency "simplecov", "= 0.21.2"
30
30
  spec.add_development_dependency "minitest"
31
31
  spec.add_development_dependency "webmock", "~> 3.1"
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moneybird
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maarten van Vliet
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-05 00:00:00.000000000 Z
11
+ date: 2021-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -70,44 +70,50 @@ dependencies:
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1.11'
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '3.0'
76
79
  type: :development
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
- - - "~>"
83
+ - - ">="
81
84
  - !ruby/object:Gem::Version
82
85
  version: '1.11'
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.0'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: rake
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '10.0'
95
+ version: '13.0'
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
100
  - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: '10.0'
102
+ version: '13.0'
97
103
  - !ruby/object:Gem::Dependency
98
- name: codeclimate-test-reporter
104
+ name: simplecov
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - ">="
107
+ - - '='
102
108
  - !ruby/object:Gem::Version
103
- version: '0'
109
+ version: 0.21.2
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - ">="
114
+ - - '='
109
115
  - !ruby/object:Gem::Version
110
- version: '0'
116
+ version: 0.21.2
111
117
  - !ruby/object:Gem::Dependency
112
118
  name: minitest
113
119
  requirement: !ruby/object:Gem::Requirement
@@ -144,11 +150,12 @@ extensions: []
144
150
  extra_rdoc_files: []
145
151
  files:
146
152
  - ".codeclimate.yml"
153
+ - ".github/dependabot.yml"
154
+ - ".github/workflows/ruby.yml"
147
155
  - ".gitignore"
148
156
  - ".kick"
149
157
  - ".rspec"
150
158
  - ".rubocop.yml"
151
- - ".travis.yml"
152
159
  - CODE_OF_CONDUCT.md
153
160
  - Gemfile
154
161
  - LICENSE.txt
@@ -174,6 +181,7 @@ files:
174
181
  - lib/moneybird/resource.rb
175
182
  - lib/moneybird/resource/administration.rb
176
183
  - lib/moneybird/resource/contact.rb
184
+ - lib/moneybird/resource/custom_field.rb
177
185
  - lib/moneybird/resource/document_style.rb
178
186
  - lib/moneybird/resource/documents/general_document.rb
179
187
  - lib/moneybird/resource/documents/general_journal_document.rb
@@ -181,6 +189,7 @@ files:
181
189
  - lib/moneybird/resource/documents/receipt.rb
182
190
  - lib/moneybird/resource/documents/typeless_document.rb
183
191
  - lib/moneybird/resource/estimate.rb
192
+ - lib/moneybird/resource/external_sales_invoice.rb
184
193
  - lib/moneybird/resource/financial_account.rb
185
194
  - lib/moneybird/resource/financial_mutation.rb
186
195
  - lib/moneybird/resource/generic/event.rb
@@ -190,7 +199,6 @@ files:
190
199
  - lib/moneybird/resource/invoice/payment.rb
191
200
  - lib/moneybird/resource/ledger_account.rb
192
201
  - lib/moneybird/resource/product.rb
193
- - lib/moneybird/resource/purchase_invoice.rb
194
202
  - lib/moneybird/resource/recurring_sales_invoice.rb
195
203
  - lib/moneybird/resource/sales_invoice.rb
196
204
  - lib/moneybird/resource/synchronization.rb
@@ -199,6 +207,7 @@ files:
199
207
  - lib/moneybird/resource/workflow.rb
200
208
  - lib/moneybird/service/administration.rb
201
209
  - lib/moneybird/service/contact.rb
210
+ - lib/moneybird/service/custom_field.rb
202
211
  - lib/moneybird/service/document_style.rb
203
212
  - lib/moneybird/service/documents/general_document.rb
204
213
  - lib/moneybird/service/documents/general_journal_document.rb
@@ -206,12 +215,13 @@ files:
206
215
  - lib/moneybird/service/documents/receipt.rb
207
216
  - lib/moneybird/service/documents/typeless_document.rb
208
217
  - lib/moneybird/service/estimate.rb
218
+ - lib/moneybird/service/external_sales_invoice.rb
209
219
  - lib/moneybird/service/financial_account.rb
210
220
  - lib/moneybird/service/financial_mutation.rb
211
221
  - lib/moneybird/service/identity.rb
212
222
  - lib/moneybird/service/ledger_account.rb
223
+ - lib/moneybird/service/payment.rb
213
224
  - lib/moneybird/service/product.rb
214
- - lib/moneybird/service/purchase_invoice.rb
215
225
  - lib/moneybird/service/recurring_sales_invoice.rb
216
226
  - lib/moneybird/service/sales_invoice.rb
217
227
  - lib/moneybird/service/tax_rate.rb
@@ -219,8 +229,10 @@ files:
219
229
  - lib/moneybird/service/workflow.rb
220
230
  - lib/moneybird/traits/administration_service.rb
221
231
  - lib/moneybird/traits/delete.rb
232
+ - lib/moneybird/traits/download_pdf.rb
222
233
  - lib/moneybird/traits/find.rb
223
234
  - lib/moneybird/traits/find_all.rb
235
+ - lib/moneybird/traits/mark_as_uncollectible.rb
224
236
  - lib/moneybird/traits/save.rb
225
237
  - lib/moneybird/traits/send_invoice.rb
226
238
  - lib/moneybird/traits/service.rb
@@ -247,8 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
259
  - !ruby/object:Gem::Version
248
260
  version: '0'
249
261
  requirements: []
250
- rubyforge_project:
251
- rubygems_version: 2.6.14
262
+ rubygems_version: 3.0.3
252
263
  signing_key:
253
264
  specification_version: 4
254
265
  summary: Library to interface with Moneybird API
data/.travis.yml DELETED
@@ -1,11 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.2
4
- before_install: gem install bundler -v 1.11.2
5
-
6
- addons:
7
- code_climate:
8
- repo_token: 0b8e41ecbc26637a7db4e6e9d4581c445441674f689016ab45fb5c51242b59bf
9
-
10
- after_success:
11
- - bundle exec codeclimate-test-reporter