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 @@
1
+ theme: jekyll-theme-cayman
data/bin/qa ADDED
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ bundle exec rspec qa -I ./qa --require qa_helper.rb $@
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency('bump')
32
32
  spec.add_development_dependency('bundler', '~> 1.16')
33
33
  spec.add_development_dependency('byebug', '>= 0')
34
+ spec.add_development_dependency('factory_bot')
34
35
  spec.add_development_dependency('rake', '~> 10.0')
35
36
  spec.add_development_dependency('rspec', '~> 3.2')
36
37
  spec.add_development_dependency('rubocop', '>= 0')
@@ -39,14 +40,17 @@ Gem::Specification.new do |spec|
39
40
  spec.add_runtime_dependency('activemodel', '>= 0')
40
41
  spec.add_runtime_dependency('colorize', '>= 0')
41
42
  spec.add_runtime_dependency('coveralls')
43
+ spec.add_runtime_dependency('dotenv')
42
44
  spec.add_runtime_dependency('dry-schema')
43
45
  spec.add_runtime_dependency('dry-validation')
44
46
  spec.add_runtime_dependency('faraday', '>= 0')
45
47
  spec.add_runtime_dependency('faraday-detailed_logger', '>= 0')
46
48
  spec.add_runtime_dependency('faraday_middleware', '>= 0')
47
49
  spec.add_runtime_dependency('fingerprintable', '>= 1.2.1')
50
+ spec.add_runtime_dependency('netsuite')
48
51
  spec.add_runtime_dependency('nokogiri', '>= 0')
49
52
  spec.add_runtime_dependency('oauth2', '>= 0')
50
53
  spec.add_runtime_dependency('resonad', '>= 0')
51
54
  spec.add_runtime_dependency('simply_serializable', '>= 1.3.0')
55
+ spec.add_runtime_dependency('stripe')
52
56
  end
@@ -10,6 +10,14 @@ require 'colorize'
10
10
  require 'fingerprintable'
11
11
  require 'simply_serializable'
12
12
  require 'active_model'
13
+ require 'stripe'
14
+ require 'netsuite'
15
+ require 'oauth2'
16
+ require 'tempfile'
17
+
18
+ # Dotenv
19
+ require 'dotenv'
20
+ Dotenv.load
13
21
 
14
22
  # Version
15
23
  require 'ledger_sync/version'
@@ -25,7 +33,9 @@ require 'ledger_sync/error'
25
33
  Gem.find_files('ledger_sync/error/**/*.rb').each { |path| require path }
26
34
 
27
35
  # Support Classes
36
+ require 'ledger_sync/util/resonad'
28
37
  require 'ledger_sync/util/debug'
38
+ require 'ledger_sync/util/signer'
29
39
  require 'ledger_sync/util/hash_helpers'
30
40
  require 'ledger_sync/util/resources_builder'
31
41
  require 'ledger_sync/adaptor_configuration'
@@ -34,24 +44,20 @@ require 'ledger_sync/util/performer'
34
44
  require 'ledger_sync/util/validator'
35
45
  require 'ledger_sync/util/string_helpers'
36
46
  require 'ledger_sync/result'
47
+
48
+ # Adaptors
49
+ Gem.find_files('ledger_sync/adaptors/mixins/**/*.rb').each { |path| require path }
50
+ require 'ledger_sync/adaptors/adaptor'
51
+ require 'ledger_sync/adaptors/searcher'
52
+ require 'ledger_sync/adaptors/ledger_serializer'
37
53
  require 'ledger_sync/adaptors/operation'
38
54
  require 'ledger_sync/adaptors/contract'
55
+ require 'ledger_sync/adaptors/response'
56
+ require 'ledger_sync/adaptors/request'
39
57
 
40
58
  # Resources (resources are registerd below)
41
59
  require 'ledger_sync/resource' # Template class
42
- require 'ledger_sync/resources/account'
43
- require 'ledger_sync/resources/customer'
44
- require 'ledger_sync/resources/vendor'
45
- require 'ledger_sync/resources/payment'
46
- require 'ledger_sync/resources/expense_line_item'
47
- require 'ledger_sync/resources/expense'
48
- require 'ledger_sync/resources/deposit_line_item'
49
- require 'ledger_sync/resources/deposit'
50
- require 'ledger_sync/resources/transfer'
51
- require 'ledger_sync/resources/bill_line_item'
52
- require 'ledger_sync/resources/bill'
53
- require 'ledger_sync/resources/journal_entry_line_item'
54
- require 'ledger_sync/resources/journal_entry'
60
+ Gem.find_files('ledger_sync/resources/**/*.rb').each { |path| require path }
55
61
 
56
62
  module LedgerSync
57
63
  @log_level = nil
@@ -84,13 +90,13 @@ module LedgerSync
84
90
  @logger = val
85
91
  end
86
92
 
87
- def self.register_adaptor(adaptor_key)
93
+ def self.register_adaptor(adaptor_key, module_string: nil)
88
94
  adaptor_root_path = "ledger_sync/adaptors/#{adaptor_key}"
89
95
  require "#{adaptor_root_path}/adaptor"
90
96
  self.adaptors ||= LedgerSync::AdaptorConfigurationStore.new
91
- self.adaptors.register_adaptor(adaptor_key)
92
-
93
- yield(adaptors.send(adaptor_key))
97
+ adaptor_config = LedgerSync::AdaptorConfiguration.new(adaptor_key, module_string: module_string)
98
+ yield(adaptor_config)
99
+ self.adaptors.register_adaptor(adaptor_config: adaptor_config)
94
100
 
95
101
  adaptor_files = Gem.find_files("#{adaptor_root_path}/**/*.rb")
96
102
  # Sort the files to include BFS-style as most dependencies are in parent folders
@@ -113,23 +119,27 @@ module LedgerSync
113
119
  end
114
120
  end
115
121
 
116
- # Adaptors
117
- require 'ledger_sync/adaptors/adaptor'
118
- require 'ledger_sync/adaptors/searcher'
119
- require 'ledger_sync/adaptors/ledger_serializer'
122
+ # Load Adaptors
120
123
  Gem.find_files('ledger_sync/adaptors/**/config.rb').each { |path| require path }
121
124
 
122
125
  # Register Resources
123
126
  LedgerSync.register_resource(resource: LedgerSync::Account)
127
+ LedgerSync.register_resource(resource: LedgerSync::Bill)
128
+ LedgerSync.register_resource(resource: LedgerSync::BillLineItem)
129
+ LedgerSync.register_resource(resource: LedgerSync::Currency)
124
130
  LedgerSync.register_resource(resource: LedgerSync::Customer)
125
- LedgerSync.register_resource(resource: LedgerSync::Vendor)
126
- LedgerSync.register_resource(resource: LedgerSync::Payment)
127
- LedgerSync.register_resource(resource: LedgerSync::ExpenseLineItem)
128
- LedgerSync.register_resource(resource: LedgerSync::Expense)
129
- LedgerSync.register_resource(resource: LedgerSync::DepositLineItem)
131
+ LedgerSync.register_resource(resource: LedgerSync::Department)
130
132
  LedgerSync.register_resource(resource: LedgerSync::Deposit)
131
- LedgerSync.register_resource(resource: LedgerSync::Transfer)
132
- LedgerSync.register_resource(resource: LedgerSync::BillLineItem)
133
- LedgerSync.register_resource(resource: LedgerSync::Bill)
134
- LedgerSync.register_resource(resource: LedgerSync::JournalEntryLineItem)
133
+ LedgerSync.register_resource(resource: LedgerSync::DepositLineItem)
134
+ LedgerSync.register_resource(resource: LedgerSync::Expense)
135
+ LedgerSync.register_resource(resource: LedgerSync::ExpenseLineItem)
136
+ LedgerSync.register_resource(resource: LedgerSync::Invoice)
137
+ LedgerSync.register_resource(resource: LedgerSync::InvoiceSalesLineItem)
138
+ LedgerSync.register_resource(resource: LedgerSync::Item)
135
139
  LedgerSync.register_resource(resource: LedgerSync::JournalEntry)
140
+ LedgerSync.register_resource(resource: LedgerSync::JournalEntryLineItem)
141
+ LedgerSync.register_resource(resource: LedgerSync::LedgerClass)
142
+ LedgerSync.register_resource(resource: LedgerSync::Payment)
143
+ LedgerSync.register_resource(resource: LedgerSync::PaymentLineItem)
144
+ LedgerSync.register_resource(resource: LedgerSync::Transfer)
145
+ LedgerSync.register_resource(resource: LedgerSync::Vendor)
@@ -5,7 +5,7 @@ module LedgerSync
5
5
  include Fingerprintable::Mixin
6
6
  include SimplySerializable::Mixin
7
7
 
8
- attr_accessor :module,
8
+ attr_accessor :module_string,
9
9
  :name,
10
10
  :rate_limiting_wait_in_seconds,
11
11
  :test
@@ -15,39 +15,45 @@ module LedgerSync
15
15
 
16
16
  serialize only: %i[
17
17
  aliases
18
- module
18
+ module_string
19
19
  root_key
20
20
  rate_limiting_wait_in_seconds
21
21
  test
22
22
  ]
23
23
 
24
- def initialize(root_key)
24
+ def initialize(root_key, module_string: nil)
25
25
  @root_key = root_key
26
26
  @aliases = []
27
- @module = LedgerSync::Util::StringHelpers.camelcase(root_key)
27
+ @module_string = module_string || LedgerSync::Util::StringHelpers.camelcase(root_key)
28
28
  end
29
29
 
30
30
  def adaptor_klass
31
31
  @adaptor_klass ||= base_module::Adaptor
32
32
  end
33
33
 
34
- def base_module
35
- @base_module ||= begin
36
- LedgerSync::Adaptors.const_get(@module)
37
- end
38
- end
39
-
40
34
  def add_alias(new_alias)
41
35
  @aliases << new_alias
42
36
  LedgerSync.adaptors.add_alias(new_alias, self)
43
37
  end
44
38
 
45
- # Delegate new to the adaptor class enabling faster adaptor initialization
39
+ def base_module
40
+ @base_module ||= begin
41
+ LedgerSync::Adaptors.const_get(@module_string)
42
+ end
43
+ end
44
+
45
+ # Delegate #new to the adaptor class enabling faster adaptor initialization
46
46
  # e.g. LedgerSync.adaptors.test.new(...)
47
47
  def new(*args)
48
48
  adaptor_klass.new(*args)
49
49
  end
50
50
 
51
+ # Delegate #new_from_env to the adaptor class enabling faster adaptor initialization
52
+ # e.g. LedgerSync.adaptors.test.new_from_env(...)
53
+ def new_from_env(*args)
54
+ adaptor_klass.new_from_env(*args)
55
+ end
56
+
51
57
  def test?
52
58
  test == true
53
59
  end
@@ -2,11 +2,12 @@ module LedgerSync
2
2
  class AdaptorConfigurationStore
3
3
  include Enumerable
4
4
 
5
- attr_reader :configs
5
+ attr_reader :configs, :inflections
6
6
 
7
7
  def initialize
8
8
  @keys = []
9
9
  @configs = {}
10
+ @inflections = []
10
11
  @klass_configs = {}
11
12
  end
12
13
 
@@ -17,7 +18,7 @@ module LedgerSync
17
18
  return
18
19
  end
19
20
 
20
- instance_methods_for(adaptor_key, existing_config)
21
+ _instance_methods_for(adaptor_key: adaptor_key, adaptor_config: existing_config)
21
22
  end
22
23
 
23
24
  def config_from_klass(klass:)
@@ -28,24 +29,27 @@ module LedgerSync
28
29
  configs.each { |k, v| yield(k, v) }
29
30
  end
30
31
 
31
- def register_adaptor(adaptor_key)
32
- instance_methods_for(adaptor_key)
32
+ def register_adaptor(adaptor_config:)
33
+ _instance_methods_for(
34
+ adaptor_key: adaptor_config.root_key,
35
+ adaptor_config: adaptor_config
36
+ )
33
37
  end
34
38
 
35
39
  private
36
40
 
37
- def instance_methods_for(adaptor_key, existing_config = nil)
41
+ def _instance_methods_for(adaptor_key:, adaptor_config:)
38
42
  @keys << adaptor_key.to_sym
39
43
 
40
- config = existing_config || LedgerSync::AdaptorConfiguration.new(adaptor_key)
41
- @configs[adaptor_key] = config
42
- @klass_configs[config.adaptor_klass] = config
44
+ @configs[adaptor_key] = adaptor_config
45
+ @klass_configs[adaptor_config.adaptor_klass] = adaptor_config
43
46
 
44
47
  instance_variable_set(
45
48
  "@#{adaptor_key}",
46
- config
49
+ adaptor_config
47
50
  )
48
51
 
52
+ @inflections |= [adaptor_config.module_string]
49
53
  self.class.class_eval { attr_reader adaptor_key }
50
54
  end
51
55
  end
@@ -20,7 +20,7 @@ module LedgerSync
20
20
  end
21
21
 
22
22
  def base_module
23
- adaptor_configuration.base_module
23
+ self.class.base_module
24
24
  end
25
25
 
26
26
  def ledger_attributes_to_save
@@ -49,6 +49,14 @@ module LedgerSync
49
49
  nil
50
50
  end
51
51
 
52
+ def self.base_module
53
+ config.base_module
54
+ end
55
+
56
+ def self.base_operation_module_for(resource_class:)
57
+ base_module.const_get("#{resource_class.resource_module_str}::Operations")
58
+ end
59
+
52
60
  def self.config
53
61
  @config ||= LedgerSync.adaptors.config_from_klass(klass: self)
54
62
  end
@@ -8,6 +8,8 @@ Gem.find_files('ledger_sync/adaptors/ledger_serializer_type/**/*.rb').each { |pa
8
8
  module LedgerSync
9
9
  module Adaptors
10
10
  class LedgerSerializer
11
+ include Mixins::InferResourceClassMixin
12
+
11
13
  attr_reader :resource
12
14
 
13
15
  def initialize(resource:)
@@ -90,11 +92,6 @@ module LedgerSync
90
92
  )
91
93
  end
92
94
 
93
- def self._inferred_resource_class
94
- parts = name.split('::')
95
- LedgerSync.const_get(parts[parts.index('Adaptors') + 2])
96
- end
97
-
98
95
  private_class_method def self._attribute(**keywords)
99
96
  attributes.add(
100
97
  _build_attribute(**keywords)
@@ -116,7 +113,7 @@ module LedgerSync
116
113
  private
117
114
 
118
115
  def ensure_inferred_resource_class!
119
- inferred_resource_class = self.class._inferred_resource_class
116
+ inferred_resource_class = self.class.inferred_resource_class
120
117
  raise "Resource must be a #{inferred_resource_class.name}. Given #{resource.class}" unless resource.is_a?(inferred_resource_class)
121
118
  end
122
119
  end
@@ -32,7 +32,7 @@ module LedgerSync
32
32
  end
33
33
 
34
34
  if attribute.resource_attribute.present?
35
- raise "resource_attribute already defined for #{serializer_class.name}: #{attribute.resource_attribute}" if resource_attribute_keyed_hash.key?(attribute.resource_attribute.to_s)
35
+ # raise "resource_attribute already defined for #{serializer_class.name}: #{attribute.resource_attribute}" if resource_attribute_keyed_hash.key?(attribute.resource_attribute.to_s)
36
36
 
37
37
  resource_attribute_keyed_hash[attribute.resource_attribute.to_s] = attribute
38
38
  end
@@ -5,7 +5,7 @@ module LedgerSync
5
5
  module LedgerSerializerType
6
6
  class ReferencesManyType < ValueType
7
7
  def convert_from_ledger(resource_class: nil, serializer:, value:)
8
- resource_class ||= serializer._inferred_resource_class
8
+ resource_class ||= serializer.inferred_resource_class
9
9
  return [] if value.nil?
10
10
 
11
11
  value.map do |one_value|
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Mixins
6
+ module InferAdaptorClassMixin
7
+ module ClassMethods
8
+ def inferred_adaptor_class
9
+ @inferred_adaptor_class ||= begin
10
+ parts = name.split('::')
11
+ LedgerSync::Adaptors.const_get(
12
+ parts[parts.index('Adaptors') + 1]
13
+ )::Adaptor
14
+ end
15
+ end
16
+ end
17
+
18
+ def self.included(base)
19
+ base.extend ClassMethods
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Mixins
6
+ module InferLedgerSerializerMixin
7
+ module ClassMethods
8
+ def inferred_ledger_serializer(resource:)
9
+ @inferred_ledger_serializer ||= inferred_ledger_serializer_class.new(
10
+ resource: resource
11
+ )
12
+ end
13
+
14
+ def inferred_ledger_serializer_class
15
+ @inferred_ledger_serializer_class ||= begin
16
+ inferred_adaptor_class.base_module.const_get(
17
+ "#{inferred_resource_class.resource_module_str}::LedgerSerializer"
18
+ )
19
+ end
20
+ end
21
+ end
22
+
23
+ def self.included(base)
24
+ base.include InferAdaptorClassMixin
25
+ base.include InferResourceClassMixin
26
+ base.extend ClassMethods
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Mixins
6
+ module InferResourceClassMixin
7
+ module ClassMethods
8
+ def inferred_resource_class
9
+ @inferred_resource_class ||= begin
10
+ parts = name.split('::')
11
+ LedgerSync.const_get(parts[parts.index('Adaptors') + 2])
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.included(base)
17
+ base.extend ClassMethods
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LedgerSync
4
+ module Adaptors
5
+ module Mixins
6
+ module OffsetAndLimitPaginationSearcherMixin
7
+ def next_searcher
8
+ paginate(limit: limit, offset: offset + limit)
9
+ end
10
+
11
+ def previous_searcher
12
+ return nil if offset <= 1
13
+
14
+ paginate(limit: limit, offset: offset - limit)
15
+ end
16
+
17
+ private
18
+
19
+ def default_offset
20
+ raise NotImplementedError
21
+ end
22
+
23
+ def default_limit
24
+ 10
25
+ end
26
+
27
+ def limit
28
+ pagination.fetch(:limit, default_limit).to_i
29
+ end
30
+
31
+ def offset
32
+ pagination.fetch(:offset, default_offset).to_i
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end