ledger_sync 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +2 -3
  5. data/lib/ledger_sync.rb +12 -6
  6. data/lib/ledger_sync/adaptors/ledger_serializer.rb +124 -0
  7. data/lib/ledger_sync/adaptors/ledger_serializer_attribute.rb +148 -0
  8. data/lib/ledger_sync/adaptors/ledger_serializer_attribute_set.rb +51 -0
  9. data/lib/ledger_sync/adaptors/ledger_serializer_type/mapping_type.rb +41 -0
  10. data/lib/ledger_sync/adaptors/ledger_serializer_type/references_many_type.rb +24 -0
  11. data/lib/ledger_sync/adaptors/ledger_serializer_type/value_type.rb +17 -0
  12. data/lib/ledger_sync/adaptors/operation.rb +15 -9
  13. data/lib/ledger_sync/adaptors/quickbooks_online/account/ledger_serializer.rb +21 -0
  14. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/create.rb +8 -36
  15. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/find.rb +1 -13
  16. data/lib/ledger_sync/adaptors/quickbooks_online/account/operations/update.rb +4 -35
  17. data/lib/ledger_sync/adaptors/quickbooks_online/account/searcher.rb +3 -44
  18. data/lib/ledger_sync/adaptors/quickbooks_online/adaptor.rb +75 -28
  19. data/lib/ledger_sync/adaptors/quickbooks_online/bill/ledger_serializer.rb +40 -0
  20. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/create.rb +9 -48
  21. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/find.rb +10 -21
  22. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/update.rb +9 -52
  23. data/lib/ledger_sync/adaptors/quickbooks_online/bill_line_item/ledger_serializer.rb +27 -0
  24. data/lib/ledger_sync/adaptors/quickbooks_online/customer/ledger_serializer.rb +23 -0
  25. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/create.rb +2 -25
  26. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/find.rb +2 -14
  27. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/update.rb +3 -30
  28. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/ledger_serializer.rb +35 -0
  29. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/create.rb +2 -39
  30. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/find.rb +2 -14
  31. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/update.rb +4 -43
  32. data/lib/ledger_sync/adaptors/quickbooks_online/deposit_line_item/ledger_serializer.rb +27 -0
  33. data/lib/ledger_sync/adaptors/quickbooks_online/expense/ledger_serializer.rb +48 -0
  34. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/create.rb +10 -51
  35. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/find.rb +10 -22
  36. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/update.rb +10 -55
  37. data/lib/ledger_sync/adaptors/quickbooks_online/expense_line_item/ledger_serializer.rb +27 -0
  38. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/ledger_serializer.rb +32 -0
  39. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/create.rb +4 -37
  40. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/find.rb +4 -15
  41. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/operations/update.rb +5 -42
  42. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry_line_item/ledger_serializer.rb +31 -0
  43. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer.rb +103 -0
  44. data/lib/ledger_sync/adaptors/quickbooks_online/{account/mapping.rb → ledger_serializer_type/account_sub_type.rb} +128 -148
  45. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/account_type.rb +51 -0
  46. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/amount_type.rb +23 -0
  47. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/classification_type.rb +23 -0
  48. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/date_type.rb +23 -0
  49. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/journal_entry_line_item_type.rb +20 -0
  50. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/payment_type.rb +21 -0
  51. data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +2 -7
  52. data/lib/ledger_sync/adaptors/quickbooks_online/operation/create.rb +29 -0
  53. data/lib/ledger_sync/adaptors/quickbooks_online/operation/find.rb +31 -0
  54. data/lib/ledger_sync/adaptors/quickbooks_online/operation/full_update.rb +43 -0
  55. data/lib/ledger_sync/adaptors/quickbooks_online/operation/sparse_update.rb +29 -0
  56. data/lib/ledger_sync/adaptors/quickbooks_online/payment/ledger_serializer.rb +23 -0
  57. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/create.rb +1 -24
  58. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/find.rb +1 -13
  59. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/update.rb +2 -29
  60. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/ledger_serializer.rb +33 -0
  61. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/create.rb +1 -29
  62. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/find.rb +1 -13
  63. data/lib/ledger_sync/adaptors/quickbooks_online/transfer/operations/update.rb +4 -35
  64. data/lib/ledger_sync/adaptors/quickbooks_online/util/adaptor_error_parser.rb +2 -1
  65. data/lib/ledger_sync/adaptors/quickbooks_online/util/operation_error_parser.rb +2 -1
  66. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/ledger_serializer.rb +25 -0
  67. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/create.rb +1 -23
  68. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/find.rb +1 -13
  69. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/update.rb +2 -29
  70. data/lib/ledger_sync/adaptors/test/account/operations/create.rb +5 -1
  71. data/lib/ledger_sync/adaptors/test/account/operations/find.rb +5 -1
  72. data/lib/ledger_sync/adaptors/test/account/operations/invalid.rb +1 -0
  73. data/lib/ledger_sync/adaptors/test/account/operations/update.rb +8 -2
  74. data/lib/ledger_sync/adaptors/test/account/operations/valid.rb +1 -0
  75. data/lib/ledger_sync/adaptors/test/customer/operations/create.rb +5 -1
  76. data/lib/ledger_sync/adaptors/test/customer/operations/find.rb +5 -1
  77. data/lib/ledger_sync/adaptors/test/customer/operations/invalid.rb +1 -0
  78. data/lib/ledger_sync/adaptors/test/customer/operations/update.rb +1 -24
  79. data/lib/ledger_sync/adaptors/test/customer/operations/valid.rb +3 -6
  80. data/lib/ledger_sync/adaptors/test/expense/operations/create.rb +8 -3
  81. data/lib/ledger_sync/adaptors/test/expense/operations/find.rb +4 -14
  82. data/lib/ledger_sync/adaptors/test/expense/operations/update.rb +2 -32
  83. data/lib/ledger_sync/adaptors/test/ledger_serializer.rb +64 -0
  84. data/lib/ledger_sync/adaptors/test/operation/create.rb +27 -0
  85. data/lib/ledger_sync/adaptors/test/operation/find.rb +29 -0
  86. data/lib/ledger_sync/adaptors/test/operation/update.rb +34 -0
  87. data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +5 -1
  88. data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +5 -1
  89. data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +1 -23
  90. data/lib/ledger_sync/adaptors/test/transfer/operations/create.rb +1 -22
  91. data/lib/ledger_sync/adaptors/test/transfer/operations/find.rb +1 -13
  92. data/lib/ledger_sync/adaptors/test/transfer/operations/update.rb +1 -25
  93. data/lib/ledger_sync/adaptors/test/vendor/operations/create.rb +5 -1
  94. data/lib/ledger_sync/adaptors/test/vendor/operations/find.rb +7 -1
  95. data/lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb +1 -0
  96. data/lib/ledger_sync/adaptors/test/vendor/operations/update.rb +1 -23
  97. data/lib/ledger_sync/adaptors/test/vendor/operations/valid.rb +1 -0
  98. data/lib/ledger_sync/error/adaptor_errors.rb +17 -5
  99. data/lib/ledger_sync/error/operation_errors.rb +12 -5
  100. data/lib/ledger_sync/error/resource_errors.rb +5 -1
  101. data/lib/ledger_sync/resource.rb +33 -6
  102. data/lib/ledger_sync/resource_attribute.rb +4 -0
  103. data/lib/ledger_sync/resource_attribute/dirty_mixin.rb +16 -0
  104. data/lib/ledger_sync/resource_attribute/mixin.rb +19 -7
  105. data/lib/ledger_sync/resource_attribute/reference/many.rb +55 -1
  106. data/lib/ledger_sync/resource_attribute_set.rb +6 -7
  107. data/lib/ledger_sync/resources/account.rb +1 -1
  108. data/lib/ledger_sync/resources/bill.rb +1 -0
  109. data/lib/ledger_sync/resources/bill_line_item.rb +2 -0
  110. data/lib/ledger_sync/resources/expense.rb +5 -1
  111. data/lib/ledger_sync/resources/expense_line_item.rb +2 -0
  112. data/lib/ledger_sync/resources/journal_entry.rb +1 -0
  113. data/lib/ledger_sync/result.rb +4 -3
  114. data/lib/ledger_sync/type/id.rb +34 -0
  115. data/lib/ledger_sync/type/reference_many.rb +8 -2
  116. data/lib/ledger_sync/type/reference_one.rb +5 -0
  117. data/lib/ledger_sync/type/value_mixin.rb +12 -0
  118. data/lib/ledger_sync/util/hash_helpers.rb +16 -0
  119. data/lib/ledger_sync/version.rb +1 -1
  120. data/qa.rb +142 -0
  121. metadata +38 -5
  122. data/lib/ledger_sync/adaptors/quickbooks_online/expense/mapping.rb +0 -15
  123. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/mapping.rb +0 -14
  124. data/lib/ledger_sync/error/sync_errors.rb +0 -22
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ module Transfer
7
+ class LedgerSerializer < QuickBooksOnline::LedgerSerializer
8
+ id
9
+
10
+ attribute ledger_attribute: 'Amount',
11
+ resource_attribute: :amount,
12
+ type: LedgerSerializerType::AmountType
13
+
14
+ attribute ledger_attribute: 'PrivateNote',
15
+ resource_attribute: :memo
16
+
17
+ attribute ledger_attribute: 'FromAccountRef.value',
18
+ resource_attribute: 'from_account.ledger_id'
19
+
20
+ attribute ledger_attribute: 'ToAccountRef.value',
21
+ resource_attribute: 'to_account.ledger_id'
22
+
23
+ attribute ledger_attribute: 'TxnDate',
24
+ resource_attribute: :transaction_date,
25
+ type: LedgerSerializerType::DateType
26
+
27
+ attribute ledger_attribute: 'CurrencyRef.value',
28
+ resource_attribute: 'currency'
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Create < Operation::Create
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  params do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).value(:nil)
10
11
  required(:from_account).hash(Types::Reference)
11
12
  required(:to_account).hash(Types::Reference)
@@ -15,35 +16,6 @@ module LedgerSync
15
16
  required(:transaction_date).filled(:date?)
16
17
  end
17
18
  end
18
-
19
- private
20
-
21
- def operate
22
- response = adaptor.post(
23
- resource: 'transfer',
24
- payload: local_resource_data
25
- )
26
-
27
- resource.ledger_id = response.dig('Id')
28
- success(response: response)
29
- end
30
-
31
- def local_resource_data
32
- {
33
- 'CurrencyRef' => {
34
- 'value' => resource.currency,
35
- },
36
- 'Amount' => resource.amount,
37
- 'TxnDate' => resource.transaction_date.to_s, # Format: YYYY-MM-DD
38
- 'PrivateNote' => resource.memo,
39
- 'FromAccountRef' => {
40
- 'value' => resource.from_account.ledger_id
41
- },
42
- 'ToAccountRef' => {
43
- 'value' => resource.to_account.ledger_id
44
- }
45
- }
46
- end
47
19
  end
48
20
  end
49
21
  end
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Find < Operation::Find
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).filled(:string)
10
11
  required(:from_account).hash(Types::Reference)
11
12
  required(:to_account).hash(Types::Reference)
@@ -15,19 +16,6 @@ module LedgerSync
15
16
  required(:transaction_date).maybe(:date?)
16
17
  end
17
18
  end
18
-
19
- private
20
-
21
- def operate
22
- return failure(nil) if resource.ledger_id.nil?
23
-
24
- response = adaptor.find(
25
- resource: 'transfer',
26
- id: resource.ledger_id
27
- )
28
-
29
- success(response: response)
30
- end
31
19
  end
32
20
  end
33
21
  end
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module QuickBooksOnline
4
6
  module Transfer
5
7
  module Operations
6
- class Update < Operation::Update
8
+ class Update < Operation::FullUpdate
7
9
  class Contract < LedgerSync::Adaptors::Contract
8
10
  schema do
11
+ required(:external_id).maybe(:string)
9
12
  required(:ledger_id).filled(:string)
10
13
  required(:from_account).hash(Types::Reference)
11
14
  required(:to_account).hash(Types::Reference)
@@ -15,40 +18,6 @@ module LedgerSync
15
18
  required(:transaction_date).filled(:date?)
16
19
  end
17
20
  end
18
-
19
- private
20
-
21
- def operate
22
- ledger_resource_data = adaptor.find(
23
- resource: 'transfer',
24
- id: resource.ledger_id
25
- )
26
- response = adaptor.post(
27
- resource: 'transfer',
28
- payload: merge_into(from: local_resource_data, to: ledger_resource_data)
29
- )
30
-
31
- resource.ledger_id = response.dig('Id')
32
- success(response: response)
33
- end
34
-
35
- def local_resource_data
36
- {
37
- 'CurrencyRef' => {
38
- 'value' => resource.currency,
39
- },
40
- 'Amount' => resource.amount,
41
- 'TxnDate' => resource.transaction_date.to_s, # Format: YYYY-MM-DD
42
- 'PrivateNote' => resource.memo,
43
- 'FromAccountRef' => {
44
- 'value' => resource.from_account.ledger_id
45
- },
46
- 'ToAccountRef' => {
47
- 'value' => resource.to_account.ledger_id
48
- }
49
- }
50
-
51
- end
52
21
  end
53
22
  end
54
23
  end
@@ -90,7 +90,8 @@ module LedgerSync
90
90
 
91
91
  return matcher.error_klass.new(
92
92
  adaptor: adaptor,
93
- message: matcher.output_message
93
+ message: matcher.output_message,
94
+ response: error
94
95
  )
95
96
  end
96
97
  nil
@@ -87,7 +87,8 @@ module LedgerSync
87
87
 
88
88
  return matcher.error_klass.new(
89
89
  operation: operation,
90
- message: matcher.output_message
90
+ message: matcher.output_message,
91
+ response: error
91
92
  )
92
93
  end
93
94
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module QuickBooksOnline
6
+ module Vendor
7
+ class LedgerSerializer < QuickBooksOnline::LedgerSerializer
8
+ id
9
+
10
+ attribute ledger_attribute: 'DisplayName',
11
+ resource_attribute: :display_name
12
+
13
+ attribute ledger_attribute: 'GivenName',
14
+ resource_attribute: :first_name
15
+
16
+ attribute ledger_attribute: 'FamilyName',
17
+ resource_attribute: :last_name
18
+
19
+ attribute ledger_attribute: 'PrimaryEmailAddr.Address',
20
+ resource_attribute: :email
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -8,6 +8,7 @@ module LedgerSync
8
8
  class Create < Operation::Create
9
9
  class Contract < LedgerSync::Adaptors::Contract
10
10
  params do
11
+ required(:external_id).maybe(:string)
11
12
  required(:ledger_id).value(:nil)
12
13
  optional(:display_name).maybe(:string)
13
14
  optional(:first_name).maybe(:string)
@@ -15,29 +16,6 @@ module LedgerSync
15
16
  optional(:email).maybe(:string)
16
17
  end
17
18
  end
18
-
19
- private
20
-
21
- def operate
22
- response = adaptor.post(
23
- resource: 'vendor',
24
- payload: local_resource_data
25
- )
26
-
27
- resource.ledger_id = response.dig('Id')
28
- success(response: response)
29
- end
30
-
31
- def local_resource_data
32
- {
33
- 'DisplayName' => resource.display_name,
34
- 'GivenName' => resource.first_name,
35
- 'FamilyName' => resource.last_name,
36
- 'PrimaryEmailAddr' => {
37
- 'Address' => resource.email
38
- }
39
- }
40
- end
41
19
  end
42
20
  end
43
21
  end
@@ -8,6 +8,7 @@ module LedgerSync
8
8
  class Find < Operation::Find
9
9
  class Contract < LedgerSync::Adaptors::Contract
10
10
  params do
11
+ required(:external_id).maybe(:string)
11
12
  required(:ledger_id).filled(:string)
12
13
  required(:display_name).maybe(:string)
13
14
  required(:first_name).maybe(:string)
@@ -15,19 +16,6 @@ module LedgerSync
15
16
  optional(:email).maybe(:string)
16
17
  end
17
18
  end
18
-
19
- private
20
-
21
- def operate
22
- return failure(nil) if resource.ledger_id.nil?
23
-
24
- response = adaptor.find(
25
- resource: 'vendor',
26
- id: resource.ledger_id
27
- )
28
-
29
- success(response: response)
30
- end
31
19
  end
32
20
  end
33
21
  end
@@ -5,9 +5,10 @@ module LedgerSync
5
5
  module QuickBooksOnline
6
6
  module Vendor
7
7
  module Operations
8
- class Update < Operation::Update
8
+ class Update < Operation::FullUpdate
9
9
  class Contract < LedgerSync::Adaptors::Contract
10
10
  params do
11
+ required(:external_id).maybe(:string)
11
12
  required(:ledger_id).filled(:string)
12
13
  optional(:display_name).maybe(:string)
13
14
  optional(:first_name).maybe(:string)
@@ -15,34 +16,6 @@ module LedgerSync
15
16
  optional(:email).maybe(:string)
16
17
  end
17
18
  end
18
-
19
- private
20
-
21
- def operate
22
- ledger_resource_data = adaptor.find(
23
- resource: 'vendor',
24
- id: resource.ledger_id
25
- )
26
-
27
- response = adaptor.post(
28
- resource: 'vendor',
29
- payload: merge_into(from: local_resource_data, to: ledger_resource_data)
30
- )
31
-
32
- resource.ledger_id = response.dig('Id')
33
- success(response: response)
34
- end
35
-
36
- def local_resource_data
37
- {
38
- 'DisplayName' => resource.display_name,
39
- 'GivenName' => resource.first_name,
40
- 'FamilyName' => resource.last_name,
41
- 'PrimaryEmailAddr' => {
42
- 'Address' => resource.email
43
- }
44
- }
45
- end
46
19
  end
47
20
  end
48
21
  end
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Create < Operation::Create
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).value(:nil)
10
11
  required(:name).filled(:string)
11
12
  required(:classification).filled(:string)
@@ -43,7 +44,10 @@ module LedgerSync
43
44
 
44
45
  resource.ledger_id = response.dig('id')
45
46
 
46
- success(response: response)
47
+ success(
48
+ resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
49
+ response: response
50
+ )
47
51
  end
48
52
  end
49
53
  end
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Find < Operation::Find
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  params do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).filled(:string)
10
11
  required(:name).maybe(:string)
11
12
  required(:classification).maybe(:string)
@@ -28,7 +29,10 @@ module LedgerSync
28
29
  id: resource.ledger_id
29
30
  )
30
31
 
31
- success(response: response)
32
+ success(
33
+ resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
34
+ response: response
35
+ )
32
36
  end
33
37
  end
34
38
  end
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Invalid < Operation::Create
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).filled(:string)
10
11
  required(:name).maybe(:string)
11
12
  required(:classification).maybe(:string)
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Update < Operation::Update
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).filled(:string)
10
11
  required(:name).filled(:string)
11
12
  required(:classification).filled(:string)
@@ -26,12 +27,17 @@ module LedgerSync
26
27
  id: resource.ledger_id
27
28
  )
28
29
 
30
+ find_serializer = Test::LedgerSerializer.new(resource: resource).deserialize(hash: ledger_resource_data)
31
+
29
32
  response = adaptor.post(
30
33
  resource: 'account',
31
- payload: merge_into(from: local_resource_data, to: ledger_resource_data)
34
+ payload: find_serializer.to_h
32
35
  )
33
36
 
34
- success(response: response)
37
+ success(
38
+ resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
39
+ response: response
40
+ )
35
41
  end
36
42
 
37
43
  def local_resource_data
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Valid < Operation::Create
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
+ optional(:external_id).maybe(:string)
9
10
  optional(:ledger_id).maybe(:string)
10
11
  required(:name).filled(:string)
11
12
  required(:classification).filled(:string)
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Create < Operation::Create
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).value(:nil)
10
11
  required(:email).maybe(:string)
11
12
  required(:name).filled(:string)
@@ -37,7 +38,10 @@ module LedgerSync
37
38
 
38
39
  resource.ledger_id = response.dig('id')
39
40
 
40
- success(response: response)
41
+ success(
42
+ response: response,
43
+ resource: resource
44
+ )
41
45
  end
42
46
  end
43
47
  end
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Find < Operation::Find
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  params do
9
+ required(:external_id).maybe(:string)
9
10
  required(:ledger_id).filled(:string)
10
11
  optional(:email).maybe(:string)
11
12
  optional(:name).maybe(:string)
@@ -23,7 +24,10 @@ module LedgerSync
23
24
  id: resource.ledger_id
24
25
  )
25
26
 
26
- success(response: response)
27
+ success(
28
+ resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
29
+ response: response
30
+ )
27
31
  end
28
32
  end
29
33
  end