ledger_sync 1.4.4 → 1.5.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +64 -1
- data/.travis.yml +12 -5
- data/Gemfile.lock +67 -65
- data/bin/quickbooks_online_oauth_server.rb +1 -1
- data/documentation/generators/reference/ledger/generator.rb +2 -0
- data/documentation/site/guides/contribute/deployment.md +62 -7
- data/documentation/site/guides/contribute/index.md +5 -1
- data/ledger_sync.gemspec +13 -11
- data/lib/ledger_sync.rb +17 -12
- data/lib/ledger_sync/deserializer.rb +2 -2
- data/lib/ledger_sync/error.rb +2 -2
- data/lib/ledger_sync/error/ledger_errors.rb +1 -2
- data/lib/ledger_sync/error/operation_errors.rb +2 -2
- data/lib/ledger_sync/error/resource_errors.rb +1 -1
- data/lib/ledger_sync/ledger_configuration.rb +16 -12
- data/lib/ledger_sync/ledger_configuration_store.rb +16 -7
- data/lib/ledger_sync/ledgers/client.rb +123 -108
- data/lib/ledger_sync/ledgers/mixins/infer_config_mixin.rb +37 -0
- data/lib/ledger_sync/ledgers/mixins/infer_resource_class_mixin.rb +5 -4
- data/lib/ledger_sync/ledgers/mixins/infer_serializer_mixin.rb +5 -5
- data/lib/ledger_sync/ledgers/mixins/serialization_mixin.rb +2 -2
- data/lib/ledger_sync/ledgers/netsuite/check_line_item/deserializer.rb +2 -1
- data/lib/ledger_sync/ledgers/netsuite/check_line_item/serializer.rb +2 -1
- data/lib/ledger_sync/ledgers/netsuite/client.rb +5 -1
- data/lib/ledger_sync/ledgers/netsuite/config.rb +3 -1
- data/lib/ledger_sync/ledgers/netsuite/deserializer.rb +1 -1
- data/lib/ledger_sync/ledgers/netsuite/type/deserializer_customer_type.rb +2 -0
- data/lib/ledger_sync/ledgers/netsuite/type/deserializer_subsidiary_type.rb +2 -0
- data/lib/ledger_sync/ledgers/netsuite_soap/client.rb +3 -1
- data/lib/ledger_sync/ledgers/netsuite_soap/config.rb +3 -1
- data/lib/ledger_sync/ledgers/operation.rb +12 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/account/deserializer.rb +10 -22
- data/lib/ledger_sync/ledgers/quickbooks_online/account/operations/create.rb +8 -8
- data/lib/ledger_sync/ledgers/quickbooks_online/account/operations/find.rb +8 -8
- data/lib/ledger_sync/ledgers/quickbooks_online/account/operations/update.rb +8 -8
- data/lib/ledger_sync/ledgers/quickbooks_online/account/serializer.rb +11 -17
- data/lib/ledger_sync/ledgers/quickbooks_online/account_based_expense_line_detail/deserializer.rb +21 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/account_based_expense_line_detail/serializer.rb +21 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/bill/deserializer.rb +20 -24
- data/lib/ledger_sync/ledgers/quickbooks_online/bill/operations/create.rb +9 -9
- data/lib/ledger_sync/ledgers/quickbooks_online/bill/operations/find.rb +9 -9
- data/lib/ledger_sync/ledgers/quickbooks_online/bill/operations/update.rb +9 -9
- data/lib/ledger_sync/ledgers/quickbooks_online/bill/serializer.rb +20 -23
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_line/deserializer.rb +22 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_line/serializer.rb +26 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/deserializer.rb +31 -35
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/operations/create.rb +13 -13
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/operations/find.rb +13 -13
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/operations/update.rb +13 -13
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_payment/serializer.rb +31 -53
- data/lib/ledger_sync/ledgers/quickbooks_online/{bill_payment_line_item → bill_payment_line}/deserializer.rb +3 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/{bill_payment_line_item → bill_payment_line}/serializer.rb +3 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/check_payment/deserializer.rb +17 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/check_payment/serializer.rb +17 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/client.rb +10 -6
- data/lib/ledger_sync/ledgers/quickbooks_online/config.rb +3 -1
- data/lib/ledger_sync/ledgers/quickbooks_online/credit_card_payment/deserializer.rb +17 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/credit_card_payment/serializer.rb +17 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/currency/deserializer.rb +2 -3
- data/lib/ledger_sync/ledgers/quickbooks_online/currency/serializer.rb +3 -2
- data/lib/ledger_sync/ledgers/quickbooks_online/customer/deserializer.rb +10 -3
- data/lib/ledger_sync/ledgers/quickbooks_online/customer/operations/create.rb +4 -4
- data/lib/ledger_sync/ledgers/quickbooks_online/customer/operations/find.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/customer/operations/update.rb +4 -4
- data/lib/ledger_sync/ledgers/quickbooks_online/customer/serializer.rb +10 -3
- data/lib/ledger_sync/ledgers/quickbooks_online/department/deserializer.rb +7 -13
- data/lib/ledger_sync/ledgers/quickbooks_online/department/operations/create.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/department/operations/find.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/department/operations/update.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/department/serializer.rb +9 -17
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit/deserializer.rb +16 -19
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit/operations/create.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit/operations/find.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit/operations/update.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit/serializer.rb +16 -19
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line/deserializer.rb +22 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line/serializer.rb +26 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_detail/deserializer.rb +34 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_detail/serializer.rb +35 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/deserializer.rb +4 -4
- data/lib/ledger_sync/ledgers/quickbooks_online/expense/deserializer.rb +20 -25
- data/lib/ledger_sync/ledgers/quickbooks_online/expense/operations/create.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/expense/operations/find.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/expense/operations/update.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/expense/serializer.rb +22 -28
- data/lib/ledger_sync/ledgers/quickbooks_online/expense_line/deserializer.rb +22 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/expense_line/serializer.rb +26 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice/deserializer.rb +15 -15
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice/operations/create.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice/operations/find.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice/operations/update.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice/serializer.rb +15 -15
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice_line/deserializer.rb +21 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice_line/serializer.rb +25 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/deserializer.rb +10 -15
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/operations/create.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/operations/find.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/operations/update.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry/serializer.rb +10 -15
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line/deserializer.rb +20 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line/serializer.rb +24 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_detail/deserializer.rb +29 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_detail/serializer.rb +29 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/deserializer.rb +9 -13
- data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/operations/create.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/operations/find.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/operations/update.rb +5 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/ledger_class/serializer.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/operation.rb +1 -3
- data/lib/ledger_sync/ledgers/quickbooks_online/operation/full_update.rb +1 -3
- data/lib/ledger_sync/ledgers/quickbooks_online/payment/deserializer.rb +21 -27
- data/lib/ledger_sync/ledgers/quickbooks_online/payment/operations/create.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/payment/operations/find.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/payment/operations/update.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/payment/serializer.rb +21 -27
- data/lib/ledger_sync/ledgers/quickbooks_online/{payment_line_item → payment_line}/deserializer.rb +3 -4
- data/lib/ledger_sync/ledgers/quickbooks_online/{payment_line_item → payment_line}/serializer.rb +3 -4
- data/lib/ledger_sync/ledgers/quickbooks_online/preferences/deserializer.rb +10 -29
- data/lib/ledger_sync/ledgers/quickbooks_online/preferences/operations/find.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/preferences/serializer.rb +10 -29
- data/lib/ledger_sync/ledgers/quickbooks_online/primary_email_addr/deserializer.rb +13 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/primary_email_addr/serializer.rb +13 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/primary_phone/deserializer.rb +13 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/primary_phone/serializer.rb +13 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/reference/deserializer.rb +13 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/reference/serializer.rb +13 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/account.rb +12 -8
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/account_based_expense_line_detail.rb +16 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill.rb +11 -11
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_line.rb +19 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_payment.rb +17 -15
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_payment_line.rb +19 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/check_payment.rb +11 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/credit_card_payment.rb +11 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/currency.rb +7 -3
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/customer.rb +4 -3
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/department.rb +9 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit.rb +9 -9
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit_line.rb +19 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit_line_detail.rb +22 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/expense.rb +12 -12
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/expense_line.rb +19 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/invoice.rb +8 -8
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/invoice_line.rb +19 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/item.rb +1 -1
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry_line.rb +20 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry_line_detail.rb +27 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/ledger_class.rb +9 -5
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/payment.rb +11 -11
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/{payment_line_item.rb → payment_line.rb} +4 -4
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/preferences.rb +10 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/sales_item_line_detail.rb +19 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/transfer.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/vendor.rb +11 -9
- data/lib/ledger_sync/ledgers/quickbooks_online/sales_item_line_detail/deserializer.rb +21 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/sales_item_line_detail/serializer.rb +21 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/serialziation/type/mapping_type.rb +2 -0
- data/lib/ledger_sync/ledgers/quickbooks_online/transfer/deserializer.rb +13 -16
- data/lib/ledger_sync/ledgers/quickbooks_online/transfer/operations/create.rb +6 -6
- data/lib/ledger_sync/ledgers/quickbooks_online/transfer/operations/find.rb +6 -6
- data/lib/ledger_sync/ledgers/quickbooks_online/transfer/operations/update.rb +6 -6
- data/lib/ledger_sync/ledgers/quickbooks_online/transfer/serializer.rb +13 -16
- data/lib/ledger_sync/ledgers/quickbooks_online/util/error_matcher.rb +23 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/util/operation_error_parser.rb +1 -1
- data/lib/ledger_sync/ledgers/quickbooks_online/vendor/deserializer.rb +12 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/vendor/operations/create.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/vendor/operations/find.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/vendor/operations/update.rb +7 -7
- data/lib/ledger_sync/ledgers/quickbooks_online/vendor/serializer.rb +12 -10
- data/lib/ledger_sync/ledgers/quickbooks_online/webhook.rb +1 -1
- data/lib/ledger_sync/ledgers/quickbooks_online/webhook_event.rb +6 -6
- data/lib/ledger_sync/ledgers/quickbooks_online/webhook_notification.rb +1 -1
- data/lib/ledger_sync/ledgers/response.rb +1 -1
- data/lib/ledger_sync/ledgers/stripe/client.rb +5 -1
- data/lib/ledger_sync/resource.rb +5 -3
- data/lib/ledger_sync/resource_adaptor.rb +2 -0
- data/lib/ledger_sync/resource_attribute/reference/one.rb +2 -2
- data/lib/ledger_sync/resource_attribute_set.rb +4 -3
- data/lib/ledger_sync/serialization/type/deserializer_type.rb +2 -0
- data/lib/ledger_sync/serialization/type/format_date_type.rb +2 -0
- data/lib/ledger_sync/serialization/type/mapping_type.rb +2 -0
- data/lib/ledger_sync/serialization/type/parse_date_type.rb +2 -0
- data/lib/ledger_sync/serialization/type/serializer_type.rb +2 -0
- data/lib/ledger_sync/serializer.rb +2 -2
- data/lib/ledger_sync/test/support.rb +71 -0
- data/lib/ledger_sync/test/support/factory_bot.rb +157 -0
- data/lib/ledger_sync/type/date.rb +10 -0
- data/lib/ledger_sync/type/value_mixin.rb +3 -1
- data/lib/ledger_sync/util/resource_converter/attribute.rb +1 -1
- data/lib/ledger_sync/util/resource_converter/type/resource_converter_type.rb +2 -0
- data/lib/ledger_sync/util/signer.rb +2 -2
- data/lib/ledger_sync/version.rb +9 -1
- metadata +89 -65
- data/lib/ledger_sync/ledgers/mixins/infer_client_mixin.rb +0 -28
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_line_item/deserializer.rb +0 -25
- data/lib/ledger_sync/ledgers/quickbooks_online/bill_line_item/serializer.rb +0 -29
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_item/deserializer.rb +0 -38
- data/lib/ledger_sync/ledgers/quickbooks_online/deposit_line_item/serializer.rb +0 -41
- data/lib/ledger_sync/ledgers/quickbooks_online/expense_line_item/deserializer.rb +0 -25
- data/lib/ledger_sync/ledgers/quickbooks_online/expense_line_item/serializer.rb +0 -27
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice_sales_line_item/deserializer.rb +0 -25
- data/lib/ledger_sync/ledgers/quickbooks_online/invoice_sales_line_item/serializer.rb +0 -29
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_item/deserializer.rb +0 -32
- data/lib/ledger_sync/ledgers/quickbooks_online/journal_entry_line_item/serializer.rb +0 -36
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_line_item.rb +0 -21
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/bill_payment_line_item.rb +0 -19
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/deposit_line_item.rb +0 -25
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/expense_line_item.rb +0 -21
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/invoice_sales_line_item.rb +0 -21
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/journal_entry_line_item.rb +0 -29
- data/lib/ledger_sync/ledgers/quickbooks_online/resources/subsidiary.rb +0 -12
- 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.
|
data/ledger_sync.gemspec
CHANGED
@@ -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
|
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
|
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
|
data/lib/ledger_sync.rb
CHANGED
@@ -81,8 +81,14 @@ module LedgerSync
|
|
81
81
|
LEVEL_ERROR = Logger::ERROR
|
82
82
|
LEVEL_INFO = Logger::INFO
|
83
83
|
|
84
|
-
|
85
|
-
|
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(
|
109
|
-
|
110
|
-
|
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
|
-
|
117
|
-
|
118
|
-
client_files
|
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("#{
|
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 "
|
104
|
-
|
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
|
data/lib/ledger_sync/error.rb
CHANGED
@@ -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 =
|
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 =
|
35
|
+
expected = Array(expected)
|
36
36
|
|
37
37
|
super(
|
38
38
|
message: "Unexpected class. Given #{given.name}. Expected: #{expected.map(&:name).join(', ')}"
|
@@ -5,7 +5,7 @@ module LedgerSync
|
|
5
5
|
class OperationError < Error
|
6
6
|
attr_reader :operation, :response
|
7
7
|
|
8
|
-
def initialize(message: 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,
|
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(
|
@@ -5,43 +5,47 @@ module LedgerSync
|
|
5
5
|
include Fingerprintable::Mixin
|
6
6
|
include SimplySerializable::Mixin
|
7
7
|
|
8
|
-
attr_accessor :
|
9
|
-
:name,
|
8
|
+
attr_accessor :name,
|
10
9
|
:rate_limiting_wait_in_seconds,
|
11
10
|
:test
|
12
11
|
|
13
12
|
attr_reader :aliases,
|
14
|
-
:
|
13
|
+
:base_module,
|
14
|
+
:root_key,
|
15
|
+
:root_path
|
15
16
|
|
16
17
|
simply_serialize only: %i[
|
17
18
|
aliases
|
18
|
-
|
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,
|
25
|
+
def initialize(root_key, args = {})
|
25
26
|
@root_key = root_key
|
26
27
|
@aliases = []
|
27
|
-
@
|
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
|
33
|
-
|
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 |=
|
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
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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
|
-
|
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
|