ledger_sync 1.1.3 → 1.3.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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/.env.template +25 -0
  3. data/.gitignore +3 -1
  4. data/.rubocop_todo.yml +4 -1
  5. data/.travis.yml +1 -1
  6. data/Gemfile.lock +59 -25
  7. data/README.md +160 -8
  8. data/_config.yml +1 -0
  9. data/bin/qa +3 -0
  10. data/ledger_sync.gemspec +4 -0
  11. data/lib/ledger_sync.rb +40 -30
  12. data/lib/ledger_sync/adaptor_configuration.rb +17 -11
  13. data/lib/ledger_sync/adaptor_configuration_store.rb +13 -9
  14. data/lib/ledger_sync/adaptors/adaptor.rb +9 -1
  15. data/lib/ledger_sync/adaptors/ledger_serializer.rb +3 -6
  16. data/lib/ledger_sync/adaptors/ledger_serializer_attribute_set.rb +1 -1
  17. data/lib/ledger_sync/adaptors/ledger_serializer_type/references_many_type.rb +1 -1
  18. data/lib/ledger_sync/adaptors/mixins/infer_adaptor_class_mixin.rb +24 -0
  19. data/lib/ledger_sync/adaptors/mixins/infer_ledger_serializer_mixin.rb +31 -0
  20. data/lib/ledger_sync/adaptors/mixins/infer_resource_class_mixin.rb +22 -0
  21. data/lib/ledger_sync/adaptors/mixins/offset_and_limit_pagination_searcher_mixin.rb +37 -0
  22. data/lib/ledger_sync/adaptors/netsuite/account/ledger_deserializer.rb +24 -0
  23. data/lib/ledger_sync/adaptors/netsuite/account/ledger_serializer.rb +22 -0
  24. data/lib/ledger_sync/adaptors/netsuite/account/operations/create.rb +28 -0
  25. data/lib/ledger_sync/adaptors/netsuite/account/operations/find.rb +28 -0
  26. data/lib/ledger_sync/adaptors/netsuite/account/searcher.rb +28 -0
  27. data/lib/ledger_sync/adaptors/netsuite/adaptor.rb +145 -0
  28. data/lib/ledger_sync/adaptors/netsuite/config.rb +6 -0
  29. data/lib/ledger_sync/adaptors/netsuite/currency/deledger_serializer.rb +28 -0
  30. data/lib/ledger_sync/adaptors/netsuite/currency/ledger_serializer.rb +25 -0
  31. data/lib/ledger_sync/adaptors/netsuite/currency/operations/create.rb +25 -0
  32. data/lib/ledger_sync/adaptors/netsuite/currency/operations/delete.rb +23 -0
  33. data/lib/ledger_sync/adaptors/netsuite/currency/operations/find.rb +23 -0
  34. data/lib/ledger_sync/adaptors/netsuite/currency/operations/update.rb +23 -0
  35. data/lib/ledger_sync/adaptors/netsuite/customer/ledger_deserializer.rb +27 -0
  36. data/lib/ledger_sync/adaptors/netsuite/customer/ledger_serializer.rb +38 -0
  37. data/lib/ledger_sync/adaptors/netsuite/customer/operations/create.rb +24 -0
  38. data/lib/ledger_sync/adaptors/netsuite/customer/operations/delete.rb +24 -0
  39. data/lib/ledger_sync/adaptors/netsuite/customer/operations/find.rb +24 -0
  40. data/lib/ledger_sync/adaptors/netsuite/customer/operations/update.rb +24 -0
  41. data/lib/ledger_sync/adaptors/netsuite/ledger_serializer.rb +30 -0
  42. data/lib/ledger_sync/adaptors/netsuite/ledger_serializer_type/reference_type.rb +24 -0
  43. data/lib/ledger_sync/adaptors/netsuite/ledger_serializer_type/subsidiary_type.rb +22 -0
  44. data/lib/ledger_sync/adaptors/netsuite/operation.rb +25 -0
  45. data/lib/ledger_sync/adaptors/netsuite/operation/create.rb +65 -0
  46. data/lib/ledger_sync/adaptors/netsuite/operation/delete.rb +49 -0
  47. data/lib/ledger_sync/adaptors/netsuite/operation/find.rb +56 -0
  48. data/lib/ledger_sync/adaptors/netsuite/operation/update.rb +68 -0
  49. data/lib/ledger_sync/adaptors/netsuite/record/http_method.rb +38 -0
  50. data/lib/ledger_sync/adaptors/netsuite/record/metadata.rb +75 -0
  51. data/lib/ledger_sync/adaptors/netsuite/record/property.rb +45 -0
  52. data/lib/ledger_sync/adaptors/netsuite/searcher.rb +17 -0
  53. data/lib/ledger_sync/adaptors/netsuite/token.rb +162 -0
  54. data/lib/ledger_sync/adaptors/netsuite/vendor/ledger_deserializer.rb +32 -0
  55. data/lib/ledger_sync/adaptors/netsuite/vendor/ledger_serializer.rb +35 -0
  56. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/create.rb +27 -0
  57. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/delete.rb +27 -0
  58. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/find.rb +27 -0
  59. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/update.rb +27 -0
  60. data/lib/ledger_sync/adaptors/netsuite_soap/adaptor.rb +92 -0
  61. data/lib/ledger_sync/adaptors/netsuite_soap/config.rb +5 -0
  62. data/lib/ledger_sync/adaptors/netsuite_soap/customer/ledger_serializer.rb +13 -0
  63. data/lib/ledger_sync/adaptors/netsuite_soap/customer/operations/create.rb +64 -0
  64. data/lib/ledger_sync/adaptors/netsuite_soap/customer/operations/find.rb +49 -0
  65. data/lib/ledger_sync/adaptors/netsuite_soap/ledger_serializer.rb +25 -0
  66. data/lib/ledger_sync/adaptors/netsuite_soap/operation.rb +40 -0
  67. data/lib/ledger_sync/adaptors/netsuite_soap/operation/create.rb +29 -0
  68. data/lib/ledger_sync/adaptors/netsuite_soap/operation/find.rb +15 -0
  69. data/lib/ledger_sync/adaptors/netsuite_soap/subsidiary/operations/create.rb +42 -0
  70. data/lib/ledger_sync/adaptors/netsuite_soap/subsidiary/operations/find.rb +38 -0
  71. data/lib/ledger_sync/adaptors/operation.rb +7 -11
  72. data/lib/ledger_sync/adaptors/quickbooks_online/account/searcher.rb +2 -13
  73. data/lib/ledger_sync/adaptors/quickbooks_online/adaptor.rb +158 -109
  74. data/lib/ledger_sync/adaptors/quickbooks_online/bill/searcher.rb +1 -15
  75. data/lib/ledger_sync/adaptors/quickbooks_online/config.rb +3 -2
  76. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/create.rb +1 -0
  77. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/find.rb +1 -0
  78. data/lib/ledger_sync/adaptors/quickbooks_online/customer/operations/update.rb +1 -0
  79. data/lib/ledger_sync/adaptors/quickbooks_online/customer/searcher.rb +2 -16
  80. data/lib/ledger_sync/adaptors/quickbooks_online/dashboard_url_helper.rb +57 -0
  81. data/lib/ledger_sync/adaptors/quickbooks_online/department/ledger_serializer.rb +38 -0
  82. data/lib/ledger_sync/adaptors/quickbooks_online/department/operations/create.rb +23 -0
  83. data/lib/ledger_sync/adaptors/quickbooks_online/department/operations/find.rb +23 -0
  84. data/lib/ledger_sync/adaptors/quickbooks_online/department/operations/update.rb +25 -0
  85. data/lib/ledger_sync/adaptors/quickbooks_online/department/searcher.rb +17 -0
  86. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/ledger_serializer.rb +3 -0
  87. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/create.rb +1 -0
  88. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/find.rb +1 -0
  89. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/operations/update.rb +1 -0
  90. data/lib/ledger_sync/adaptors/quickbooks_online/deposit/searcher.rb +0 -15
  91. data/lib/ledger_sync/adaptors/quickbooks_online/expense/ledger_serializer.rb +0 -2
  92. data/lib/ledger_sync/adaptors/quickbooks_online/expense/searcher.rb +1 -15
  93. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/ledger_serializer.rb +35 -0
  94. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/create.rb +27 -0
  95. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/find.rb +25 -0
  96. data/lib/ledger_sync/adaptors/quickbooks_online/invoice/operations/update.rb +25 -0
  97. data/lib/ledger_sync/adaptors/quickbooks_online/invoice_sales_line_item/ledger_serializer.rb +30 -0
  98. data/lib/ledger_sync/adaptors/quickbooks_online/item/ledger_serializer.rb +13 -0
  99. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry/searcher.rb +1 -15
  100. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/ledger_serializer.rb +25 -0
  101. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/operations/create.rb +23 -0
  102. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/operations/find.rb +23 -0
  103. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/operations/update.rb +25 -0
  104. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_class/searcher.rb +15 -0
  105. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer.rb +8 -5
  106. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/entity_reference_type.rb +4 -14
  107. data/lib/ledger_sync/adaptors/quickbooks_online/ledger_serializer_type/transaction_reference_type.rb +49 -0
  108. data/lib/ledger_sync/adaptors/quickbooks_online/oauth_client.rb +93 -0
  109. data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +42 -7
  110. data/lib/ledger_sync/adaptors/quickbooks_online/operation/create.rb +5 -8
  111. data/lib/ledger_sync/adaptors/quickbooks_online/operation/find.rb +9 -9
  112. data/lib/ledger_sync/adaptors/quickbooks_online/operation/full_update.rb +17 -15
  113. data/lib/ledger_sync/adaptors/quickbooks_online/payment/ledger_serializer.rb +25 -0
  114. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/create.rb +9 -6
  115. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/find.rb +9 -2
  116. data/lib/ledger_sync/adaptors/quickbooks_online/payment/operations/update.rb +8 -1
  117. data/lib/ledger_sync/adaptors/quickbooks_online/payment_line_item/ledger_serializer.rb +19 -0
  118. data/lib/ledger_sync/adaptors/quickbooks_online/request.rb +98 -0
  119. data/lib/ledger_sync/adaptors/quickbooks_online/searcher.rb +29 -13
  120. data/lib/ledger_sync/adaptors/quickbooks_online/util/operation_error_parser.rb +1 -1
  121. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/create.rb +3 -0
  122. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/find.rb +3 -0
  123. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/operations/update.rb +3 -0
  124. data/lib/ledger_sync/adaptors/quickbooks_online/vendor/searcher.rb +5 -54
  125. data/lib/ledger_sync/adaptors/quickbooks_online/webhook.rb +58 -0
  126. data/lib/ledger_sync/adaptors/quickbooks_online/webhook_event.rb +79 -0
  127. data/lib/ledger_sync/adaptors/quickbooks_online/webhook_notification.rb +42 -0
  128. data/lib/ledger_sync/adaptors/request.rb +53 -0
  129. data/lib/ledger_sync/adaptors/response.rb +55 -0
  130. data/lib/ledger_sync/adaptors/searcher.rb +3 -1
  131. data/lib/ledger_sync/adaptors/stripe/adaptor.rb +45 -0
  132. data/lib/ledger_sync/adaptors/stripe/config.rb +6 -0
  133. data/lib/ledger_sync/adaptors/stripe/customer/operations/create.rb +44 -0
  134. data/lib/ledger_sync/adaptors/stripe/customer/operations/delete.rb +35 -0
  135. data/lib/ledger_sync/adaptors/stripe/customer/operations/find.rb +44 -0
  136. data/lib/ledger_sync/adaptors/stripe/customer/operations/update.rb +43 -0
  137. data/lib/ledger_sync/adaptors/stripe/operation.rb +35 -0
  138. data/lib/ledger_sync/adaptors/stripe/operation/create.rb +17 -0
  139. data/lib/ledger_sync/adaptors/stripe/operation/delete.rb +17 -0
  140. data/lib/ledger_sync/adaptors/stripe/operation/find.rb +15 -0
  141. data/lib/ledger_sync/adaptors/stripe/operation/update.rb +17 -0
  142. data/lib/ledger_sync/adaptors/test/config.rb +0 -1
  143. data/lib/ledger_sync/adaptors/test/customer/operations/create.rb +1 -0
  144. data/lib/ledger_sync/adaptors/test/customer/operations/find.rb +1 -0
  145. data/lib/ledger_sync/adaptors/test/customer/operations/invalid.rb +1 -0
  146. data/lib/ledger_sync/adaptors/test/customer/operations/update.rb +1 -0
  147. data/lib/ledger_sync/adaptors/test/customer/operations/valid.rb +1 -0
  148. data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +8 -1
  149. data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +9 -2
  150. data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +9 -5
  151. data/lib/ledger_sync/adaptors/test/vendor/operations/create.rb +5 -0
  152. data/lib/ledger_sync/adaptors/test/vendor/operations/find.rb +3 -0
  153. data/lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb +5 -0
  154. data/lib/ledger_sync/adaptors/test/vendor/operations/update.rb +5 -0
  155. data/lib/ledger_sync/adaptors/test/vendor/operations/valid.rb +5 -0
  156. data/lib/ledger_sync/error/adaptor_errors.rb +18 -5
  157. data/lib/ledger_sync/error/operation_errors.rb +13 -4
  158. data/lib/ledger_sync/resource.rb +6 -0
  159. data/lib/ledger_sync/resource_attribute/dirty_mixin.rb +16 -15
  160. data/lib/ledger_sync/resources/bill.rb +7 -1
  161. data/lib/ledger_sync/resources/bill_line_item.rb +2 -0
  162. data/lib/ledger_sync/resources/currency.rb +9 -0
  163. data/lib/ledger_sync/resources/customer.rb +16 -0
  164. data/lib/ledger_sync/resources/department.rb +14 -0
  165. data/lib/ledger_sync/resources/deposit.rb +7 -0
  166. data/lib/ledger_sync/resources/deposit_line_item.rb +6 -0
  167. data/lib/ledger_sync/resources/expense.rb +5 -0
  168. data/lib/ledger_sync/resources/expense_line_item.rb +2 -0
  169. data/lib/ledger_sync/resources/invoice.rb +23 -0
  170. data/lib/ledger_sync/resources/invoice_sales_line_item.rb +17 -0
  171. data/lib/ledger_sync/resources/item.rb +5 -0
  172. data/lib/ledger_sync/resources/journal_entry.rb +5 -1
  173. data/lib/ledger_sync/resources/journal_entry_line_item.rb +4 -0
  174. data/lib/ledger_sync/resources/ledger_class.rb +14 -0
  175. data/lib/ledger_sync/resources/payment.rb +13 -0
  176. data/lib/ledger_sync/resources/payment_line_item.rb +15 -0
  177. data/lib/ledger_sync/resources/subsidiary.rb +8 -0
  178. data/lib/ledger_sync/resources/transfer.rb +4 -0
  179. data/lib/ledger_sync/resources/vendor.rb +9 -2
  180. data/lib/ledger_sync/type/reference_many.rb +12 -1
  181. data/lib/ledger_sync/type/reference_one.rb +1 -1
  182. data/lib/ledger_sync/util/resonad.rb +18 -0
  183. data/lib/ledger_sync/util/signer.rb +36 -0
  184. data/lib/ledger_sync/util/string_helpers.rb +12 -12
  185. data/lib/ledger_sync/version.rb +1 -1
  186. data/qa/env_spec.rb +5 -0
  187. data/qa/netsuite/account_spec.rb +20 -0
  188. data/qa/netsuite/currency_spec.rb +16 -0
  189. data/qa/netsuite/customer.rb +76 -0
  190. data/qa/netsuite/customer_spec.rb +21 -0
  191. data/qa/netsuite/vendor.rb +76 -0
  192. data/qa/netsuite/vendor_spec.rb +23 -0
  193. data/qa/netsuite_soap/customer_spec.rb +21 -0
  194. data/qa/netsuite_soap/subsidiary_spec.rb +0 -0
  195. data/qa/netsuite_test.rb +42 -0
  196. data/qa/qa_helper.rb +58 -0
  197. data/qa/quickbooks_online/account_spec.rb +14 -0
  198. data/qa/quickbooks_online/customer_spec.rb +13 -0
  199. data/qa/quickbooks_online/expense_spec.rb +31 -0
  200. data/qa/quickbooks_online/vendor_spec.rb +13 -0
  201. data/qa/stripe/customers_spec.rb +15 -0
  202. data/qa/support/adaptor_helpers.rb +99 -0
  203. data/qa/support/adaptor_support_setup.rb +23 -0
  204. data/qa/support/netsuite_helpers.rb +33 -0
  205. data/qa/support/netsuite_shared_examples.rb +30 -0
  206. data/qa/support/netsuite_soap_helpers.rb +33 -0
  207. data/qa/support/netsuite_soap_shared_examples.rb +10 -0
  208. data/qa/support/quickbooks_online_helpers.rb +42 -0
  209. data/qa/support/quickbooks_online_shared_examples.rb +82 -0
  210. data/qa/support/shared_examples.rb +127 -0
  211. data/qa/support/stripe_helpers.rb +22 -0
  212. data/qa/support/stripe_shared_examples.rb +10 -0
  213. data/qa/test.rb +67 -0
  214. data/release.sh +13 -1
  215. metadata +189 -3
  216. data/qa.rb +0 -142
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Stripe
6
+ module Customer
7
+ module Operations
8
+ class Update < Stripe::Operation::Update
9
+ class Contract < LedgerSync::Adaptors::Contract
10
+ params do
11
+ required(:external_id).maybe(:string)
12
+ required(:ledger_id).value(:nil)
13
+ required(:email).maybe(:string)
14
+ required(:name).filled(:string)
15
+ required(:phone_number).maybe(:string)
16
+ optional(:subsidiary).maybe(:hash, Types::Reference)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def operate
23
+ stripe_customer = ::Stripe::Customer.update(
24
+ resource.ledger_id,
25
+ email: resource.email,
26
+ metadata: {
27
+ external_id: resource.external_id
28
+ },
29
+ name: resource.name,
30
+ phone: resource.phone_number
31
+ )
32
+
33
+ success(
34
+ resource: resource,
35
+ response: stripe_customer
36
+ )
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Stripe
6
+ module Operation
7
+ module Mixin
8
+ def self.included(base)
9
+ base.include Adaptors::Operation::Mixin
10
+ base.include InstanceMethods # To ensure these override parent methods
11
+ end
12
+
13
+ module InstanceMethods
14
+ def stripe_resource_type
15
+ @stripe_resource_type ||= ledger_serializer.class.stripe_resource_type
16
+ end
17
+
18
+ def perform
19
+ adaptor.wrap_perform do
20
+ super
21
+ end
22
+ rescue ::Stripe::StripeError => e
23
+ case e.code
24
+ when 'resource_missing'
25
+ failure(e)
26
+ else
27
+ raise e
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../operation'
4
+
5
+ module LedgerSync
6
+ module Adaptors
7
+ module Stripe
8
+ module Operation
9
+ class Create
10
+ include Stripe::Operation::Mixin
11
+
12
+ private
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../operation'
4
+
5
+ module LedgerSync
6
+ module Adaptors
7
+ module Stripe
8
+ module Operation
9
+ class Delete
10
+ include Stripe::Operation::Mixin
11
+
12
+ private
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../operation'
4
+
5
+ module LedgerSync
6
+ module Adaptors
7
+ module Stripe
8
+ module Operation
9
+ class Find
10
+ include Stripe::Operation::Mixin
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../operation'
4
+
5
+ module LedgerSync
6
+ module Adaptors
7
+ module Stripe
8
+ module Operation
9
+ class Update
10
+ include Stripe::Operation::Mixin
11
+
12
+ private
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -2,6 +2,5 @@ LedgerSync.register_adaptor(:test) do |config|
2
2
  config.test = true
3
3
  config.name = 'Test Ledger Adaptor'
4
4
  config.add_alias :test
5
- config.module = 'Test'
6
5
  config.rate_limiting_wait_in_seconds = 47
7
6
  end
@@ -11,6 +11,7 @@ module LedgerSync
11
11
  required(:email).maybe(:string)
12
12
  required(:name).filled(:string)
13
13
  required(:phone_number).maybe(:string)
14
+ required(:subsidiary).maybe(:hash, Types::Reference)
14
15
  end
15
16
  end
16
17
 
@@ -11,6 +11,7 @@ module LedgerSync
11
11
  optional(:email).maybe(:string)
12
12
  optional(:name).maybe(:string)
13
13
  optional(:phone_number).maybe(:string)
14
+ required(:subsidiary).maybe(:hash, Types::Reference)
14
15
  end
15
16
  end
16
17
 
@@ -11,6 +11,7 @@ module LedgerSync
11
11
  required(:email).filled(:string)
12
12
  required(:name).filled(:string)
13
13
  required(:phone_number).filled(:string)
14
+ required(:subsidiary).hash(Types::Reference)
14
15
  end
15
16
  end
16
17
  end
@@ -11,6 +11,7 @@ module LedgerSync
11
11
  optional(:email).maybe(:string)
12
12
  required(:name).filled(:string)
13
13
  optional(:phone_number).maybe(:string)
14
+ required(:subsidiary).maybe(:hash, Types::Reference)
14
15
  end
15
16
  end
16
17
  end
@@ -13,6 +13,7 @@ module LedgerSync
13
13
  optional(:email).maybe(:string)
14
14
  optional(:name).maybe(:string)
15
15
  optional(:phone_number).maybe(:string)
16
+ required(:subsidiary).maybe(:hash, Types::Reference)
16
17
  end
17
18
  end
18
19
  end
@@ -7,10 +7,17 @@ module LedgerSync
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
- required(:ledger_id).value(:nil)
10
+ optional(:account).hash(Types::Reference)
11
11
  required(:amount).filled(:integer)
12
12
  required(:currency).filled(:string)
13
13
  required(:customer).hash(Types::Reference)
14
+ optional(:deposit_account).hash(Types::Reference)
15
+ optional(:exchange_rate).maybe(:float)
16
+ required(:ledger_id).value(:nil)
17
+ required(:line_items).array(Types::Reference)
18
+ optional(:memo).filled(:string)
19
+ optional(:reference_number).maybe(:string)
20
+ optional(:transaction_date).filled(:date?)
14
21
  end
15
22
  end
16
23
 
@@ -7,10 +7,17 @@ module LedgerSync
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  schema do
9
9
  required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
10
+ optional(:account).hash(Types::Reference)
11
11
  optional(:amount).maybe(:integer)
12
12
  optional(:currency).maybe(:string)
13
- optional(:customer).maybe(Types::Reference)
13
+ optional(:customer).hash(Types::Reference)
14
+ optional(:deposit_account).hash(Types::Reference)
15
+ optional(:exchange_rate).maybe(:float)
16
+ required(:ledger_id).filled(:string)
17
+ optional(:line_items).array(Types::Reference)
18
+ optional(:memo).maybe(:string)
19
+ optional(:reference_number).maybe(:string)
20
+ optional(:transaction_date).maybe(:date?)
14
21
  end
15
22
  end
16
23
 
@@ -7,13 +7,17 @@ module LedgerSync
7
7
  class Contract < LedgerSync::Adaptors::Contract
8
8
  params do
9
9
  required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
10
+ optional(:account).hash(Types::Reference)
11
11
  required(:amount).filled(:integer)
12
12
  required(:currency).filled(:string)
13
- required(:customer).hash do
14
- required(:object).filled(:symbol)
15
- required(:id).filled(:string)
16
- end
13
+ required(:customer).hash(Types::Reference)
14
+ optional(:deposit_account).hash(Types::Reference)
15
+ optional(:exchange_rate).maybe(:float)
16
+ required(:ledger_id).filled(:string)
17
+ required(:line_items).array(Types::Reference)
18
+ optional(:memo).filled(:string)
19
+ optional(:reference_number).maybe(:string)
20
+ optional(:transaction_date).filled(:date?)
17
21
  end
18
22
  end
19
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module Test
@@ -12,6 +14,9 @@ module LedgerSync
12
14
  required(:first_name).maybe(:string)
13
15
  required(:last_name).maybe(:string)
14
16
  required(:email).maybe(:string)
17
+ optional(:company_name).maybe(:string)
18
+ optional(:phone_number).maybe(:string)
19
+ optional(:subsidiary).maybe(:hash, Types::Reference)
15
20
  end
16
21
  end
17
22
 
@@ -14,6 +14,9 @@ module LedgerSync
14
14
  optional(:first_name).maybe(:string)
15
15
  optional(:last_name).maybe(:string)
16
16
  optional(:email).maybe(:string)
17
+ optional(:company_name).maybe(:string)
18
+ optional(:phone_number).maybe(:string)
19
+ optional(:subsidiary).maybe(:hash, Types::Reference)
17
20
  end
18
21
  end
19
22
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module Test
@@ -12,6 +14,9 @@ module LedgerSync
12
14
  required(:first_name).filled(:string)
13
15
  required(:last_name).filled(:string)
14
16
  required(:email).filled(:string)
17
+ required(:company_name).filled(:string)
18
+ required(:phone_number).filled(:string)
19
+ required(:subsidiary).filled(:hash, Types::Reference)
15
20
  end
16
21
  end
17
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module Test
@@ -12,6 +14,9 @@ module LedgerSync
12
14
  required(:first_name).maybe(:string)
13
15
  required(:last_name).maybe(:string)
14
16
  optional(:email).maybe(:string)
17
+ optional(:company_name).maybe(:string)
18
+ optional(:phone_number).maybe(:string)
19
+ optional(:subsidiary).maybe(:hash, Types::Reference)
15
20
  end
16
21
  end
17
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LedgerSync
2
4
  module Adaptors
3
5
  module Test
@@ -12,6 +14,9 @@ module LedgerSync
12
14
  optional(:first_name).maybe(:string)
13
15
  optional(:last_name).maybe(:string)
14
16
  optional(:email).maybe(:string)
17
+ optional(:company_name).maybe(:string)
18
+ optional(:phone_number).maybe(:string)
19
+ optional(:subsidiary).maybe(:hash, Types::Reference)
15
20
  end
16
21
  end
17
22
 
@@ -6,12 +6,16 @@ module LedgerSync
6
6
  attr_reader :adaptor
7
7
  attr_reader :response
8
8
 
9
- def initialize(adaptor:, message:, response:nil)
9
+ def initialize(adaptor:, message:, response: nil)
10
10
  @adaptor = adaptor
11
11
  @response = response
12
12
  super(message: message)
13
13
  end
14
14
 
15
+ class AuthenticationError < self; end
16
+ class AuthorizationError < self; end
17
+ class ConfigurationError < self; end
18
+
15
19
  class MissingAdaptorError < self
16
20
  def initialize(message:)
17
21
  super(
@@ -37,7 +41,7 @@ module LedgerSync
37
41
  class ThrottleError < self
38
42
  attr_reader :rate_limiting_wait_in_seconds
39
43
 
40
- def initialize(adaptor:, message: nil, response:nil)
44
+ def initialize(adaptor:, message: nil, response: nil)
41
45
  message ||= 'Your request has been throttled.'
42
46
  @rate_limiting_wait_in_seconds = LedgerSync.adaptors.config_from_klass(
43
47
  klass: adaptor.class
@@ -51,9 +55,18 @@ module LedgerSync
51
55
  end
52
56
  end
53
57
 
54
- class AuthenticationError < self; end
55
- class AuthorizationError < self; end
56
- class ConfigurationError < self; end
58
+ class UnknownURLFormat < self
59
+ attr_reader :resource
60
+
61
+ def initialize(*args, resource:, **keywords)
62
+ super(
63
+ *args,
64
+ {
65
+ message: "Unknown URL format for #{resource.class}"
66
+ }.merge(keywords)
67
+ )
68
+ end
69
+ end
57
70
  end
58
71
  end
59
72
  end
@@ -3,10 +3,10 @@
3
3
  module LedgerSync
4
4
  class Error
5
5
  class OperationError < Error
6
- attr_reader :operation
7
- attr_reader :response
6
+ attr_reader :operation, :response
8
7
 
9
- def initialize(message:, operation:, response:nil)
8
+ def initialize(message: nil, operation:, response: nil)
9
+ message ||= 'Operation failed.'
10
10
  @operation = operation
11
11
  @response = response
12
12
  super(message: message)
@@ -15,9 +15,18 @@ module LedgerSync
15
15
  class DuplicateLedgerResourceError < self; end
16
16
  class NotFoundError < self; end
17
17
  class LedgerValidationError < self; end
18
+ class LedgerIDRequired < self
19
+ def initialize(**keywords)
20
+ super(
21
+ {
22
+ message: 'Resource ledger_id is required.'
23
+ }.merge(keywords)
24
+ )
25
+ end
26
+ end
18
27
 
19
28
  class PerformedOperationError < self
20
- def initialize(message: nil, operation:, response:nil)
29
+ def initialize(message: nil, operation:, response: nil)
21
30
  message ||= 'Operation has already been performed. Please check the result.'
22
31
 
23
32
  super(
@@ -30,10 +30,12 @@ module LedgerSync
30
30
 
31
31
  def assign_attribute(name, value)
32
32
  public_send("#{name}=", value)
33
+ self
33
34
  end
34
35
 
35
36
  def assign_attributes(**keywords)
36
37
  keywords.each { |k, v| assign_attribute(k, v) }
38
+ self
37
39
  end
38
40
 
39
41
  def changed?
@@ -61,6 +63,10 @@ module LedgerSync
61
63
  subclass.attribute :ledger_id, type: Type::ID
62
64
  end
63
65
 
66
+ def self.resource_module_str
67
+ @resource_module_str ||= name.split('LedgerSync::')[1..-1].join('LedgerSync::')
68
+ end
69
+
64
70
  def self.resource_type
65
71
  @resource_type ||= LedgerSync::Util::StringHelpers.underscore(name.split('::').last).to_sym
66
72
  end