ledger_sync 1.1.3 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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