ledger_sync-netsuite 0.1.1
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 +7 -0
- data/.env.test +14 -0
- data/.github/workflows/gem-workflow.yml +63 -0
- data/.gitignore +20 -0
- data/.overcommit.yml +29 -0
- data/.rubocop.yml +78 -0
- data/.rubocop_todo.yml +25 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +203 -0
- data/README.md +19 -0
- data/Rakefile +8 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/ledger_sync-netsuite.gemspec +44 -0
- data/lib/ledger_sync/netsuite.rb +13 -0
- data/lib/ledger_sync/netsuite/account/deserializer.rb +21 -0
- data/lib/ledger_sync/netsuite/account/operations/create.rb +26 -0
- data/lib/ledger_sync/netsuite/account/operations/find.rb +26 -0
- data/lib/ledger_sync/netsuite/account/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/account/searcher_deserializer.rb +27 -0
- data/lib/ledger_sync/netsuite/account/serializer.rb +19 -0
- data/lib/ledger_sync/netsuite/check/deserializer.rb +27 -0
- data/lib/ledger_sync/netsuite/check/operations/create.rb +25 -0
- data/lib/ledger_sync/netsuite/check/operations/delete.rb +25 -0
- data/lib/ledger_sync/netsuite/check/operations/find.rb +25 -0
- data/lib/ledger_sync/netsuite/check/operations/update.rb +25 -0
- data/lib/ledger_sync/netsuite/check/searcher.rb +13 -0
- data/lib/ledger_sync/netsuite/check/searcher_deserializer.rb +14 -0
- data/lib/ledger_sync/netsuite/check/serializer.rb +49 -0
- data/lib/ledger_sync/netsuite/check_line_item/deserializer.rb +16 -0
- data/lib/ledger_sync/netsuite/check_line_item/serializer.rb +24 -0
- data/lib/ledger_sync/netsuite/client.rb +186 -0
- data/lib/ledger_sync/netsuite/config.rb +12 -0
- data/lib/ledger_sync/netsuite/currency/deserializer.rb +21 -0
- data/lib/ledger_sync/netsuite/currency/operations/create.rb +23 -0
- data/lib/ledger_sync/netsuite/currency/operations/delete.rb +21 -0
- data/lib/ledger_sync/netsuite/currency/operations/find.rb +25 -0
- data/lib/ledger_sync/netsuite/currency/operations/update.rb +21 -0
- data/lib/ledger_sync/netsuite/currency/serializer.rb +19 -0
- data/lib/ledger_sync/netsuite/customer/deserializer.rb +20 -0
- data/lib/ledger_sync/netsuite/customer/operations/create.rb +24 -0
- data/lib/ledger_sync/netsuite/customer/operations/delete.rb +24 -0
- data/lib/ledger_sync/netsuite/customer/operations/find.rb +24 -0
- data/lib/ledger_sync/netsuite/customer/operations/update.rb +24 -0
- data/lib/ledger_sync/netsuite/customer/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/customer/searcher_deserializer.rb +16 -0
- data/lib/ledger_sync/netsuite/customer/serializer.rb +27 -0
- data/lib/ledger_sync/netsuite/customer_deposit/deserializer.rb +18 -0
- data/lib/ledger_sync/netsuite/customer_deposit/operations/create.rb +22 -0
- data/lib/ledger_sync/netsuite/customer_deposit/operations/delete.rb +22 -0
- data/lib/ledger_sync/netsuite/customer_deposit/operations/find.rb +22 -0
- data/lib/ledger_sync/netsuite/customer_deposit/operations/update.rb +22 -0
- data/lib/ledger_sync/netsuite/customer_deposit/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/customer_deposit/searcher_deserializer.rb +14 -0
- data/lib/ledger_sync/netsuite/customer_deposit/serializer.rb +23 -0
- data/lib/ledger_sync/netsuite/dashboard_url_helper.rb +26 -0
- data/lib/ledger_sync/netsuite/department/deserializer.rb +13 -0
- data/lib/ledger_sync/netsuite/department/operations/create.rb +23 -0
- data/lib/ledger_sync/netsuite/department/operations/delete.rb +23 -0
- data/lib/ledger_sync/netsuite/department/operations/find.rb +23 -0
- data/lib/ledger_sync/netsuite/department/operations/update.rb +23 -0
- data/lib/ledger_sync/netsuite/department/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/department/searcher_deserializer.rb +17 -0
- data/lib/ledger_sync/netsuite/department/serializer.rb +11 -0
- data/lib/ledger_sync/netsuite/deserializer.rb +16 -0
- data/lib/ledger_sync/netsuite/error.rb +17 -0
- data/lib/ledger_sync/netsuite/journal_entry/deserializer.rb +29 -0
- data/lib/ledger_sync/netsuite/journal_entry/operations/create.rb +24 -0
- data/lib/ledger_sync/netsuite/journal_entry/operations/delete.rb +24 -0
- data/lib/ledger_sync/netsuite/journal_entry/operations/find.rb +24 -0
- data/lib/ledger_sync/netsuite/journal_entry/operations/update.rb +28 -0
- data/lib/ledger_sync/netsuite/journal_entry/serializer.rb +34 -0
- data/lib/ledger_sync/netsuite/journal_entry_line_item/deserializer.rb +18 -0
- data/lib/ledger_sync/netsuite/journal_entry_line_item/serializer.rb +18 -0
- data/lib/ledger_sync/netsuite/ledger_class/deserializer.rb +13 -0
- data/lib/ledger_sync/netsuite/ledger_class/operations/create.rb +23 -0
- data/lib/ledger_sync/netsuite/ledger_class/operations/delete.rb +23 -0
- data/lib/ledger_sync/netsuite/ledger_class/operations/find.rb +23 -0
- data/lib/ledger_sync/netsuite/ledger_class/operations/update.rb +23 -0
- data/lib/ledger_sync/netsuite/ledger_class/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/ledger_class/searcher_deserializer.rb +17 -0
- data/lib/ledger_sync/netsuite/ledger_class/serializer.rb +11 -0
- data/lib/ledger_sync/netsuite/location/deserializer.rb +13 -0
- data/lib/ledger_sync/netsuite/location/operations/create.rb +19 -0
- data/lib/ledger_sync/netsuite/location/operations/delete.rb +19 -0
- data/lib/ledger_sync/netsuite/location/operations/find.rb +19 -0
- data/lib/ledger_sync/netsuite/location/operations/update.rb +19 -0
- data/lib/ledger_sync/netsuite/location/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/location/serializer.rb +11 -0
- data/lib/ledger_sync/netsuite/operation.rb +38 -0
- data/lib/ledger_sync/netsuite/operation/create.rb +56 -0
- data/lib/ledger_sync/netsuite/operation/delete.rb +47 -0
- data/lib/ledger_sync/netsuite/operation/find.rb +68 -0
- data/lib/ledger_sync/netsuite/operation/update.rb +59 -0
- data/lib/ledger_sync/netsuite/record/http_method.rb +31 -0
- data/lib/ledger_sync/netsuite/record/metadata.rb +107 -0
- data/lib/ledger_sync/netsuite/record/parameter.rb +18 -0
- data/lib/ledger_sync/netsuite/record/property.rb +20 -0
- data/lib/ledger_sync/netsuite/reference/serializer.rb +11 -0
- data/lib/ledger_sync/netsuite/resource.rb +8 -0
- data/lib/ledger_sync/netsuite/resources/account.rb +41 -0
- data/lib/ledger_sync/netsuite/resources/check.rb +21 -0
- data/lib/ledger_sync/netsuite/resources/check_line_item.rb +13 -0
- data/lib/ledger_sync/netsuite/resources/currency.rb +11 -0
- data/lib/ledger_sync/netsuite/resources/customer.rb +17 -0
- data/lib/ledger_sync/netsuite/resources/customer_deposit.rb +13 -0
- data/lib/ledger_sync/netsuite/resources/department.rb +14 -0
- data/lib/ledger_sync/netsuite/resources/deposit.rb +26 -0
- data/lib/ledger_sync/netsuite/resources/deposit_line_item.rb +23 -0
- data/lib/ledger_sync/netsuite/resources/invoice.rb +26 -0
- data/lib/ledger_sync/netsuite/resources/invoice_line_item.rb +19 -0
- data/lib/ledger_sync/netsuite/resources/item.rb +9 -0
- data/lib/ledger_sync/netsuite/resources/journal_entry.rb +24 -0
- data/lib/ledger_sync/netsuite/resources/journal_entry_line_item.rb +22 -0
- data/lib/ledger_sync/netsuite/resources/ledger_class.rb +14 -0
- data/lib/ledger_sync/netsuite/resources/location.rb +9 -0
- data/lib/ledger_sync/netsuite/resources/subsidiary.rb +10 -0
- data/lib/ledger_sync/netsuite/resources/vendor.rb +21 -0
- data/lib/ledger_sync/netsuite/searcher.rb +64 -0
- data/lib/ledger_sync/netsuite/serializer.rb +11 -0
- data/lib/ledger_sync/netsuite/subsidiary/deserializer.rb +15 -0
- data/lib/ledger_sync/netsuite/subsidiary/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/subsidiary/searcher_deserializer.rb +13 -0
- data/lib/ledger_sync/netsuite/subsidiary/serializer.rb +13 -0
- data/lib/ledger_sync/netsuite/token.rb +156 -0
- data/lib/ledger_sync/netsuite/type/deserializer_active_type.rb +30 -0
- data/lib/ledger_sync/netsuite/type/deserializer_customer_type.rb +33 -0
- data/lib/ledger_sync/netsuite/type/deserializer_entity_type.rb +28 -0
- data/lib/ledger_sync/netsuite/type/deserializer_subsidiary_type.rb +33 -0
- data/lib/ledger_sync/netsuite/vendor/deserializer.rb +28 -0
- data/lib/ledger_sync/netsuite/vendor/operations/create.rb +25 -0
- data/lib/ledger_sync/netsuite/vendor/operations/delete.rb +25 -0
- data/lib/ledger_sync/netsuite/vendor/operations/find.rb +25 -0
- data/lib/ledger_sync/netsuite/vendor/operations/update.rb +25 -0
- data/lib/ledger_sync/netsuite/vendor/searcher.rb +10 -0
- data/lib/ledger_sync/netsuite/vendor/searcher_deserializer.rb +19 -0
- data/lib/ledger_sync/netsuite/vendor/serializer.rb +28 -0
- data/lib/ledger_sync/netsuite/version.rb +17 -0
- data/license.txt +4 -0
- metadata +392 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LedgerSync
|
|
4
|
+
module NetSuite
|
|
5
|
+
class Location
|
|
6
|
+
module Operations
|
|
7
|
+
class Delete < NetSuite::Operation::Delete
|
|
8
|
+
class Contract < LedgerSync::Ledgers::Contract
|
|
9
|
+
params do
|
|
10
|
+
required(:external_id).maybe(:string)
|
|
11
|
+
required(:ledger_id).filled(:string)
|
|
12
|
+
required(:name).maybe(:string)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LedgerSync
|
|
4
|
+
module NetSuite
|
|
5
|
+
class Location
|
|
6
|
+
module Operations
|
|
7
|
+
class Find < NetSuite::Operation::Find
|
|
8
|
+
class Contract < LedgerSync::Ledgers::Contract
|
|
9
|
+
params do
|
|
10
|
+
required(:external_id).maybe(:string)
|
|
11
|
+
required(:ledger_id).filled(:string)
|
|
12
|
+
required(:name).maybe(:string)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LedgerSync
|
|
4
|
+
module NetSuite
|
|
5
|
+
class Location
|
|
6
|
+
module Operations
|
|
7
|
+
class Update < NetSuite::Operation::Update
|
|
8
|
+
class Contract < LedgerSync::Ledgers::Contract
|
|
9
|
+
params do
|
|
10
|
+
required(:external_id).maybe(:string)
|
|
11
|
+
required(:ledger_id).filled(:string)
|
|
12
|
+
required(:name).filled(:string)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LedgerSync
|
|
4
|
+
module NetSuite
|
|
5
|
+
class Operation
|
|
6
|
+
module Mixin
|
|
7
|
+
def self.included(base)
|
|
8
|
+
base.include Ledgers::Operation::Mixin
|
|
9
|
+
base.include InstanceMethods # To ensure these override parent methods
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module InstanceMethods
|
|
13
|
+
def request_params
|
|
14
|
+
{}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def ledger_id
|
|
18
|
+
@ledger_id ||= Util::URLHelpers.id_from_url(url: response.headers['Location'])
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def ledger_resource_path(args = {})
|
|
22
|
+
client.ledger_resource_path(
|
|
23
|
+
{
|
|
24
|
+
resource: resource
|
|
25
|
+
}.merge(
|
|
26
|
+
args.merge(
|
|
27
|
+
params: request_params.merge(
|
|
28
|
+
args.fetch(:params, {})
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../operation'
|
|
4
|
+
|
|
5
|
+
module LedgerSync
|
|
6
|
+
module NetSuite
|
|
7
|
+
class Operation
|
|
8
|
+
class Create
|
|
9
|
+
include NetSuite::Operation::Mixin
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def create_in_ledger
|
|
14
|
+
return LedgerSync::Result.Success(response) if response.success?
|
|
15
|
+
|
|
16
|
+
failure(
|
|
17
|
+
Error::OperationError.new(
|
|
18
|
+
operation: self,
|
|
19
|
+
response: response
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def find
|
|
25
|
+
resource.ledger_id = ledger_id
|
|
26
|
+
|
|
27
|
+
self.class.operations_module::Find.new(
|
|
28
|
+
client: client,
|
|
29
|
+
resource: resource
|
|
30
|
+
).perform
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def operate
|
|
34
|
+
create_in_ledger
|
|
35
|
+
.and_then { success }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def response
|
|
39
|
+
@response ||= client.post(
|
|
40
|
+
body: serializer.serialize(resource: resource),
|
|
41
|
+
path: ledger_resource_path(id: false)
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def success
|
|
46
|
+
find.and_then do |find_result|
|
|
47
|
+
super(
|
|
48
|
+
resource: find_result.resource,
|
|
49
|
+
response: response
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../operation'
|
|
4
|
+
|
|
5
|
+
module LedgerSync
|
|
6
|
+
module NetSuite
|
|
7
|
+
class Operation
|
|
8
|
+
class Delete
|
|
9
|
+
include NetSuite::Operation::Mixin
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def delete
|
|
14
|
+
case response.status
|
|
15
|
+
when 200..299
|
|
16
|
+
LedgerSync::Result.Success(response)
|
|
17
|
+
else
|
|
18
|
+
failure(
|
|
19
|
+
Error::OperationError.new(
|
|
20
|
+
operation: self,
|
|
21
|
+
response: response
|
|
22
|
+
)
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def operate
|
|
28
|
+
delete
|
|
29
|
+
.and_then { success }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def response
|
|
33
|
+
@response ||= client.delete(
|
|
34
|
+
path: ledger_resource_path
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def success
|
|
39
|
+
super(
|
|
40
|
+
resource: resource,
|
|
41
|
+
response: response
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../operation'
|
|
4
|
+
|
|
5
|
+
module LedgerSync
|
|
6
|
+
module NetSuite
|
|
7
|
+
class Operation
|
|
8
|
+
class Find
|
|
9
|
+
include NetSuite::Operation::Mixin
|
|
10
|
+
|
|
11
|
+
def request_params
|
|
12
|
+
return super unless expand_sub_resources?
|
|
13
|
+
|
|
14
|
+
super.merge({ expandSubResources: expand_sub_resources? })
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def expand_sub_resources?
|
|
18
|
+
self.class.expand_sub_resources?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.expand_sub_resources?
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def find_in_ledger
|
|
28
|
+
case response.status
|
|
29
|
+
when 200
|
|
30
|
+
LedgerSync::Result.Success(response)
|
|
31
|
+
when 404
|
|
32
|
+
failure(
|
|
33
|
+
Error::OperationError::NotFoundError.new(
|
|
34
|
+
operation: self,
|
|
35
|
+
response: response
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
else
|
|
39
|
+
failure(
|
|
40
|
+
Error::OperationError.new(
|
|
41
|
+
operation: self,
|
|
42
|
+
response: response
|
|
43
|
+
)
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def operate
|
|
49
|
+
find_in_ledger
|
|
50
|
+
.and_then { success }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def response
|
|
54
|
+
@response ||= client.get(
|
|
55
|
+
path: ledger_resource_path
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def success
|
|
60
|
+
super(
|
|
61
|
+
resource: deserializer.deserialize(hash: response.body, resource: resource),
|
|
62
|
+
response: response
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../operation'
|
|
4
|
+
|
|
5
|
+
module LedgerSync
|
|
6
|
+
module NetSuite
|
|
7
|
+
class Operation
|
|
8
|
+
class Update
|
|
9
|
+
include NetSuite::Operation::Mixin
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def update_in_ledger
|
|
14
|
+
case response.status
|
|
15
|
+
when 200..299
|
|
16
|
+
LedgerSync::Result.Success(response)
|
|
17
|
+
else
|
|
18
|
+
failure(
|
|
19
|
+
Error::OperationError.new(
|
|
20
|
+
operation: self,
|
|
21
|
+
response: response
|
|
22
|
+
)
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def find
|
|
28
|
+
resource.ledger_id = ledger_id
|
|
29
|
+
|
|
30
|
+
self.class.operations_module::Find.new(
|
|
31
|
+
client: client,
|
|
32
|
+
resource: resource
|
|
33
|
+
).perform
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def operate
|
|
37
|
+
update_in_ledger
|
|
38
|
+
.and_then { success }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def response
|
|
42
|
+
@response ||= client.patch(
|
|
43
|
+
body: serializer.serialize(resource: resource),
|
|
44
|
+
path: ledger_resource_path
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def success
|
|
49
|
+
find.and_then do |find_result|
|
|
50
|
+
super(
|
|
51
|
+
resource: find_result.resource,
|
|
52
|
+
response: response
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Parser for OpenAPI 3.0 data for a given record method
|
|
5
|
+
#
|
|
6
|
+
module LedgerSync
|
|
7
|
+
module NetSuite
|
|
8
|
+
class Record
|
|
9
|
+
class HTTPMethod < Util::ReadOnlyObject
|
|
10
|
+
attribute :key
|
|
11
|
+
attribute :method
|
|
12
|
+
attribute :path
|
|
13
|
+
attribute :summary
|
|
14
|
+
|
|
15
|
+
def initialize(args = {})
|
|
16
|
+
super(
|
|
17
|
+
args.merge(
|
|
18
|
+
key: "#{args.fetch(:method)} #{args.fetch(:path)}".downcase
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def parameters
|
|
24
|
+
Parameter.new_from_array(
|
|
25
|
+
raw[:parameters]
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LedgerSync
|
|
4
|
+
module NetSuite
|
|
5
|
+
class Record
|
|
6
|
+
#
|
|
7
|
+
# Helper class for retrieving record metadata:
|
|
8
|
+
# - available http_methods
|
|
9
|
+
# - record properties/attributes
|
|
10
|
+
#
|
|
11
|
+
class Metadata
|
|
12
|
+
BASE_PATH = 'metadata-catalog'
|
|
13
|
+
|
|
14
|
+
attr_reader :client,
|
|
15
|
+
:record
|
|
16
|
+
|
|
17
|
+
def initialize(client:, record:)
|
|
18
|
+
@client = client
|
|
19
|
+
@record = record
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create
|
|
23
|
+
@create ||= http_methods.find { |e| e.key == "post /#{record}" }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def delete
|
|
27
|
+
@delete ||= http_methods.find { |e| e.key == "delete /#{record}/{id}" }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def find
|
|
31
|
+
@find ||= show
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def http_methods
|
|
35
|
+
@http_methods ||= begin
|
|
36
|
+
ret = []
|
|
37
|
+
|
|
38
|
+
metadata_response.body['paths'].each do |path, path_data|
|
|
39
|
+
path_data.each do |method, method_data|
|
|
40
|
+
ret << HTTPMethod.new_from_hash(
|
|
41
|
+
method_data.merge(
|
|
42
|
+
method: method,
|
|
43
|
+
path: path
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
ret
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def index
|
|
54
|
+
@index ||= http_methods.find { |e| e.key == "get /#{record}" }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def metadata_response
|
|
58
|
+
@metadata_response = begin
|
|
59
|
+
client.get(
|
|
60
|
+
headers: {
|
|
61
|
+
'Accept' => 'application/swagger+json'
|
|
62
|
+
},
|
|
63
|
+
path: "#{BASE_PATH}?select=#{record}"
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def properties
|
|
69
|
+
@properties ||= begin
|
|
70
|
+
ret = []
|
|
71
|
+
props = metadata_response.body['components']['schemas'][record.to_s]['properties']
|
|
72
|
+
props.map do |key, prop|
|
|
73
|
+
next unless prop.key?('title')
|
|
74
|
+
|
|
75
|
+
ret << Property.new_from_hash(
|
|
76
|
+
prop.merge(
|
|
77
|
+
key: key
|
|
78
|
+
)
|
|
79
|
+
)
|
|
80
|
+
end
|
|
81
|
+
ret
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def patch
|
|
86
|
+
@patch ||= http_methods.find { |e| e.key == "patch /#{record}/{id}" }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def show
|
|
90
|
+
@show ||= http_methods.find { |e| e.key == "get /#{record}/{id}" }
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def update
|
|
94
|
+
@update ||= http_methods.find { |e| e.key == "patch /#{record}/{id}" }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def upsert
|
|
98
|
+
@upsert ||= http_methods.find { |e| e.key == "put /#{record}/{id}" }
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.config
|
|
102
|
+
Client.config
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|