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.
- 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
|