ledger_sync 1.3.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +6 -3
  3. data/README.md +119 -23
  4. data/ledger_sync.gemspec +1 -0
  5. data/lib/ledger_sync.rb +1 -1
  6. data/lib/ledger_sync/adaptors/ledger_serializer.rb +2 -10
  7. data/lib/ledger_sync/adaptors/mixins/infer_ledger_serializer_mixin.rb +19 -5
  8. data/lib/ledger_sync/adaptors/mixins/infer_validation_contract_mixin.rb +27 -0
  9. data/lib/ledger_sync/adaptors/netsuite/config.rb +0 -1
  10. data/lib/ledger_sync/adaptors/netsuite/operation.rb +0 -6
  11. data/lib/ledger_sync/adaptors/operation.rb +48 -87
  12. data/lib/ledger_sync/adaptors/quickbooks_online/bill/ledger_serializer.rb +3 -0
  13. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/create.rb +1 -0
  14. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/find.rb +1 -0
  15. data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/update.rb +1 -0
  16. data/lib/ledger_sync/adaptors/quickbooks_online/bill_line_item/ledger_serializer.rb +3 -0
  17. data/lib/ledger_sync/adaptors/quickbooks_online/dashboard_url_helper.rb +2 -0
  18. data/lib/ledger_sync/adaptors/quickbooks_online/deposit_line_item/ledger_serializer.rb +3 -0
  19. data/lib/ledger_sync/adaptors/quickbooks_online/expense/ledger_serializer.rb +3 -0
  20. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/create.rb +1 -0
  21. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/find.rb +1 -0
  22. data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/update.rb +1 -0
  23. data/lib/ledger_sync/adaptors/quickbooks_online/expense_line_item/ledger_serializer.rb +3 -0
  24. data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry_line_item/ledger_serializer.rb +6 -0
  25. data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +2 -2
  26. data/lib/ledger_sync/adaptors/quickbooks_online/operation/create.rb +1 -1
  27. data/lib/ledger_sync/adaptors/quickbooks_online/operation/find.rb +1 -1
  28. data/lib/ledger_sync/adaptors/quickbooks_online/operation/full_update.rb +1 -1
  29. data/lib/ledger_sync/adaptors/quickbooks_online/operation/sparse_update.rb +1 -1
  30. data/lib/ledger_sync/adaptors/stripe/config.rb +0 -1
  31. data/lib/ledger_sync/adaptors/test/customer/ledger_serializer.rb +12 -0
  32. data/lib/ledger_sync/adaptors/test/ledger_serializer.rb +0 -52
  33. data/lib/ledger_sync/core_ext/resonad.rb +0 -1
  34. data/lib/ledger_sync/error.rb +33 -0
  35. data/lib/ledger_sync/resources/bill.rb +2 -0
  36. data/lib/ledger_sync/resources/bill_line_item.rb +2 -0
  37. data/lib/ledger_sync/resources/deposit_line_item.rb +3 -0
  38. data/lib/ledger_sync/resources/expense.rb +2 -0
  39. data/lib/ledger_sync/resources/expense_line_item.rb +2 -0
  40. data/lib/ledger_sync/resources/journal_entry_line_item.rb +4 -0
  41. data/lib/ledger_sync/version.rb +1 -1
  42. data/qa/netsuite/customer.rb +1 -1
  43. data/qa/netsuite/vendor.rb +1 -1
  44. metadata +17 -37
  45. data/lib/ledger_sync/adaptors/test/account/operations/create.rb +0 -57
  46. data/lib/ledger_sync/adaptors/test/account/operations/find.rb +0 -42
  47. data/lib/ledger_sync/adaptors/test/account/operations/invalid.rb +0 -26
  48. data/lib/ledger_sync/adaptors/test/account/operations/update.rb +0 -56
  49. data/lib/ledger_sync/adaptors/test/account/operations/valid.rb +0 -32
  50. data/lib/ledger_sync/adaptors/test/account/searcher.rb +0 -40
  51. data/lib/ledger_sync/adaptors/test/adaptor.rb +0 -47
  52. data/lib/ledger_sync/adaptors/test/config.rb +0 -6
  53. data/lib/ledger_sync/adaptors/test/customer/operations/create.rb +0 -52
  54. data/lib/ledger_sync/adaptors/test/customer/operations/find.rb +0 -38
  55. data/lib/ledger_sync/adaptors/test/customer/operations/invalid.rb +0 -22
  56. data/lib/ledger_sync/adaptors/test/customer/operations/update.rb +0 -22
  57. data/lib/ledger_sync/adaptors/test/customer/operations/valid.rb +0 -24
  58. data/lib/ledger_sync/adaptors/test/customer/searcher.rb +0 -40
  59. data/lib/ledger_sync/adaptors/test/error/adaptor_error/operations/throttle_error.rb +0 -28
  60. data/lib/ledger_sync/adaptors/test/expense/operations/create.rb +0 -29
  61. data/lib/ledger_sync/adaptors/test/expense/operations/find.rb +0 -29
  62. data/lib/ledger_sync/adaptors/test/expense/operations/update.rb +0 -27
  63. data/lib/ledger_sync/adaptors/test/operation/create.rb +0 -27
  64. data/lib/ledger_sync/adaptors/test/operation/find.rb +0 -29
  65. data/lib/ledger_sync/adaptors/test/operation/update.rb +0 -34
  66. data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +0 -51
  67. data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +0 -44
  68. data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +0 -28
  69. data/lib/ledger_sync/adaptors/test/transfer/operations/create.rb +0 -24
  70. data/lib/ledger_sync/adaptors/test/transfer/operations/find.rb +0 -24
  71. data/lib/ledger_sync/adaptors/test/transfer/operations/update.rb +0 -24
  72. data/lib/ledger_sync/adaptors/test/vendor/operations/create.rb +0 -56
  73. data/lib/ledger_sync/adaptors/test/vendor/operations/find.rb +0 -43
  74. data/lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb +0 -27
  75. data/lib/ledger_sync/adaptors/test/vendor/operations/update.rb +0 -27
  76. data/lib/ledger_sync/adaptors/test/vendor/operations/valid.rb +0 -33
  77. data/lib/ledger_sync/adaptors/test/vendor/searcher.rb +0 -41
  78. data/lib/ledger_sync/util/debug.rb +0 -16
  79. data/qa/netsuite_test.rb +0 -42
  80. data/qa/test.rb +0 -67
@@ -1,24 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Transfer
5
- module Operations
6
- class Update < Operation::Update
7
- class Contract < LedgerSync::Adaptors::Contract
8
- params do
9
- required(:external_id).maybe(:string)
10
- required(:ledger_id).filled(:string)
11
- required(:from_account).hash(Types::Reference)
12
- required(:to_account).hash(Types::Reference)
13
- required(:amount).filled(:integer)
14
- required(:currency).filled(:hash, Types::Reference)
15
- required(:memo).filled(:string)
16
- required(:transaction_date).filled(:date?)
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LedgerSync
4
- module Adaptors
5
- module Test
6
- module Vendor
7
- module Operations
8
- class Create < Operation::Create
9
- class Contract < LedgerSync::Adaptors::Contract
10
- schema do
11
- required(:external_id).maybe(:string)
12
- required(:ledger_id).value(:nil)
13
- required(:display_name).maybe(:string)
14
- required(:first_name).maybe(:string)
15
- required(:last_name).maybe(:string)
16
- required(:email).maybe(:string)
17
- optional(:company_name).maybe(:string)
18
- optional(:phone_number).maybe(:string)
19
- optional(:subsidiary).maybe(:hash, Types::Reference)
20
- end
21
- end
22
-
23
- private
24
-
25
- def id
26
- SecureRandom.uuid
27
- end
28
-
29
- def local_resource_data
30
- {
31
- 'name' => resource.display_name,
32
- 'email' => resource.email
33
- }
34
- end
35
-
36
- def operate
37
- response = adaptor.post(
38
- resource: 'vendor',
39
- payload: local_resource_data.merge(
40
- 'id' => id
41
- )
42
- )
43
-
44
- resource.ledger_id = response.dig('id')
45
-
46
- success(
47
- resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
48
- response: response
49
- )
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LedgerSync
4
- module Adaptors
5
- module Test
6
- module Vendor
7
- module Operations
8
- class Find < Operation::Find
9
- class Contract < LedgerSync::Adaptors::Contract
10
- params do
11
- required(:external_id).maybe(:string)
12
- required(:ledger_id).filled(:string)
13
- optional(:display_name).maybe(:string)
14
- optional(:first_name).maybe(:string)
15
- optional(:last_name).maybe(:string)
16
- optional(:email).maybe(:string)
17
- optional(:company_name).maybe(:string)
18
- optional(:phone_number).maybe(:string)
19
- optional(:subsidiary).maybe(:hash, Types::Reference)
20
- end
21
- end
22
-
23
- private
24
-
25
- def operate
26
- return failure(nil) if resource.ledger_id.nil?
27
-
28
- response = adaptor.find(
29
- resource: 'vendor',
30
- id: resource.ledger_id
31
- )
32
-
33
- success(
34
- resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
35
- response: response
36
- )
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LedgerSync
4
- module Adaptors
5
- module Test
6
- module Vendor
7
- module Operations
8
- class Invalid < Operation::Create
9
- class Contract < LedgerSync::Adaptors::Contract
10
- schema do
11
- required(:external_id).filled(:string)
12
- required(:ledger_id).filled(:string)
13
- required(:display_name).filled(:string)
14
- required(:first_name).filled(:string)
15
- required(:last_name).filled(:string)
16
- required(:email).filled(:string)
17
- required(:company_name).filled(:string)
18
- required(:phone_number).filled(:string)
19
- required(:subsidiary).filled(:hash, Types::Reference)
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LedgerSync
4
- module Adaptors
5
- module Test
6
- module Vendor
7
- module Operations
8
- class Update < Operation::Update
9
- class Contract < LedgerSync::Adaptors::Contract
10
- schema do
11
- required(:external_id).maybe(:string)
12
- required(:ledger_id).filled(:string)
13
- required(:display_name).maybe(:string)
14
- required(:first_name).maybe(:string)
15
- required(:last_name).maybe(:string)
16
- optional(:email).maybe(:string)
17
- optional(:company_name).maybe(:string)
18
- optional(:phone_number).maybe(:string)
19
- optional(:subsidiary).maybe(:hash, Types::Reference)
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LedgerSync
4
- module Adaptors
5
- module Test
6
- module Vendor
7
- module Operations
8
- class Valid < Operation::Create
9
- class Contract < LedgerSync::Adaptors::Contract
10
- schema do
11
- optional(:external_id).maybe(:string)
12
- optional(:ledger_id).maybe(:string)
13
- optional(:display_name).maybe(:string)
14
- optional(:first_name).maybe(:string)
15
- optional(:last_name).maybe(:string)
16
- optional(:email).maybe(:string)
17
- optional(:company_name).maybe(:string)
18
- optional(:phone_number).maybe(:string)
19
- optional(:subsidiary).maybe(:hash, Types::Reference)
20
- end
21
- end
22
-
23
- private
24
-
25
- def operate
26
- success(response: :foo)
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,41 +0,0 @@
1
- module LedgerSync
2
- module Adaptors
3
- module Test
4
- module Vendor
5
- class Searcher < LedgerSync::Adaptors::Searcher
6
- def next_searcher
7
- paginate(cursor: 'asdf')
8
- end
9
-
10
- def previous_searcher
11
- paginate(cursor: 'asdf')
12
- end
13
-
14
- def resources
15
- @resources ||= begin
16
- adaptor
17
- .query(
18
- resource: 'vendor',
19
- query: "name LIKE '#{query}%'"
20
- )
21
- .map do |v|
22
- LedgerSync::Vendor.new(
23
- ledger_id: v.fetch('id'),
24
- display_name: v.fetch('display_name', ''),
25
- first_name: v.fetch('first_name', ''),
26
- last_name: v.fetch('last_name', '')
27
- )
28
- end
29
- end
30
- end
31
-
32
- def search
33
- super
34
- rescue OAuth2::Error => e
35
- failure(e)
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- def pdb(thing = nil, backtrace_offset: 0, **keywords)
4
- backtrace_line = caller[backtrace_offset].split(':')[0..1].join(':')
5
- thing = keywords if thing.eql?(nil) && keywords.any?
6
- thing = thing.inspect unless thing.is_a?(String)
7
-
8
- puts(
9
- (
10
- 'PDB' + ': ' + thing
11
- ).colorize(color: :black, background: :light_white) +
12
- " @ #{backtrace_line}".colorize(color: :blue, background: :light_white)
13
- )
14
- puts "\n"
15
- thing
16
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'netsuite/customer'
4
- require_relative 'netsuite/vendor'
5
- module QA
6
- class NetSuiteTest < QA::Test
7
- include NetSuite::Customer
8
- include NetSuite::Vendor
9
-
10
- def adaptor
11
- @adaptor ||= LedgerSync.adaptors.netsuite.new(
12
- account_id: config['netsuite']['account_id'],
13
- consumer_key: config['netsuite']['consumer_key'],
14
- consumer_secret: config['netsuite']['consumer_secret'],
15
- token_id: config['netsuite']['token_id'],
16
- token_secret: config['netsuite']['token_secret']
17
- )
18
- end
19
-
20
- def run
21
- puts 'Testing NetSuite REST API'
22
-
23
- schema_customer
24
- .and_then { customer_create }
25
- .and_then { |result| customer_find(customer: result.resource) }
26
- .and_then { |result| customer_update(customer: result.resource) }
27
- .and_then { |result| customer_delete(customer: result.resource) }
28
- .and_then { |result| customer_delete_nonexisting(customer: result.resource) }
29
- .and_then { schema_vendor }
30
- .and_then { vendor_create }
31
- .and_then { vendor_create }
32
- .and_then { |result| vendor_find(vendor: result.resource) }
33
- .and_then { |result| vendor_update(vendor: result.resource) }
34
- .and_then { |result| vendor_delete(vendor: result.resource) }
35
- .and_then { |result| vendor_delete_nonexisting(vendor: result.resource) }
36
-
37
- schema_customer
38
-
39
- pdb 'Done'
40
- end
41
- end
42
- end
data/qa/test.rb DELETED
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module QA
4
- class Test
5
- attr_reader :config,
6
- :test_run_id
7
-
8
- def initialize(config:)
9
- @config = config
10
- @test_run_id = (0...8).map { rand(65..90).chr }.join
11
- puts "Initialized Test: #{test_run_id}"
12
- end
13
-
14
- def cleanup
15
- end
16
-
17
- def existing_netsuite_subsidiary
18
- LedgerSync::Subsidiary.new(
19
- ledger_id: 2,
20
- name: "QA Customer #{test_run_id}"
21
- )
22
- end
23
-
24
- def perform(op)
25
- if op.valid?
26
- result = op.perform
27
- if op.failure?
28
- byebug
29
- raise op.error
30
- end
31
- return result
32
- end
33
-
34
- pdb 'Invalid:'
35
- pdb op.errors.messages
36
-
37
- byebug
38
- pdb 'Next'
39
- end
40
-
41
- def new_customer(**args)
42
- LedgerSync::Customer.new(
43
- {
44
- email: "#{test_run_id}@example.com",
45
- name: "Test Customer #{test_run_id}",
46
- phone_number: '1234567890'
47
- }.merge(args)
48
- )
49
- end
50
-
51
- def new_vendor(**args)
52
- LedgerSync::Vendor.new(
53
- {
54
- company_name: "#{test_run_id} Company",
55
- email: "test-#{test_run_id}-vendor@example.com",
56
- first_name: "TestFirst#{test_run_id}",
57
- last_name: "TestLast#{test_run_id}",
58
- display_name: "Test #{test_run_id} Display Name"
59
- }.merge(args)
60
- )
61
- end
62
-
63
- def run
64
- raise NotImplementedError
65
- end
66
- end
67
- end