ledger_sync 1.4.4 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +64 -1
  3. data/.travis.yml +12 -5
  4. data/Gemfile.lock +67 -65
  5. data/bin/quickbooks_online_oauth_server.rb +1 -1
  6. data/documentation/generators/reference/ledger/generator.rb +2 -0
  7. data/documentation/site/guides/contribute/deployment.md +62 -7
  8. data/documentation/site/guides/contribute/index.md +5 -1
  9. data/ledger_sync.gemspec +13 -11
  10. data/lib/ledger_sync.rb +17 -12
  11. data/lib/ledger_sync/deserializer.rb +2 -2
  12. data/lib/ledger_sync/error.rb +2 -2
  13. data/lib/ledger_sync/error/ledger_errors.rb +1 -2
  14. data/lib/ledger_sync/error/operation_errors.rb +2 -2
  15. data/lib/ledger_sync/error/resource_errors.rb +1 -1
  16. data/lib/ledger_sync/ledger_configuration.rb +16 -12
  17. data/lib/ledger_sync/ledger_configuration_store.rb +16 -7
  18. data/lib/ledger_sync/ledgers/client.rb +123 -108
  19. data/lib/ledger_sync/ledgers/mixins/infer_config_mixin.rb +37 -0
  20. data/lib/ledger_sync/ledgers/mixins/infer_resource_class_mixin.rb +5 -4
  21. data/lib/ledger_sync/ledgers/mixins/infer_serializer_mixin.rb +5 -5
  22. data/lib/ledger_sync/ledgers/mixins/serialization_mixin.rb +2 -2
  23. data/lib/ledger_sync/ledgers/netsuite/check_line_item/deserializer.rb +2 -1
  24. data/lib/ledger_sync/ledgers/netsuite/check_line_item/serializer.rb +2 -1
  25. data/lib/ledger_sync/ledgers/netsuite/client.rb +5 -1
  26. data/lib/ledger_sync/ledgers/netsuite/config.rb +3 -1
  27. data/lib/ledger_sync/ledgers/netsuite/deserializer.rb +1 -1
  28. data/lib/ledger_sync/ledgers/netsuite/type/deserializer_customer_type.rb +2 -0
  29. data/lib/ledger_sync/ledgers/netsuite/type/deserializer_subsidiary_type.rb +2 -0
  30. data/lib/ledger_sync/ledgers/netsuite_soap/client.rb +3 -1
  31. data/lib/ledger_sync/ledgers/netsuite_soap/config.rb +3 -1
  32. data/lib/ledger_sync/ledgers/operation.rb +12 -10
  33. data/lib/ledger_sync/ledgers/quickbooks_online/account/deserializer.rb +10 -22
  34. data/lib/ledger_sync/ledgers/quickbooks_online/account/operations/create.rb +8 -8
  35. data/lib/ledger_sync/ledgers/quickbooks_online/account/operations/find.rb +8 -8
  36. data/lib/ledger_sync/ledgers/quickbooks_online/account/operations/update.rb +8 -8
  37. data/lib/ledger_sync/ledgers/quickbooks_online/account/serializer.rb +11 -17
  38. data/lib/ledger_sync/ledgers/quickbooks_online/account_based_expense_line_detail/deserializer.rb +21 -0
  39. data/lib/ledger_sync/ledgers/quickbooks_online/account_based_expense_line_detail/serializer.rb +21 -0
  40. data/lib/ledger_sync/ledgers/quickbooks_online/bill/deserializer.rb +20 -24
  41. data/lib/ledger_sync/ledgers/quickbooks_online/bill/operations/create.rb +9 -9
  42. data/lib/ledger_sync/ledgers/quickbooks_online/bill/operations/find.rb +9 -9
  43. data/lib/ledger_sync/ledgers/quickbooks_online/bill/operations/update.rb +9 -9
  44. data/lib/ledger_sync/ledgers/quickbooks_online/bill/serializer.rb +20 -23
  45. data/lib/ledger_sync/ledgers/quickbooks_online/bill_line/deserializer.rb +22 -0
  46. data/lib/ledger_sync/ledgers/quickbooks_online/bill_line/serializer.rb +26 -0
  47. data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/deserializer.rb +31 -35
  48. data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/operations/create.rb +13 -13
  49. data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/operations/find.rb +13 -13
  50. data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/operations/update.rb +13 -13
  51. data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/serializer.rb +31 -53
  52. data/lib/ledger_sync/ledgers/quickbooks_online/{bill_payment_line_item → bill_payment_line}/deserializer.rb +3 -5
  53. data/lib/ledger_sync/ledgers/quickbooks_online/{bill_payment_line_item → bill_payment_line}/serializer.rb +3 -5
  54. data/lib/ledger_sync/ledgers/quickbooks_online/check_payment/deserializer.rb +17 -0
  55. data/lib/ledger_sync/ledgers/quickbooks_online/check_payment/serializer.rb +17 -0
  56. data/lib/ledger_sync/ledgers/quickbooks_online/client.rb +10 -6
  57. data/lib/ledger_sync/ledgers/quickbooks_online/config.rb +3 -1
  58. data/lib/ledger_sync/ledgers/quickbooks_online/credit_card_payment/deserializer.rb +17 -0
  59. data/lib/ledger_sync/ledgers/quickbooks_online/credit_card_payment/serializer.rb +17 -0
  60. data/lib/ledger_sync/ledgers/quickbooks_online/currency/deserializer.rb +2 -3
  61. data/lib/ledger_sync/ledgers/quickbooks_online/currency/serializer.rb +3 -2
  62. data/lib/ledger_sync/ledgers/quickbooks_online/customer/deserializer.rb +10 -3
  63. data/lib/ledger_sync/ledgers/quickbooks_online/customer/operations/create.rb +4 -4
  64. data/lib/ledger_sync/ledgers/quickbooks_online/customer/operations/find.rb +5 -5
  65. data/lib/ledger_sync/ledgers/quickbooks_online/customer/operations/update.rb +4 -4
  66. data/lib/ledger_sync/ledgers/quickbooks_online/customer/serializer.rb +10 -3
  67. data/lib/ledger_sync/ledgers/quickbooks_online/department/deserializer.rb +7 -13
  68. data/lib/ledger_sync/ledgers/quickbooks_online/department/operations/create.rb +5 -5
  69. data/lib/ledger_sync/ledgers/quickbooks_online/department/operations/find.rb +5 -5
  70. data/lib/ledger_sync/ledgers/quickbooks_online/department/operations/update.rb +5 -5
  71. data/lib/ledger_sync/ledgers/quickbooks_online/department/serializer.rb +9 -17
  72. data/lib/ledger_sync/ledgers/quickbooks_online/deposit/deserializer.rb +16 -19
  73. data/lib/ledger_sync/ledgers/quickbooks_online/deposit/operations/create.rb +7 -7
  74. data/lib/ledger_sync/ledgers/quickbooks_online/deposit/operations/find.rb +7 -7
  75. data/lib/ledger_sync/ledgers/quickbooks_online/deposit/operations/update.rb +7 -7
  76. data/lib/ledger_sync/ledgers/quickbooks_online/deposit/serializer.rb +16 -19
  77. data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line/deserializer.rb +22 -0
  78. data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line/serializer.rb +26 -0
  79. data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_detail/deserializer.rb +34 -0
  80. data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_detail/serializer.rb +35 -0
  81. data/lib/ledger_sync/ledgers/quickbooks_online/deserializer.rb +4 -4
  82. data/lib/ledger_sync/ledgers/quickbooks_online/expense/deserializer.rb +20 -25
  83. data/lib/ledger_sync/ledgers/quickbooks_online/expense/operations/create.rb +10 -10
  84. data/lib/ledger_sync/ledgers/quickbooks_online/expense/operations/find.rb +10 -10
  85. data/lib/ledger_sync/ledgers/quickbooks_online/expense/operations/update.rb +10 -10
  86. data/lib/ledger_sync/ledgers/quickbooks_online/expense/serializer.rb +22 -28
  87. data/lib/ledger_sync/ledgers/quickbooks_online/expense_line/deserializer.rb +22 -0
  88. data/lib/ledger_sync/ledgers/quickbooks_online/expense_line/serializer.rb +26 -0
  89. data/lib/ledger_sync/ledgers/quickbooks_online/invoice/deserializer.rb +15 -15
  90. data/lib/ledger_sync/ledgers/quickbooks_online/invoice/operations/create.rb +7 -7
  91. data/lib/ledger_sync/ledgers/quickbooks_online/invoice/operations/find.rb +7 -7
  92. data/lib/ledger_sync/ledgers/quickbooks_online/invoice/operations/update.rb +7 -7
  93. data/lib/ledger_sync/ledgers/quickbooks_online/invoice/serializer.rb +15 -15
  94. data/lib/ledger_sync/ledgers/quickbooks_online/invoice_line/deserializer.rb +21 -0
  95. data/lib/ledger_sync/ledgers/quickbooks_online/invoice_line/serializer.rb +25 -0
  96. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/deserializer.rb +10 -15
  97. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/operations/create.rb +5 -5
  98. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/operations/find.rb +5 -5
  99. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/operations/update.rb +5 -5
  100. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/serializer.rb +10 -15
  101. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line/deserializer.rb +20 -0
  102. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line/serializer.rb +24 -0
  103. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_detail/deserializer.rb +29 -0
  104. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_detail/serializer.rb +29 -0
  105. data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/deserializer.rb +9 -13
  106. data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/operations/create.rb +5 -5
  107. data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/operations/find.rb +5 -5
  108. data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/operations/update.rb +5 -5
  109. data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/serializer.rb +10 -10
  110. data/lib/ledger_sync/ledgers/quickbooks_online/operation.rb +1 -3
  111. data/lib/ledger_sync/ledgers/quickbooks_online/operation/full_update.rb +1 -3
  112. data/lib/ledger_sync/ledgers/quickbooks_online/payment/deserializer.rb +21 -27
  113. data/lib/ledger_sync/ledgers/quickbooks_online/payment/operations/create.rb +10 -10
  114. data/lib/ledger_sync/ledgers/quickbooks_online/payment/operations/find.rb +10 -10
  115. data/lib/ledger_sync/ledgers/quickbooks_online/payment/operations/update.rb +10 -10
  116. data/lib/ledger_sync/ledgers/quickbooks_online/payment/serializer.rb +21 -27
  117. data/lib/ledger_sync/ledgers/quickbooks_online/{payment_line_item → payment_line}/deserializer.rb +3 -4
  118. data/lib/ledger_sync/ledgers/quickbooks_online/{payment_line_item → payment_line}/serializer.rb +3 -4
  119. data/lib/ledger_sync/ledgers/quickbooks_online/preferences/deserializer.rb +10 -29
  120. data/lib/ledger_sync/ledgers/quickbooks_online/preferences/operations/find.rb +10 -10
  121. data/lib/ledger_sync/ledgers/quickbooks_online/preferences/serializer.rb +10 -29
  122. data/lib/ledger_sync/ledgers/quickbooks_online/primary_email_addr/deserializer.rb +13 -0
  123. data/lib/ledger_sync/ledgers/quickbooks_online/primary_email_addr/serializer.rb +13 -0
  124. data/lib/ledger_sync/ledgers/quickbooks_online/primary_phone/deserializer.rb +13 -0
  125. data/lib/ledger_sync/ledgers/quickbooks_online/primary_phone/serializer.rb +13 -0
  126. data/lib/ledger_sync/ledgers/quickbooks_online/reference/deserializer.rb +13 -0
  127. data/lib/ledger_sync/ledgers/quickbooks_online/reference/serializer.rb +13 -0
  128. data/lib/ledger_sync/ledgers/quickbooks_online/resources/account.rb +12 -8
  129. data/lib/ledger_sync/ledgers/quickbooks_online/resources/account_based_expense_line_detail.rb +16 -0
  130. data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill.rb +11 -11
  131. data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_line.rb +19 -0
  132. data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_payment.rb +17 -15
  133. data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_payment_line.rb +19 -0
  134. data/lib/ledger_sync/ledgers/quickbooks_online/resources/check_payment.rb +11 -0
  135. data/lib/ledger_sync/ledgers/quickbooks_online/resources/credit_card_payment.rb +11 -0
  136. data/lib/ledger_sync/ledgers/quickbooks_online/resources/currency.rb +7 -3
  137. data/lib/ledger_sync/ledgers/quickbooks_online/resources/customer.rb +4 -3
  138. data/lib/ledger_sync/ledgers/quickbooks_online/resources/department.rb +9 -5
  139. data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit.rb +9 -9
  140. data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit_line.rb +19 -0
  141. data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit_line_detail.rb +22 -0
  142. data/lib/ledger_sync/ledgers/quickbooks_online/resources/expense.rb +12 -12
  143. data/lib/ledger_sync/ledgers/quickbooks_online/resources/expense_line.rb +19 -0
  144. data/lib/ledger_sync/ledgers/quickbooks_online/resources/invoice.rb +8 -8
  145. data/lib/ledger_sync/ledgers/quickbooks_online/resources/invoice_line.rb +19 -0
  146. data/lib/ledger_sync/ledgers/quickbooks_online/resources/item.rb +1 -1
  147. data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry.rb +7 -7
  148. data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry_line.rb +20 -0
  149. data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry_line_detail.rb +27 -0
  150. data/lib/ledger_sync/ledgers/quickbooks_online/resources/ledger_class.rb +9 -5
  151. data/lib/ledger_sync/ledgers/quickbooks_online/resources/payment.rb +11 -11
  152. data/lib/ledger_sync/ledgers/quickbooks_online/resources/{payment_line_item.rb → payment_line.rb} +4 -4
  153. data/lib/ledger_sync/ledgers/quickbooks_online/resources/preferences.rb +10 -10
  154. data/lib/ledger_sync/ledgers/quickbooks_online/resources/sales_item_line_detail.rb +19 -0
  155. data/lib/ledger_sync/ledgers/quickbooks_online/resources/transfer.rb +7 -7
  156. data/lib/ledger_sync/ledgers/quickbooks_online/resources/vendor.rb +11 -9
  157. data/lib/ledger_sync/ledgers/quickbooks_online/sales_item_line_detail/deserializer.rb +21 -0
  158. data/lib/ledger_sync/ledgers/quickbooks_online/sales_item_line_detail/serializer.rb +21 -0
  159. data/lib/ledger_sync/ledgers/quickbooks_online/serialziation/type/mapping_type.rb +2 -0
  160. data/lib/ledger_sync/ledgers/quickbooks_online/transfer/deserializer.rb +13 -16
  161. data/lib/ledger_sync/ledgers/quickbooks_online/transfer/operations/create.rb +6 -6
  162. data/lib/ledger_sync/ledgers/quickbooks_online/transfer/operations/find.rb +6 -6
  163. data/lib/ledger_sync/ledgers/quickbooks_online/transfer/operations/update.rb +6 -6
  164. data/lib/ledger_sync/ledgers/quickbooks_online/transfer/serializer.rb +13 -16
  165. data/lib/ledger_sync/ledgers/quickbooks_online/util/error_matcher.rb +23 -10
  166. data/lib/ledger_sync/ledgers/quickbooks_online/util/operation_error_parser.rb +1 -1
  167. data/lib/ledger_sync/ledgers/quickbooks_online/vendor/deserializer.rb +12 -10
  168. data/lib/ledger_sync/ledgers/quickbooks_online/vendor/operations/create.rb +7 -7
  169. data/lib/ledger_sync/ledgers/quickbooks_online/vendor/operations/find.rb +7 -7
  170. data/lib/ledger_sync/ledgers/quickbooks_online/vendor/operations/update.rb +7 -7
  171. data/lib/ledger_sync/ledgers/quickbooks_online/vendor/serializer.rb +12 -10
  172. data/lib/ledger_sync/ledgers/quickbooks_online/webhook.rb +1 -1
  173. data/lib/ledger_sync/ledgers/quickbooks_online/webhook_event.rb +6 -6
  174. data/lib/ledger_sync/ledgers/quickbooks_online/webhook_notification.rb +1 -1
  175. data/lib/ledger_sync/ledgers/response.rb +1 -1
  176. data/lib/ledger_sync/ledgers/stripe/client.rb +5 -1
  177. data/lib/ledger_sync/resource.rb +5 -3
  178. data/lib/ledger_sync/resource_adaptor.rb +2 -0
  179. data/lib/ledger_sync/resource_attribute/reference/one.rb +2 -2
  180. data/lib/ledger_sync/resource_attribute_set.rb +4 -3
  181. data/lib/ledger_sync/serialization/type/deserializer_type.rb +2 -0
  182. data/lib/ledger_sync/serialization/type/format_date_type.rb +2 -0
  183. data/lib/ledger_sync/serialization/type/mapping_type.rb +2 -0
  184. data/lib/ledger_sync/serialization/type/parse_date_type.rb +2 -0
  185. data/lib/ledger_sync/serialization/type/serializer_type.rb +2 -0
  186. data/lib/ledger_sync/serializer.rb +2 -2
  187. data/lib/ledger_sync/test/support.rb +71 -0
  188. data/lib/ledger_sync/test/support/factory_bot.rb +157 -0
  189. data/lib/ledger_sync/type/date.rb +10 -0
  190. data/lib/ledger_sync/type/value_mixin.rb +3 -1
  191. data/lib/ledger_sync/util/resource_converter/attribute.rb +1 -1
  192. data/lib/ledger_sync/util/resource_converter/type/resource_converter_type.rb +2 -0
  193. data/lib/ledger_sync/util/signer.rb +2 -2
  194. data/lib/ledger_sync/version.rb +9 -1
  195. metadata +89 -65
  196. data/lib/ledger_sync/ledgers/mixins/infer_client_mixin.rb +0 -28
  197. data/lib/ledger_sync/ledgers/quickbooks_online/bill_line_item/deserializer.rb +0 -25
  198. data/lib/ledger_sync/ledgers/quickbooks_online/bill_line_item/serializer.rb +0 -29
  199. data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_item/deserializer.rb +0 -38
  200. data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_item/serializer.rb +0 -41
  201. data/lib/ledger_sync/ledgers/quickbooks_online/expense_line_item/deserializer.rb +0 -25
  202. data/lib/ledger_sync/ledgers/quickbooks_online/expense_line_item/serializer.rb +0 -27
  203. data/lib/ledger_sync/ledgers/quickbooks_online/invoice_sales_line_item/deserializer.rb +0 -25
  204. data/lib/ledger_sync/ledgers/quickbooks_online/invoice_sales_line_item/serializer.rb +0 -29
  205. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_item/deserializer.rb +0 -32
  206. data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_item/serializer.rb +0 -36
  207. data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_line_item.rb +0 -21
  208. data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_payment_line_item.rb +0 -19
  209. data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit_line_item.rb +0 -25
  210. data/lib/ledger_sync/ledgers/quickbooks_online/resources/expense_line_item.rb +0 -21
  211. data/lib/ledger_sync/ledgers/quickbooks_online/resources/invoice_sales_line_item.rb +0 -21
  212. data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry_line_item.rb +0 -29
  213. data/lib/ledger_sync/ledgers/quickbooks_online/resources/subsidiary.rb +0 -12
  214. data/release.sh +0 -26
@@ -15,4 +15,8 @@ Everyone interacting in the LedgerSync project’s codebases, issue trackers, ch
15
15
 
16
16
  After checking out the repo, run `bin/setup` to install dependencies.
17
17
 
18
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org)
18
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org)
19
+
20
+ ## Development
21
+
22
+ The LedgerSync repo follow [the git flow pattern](https://nvie.com/posts/a-successful-git-branching-model/). You can find [a great cheat sheet here](http://danielkummer.github.io/git-flow-cheatsheet/). Please be sure to follow the naming convention and read our guide to deployment if you are pushing new versions of the gem.
@@ -6,7 +6,9 @@ require 'ledger_sync/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'ledger_sync'
9
- spec.version = LedgerSync::VERSION
9
+ spec.version = LedgerSync.version
10
+
11
+ spec.required_ruby_version = '>= 2.5.8'
10
12
 
11
13
  # spec.required_rubygems_version = Gem::Requirement.new('>= 0') if spec.respond_to? :required_rubygems_version=
12
14
  spec.authors = ['Ryan Jackson']
@@ -29,15 +31,15 @@ Gem::Specification.new do |spec|
29
31
  spec.require_paths = ['lib']
30
32
 
31
33
  spec.add_development_dependency('awesome_print', '>= 0')
32
- spec.add_development_dependency('bump')
33
- spec.add_development_dependency('bundler', '~> 1.16')
34
+ spec.add_development_dependency('bump', '~> 0.9.0')
35
+ spec.add_development_dependency('bundler', '~> 2.1')
34
36
  spec.add_development_dependency('byebug', '>= 0')
35
- spec.add_development_dependency('factory_bot')
37
+ spec.add_development_dependency('factory_bot', '~> 6.1.0')
36
38
  spec.add_development_dependency('jekyll', '~> 3.8.4')
37
39
  spec.add_development_dependency('jekyll-menus', '~> 0.6.0')
38
40
  spec.add_development_dependency('jekyll-paginate', '~> 1.1')
39
41
  spec.add_development_dependency('jekyll-paginate-v2', '~> 1.9')
40
- spec.add_development_dependency('overcommit')
42
+ spec.add_development_dependency('overcommit', '~> 0.57.0')
41
43
  spec.add_development_dependency('rake', '~> 13.0')
42
44
  spec.add_development_dependency('rspec', '~> 3.2')
43
45
  spec.add_development_dependency('rubocop', '>= 0')
@@ -45,19 +47,19 @@ Gem::Specification.new do |spec|
45
47
  spec.add_development_dependency('webmock', '>= 0')
46
48
  spec.add_runtime_dependency('activemodel', '>= 0')
47
49
  spec.add_runtime_dependency('colorize', '>= 0')
48
- spec.add_runtime_dependency('coveralls')
49
- spec.add_runtime_dependency('dotenv')
50
- spec.add_runtime_dependency('dry-schema')
51
- spec.add_runtime_dependency('dry-validation')
50
+ spec.add_runtime_dependency('coveralls', '~> 0.8.23')
51
+ spec.add_runtime_dependency('dotenv', '~> 2.7.6')
52
+ spec.add_runtime_dependency('dry-schema', '~> 1.5.4')
53
+ spec.add_runtime_dependency('dry-validation', '~> 1.5.6')
52
54
  spec.add_runtime_dependency('faraday', '>= 0')
53
55
  spec.add_runtime_dependency('faraday-detailed_logger', '>= 0')
54
56
  spec.add_runtime_dependency('faraday_middleware', '>= 0')
55
57
  spec.add_runtime_dependency('fingerprintable', '>= 1.2.1')
56
- spec.add_runtime_dependency('netsuite')
58
+ spec.add_runtime_dependency('netsuite', '~> 0.8.6')
57
59
  spec.add_runtime_dependency('nokogiri', '>= 0')
58
60
  spec.add_runtime_dependency('oauth2', '>= 0')
59
61
  spec.add_runtime_dependency('pd_ruby', '>= 0')
60
62
  spec.add_runtime_dependency('resonad', '>= 0')
61
63
  spec.add_runtime_dependency('simply_serializable', '>= 1.5.1')
62
- spec.add_runtime_dependency('stripe')
64
+ spec.add_runtime_dependency('stripe', '~> 5.26.0')
63
65
  end
@@ -81,8 +81,14 @@ module LedgerSync
81
81
  LEVEL_ERROR = Logger::ERROR
82
82
  LEVEL_INFO = Logger::INFO
83
83
 
84
- class << self
85
- attr_accessor :ledgers
84
+ module Test
85
+ def require_spec_helper
86
+ require File.join(LedgerSync.root, 'lib/test/support/spec_helper')
87
+ end
88
+ end
89
+
90
+ def self.ledgers
91
+ @ledgers ||= LedgerSync::LedgerConfigurationStore.new
86
92
  end
87
93
 
88
94
  def self.log_level
@@ -105,19 +111,18 @@ module LedgerSync
105
111
  @logger = val
106
112
  end
107
113
 
108
- def self.register_ledger(ledger_key, module_string: nil)
109
- ledger_root_path = "ledger_sync/ledgers/#{ledger_key}"
110
- require "#{ledger_root_path}/client"
111
- self.ledgers ||= LedgerSync::LedgerConfigurationStore.new
112
- ledger_config = LedgerSync::LedgerConfiguration.new(ledger_key, module_string: module_string)
114
+ def self.register_ledger(*args)
115
+ ledger_config = LedgerSync::LedgerConfiguration.new(*args)
116
+
113
117
  yield(ledger_config)
114
- self.ledgers.register_ledger(ledger_config: ledger_config)
115
118
 
116
- client_files = Gem.find_files("#{ledger_root_path}/resource.rb")
117
- client_files |= Gem.find_files("#{ledger_root_path}/resources/**/*.rb")
118
- client_files |= Gem.find_files("#{ledger_root_path}/serialization/**/*.rb")
119
+ ledgers.register_ledger(ledger_config: ledger_config)
120
+
121
+ client_files = Gem.find_files("#{ledger_config.root_path}/resource.rb")
122
+ client_files |= Gem.find_files("#{ledger_config.root_path}/resources/**/*.rb")
123
+ client_files |= Gem.find_files("#{ledger_config.root_path}/serialization/**/*.rb")
119
124
  # Sort the files to include BFS-style as most dependencies are in parent folders
120
- client_files |= Gem.find_files("#{ledger_root_path}/**/*.rb").sort { |a, b| a.count('/') <=> b.count('/') }
125
+ client_files |= Gem.find_files("#{ledger_config.root_path}/**/*.rb").sort { |a, b| a.count('/') <=> b.count('/') }
121
126
 
122
127
  client_files.each do |path|
123
128
  next if path.include?('config.rb')
@@ -100,8 +100,8 @@ module LedgerSync
100
100
  args.fetch(:deserializer)
101
101
  else
102
102
  resource_key = inferred_resource_class.resource_attributes[resource_attribute].type.resource_class.resource_type
103
- require "ledger_sync/ledgers/#{inferred_client_class.root_key}/#{resource_key}/deserializer"
104
- inferred_client_class.resources[resource_key]::Deserializer
103
+ require "#{inferred_config.root_path}/#{resource_key}/deserializer"
104
+ inferred_config.client_class.resources[resource_key]::Deserializer
105
105
  end
106
106
  end
107
107
  end
@@ -5,7 +5,7 @@ module LedgerSync
5
5
  module HelpersMixin
6
6
  module ClassMethods
7
7
  def raise_if_unexpected_class(expected:, given:)
8
- expected = [expected] unless expected.is_a?(Array)
8
+ expected = Array(expected)
9
9
  expected = expected.map { |e| (e.is_a?(Class) ? e : e.class) }
10
10
  given = given.class unless given.is_a?(Class)
11
11
 
@@ -32,7 +32,7 @@ module LedgerSync
32
32
 
33
33
  class UnexpectedClassError < self
34
34
  def initialize(expected:, given:)
35
- expected = [expected] unless expected.is_a?(Array)
35
+ expected = Array(expected)
36
36
 
37
37
  super(
38
38
  message: "Unexpected class. Given #{given.name}. Expected: #{expected.map(&:name).join(', ')}"
@@ -3,8 +3,7 @@
3
3
  module LedgerSync
4
4
  class Error
5
5
  class LedgerError < Error
6
- attr_reader :client
7
- attr_reader :response
6
+ attr_reader :client, :response
8
7
 
9
8
  def initialize(client:, message:, response: nil)
10
9
  @client = client
@@ -5,7 +5,7 @@ module LedgerSync
5
5
  class OperationError < Error
6
6
  attr_reader :operation, :response
7
7
 
8
- def initialize(message: nil, operation:, response: nil)
8
+ def initialize(operation:, message: nil, response: nil)
9
9
  message ||= 'Operation failed.'
10
10
  @operation = operation
11
11
  @response = response
@@ -16,7 +16,7 @@ module LedgerSync
16
16
  class NotFoundError < self; end
17
17
  class LedgerValidationError < self; end
18
18
  class PerformedOperationError < self
19
- def initialize(message: nil, operation:, response: nil)
19
+ def initialize(operation:, message: nil, response: nil)
20
20
  message ||= 'Operation has already been performed. Please check the result.'
21
21
 
22
22
  super(
@@ -15,7 +15,7 @@ module LedgerSync
15
15
 
16
16
  private
17
17
 
18
- def generate_message
18
+ def generate_message # rubocop:disable Metrics/PerceivedComplexity
19
19
  ret = "Attribute #{attribute.name} for #{resource_class.name} should be "
20
20
 
21
21
  ret += case attribute
@@ -5,43 +5,47 @@ module LedgerSync
5
5
  include Fingerprintable::Mixin
6
6
  include SimplySerializable::Mixin
7
7
 
8
- attr_accessor :module_string,
9
- :name,
8
+ attr_accessor :name,
10
9
  :rate_limiting_wait_in_seconds,
11
10
  :test
12
11
 
13
12
  attr_reader :aliases,
14
- :root_key
13
+ :base_module,
14
+ :root_key,
15
+ :root_path
15
16
 
16
17
  simply_serialize only: %i[
17
18
  aliases
18
- module_string
19
+ base_module
19
20
  root_key
20
21
  rate_limiting_wait_in_seconds
21
22
  test
22
23
  ]
23
24
 
24
- def initialize(root_key, module_string: nil)
25
+ def initialize(root_key, args = {})
25
26
  @root_key = root_key
26
27
  @aliases = []
27
- @module_string = module_string || LedgerSync::Util::StringHelpers.camelcase(root_key)
28
+ @root_path = args.fetch(:root_path, "ledger_sync/ledgers/#{root_key}")
29
+
30
+ require client_path
31
+
32
+ @base_module = args.fetch(:base_module, nil)
33
+ @base_module ||= LedgerSync::Ledgers.const_get(LedgerSync::Util::StringHelpers.camelcase(root_key))
28
34
  end
29
35
 
30
36
  def client_class
31
37
  @client_class ||= base_module::Client
32
38
  end
33
39
 
40
+ def client_path
41
+ @client_path ||= File.join(root_path, 'client')
42
+ end
43
+
34
44
  def add_alias(new_alias)
35
45
  @aliases << new_alias
36
46
  LedgerSync.ledgers.add_alias(new_alias, self)
37
47
  end
38
48
 
39
- def base_module
40
- @base_module ||= begin
41
- LedgerSync::Ledgers.const_get(@module_string)
42
- end
43
- end
44
-
45
49
  # Delegate #new to the client class enabling faster client initialization
46
50
  # e.g. LedgerSync.ledgers.test.new(...)
47
51
  def new(*args)
@@ -4,10 +4,11 @@ module LedgerSync
4
4
  class LedgerConfigurationStore
5
5
  include Enumerable
6
6
 
7
- attr_reader :configs, :inflections
7
+ attr_reader :configs, :inflections, :base_module_to_config_mapping
8
8
 
9
9
  def initialize
10
10
  @keys = []
11
+ @base_module_to_config_mapping = {}
11
12
  @configs = {}
12
13
  @inflections = []
13
14
  @class_configs = {}
@@ -15,9 +16,7 @@ module LedgerSync
15
16
 
16
17
  def add_alias(client_key, existing_config)
17
18
  if respond_to?(client_key)
18
- if send(client_key) != existing_config
19
- raise LedgerSync::ConfigurationError, "Alias already taken: #{client_key}"
20
- end
19
+ raise "Alias already taken: #{client_key}" if send(client_key) != existing_config
21
20
 
22
21
  return
23
22
  end
@@ -29,11 +28,21 @@ module LedgerSync
29
28
  @class_configs.fetch(client_class)
30
29
  end
31
30
 
32
- def each
33
- configs.each { |k, v| yield(k, v) }
31
+ def config_from_base_module(base_module:)
32
+ @base_module_to_config_mapping.fetch(base_module, nil)
33
+ end
34
+
35
+ def each(&block)
36
+ configs.each(&block)
37
+ end
38
+
39
+ def find(&block)
40
+ configs.values.find(&block)
34
41
  end
35
42
 
36
43
  def register_ledger(ledger_config:)
44
+ @base_module_to_config_mapping[ledger_config.base_module] = ledger_config
45
+
37
46
  _instance_methods_for(
38
47
  client_key: ledger_config.root_key,
39
48
  ledger_config: ledger_config
@@ -53,7 +62,7 @@ module LedgerSync
53
62
  ledger_config
54
63
  )
55
64
 
56
- @inflections |= [ledger_config.module_string]
65
+ @inflections |= ledger_config.base_module.name.split('::')
57
66
  self.class.class_eval { attr_reader client_key }
58
67
  end
59
68
  end
@@ -2,119 +2,134 @@
2
2
 
3
3
  module LedgerSync
4
4
  module Ledgers
5
- class Client
6
- include Fingerprintable::Mixin
7
- include SimplySerializable::Mixin
8
- include Validatable
9
- include Util::Mixins::ResourceRegisterableMixin
10
-
11
- simply_serialize only: %i[
12
- ledger_configuration
13
- ]
14
-
15
- def initialize(*)
16
- raise NotImplementedError
17
- end
18
-
19
- def ledger_configuration
20
- self.class.config
21
- end
22
-
23
- def base_module
24
- self.class.base_module
25
- end
26
-
27
- def ledger_attributes_to_save
28
- return {} if self.class.ledger_attributes_to_save.nil?
29
-
30
- Hash[self.class.ledger_attributes_to_save.map do |attribute|
31
- [attribute, send(attribute)]
32
- end]
33
- end
34
-
35
- def operation_for(args = {})
36
- method = args.fetch(:method)
37
- resource = args.fetch(:resource)
38
-
39
- self.class.operation_class_for(
40
- method: method,
41
- resource_class: resource.class
42
- ).new(
43
- client: self,
44
- resource: resource
45
- )
46
- end
47
-
48
- def searcher_for(*args)
49
- self.class.searcher_for(*args)
50
- end
51
-
52
- def searcher_class_for(*args)
53
- self.class.searcher_class_for(*args)
54
- end
55
-
56
- def url_for(*_args)
57
- raise NotImplementedError
58
- end
59
-
60
- def parse_operation_error(*)
61
- nil
62
- end
63
-
64
- def self.base_module
65
- config.base_module
66
- end
67
-
68
- def self.base_operation_module_for(resource_class:)
69
- base_module.const_get("#{resource_class.resource_module_str}::Operations")
70
- end
71
-
72
- def self.config
73
- @config ||= LedgerSync.ledgers.config_from_class(client_class: self)
74
- end
75
-
76
- # These are attributes that must always be saved after the client is called.
77
- # For example, the library will handle refreshing tokens that will need
78
- # to be saved back to the application layer for future use.
79
- def self.ledger_attributes_to_save
80
- raise NotImplementedError
81
- end
82
-
83
- def self.ledger_resource_type_for(resource_class:)
84
- ledger_resource_type_overrides[resource_class] || resource_class.resource_type.to_s
85
- end
86
-
87
- def self.ledger_resource_type_overrides
88
- {}
5
+ module Client
6
+ module SharedClassMethods
7
+ def base_operations_module_for(resource_class:)
8
+ resource_class::Operations
9
+ end
10
+ end
11
+
12
+ extend SharedClassMethods
13
+
14
+ module Mixin
15
+ module InstanceMethods
16
+ def ledger_configuration
17
+ self.class.config
18
+ end
19
+
20
+ def base_module
21
+ self.class.base_module
22
+ end
23
+
24
+ def ledger_attributes_to_save
25
+ return {} if self.class.ledger_attributes_to_save.nil?
26
+
27
+ Hash[self.class.ledger_attributes_to_save.map do |attribute|
28
+ [attribute, send(attribute)]
29
+ end]
30
+ end
31
+
32
+ def operation_for(args = {})
33
+ method = args.fetch(:method)
34
+ resource = args.fetch(:resource)
35
+
36
+ self.class.operation_class_for(
37
+ method: method,
38
+ resource_class: resource.class
39
+ ).new(
40
+ client: self,
41
+ resource: resource
42
+ )
43
+ end
44
+
45
+ def searcher_for(*args)
46
+ self.class.searcher_for(*args)
47
+ end
48
+
49
+ def searcher_class_for(*args)
50
+ self.class.searcher_class_for(*args)
51
+ end
52
+
53
+ def url_for(*_args)
54
+ raise NotImplementedError
55
+ end
56
+
57
+ def parse_operation_error(*)
58
+ nil
59
+ end
60
+ end
61
+
62
+ module ClassMethods
63
+ def base_module
64
+ config.base_module
65
+ end
66
+
67
+ def config
68
+ @config ||= LedgerSync.ledgers.config_from_class(client_class: self)
69
+ end
70
+
71
+ # These are attributes that must always be saved after the client is called.
72
+ # For example, the library will handle refreshing tokens that will need
73
+ # to be saved back to the application layer for future use.
74
+ def ledger_attributes_to_save
75
+ raise NotImplementedError
76
+ end
77
+
78
+ def ledger_resource_type_for(resource_class:)
79
+ ledger_resource_type_overrides[resource_class] || resource_class.resource_type.to_s
80
+ end
81
+
82
+ def ledger_resource_type_overrides
83
+ {}
84
+ end
85
+
86
+ def operation_class_for(*args)
87
+ Client.operation_class_for(*args)
88
+ end
89
+
90
+ def resource_from_ledger_type(type:, converter: nil)
91
+ converter ||= proc { |n| n.underscore }
92
+ ledger_resource_type_overrides.invert[converter.call(type).to_sym] || resources[converter.call(type).to_sym]
93
+ end
94
+
95
+ def resources
96
+ @resources ||= {}
97
+ end
98
+
99
+ def root_key
100
+ @root_key ||= config.root_key
101
+ end
102
+
103
+ def searcher_for(resource_type:, query: '')
104
+ searcher_class_for(resource_type: resource_type).new(client: self, query: query)
105
+ end
106
+
107
+ def searcher_class_for(resource_type:)
108
+ base_module.const_get(LedgerSync::Util::StringHelpers.camelcase(resource_type.to_s))::Searcher
109
+ end
110
+
111
+ def url_for(resource: nil); end
112
+ end
113
+
114
+ def self.included(base)
115
+ base.include Fingerprintable::Mixin
116
+ base.include SimplySerializable::Mixin
117
+ base.include Validatable
118
+ base.include Util::Mixins::ResourceRegisterableMixin
119
+ base.extend SharedClassMethods
120
+ base.extend ClassMethods
121
+ base.include InstanceMethods
122
+
123
+ base.simply_serialize only: %i[
124
+ ledger_configuration
125
+ ]
126
+ end
89
127
  end
90
128
 
91
129
  def self.operation_class_for(method:, resource_class:)
92
- base_operation_module_for(resource_class: resource_class)
130
+ base_operations_module_for(resource_class: resource_class)
93
131
  .const_get(LedgerSync::Util::StringHelpers.camelcase(method.to_s))
94
132
  end
95
-
96
- def self.resource_from_ledger_type(type:, converter: nil)
97
- converter ||= proc { |n| n.underscore }
98
- ledger_resource_type_overrides.invert[converter.call(type).to_sym] || resources[converter.call(type).to_sym]
99
- end
100
-
101
- def self.resources
102
- @resources ||= {}
103
- end
104
-
105
- def self.root_key
106
- @root_key ||= config.root_key
107
- end
108
-
109
- def self.searcher_for(resource_type:, query: '')
110
- searcher_class_for(resource_type: resource_type).new(client: self, query: query)
111
- end
112
-
113
- def self.searcher_class_for(resource_type:)
114
- base_module.const_get(LedgerSync::Util::StringHelpers.camelcase(resource_type.to_s))::Searcher
115
- end
116
-
117
- def self.url_for(resource: nil); end
118
133
  end
119
134
  end
120
135
  end