ledger_sync 1.1.1 → 1.1.2

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 (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
@@ -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(:email).filled(:string)
11
12
  required(:name).filled(:string)
@@ -6,36 +6,13 @@ 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
  optional(:email).maybe(:string)
11
12
  required(:name).filled(:string)
12
13
  optional(:phone_number).maybe(:string)
13
14
  end
14
15
  end
15
-
16
- private
17
-
18
- def operate
19
- ledger_resource_data = adaptor.find(
20
- resource: 'customer',
21
- id: resource.ledger_id
22
- )
23
-
24
- response = adaptor.post(
25
- resource: 'customer',
26
- payload: merge_into(from: local_resource_data, to: ledger_resource_data)
27
- )
28
-
29
- success(response: response)
30
- end
31
-
32
- def local_resource_data
33
- {
34
- 'name' => resource.name,
35
- 'phone_number' => resource.phone_number,
36
- 'email' => resource.email
37
- }
38
- end
39
16
  end
40
17
  end
41
18
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module Test
@@ -6,18 +8,13 @@ module LedgerSync
6
8
  class Valid < Operation::Create
7
9
  class Contract < LedgerSync::Adaptors::Contract
8
10
  schema do
11
+ optional(:external_id).maybe(:string)
9
12
  optional(:ledger_id).maybe(:string)
10
13
  optional(:email).maybe(:string)
11
14
  optional(:name).maybe(:string)
12
15
  optional(:phone_number).maybe(:string)
13
16
  end
14
17
  end
15
-
16
- private
17
-
18
- def operate
19
- success(response: :foo)
20
- end
21
18
  end
22
19
  end
23
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module Test
@@ -6,16 +8,17 @@ module LedgerSync
6
8
  class Create < Operation::Create
7
9
  class Contract < LedgerSync::Adaptors::Contract
8
10
  schema do
11
+ required(:external_id).maybe(:string)
9
12
  required(:ledger_id).value(:nil)
10
13
  required(:account).hash(Types::Reference)
11
14
  required(:vendor).hash(Types::Reference)
12
- required(:amount).filled(:integer)
13
15
  required(:currency).filled(:string)
14
16
  required(:memo).filled(:string)
15
17
  required(:payment_type).filled(:string)
16
18
  required(:transaction_date).filled(:date?)
17
19
  required(:exchange_rate).maybe(:float)
18
20
  required(:line_items).array(Types::Reference)
21
+ required(:reference_number).filled(:string)
19
22
  end
20
23
  end
21
24
 
@@ -28,12 +31,14 @@ module LedgerSync
28
31
  )
29
32
 
30
33
  resource.ledger_id = response.dig('id')
31
- success(response: response)
34
+ success(
35
+ resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
36
+ response: response
37
+ )
32
38
  end
33
39
 
34
40
  def local_resource_data
35
41
  {
36
- 'amount' => resource.amount,
37
42
  'currency' => resource.currency,
38
43
  'account_id' => resource.account.ledger_id,
39
44
  'vendor_id' => resource.vendor.ledger_id,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module Test
@@ -6,31 +8,19 @@ module LedgerSync
6
8
  class Find < Operation::Find
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(:account).hash(Types::Reference)
11
14
  required(:vendor).hash(Types::Reference)
12
- required(:amount).maybe(:integer)
13
15
  required(:currency).maybe(:string)
14
16
  required(:memo).maybe(:string)
15
17
  required(:payment_type).maybe(:string)
16
18
  required(:transaction_date).maybe(:date?)
17
19
  required(:exchange_rate).maybe(:float)
18
20
  required(:line_items).array(Types::Reference)
21
+ required(:reference_number).filled(:string)
19
22
  end
20
23
  end
21
-
22
- private
23
-
24
- def operate
25
- return failure(nil) if resource.ledger_id.nil?
26
-
27
- response = adaptor.find(
28
- resource: 'purchase',
29
- id: resource.ledger_id
30
- )
31
-
32
- success(response: response)
33
- end
34
24
  end
35
25
  end
36
26
  end
@@ -6,49 +6,19 @@ module LedgerSync
6
6
  class Update < Operation::Update
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(:account).hash(Types::Reference)
11
12
  required(:vendor).hash(Types::Reference)
12
- required(:amount).filled(:integer)
13
13
  required(:currency).filled(:string)
14
14
  required(:memo).filled(:string)
15
15
  required(:payment_type).filled(:string)
16
16
  required(:transaction_date).filled(:date?)
17
17
  required(:exchange_rate).maybe(:float)
18
18
  required(:line_items).array(Types::Reference)
19
+ required(:reference_number).filled(:string)
19
20
  end
20
21
  end
21
-
22
- private
23
-
24
- def operate
25
- ledger_resource_data = adaptor.find(
26
- resource: 'purchase',
27
- id: resource.ledger_id
28
- )
29
- response = adaptor.post(
30
- resource: 'purchase',
31
- payload: merge_into(from: local_resource_data, to: ledger_resource_data)
32
- )
33
-
34
- success(response: response)
35
- end
36
-
37
- def local_resource_data
38
- {
39
- 'amount' => resource.amount,
40
- 'currency' => resource.currency,
41
- 'account_id' => resource.account.ledger_id,
42
- 'vendor_id' => resource.vendor.ledger_id,
43
- 'line_items' => resource.line_items.map do |line_item|
44
- {
45
- 'account_id' => line_item.account&.ledger_id,
46
- 'Amount' => line_item.amount / 100.0,
47
- 'description' => line_item.description
48
- }
49
- end
50
- }
51
- end
52
22
  end
53
23
  end
54
24
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ledger_sync/adaptors/ledger_serializer'
4
+
5
+ Gem.find_files('ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/**/*.rb').each { |path| require path }
6
+
7
+ module LedgerSync
8
+ module Adaptors
9
+ module Test
10
+ class LedgerSerializer < Adaptors::LedgerSerializer
11
+ def initialize(resource:)
12
+ @resource = resource
13
+ end
14
+
15
+ def deserialize(hash:)
16
+ deserialized_resource = resource.dup
17
+
18
+ hash.each do |key, value|
19
+ key = key.to_s
20
+ next unless deserialized_resource.respond_to?("#{key}=")
21
+
22
+ resource_attribute = deserialized_resource.resource_attributes[key.to_sym]
23
+ if resource_attribute&.references_many?
24
+ type = LedgerSerializerType::ReferencesManyType
25
+ resource_class = resource_attribute.type.resource_class
26
+ else
27
+ type = LedgerSerializerType::ValueType
28
+ resource_class = resource.class
29
+ end
30
+
31
+ ledger_serializer_attribute = LedgerSerializerAttribute.new(
32
+ id: (key == 'id'),
33
+ ledger_attribute: key,
34
+ resource_attribute: key,
35
+ resource_class: resource_class,
36
+ serializer: self.class,
37
+ type: type
38
+ )
39
+
40
+ value = attribute_value_from_ledger(
41
+ hash: hash,
42
+ ledger_serializer_attribute: ledger_serializer_attribute,
43
+ resource: deserialized_resource
44
+ )
45
+
46
+ deserialized_resource.assign_attribute(
47
+ ledger_serializer_attribute.resource_attribute_dot_parts.first,
48
+ value
49
+ )
50
+ end
51
+
52
+ deserialized_resource
53
+ end
54
+
55
+ def to_ledger_hash(only_changes: false)
56
+ ret = resource.serializer.serialize[:objects].first.last[:data]
57
+ return ret unless only_changes
58
+
59
+ ret.select { |e| resource.changes.keys.include?(e.to_s) }
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Test
6
+ module Operation
7
+ class Create < Adaptors::Operation::Create
8
+ private
9
+
10
+ def operate
11
+ ledger_serializer = Test::LedgerSerializer.new(resource: resource)
12
+
13
+ response = adaptor.post(
14
+ resource: resource.class.resource_type,
15
+ payload: ledger_serializer.to_ledger_hash
16
+ )
17
+
18
+ success(
19
+ resource: ledger_serializer.deserialize(hash: response),
20
+ response: response
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Test
6
+ module Operation
7
+ class Find < Adaptors::Operation::Find
8
+ private
9
+
10
+ def operate
11
+ return failure(nil) if resource.ledger_id.nil?
12
+
13
+ response = adaptor.find(
14
+ resource: resource.class.resource_type,
15
+ id: resource.ledger_id
16
+ )
17
+
18
+ ledger_serializer = Test::LedgerSerializer.new(resource: resource)
19
+
20
+ success(
21
+ resource: ledger_serializer.deserialize(hash: response),
22
+ response: response
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Test
6
+ module Operation
7
+ class Update < Adaptors::Operation::Update
8
+ private
9
+
10
+ def operate
11
+ resource_type = resource.class.resource_type
12
+
13
+ ledger_resource_data = adaptor.find(
14
+ resource: resource_type,
15
+ id: resource.ledger_id
16
+ )
17
+
18
+ find_serializer = Test::LedgerSerializer.new(resource: resource).deserialize(hash: ledger_resource_data)
19
+
20
+ response = adaptor.post(
21
+ resource: resource_type,
22
+ payload: find_serializer.to_h
23
+ )
24
+
25
+ success(
26
+ resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
27
+ response: response
28
+ )
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ 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(:amount).filled(:integer)
11
12
  required(:currency).filled(:string)
@@ -22,7 +23,10 @@ module LedgerSync
22
23
  )
23
24
 
24
25
  resource.ledger_id = response.dig('id')
25
- success(response: response)
26
+ success(
27
+ resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
28
+ response: response
29
+ )
26
30
  end
27
31
 
28
32
  def local_resource_data
@@ -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
  optional(:amount).maybe(:integer)
11
12
  optional(:currency).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
@@ -6,6 +6,7 @@ module LedgerSync
6
6
  class Update < Operation::Update
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(:amount).filled(:integer)
11
12
  required(:currency).filled(:string)
@@ -15,29 +16,6 @@ module LedgerSync
15
16
  end
16
17
  end
17
18
  end
18
-
19
- private
20
-
21
- def operate
22
- ledger_resource_data = adaptor.find(
23
- resource: 'payment',
24
- id: resource.ledger_id
25
- )
26
- response = adaptor.post(
27
- resource: 'payment',
28
- payload: merge_into(from: local_resource_data, to: ledger_resource_data)
29
- )
30
-
31
- success(response: response)
32
- end
33
-
34
- def local_resource_data
35
- {
36
- 'amount' => resource.amount,
37
- 'currency' => resource.currency,
38
- 'customer_id' => resource.customer.ledger_id
39
- }
40
- end
41
19
  end
42
20
  end
43
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(:from_account).hash(Types::Reference)
11
12
  required(:to_account).hash(Types::Reference)
@@ -15,28 +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
- 'amount' => resource.amount,
34
- 'currency' => resource.currency,
35
- 'from_account_id' => resource.from_account.ledger_id,
36
- 'to_account_id' => resource.to_account.ledger_id,
37
- 'date' => resource.transaction_date
38
- }
39
- end
40
19
  end
41
20
  end
42
21
  end