ledger_sync 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +6 -3
  3. data/README.md +119 -23
  4. data/ledger_sync.gemspec +1 -0
  5. data/lib/ledger_sync.rb +1 -1
  6. data/lib/ledger_sync/adaptors/ledger_serializer.rb +2 -10
  7. data/lib/ledger_sync/adaptors/mixins/infer_ledger_serializer_mixin.rb +19 -5
  8. data/lib/ledger_sync/adaptors/mixins/infer_validation_contract_mixin.rb +27 -0
  9. data/lib/ledger_sync/adaptors/netsuite/config.rb +0 -1
  10. data/lib/ledger_sync/adaptors/netsuite/operation.rb +0 -6
  11. data/lib/ledger_sync/adaptors/operation.rb +48 -87
  12. data/lib/ledger_sync/adaptors/quickbooks_online/bill/ledger_serializer.rb +3 -0
  13. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/create.rb +1 -0
  14. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/find.rb +1 -0
  15. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/update.rb +1 -0
  16. data/lib/ledger_sync/adaptors/quickbooks_online/bill_line_item/ledger_serializer.rb +3 -0
  17. data/lib/ledger_sync/adaptors/quickbooks_online/dashboard_url_helper.rb +2 -0
  18. data/lib/ledger_sync/adaptors/quickbooks_online/deposit_line_item/ledger_serializer.rb +3 -0
  19. data/lib/ledger_sync/adaptors/quickbooks_online/expense/ledger_serializer.rb +3 -0
  20. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/create.rb +1 -0
  21. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/find.rb +1 -0
  22. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/update.rb +1 -0
  23. data/lib/ledger_sync/adaptors/quickbooks_online/expense_line_item/ledger_serializer.rb +3 -0
  24. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry_line_item/ledger_serializer.rb +6 -0
  25. data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +2 -2
  26. data/lib/ledger_sync/adaptors/quickbooks_online/operation/create.rb +1 -1
  27. data/lib/ledger_sync/adaptors/quickbooks_online/operation/find.rb +1 -1
  28. data/lib/ledger_sync/adaptors/quickbooks_online/operation/full_update.rb +1 -1
  29. data/lib/ledger_sync/adaptors/quickbooks_online/operation/sparse_update.rb +1 -1
  30. data/lib/ledger_sync/adaptors/stripe/config.rb +0 -1
  31. data/lib/ledger_sync/adaptors/test/customer/ledger_serializer.rb +12 -0
  32. data/lib/ledger_sync/adaptors/test/ledger_serializer.rb +0 -52
  33. data/lib/ledger_sync/core_ext/resonad.rb +0 -1
  34. data/lib/ledger_sync/error.rb +33 -0
  35. data/lib/ledger_sync/resources/bill.rb +2 -0
  36. data/lib/ledger_sync/resources/bill_line_item.rb +2 -0
  37. data/lib/ledger_sync/resources/deposit_line_item.rb +3 -0
  38. data/lib/ledger_sync/resources/expense.rb +2 -0
  39. data/lib/ledger_sync/resources/expense_line_item.rb +2 -0
  40. data/lib/ledger_sync/resources/journal_entry_line_item.rb +4 -0
  41. data/lib/ledger_sync/version.rb +1 -1
  42. data/qa/netsuite/customer.rb +1 -1
  43. data/qa/netsuite/vendor.rb +1 -1
  44. metadata +17 -37
  45. data/lib/ledger_sync/adaptors/test/account/operations/create.rb +0 -57
  46. data/lib/ledger_sync/adaptors/test/account/operations/find.rb +0 -42
  47. data/lib/ledger_sync/adaptors/test/account/operations/invalid.rb +0 -26
  48. data/lib/ledger_sync/adaptors/test/account/operations/update.rb +0 -56
  49. data/lib/ledger_sync/adaptors/test/account/operations/valid.rb +0 -32
  50. data/lib/ledger_sync/adaptors/test/account/searcher.rb +0 -40
  51. data/lib/ledger_sync/adaptors/test/adaptor.rb +0 -47
  52. data/lib/ledger_sync/adaptors/test/config.rb +0 -6
  53. data/lib/ledger_sync/adaptors/test/customer/operations/create.rb +0 -52
  54. data/lib/ledger_sync/adaptors/test/customer/operations/find.rb +0 -38
  55. data/lib/ledger_sync/adaptors/test/customer/operations/invalid.rb +0 -22
  56. data/lib/ledger_sync/adaptors/test/customer/operations/update.rb +0 -22
  57. data/lib/ledger_sync/adaptors/test/customer/operations/valid.rb +0 -24
  58. data/lib/ledger_sync/adaptors/test/customer/searcher.rb +0 -40
  59. data/lib/ledger_sync/adaptors/test/error/adaptor_error/operations/throttle_error.rb +0 -28
  60. data/lib/ledger_sync/adaptors/test/expense/operations/create.rb +0 -29
  61. data/lib/ledger_sync/adaptors/test/expense/operations/find.rb +0 -29
  62. data/lib/ledger_sync/adaptors/test/expense/operations/update.rb +0 -27
  63. data/lib/ledger_sync/adaptors/test/operation/create.rb +0 -27
  64. data/lib/ledger_sync/adaptors/test/operation/find.rb +0 -29
  65. data/lib/ledger_sync/adaptors/test/operation/update.rb +0 -34
  66. data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +0 -51
  67. data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +0 -44
  68. data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +0 -28
  69. data/lib/ledger_sync/adaptors/test/transfer/operations/create.rb +0 -24
  70. data/lib/ledger_sync/adaptors/test/transfer/operations/find.rb +0 -24
  71. data/lib/ledger_sync/adaptors/test/transfer/operations/update.rb +0 -24
  72. data/lib/ledger_sync/adaptors/test/vendor/operations/create.rb +0 -56
  73. data/lib/ledger_sync/adaptors/test/vendor/operations/find.rb +0 -43
  74. data/lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb +0 -27
  75. data/lib/ledger_sync/adaptors/test/vendor/operations/update.rb +0 -27
  76. data/lib/ledger_sync/adaptors/test/vendor/operations/valid.rb +0 -33
  77. data/lib/ledger_sync/adaptors/test/vendor/searcher.rb +0 -41
  78. data/lib/ledger_sync/util/debug.rb +0 -16
  79. data/qa/netsuite_test.rb +0 -42
  80. data/qa/test.rb +0 -67
@@ -1,57 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Account
5
- module Operations
6
- class Create < Operation::Create
7
- class Contract < LedgerSync::Adaptors::Contract
8
- schema do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).value(:nil)
11
- required(:name).filled(:string)
12
- required(:classification).filled(:string)
13
- required(:account_type).filled(:string)
14
- required(:account_sub_type).filled(:string)
15
- required(:number).maybe(:integer)
16
- required(:currency).maybe(:hash, Types::Reference)
17
- required(:description).maybe(:string)
18
- required(:active).maybe(:bool)
19
- end
20
- end
21
-
22
- private
23
-
24
- def id
25
- SecureRandom.uuid
26
- end
27
-
28
- def local_resource_data
29
- {
30
- 'name' => resource.name,
31
- 'classification' => resource.classification,
32
- 'account_type' => resource.account_type,
33
- 'account_sub_type' => resource.account_sub_type
34
- }
35
- end
36
-
37
- def operate
38
- response = adaptor.post(
39
- resource: 'account',
40
- payload: local_resource_data.merge(
41
- 'id' => id
42
- )
43
- )
44
-
45
- resource.ledger_id = response.dig('id')
46
-
47
- success(
48
- resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
49
- response: response
50
- )
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,42 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Account
5
- module Operations
6
- class Find < Operation::Find
7
- class Contract < LedgerSync::Adaptors::Contract
8
- params do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
11
- required(:name).maybe(:string)
12
- required(:classification).maybe(:string)
13
- required(:account_type).maybe(:string)
14
- required(:account_sub_type).maybe(:string)
15
- required(:number).maybe(:integer)
16
- required(:currency).maybe(:hash, Types::Reference)
17
- required(:description).maybe(:string)
18
- required(:active).maybe(:bool)
19
- end
20
- end
21
-
22
- private
23
-
24
- def operate
25
- return failure(nil) if resource.ledger_id.nil?
26
-
27
- response = adaptor.find(
28
- resource: 'account',
29
- id: resource.ledger_id
30
- )
31
-
32
- success(
33
- resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
34
- response: response
35
- )
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,26 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Account
5
- module Operations
6
- class Invalid < Operation::Create
7
- class Contract < LedgerSync::Adaptors::Contract
8
- schema do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
11
- required(:name).maybe(:string)
12
- required(:classification).maybe(:string)
13
- required(:account_type).maybe(:string)
14
- required(:account_sub_type).maybe(:string)
15
- required(:number).maybe(:integer)
16
- required(:currency).maybe(:hash, Types::Reference)
17
- required(:description).maybe(:string)
18
- required(:active).maybe(:bool)
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,56 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Account
5
- module Operations
6
- class Update < Operation::Update
7
- class Contract < LedgerSync::Adaptors::Contract
8
- schema do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
11
- required(:name).filled(:string)
12
- required(:classification).filled(:string)
13
- required(:account_type).filled(:string)
14
- required(:account_sub_type).filled(:string)
15
- required(:number).maybe(:integer)
16
- required(:currency).maybe(:hash, Types::Reference)
17
- required(:description).maybe(:string)
18
- required(:active).maybe(:bool)
19
- end
20
- end
21
-
22
- private
23
-
24
- def operate
25
- ledger_resource_data = adaptor.find(
26
- resource: 'account',
27
- id: resource.ledger_id
28
- )
29
-
30
- find_serializer = Test::LedgerSerializer.new(resource: resource).deserialize(hash: ledger_resource_data)
31
-
32
- response = adaptor.post(
33
- resource: 'account',
34
- payload: find_serializer.to_h
35
- )
36
-
37
- success(
38
- resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
39
- response: response
40
- )
41
- end
42
-
43
- def local_resource_data
44
- {
45
- 'name' => resource.name,
46
- 'classification' => resource.classification,
47
- 'account_type' => resource.account_type,
48
- 'account_sub_type' => resource.account_sub_type
49
- }
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,32 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Account
5
- module Operations
6
- class Valid < Operation::Create
7
- class Contract < LedgerSync::Adaptors::Contract
8
- schema do
9
- optional(:external_id).maybe(:string)
10
- optional(:ledger_id).maybe(:string)
11
- required(:name).filled(:string)
12
- required(:classification).filled(:string)
13
- required(:account_type).filled(:string)
14
- required(:account_sub_type).filled(:string)
15
- required(:number).maybe(:integer)
16
- required(:currency).maybe(:hash, Types::Reference)
17
- required(:description).maybe(:string)
18
- required(:active).maybe(:bool)
19
- end
20
- end
21
-
22
- private
23
-
24
- def operate
25
- success(response: :foo)
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,40 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Account
5
- class Searcher < LedgerSync::Adaptors::Searcher
6
- def next_searcher
7
- paginate(cursor: 'asdf')
8
- end
9
-
10
- def previous_searcher
11
- paginate(cursor: 'asdf')
12
- end
13
-
14
- def resources
15
- @resources ||= begin
16
- adaptor
17
- .query(
18
- resource: 'account',
19
- query: "name LIKE '#{query}%'"
20
- )
21
- .map do |a|
22
- LedgerSync::Account.new(
23
- ledger_id: a.fetch('id'),
24
- name: a.fetch('name', ''),
25
- account_type: a.fetch('account_type', '')
26
- )
27
- end
28
- end
29
- end
30
-
31
- def search
32
- super
33
- rescue OAuth2::Error => e
34
- failure(e)
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,47 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- class Adaptor < LedgerSync::Adaptors::Adaptor
5
- def initialize(*_config); end
6
-
7
- def find(resource:, id:)
8
- { 'id' => id }
9
- end
10
-
11
- def post(resource:, payload:)
12
- payload
13
- end
14
-
15
- def query(resource:, query:)
16
- resource_klass = LedgerSync.resources[resource.to_sym]
17
-
18
- Array.new(2) do |i|
19
- ret = {
20
- 'id' => SecureRandom.uuid,
21
- }
22
-
23
- ret['name'] = "Test #{resource} #{i}" if resource_klass.instance_methods.include?(:name=)
24
- ret
25
- end
26
- end
27
-
28
- def refresh!
29
- self
30
- end
31
-
32
- def url_for(resource:)
33
- case resource
34
- when LedgerSync::Customer
35
- "http://example.com/customer/#{resource.ledger_id}"
36
- else
37
- raise NotImplementedError
38
- end
39
- end
40
-
41
- def self.ledger_attributes_to_save
42
- []
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,6 +0,0 @@
1
- LedgerSync.register_adaptor(:test) do |config|
2
- config.test = true
3
- config.name = 'Test Ledger Adaptor'
4
- config.add_alias :test
5
- config.rate_limiting_wait_in_seconds = 47
6
- end
@@ -1,52 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Customer
5
- module Operations
6
- class Create < Operation::Create
7
- class Contract < LedgerSync::Adaptors::Contract
8
- schema do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).value(:nil)
11
- required(:email).maybe(:string)
12
- required(:name).filled(:string)
13
- required(:phone_number).maybe(:string)
14
- required(:subsidiary).maybe(:hash, Types::Reference)
15
- end
16
- end
17
-
18
- private
19
-
20
- def id
21
- SecureRandom.uuid
22
- end
23
-
24
- def local_resource_data
25
- {
26
- 'name' => resource.name,
27
- 'phone_number' => resource.phone_number,
28
- 'email' => resource.email
29
- }
30
- end
31
-
32
- def operate
33
- response = adaptor.post(
34
- resource: 'customer',
35
- payload: local_resource_data.merge(
36
- 'id' => id
37
- )
38
- )
39
-
40
- resource.ledger_id = response.dig('id')
41
-
42
- success(
43
- response: response,
44
- resource: resource
45
- )
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,38 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Customer
5
- module Operations
6
- class Find < Operation::Find
7
- class Contract < LedgerSync::Adaptors::Contract
8
- params do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
11
- optional(:email).maybe(:string)
12
- optional(:name).maybe(:string)
13
- optional(:phone_number).maybe(:string)
14
- required(:subsidiary).maybe(:hash, Types::Reference)
15
- end
16
- end
17
-
18
- private
19
-
20
- def operate
21
- return failure(nil) if resource.ledger_id.nil?
22
-
23
- response = adaptor.find(
24
- resource: 'customer',
25
- id: resource.ledger_id
26
- )
27
-
28
- success(
29
- resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
30
- response: response
31
- )
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,22 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Customer
5
- module Operations
6
- class Invalid < Operation::Create
7
- class Contract < LedgerSync::Adaptors::Contract
8
- schema do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
11
- required(:email).filled(:string)
12
- required(:name).filled(:string)
13
- required(:phone_number).filled(:string)
14
- required(:subsidiary).hash(Types::Reference)
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Customer
5
- module Operations
6
- class Update < Operation::Update
7
- class Contract < LedgerSync::Adaptors::Contract
8
- schema do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
11
- optional(:email).maybe(:string)
12
- required(:name).filled(:string)
13
- optional(:phone_number).maybe(:string)
14
- required(:subsidiary).maybe(:hash, Types::Reference)
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end