ledger_sync 1.3.2 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -3
- data/README.md +119 -23
- data/ledger_sync.gemspec +1 -0
- data/lib/ledger_sync.rb +1 -1
- data/lib/ledger_sync/adaptors/ledger_serializer.rb +2 -10
- data/lib/ledger_sync/adaptors/mixins/infer_ledger_serializer_mixin.rb +19 -5
- data/lib/ledger_sync/adaptors/mixins/infer_validation_contract_mixin.rb +27 -0
- data/lib/ledger_sync/adaptors/netsuite/config.rb +0 -1
- data/lib/ledger_sync/adaptors/netsuite/operation.rb +0 -6
- data/lib/ledger_sync/adaptors/operation.rb +48 -87
- data/lib/ledger_sync/adaptors/quickbooks_online/bill/ledger_serializer.rb +3 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/create.rb +1 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/find.rb +1 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/bill/operations/update.rb +1 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/bill_line_item/ledger_serializer.rb +3 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/dashboard_url_helper.rb +2 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/deposit_line_item/ledger_serializer.rb +3 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/expense/ledger_serializer.rb +3 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/create.rb +1 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/find.rb +1 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/expense/operations/update.rb +1 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/expense_line_item/ledger_serializer.rb +3 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/journal_entry_line_item/ledger_serializer.rb +6 -0
- data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +2 -2
- data/lib/ledger_sync/adaptors/quickbooks_online/operation/create.rb +1 -1
- data/lib/ledger_sync/adaptors/quickbooks_online/operation/find.rb +1 -1
- data/lib/ledger_sync/adaptors/quickbooks_online/operation/full_update.rb +1 -1
- data/lib/ledger_sync/adaptors/quickbooks_online/operation/sparse_update.rb +1 -1
- data/lib/ledger_sync/adaptors/stripe/config.rb +0 -1
- data/lib/ledger_sync/adaptors/test/customer/ledger_serializer.rb +12 -0
- data/lib/ledger_sync/adaptors/test/ledger_serializer.rb +0 -52
- data/lib/ledger_sync/core_ext/resonad.rb +0 -1
- data/lib/ledger_sync/error.rb +33 -0
- data/lib/ledger_sync/resources/bill.rb +2 -0
- data/lib/ledger_sync/resources/bill_line_item.rb +2 -0
- data/lib/ledger_sync/resources/deposit_line_item.rb +3 -0
- data/lib/ledger_sync/resources/expense.rb +2 -0
- data/lib/ledger_sync/resources/expense_line_item.rb +2 -0
- data/lib/ledger_sync/resources/journal_entry_line_item.rb +4 -0
- data/lib/ledger_sync/version.rb +1 -1
- data/qa/netsuite/customer.rb +1 -1
- data/qa/netsuite/vendor.rb +1 -1
- metadata +17 -37
- data/lib/ledger_sync/adaptors/test/account/operations/create.rb +0 -57
- data/lib/ledger_sync/adaptors/test/account/operations/find.rb +0 -42
- data/lib/ledger_sync/adaptors/test/account/operations/invalid.rb +0 -26
- data/lib/ledger_sync/adaptors/test/account/operations/update.rb +0 -56
- data/lib/ledger_sync/adaptors/test/account/operations/valid.rb +0 -32
- data/lib/ledger_sync/adaptors/test/account/searcher.rb +0 -40
- data/lib/ledger_sync/adaptors/test/adaptor.rb +0 -47
- data/lib/ledger_sync/adaptors/test/config.rb +0 -6
- data/lib/ledger_sync/adaptors/test/customer/operations/create.rb +0 -52
- data/lib/ledger_sync/adaptors/test/customer/operations/find.rb +0 -38
- data/lib/ledger_sync/adaptors/test/customer/operations/invalid.rb +0 -22
- data/lib/ledger_sync/adaptors/test/customer/operations/update.rb +0 -22
- data/lib/ledger_sync/adaptors/test/customer/operations/valid.rb +0 -24
- data/lib/ledger_sync/adaptors/test/customer/searcher.rb +0 -40
- data/lib/ledger_sync/adaptors/test/error/adaptor_error/operations/throttle_error.rb +0 -28
- data/lib/ledger_sync/adaptors/test/expense/operations/create.rb +0 -29
- data/lib/ledger_sync/adaptors/test/expense/operations/find.rb +0 -29
- data/lib/ledger_sync/adaptors/test/expense/operations/update.rb +0 -27
- data/lib/ledger_sync/adaptors/test/operation/create.rb +0 -27
- data/lib/ledger_sync/adaptors/test/operation/find.rb +0 -29
- data/lib/ledger_sync/adaptors/test/operation/update.rb +0 -34
- data/lib/ledger_sync/adaptors/test/payment/operations/create.rb +0 -51
- data/lib/ledger_sync/adaptors/test/payment/operations/find.rb +0 -44
- data/lib/ledger_sync/adaptors/test/payment/operations/update.rb +0 -28
- data/lib/ledger_sync/adaptors/test/transfer/operations/create.rb +0 -24
- data/lib/ledger_sync/adaptors/test/transfer/operations/find.rb +0 -24
- data/lib/ledger_sync/adaptors/test/transfer/operations/update.rb +0 -24
- data/lib/ledger_sync/adaptors/test/vendor/operations/create.rb +0 -56
- data/lib/ledger_sync/adaptors/test/vendor/operations/find.rb +0 -43
- data/lib/ledger_sync/adaptors/test/vendor/operations/invalid.rb +0 -27
- data/lib/ledger_sync/adaptors/test/vendor/operations/update.rb +0 -27
- data/lib/ledger_sync/adaptors/test/vendor/operations/valid.rb +0 -33
- data/lib/ledger_sync/adaptors/test/vendor/searcher.rb +0 -41
- data/lib/ledger_sync/util/debug.rb +0 -16
- data/qa/netsuite_test.rb +0 -42
- data/qa/test.rb +0 -67
@@ -1,57 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Account
|
5
|
-
module Operations
|
6
|
-
class Create < Operation::Create
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
schema do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).value(:nil)
|
11
|
-
required(:name).filled(:string)
|
12
|
-
required(:classification).filled(:string)
|
13
|
-
required(:account_type).filled(:string)
|
14
|
-
required(:account_sub_type).filled(:string)
|
15
|
-
required(:number).maybe(:integer)
|
16
|
-
required(:currency).maybe(:hash, Types::Reference)
|
17
|
-
required(:description).maybe(:string)
|
18
|
-
required(:active).maybe(:bool)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def id
|
25
|
-
SecureRandom.uuid
|
26
|
-
end
|
27
|
-
|
28
|
-
def local_resource_data
|
29
|
-
{
|
30
|
-
'name' => resource.name,
|
31
|
-
'classification' => resource.classification,
|
32
|
-
'account_type' => resource.account_type,
|
33
|
-
'account_sub_type' => resource.account_sub_type
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
def operate
|
38
|
-
response = adaptor.post(
|
39
|
-
resource: 'account',
|
40
|
-
payload: local_resource_data.merge(
|
41
|
-
'id' => id
|
42
|
-
)
|
43
|
-
)
|
44
|
-
|
45
|
-
resource.ledger_id = response.dig('id')
|
46
|
-
|
47
|
-
success(
|
48
|
-
resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
|
49
|
-
response: response
|
50
|
-
)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Account
|
5
|
-
module Operations
|
6
|
-
class Find < Operation::Find
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
params do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).filled(:string)
|
11
|
-
required(:name).maybe(:string)
|
12
|
-
required(:classification).maybe(:string)
|
13
|
-
required(:account_type).maybe(:string)
|
14
|
-
required(:account_sub_type).maybe(:string)
|
15
|
-
required(:number).maybe(:integer)
|
16
|
-
required(:currency).maybe(:hash, Types::Reference)
|
17
|
-
required(:description).maybe(:string)
|
18
|
-
required(:active).maybe(:bool)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def operate
|
25
|
-
return failure(nil) if resource.ledger_id.nil?
|
26
|
-
|
27
|
-
response = adaptor.find(
|
28
|
-
resource: 'account',
|
29
|
-
id: resource.ledger_id
|
30
|
-
)
|
31
|
-
|
32
|
-
success(
|
33
|
-
resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
|
34
|
-
response: response
|
35
|
-
)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Account
|
5
|
-
module Operations
|
6
|
-
class Invalid < Operation::Create
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
schema do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).filled(:string)
|
11
|
-
required(:name).maybe(:string)
|
12
|
-
required(:classification).maybe(:string)
|
13
|
-
required(:account_type).maybe(:string)
|
14
|
-
required(:account_sub_type).maybe(:string)
|
15
|
-
required(:number).maybe(:integer)
|
16
|
-
required(:currency).maybe(:hash, Types::Reference)
|
17
|
-
required(:description).maybe(:string)
|
18
|
-
required(:active).maybe(:bool)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Account
|
5
|
-
module Operations
|
6
|
-
class Update < Operation::Update
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
schema do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).filled(:string)
|
11
|
-
required(:name).filled(:string)
|
12
|
-
required(:classification).filled(:string)
|
13
|
-
required(:account_type).filled(:string)
|
14
|
-
required(:account_sub_type).filled(:string)
|
15
|
-
required(:number).maybe(:integer)
|
16
|
-
required(:currency).maybe(:hash, Types::Reference)
|
17
|
-
required(:description).maybe(:string)
|
18
|
-
required(:active).maybe(:bool)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def operate
|
25
|
-
ledger_resource_data = adaptor.find(
|
26
|
-
resource: 'account',
|
27
|
-
id: resource.ledger_id
|
28
|
-
)
|
29
|
-
|
30
|
-
find_serializer = Test::LedgerSerializer.new(resource: resource).deserialize(hash: ledger_resource_data)
|
31
|
-
|
32
|
-
response = adaptor.post(
|
33
|
-
resource: 'account',
|
34
|
-
payload: find_serializer.to_h
|
35
|
-
)
|
36
|
-
|
37
|
-
success(
|
38
|
-
resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
|
39
|
-
response: response
|
40
|
-
)
|
41
|
-
end
|
42
|
-
|
43
|
-
def local_resource_data
|
44
|
-
{
|
45
|
-
'name' => resource.name,
|
46
|
-
'classification' => resource.classification,
|
47
|
-
'account_type' => resource.account_type,
|
48
|
-
'account_sub_type' => resource.account_sub_type
|
49
|
-
}
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Account
|
5
|
-
module Operations
|
6
|
-
class Valid < Operation::Create
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
schema do
|
9
|
-
optional(:external_id).maybe(:string)
|
10
|
-
optional(:ledger_id).maybe(:string)
|
11
|
-
required(:name).filled(:string)
|
12
|
-
required(:classification).filled(:string)
|
13
|
-
required(:account_type).filled(:string)
|
14
|
-
required(:account_sub_type).filled(:string)
|
15
|
-
required(:number).maybe(:integer)
|
16
|
-
required(:currency).maybe(:hash, Types::Reference)
|
17
|
-
required(:description).maybe(:string)
|
18
|
-
required(:active).maybe(:bool)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def operate
|
25
|
-
success(response: :foo)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Account
|
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: 'account',
|
19
|
-
query: "name LIKE '#{query}%'"
|
20
|
-
)
|
21
|
-
.map do |a|
|
22
|
-
LedgerSync::Account.new(
|
23
|
-
ledger_id: a.fetch('id'),
|
24
|
-
name: a.fetch('name', ''),
|
25
|
-
account_type: a.fetch('account_type', '')
|
26
|
-
)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def search
|
32
|
-
super
|
33
|
-
rescue OAuth2::Error => e
|
34
|
-
failure(e)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
class Adaptor < LedgerSync::Adaptors::Adaptor
|
5
|
-
def initialize(*_config); end
|
6
|
-
|
7
|
-
def find(resource:, id:)
|
8
|
-
{ 'id' => id }
|
9
|
-
end
|
10
|
-
|
11
|
-
def post(resource:, payload:)
|
12
|
-
payload
|
13
|
-
end
|
14
|
-
|
15
|
-
def query(resource:, query:)
|
16
|
-
resource_klass = LedgerSync.resources[resource.to_sym]
|
17
|
-
|
18
|
-
Array.new(2) do |i|
|
19
|
-
ret = {
|
20
|
-
'id' => SecureRandom.uuid,
|
21
|
-
}
|
22
|
-
|
23
|
-
ret['name'] = "Test #{resource} #{i}" if resource_klass.instance_methods.include?(:name=)
|
24
|
-
ret
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def refresh!
|
29
|
-
self
|
30
|
-
end
|
31
|
-
|
32
|
-
def url_for(resource:)
|
33
|
-
case resource
|
34
|
-
when LedgerSync::Customer
|
35
|
-
"http://example.com/customer/#{resource.ledger_id}"
|
36
|
-
else
|
37
|
-
raise NotImplementedError
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.ledger_attributes_to_save
|
42
|
-
[]
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Customer
|
5
|
-
module Operations
|
6
|
-
class Create < Operation::Create
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
schema do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).value(:nil)
|
11
|
-
required(:email).maybe(:string)
|
12
|
-
required(:name).filled(:string)
|
13
|
-
required(:phone_number).maybe(:string)
|
14
|
-
required(:subsidiary).maybe(:hash, Types::Reference)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def id
|
21
|
-
SecureRandom.uuid
|
22
|
-
end
|
23
|
-
|
24
|
-
def local_resource_data
|
25
|
-
{
|
26
|
-
'name' => resource.name,
|
27
|
-
'phone_number' => resource.phone_number,
|
28
|
-
'email' => resource.email
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
|
-
def operate
|
33
|
-
response = adaptor.post(
|
34
|
-
resource: 'customer',
|
35
|
-
payload: local_resource_data.merge(
|
36
|
-
'id' => id
|
37
|
-
)
|
38
|
-
)
|
39
|
-
|
40
|
-
resource.ledger_id = response.dig('id')
|
41
|
-
|
42
|
-
success(
|
43
|
-
response: response,
|
44
|
-
resource: resource
|
45
|
-
)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Customer
|
5
|
-
module Operations
|
6
|
-
class Find < Operation::Find
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
params do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).filled(:string)
|
11
|
-
optional(:email).maybe(:string)
|
12
|
-
optional(:name).maybe(:string)
|
13
|
-
optional(:phone_number).maybe(:string)
|
14
|
-
required(:subsidiary).maybe(:hash, Types::Reference)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def operate
|
21
|
-
return failure(nil) if resource.ledger_id.nil?
|
22
|
-
|
23
|
-
response = adaptor.find(
|
24
|
-
resource: 'customer',
|
25
|
-
id: resource.ledger_id
|
26
|
-
)
|
27
|
-
|
28
|
-
success(
|
29
|
-
resource: Test::LedgerSerializer.new(resource: resource).deserialize(hash: response),
|
30
|
-
response: response
|
31
|
-
)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Customer
|
5
|
-
module Operations
|
6
|
-
class Invalid < Operation::Create
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
schema do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).filled(:string)
|
11
|
-
required(:email).filled(:string)
|
12
|
-
required(:name).filled(:string)
|
13
|
-
required(:phone_number).filled(:string)
|
14
|
-
required(:subsidiary).hash(Types::Reference)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module LedgerSync
|
2
|
-
module Adaptors
|
3
|
-
module Test
|
4
|
-
module Customer
|
5
|
-
module Operations
|
6
|
-
class Update < Operation::Update
|
7
|
-
class Contract < LedgerSync::Adaptors::Contract
|
8
|
-
schema do
|
9
|
-
required(:external_id).maybe(:string)
|
10
|
-
required(:ledger_id).filled(:string)
|
11
|
-
optional(:email).maybe(:string)
|
12
|
-
required(:name).filled(:string)
|
13
|
-
optional(:phone_number).maybe(:string)
|
14
|
-
required(:subsidiary).maybe(:hash, Types::Reference)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|