dear_inventory 0.2.0 → 0.3.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 +4 -0
- data/dear_inventory.gemspec +1 -1
- data/lib/dear_inventory.rb +4 -0
- data/lib/dear_inventory/errors/not_paginated.rb +19 -0
- data/lib/dear_inventory/errors/request.rb +2 -2
- data/lib/dear_inventory/lib/request.rb +58 -0
- data/lib/dear_inventory/model.rb +8 -3
- data/lib/dear_inventory/models/additional_attributes.rb +3 -3
- data/lib/dear_inventory/models/additional_charge.rb +3 -3
- data/lib/dear_inventory/models/address.rb +3 -3
- data/lib/dear_inventory/models/attachment.rb +3 -3
- data/lib/dear_inventory/models/inventory_movement.rb +3 -3
- data/lib/dear_inventory/models/request.rb +27 -0
- data/lib/dear_inventory/models/sale.rb +3 -3
- data/lib/dear_inventory/models/sale_list.rb +3 -3
- data/lib/dear_inventory/models/sale_lists.rb +3 -3
- data/lib/dear_inventory/models/sales/credit_note.rb +3 -3
- data/lib/dear_inventory/models/sales/fulfilment.rb +3 -3
- data/lib/dear_inventory/models/sales/fulfilments/pick_pack.rb +3 -3
- data/lib/dear_inventory/models/sales/fulfilments/pick_pack_line.rb +3 -3
- data/lib/dear_inventory/models/sales/fulfilments/ship.rb +4 -4
- data/lib/dear_inventory/models/sales/fulfilments/ship_line.rb +3 -3
- data/lib/dear_inventory/models/sales/invoice.rb +3 -3
- data/lib/dear_inventory/models/sales/invoice_line.rb +3 -3
- data/lib/dear_inventory/models/sales/line.rb +3 -3
- data/lib/dear_inventory/models/sales/manual_journal.rb +3 -3
- data/lib/dear_inventory/models/sales/manual_journal_line.rb +3 -3
- data/lib/dear_inventory/models/sales/order.rb +3 -3
- data/lib/dear_inventory/models/sales/payment_line.rb +3 -3
- data/lib/dear_inventory/models/sales/quote.rb +3 -3
- data/lib/dear_inventory/models/shipping_address.rb +3 -3
- data/lib/dear_inventory/models/transaction.rb +3 -3
- data/lib/dear_inventory/parameters.rb +24 -16
- data/lib/dear_inventory/parameters/sale/index.rb +3 -3
- data/lib/dear_inventory/parameters/sale_list/index.rb +7 -7
- data/lib/dear_inventory/resource.rb +13 -30
- data/lib/dear_inventory/response.rb +25 -8
- data/lib/dear_inventory/validators/enum.rb +1 -1
- data/lib/dear_inventory/validators/guid.rb +1 -1
- data/lib/dear_inventory/validators/time.rb +1 -1
- data/lib/dear_inventory/version.rb +1 -1
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06b7290754b857b04a983d81fb7f409600b11c6cc3ea2c7aa29d2ab5d6de9169
|
4
|
+
data.tar.gz: ea6cc10252ec0131abcc507f11bf29a498ba9c33e5d166c1614a7c5039307c8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f46d30f480e186c5c96aa29c5aada16358377a02972472bbbc5e2e0d0021cc145a79b500bb16cee31fc577de87e1c359cb513ca0a0e5f5924c69437e52b2ee5
|
7
|
+
data.tar.gz: 80de674c305a60635ce942ee63c68afaea977a46a0cb968276af08e6b5cb6543737387adc38368f0957584e72a6dbec349c918df4f99fb60ccbf90ab84e323c4
|
data/.rubocop.yml
CHANGED
data/dear_inventory.gemspec
CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency "bundler", "~> 2.0"
|
35
35
|
spec.add_development_dependency "dotenv"
|
36
36
|
spec.add_development_dependency "pry-byebug"
|
37
|
-
spec.add_development_dependency "rake", "
|
37
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
38
38
|
spec.add_development_dependency "rspec", "~> 3.0"
|
39
39
|
spec.add_development_dependency "rubocop", "~> 0.71"
|
40
40
|
spec.add_development_dependency "rubocop-performance"
|
data/lib/dear_inventory.rb
CHANGED
@@ -8,11 +8,14 @@ require "dear_inventory/config"
|
|
8
8
|
require "dear_inventory/environment"
|
9
9
|
|
10
10
|
require "dear_inventory/error"
|
11
|
+
require "dear_inventory/errors/not_paginated"
|
11
12
|
require "dear_inventory/errors/request"
|
12
13
|
require "dear_inventory/errors/validation"
|
13
14
|
|
14
15
|
require "dear_inventory/lib/endpoint_class"
|
16
|
+
require "dear_inventory/lib/date_time"
|
15
17
|
require "dear_inventory/lib/is_a_subclass"
|
18
|
+
require "dear_inventory/lib/request"
|
16
19
|
|
17
20
|
require "dear_inventory/model"
|
18
21
|
require "dear_inventory/models/additional_attributes"
|
@@ -39,6 +42,7 @@ require "dear_inventory/models/sale_lists"
|
|
39
42
|
require "dear_inventory/models/sales/credit_note"
|
40
43
|
require "dear_inventory/models/sales/invoice"
|
41
44
|
require "dear_inventory/models/sale"
|
45
|
+
require "dear_inventory/models/request"
|
42
46
|
|
43
47
|
require "dear_inventory/validator"
|
44
48
|
require "dear_inventory/validators/boolean"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module DearInventory
|
5
|
+
class NotPaginatedError < Error
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
sig do
|
9
|
+
params(
|
10
|
+
message: T.nilable(String),
|
11
|
+
uri: String
|
12
|
+
).void
|
13
|
+
end
|
14
|
+
def initialize(message = nil, uri:)
|
15
|
+
message ||= "The endpoint (#{uri}) is not paginated"
|
16
|
+
super(message)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module DearInventory
|
5
|
+
class Request
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
sig do
|
9
|
+
params(parameters: DearInventory::Models::Request).
|
10
|
+
returns(DearInventory::Response)
|
11
|
+
end
|
12
|
+
def self.call(parameters)
|
13
|
+
new(parameters).call
|
14
|
+
end
|
15
|
+
|
16
|
+
sig do
|
17
|
+
params(parameters: DearInventory::Models::Request).void
|
18
|
+
end
|
19
|
+
def initialize(parameters)
|
20
|
+
@parameters = parameters
|
21
|
+
end
|
22
|
+
|
23
|
+
sig { returns(DearInventory::Response) }
|
24
|
+
def call
|
25
|
+
options = request_params(@parameters.action, @parameters.params)
|
26
|
+
response = HTTP.headers(headers).
|
27
|
+
public_send(@parameters.action, @parameters.uri, options)
|
28
|
+
|
29
|
+
DearInventory::Response.new(
|
30
|
+
response: response,
|
31
|
+
request: @parameters
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
sig { returns(T::Hash[Symbol, String]) }
|
38
|
+
def headers
|
39
|
+
{
|
40
|
+
"Content-Type": "application/json",
|
41
|
+
"api-auth-accountid": DearInventory.config.require(:account_id),
|
42
|
+
"api-auth-applicationkey": DearInventory.config.require(:key),
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
sig do
|
47
|
+
params(action: Symbol, params: DearInventory::Parameters).
|
48
|
+
returns(T::Hash[Symbol, T::Hash[Symbol, T.untyped]])
|
49
|
+
end
|
50
|
+
def request_params(action, params)
|
51
|
+
if action == :get
|
52
|
+
{ params: params.to_h }
|
53
|
+
else
|
54
|
+
{ json: params.to_h }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/dear_inventory/model.rb
CHANGED
@@ -51,6 +51,7 @@ module DearInventory
|
|
51
51
|
|
52
52
|
private
|
53
53
|
|
54
|
+
# rubocop:disable Metrics/MethodLength
|
54
55
|
sig do
|
55
56
|
params(
|
56
57
|
response_name: Symbol,
|
@@ -68,18 +69,22 @@ module DearInventory
|
|
68
69
|
)
|
69
70
|
end
|
70
71
|
def field_value(response_name, values, specifications)
|
71
|
-
model =
|
72
|
+
model = T.cast(
|
73
|
+
specifications[:model],
|
74
|
+
T.nilable(T.class_of(DearInventory::Model))
|
75
|
+
)
|
72
76
|
value = values[response_name.to_s]
|
73
77
|
|
74
78
|
case specifications[:type]
|
75
79
|
when :Array
|
76
|
-
initialize_array_values_in_models(value, model)
|
80
|
+
initialize_array_values_in_models(value, T.must(model))
|
77
81
|
when :Hash
|
78
|
-
model.new(value)
|
82
|
+
T.must(model).new(value)
|
79
83
|
else
|
80
84
|
value
|
81
85
|
end
|
82
86
|
end
|
87
|
+
# rubocop:enable Metrics/MethodLength
|
83
88
|
|
84
89
|
sig do
|
85
90
|
params(
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class AdditionalAttributes < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
AdditionalAttribute1: {
|
11
11
|
name: :additional_attribute_1,
|
12
12
|
type: :String,
|
@@ -46,8 +46,8 @@ module DearInventory
|
|
46
46
|
AdditionalAttribute10: {
|
47
47
|
name: :additional_attribute_10,
|
48
48
|
type: :String,
|
49
|
-
}
|
50
|
-
|
49
|
+
}
|
50
|
+
)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class AdditionalCharge < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
Description: {
|
11
11
|
name: :description,
|
12
12
|
type: :String,
|
@@ -38,8 +38,8 @@ module DearInventory
|
|
38
38
|
Comment: {
|
39
39
|
name: :comment,
|
40
40
|
type: :String,
|
41
|
-
}
|
42
|
-
|
41
|
+
}
|
42
|
+
)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class Address < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
DisplayAddressLine1: {
|
11
11
|
name: :display_address_line_1,
|
12
12
|
type: :String,
|
@@ -38,8 +38,8 @@ module DearInventory
|
|
38
38
|
Country: {
|
39
39
|
name: :country,
|
40
40
|
type: :String,
|
41
|
-
}
|
42
|
-
|
41
|
+
}
|
42
|
+
)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class Attachment < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
ID: {
|
11
11
|
name: :id,
|
12
12
|
type: :Guid,
|
@@ -26,8 +26,8 @@ module DearInventory
|
|
26
26
|
DownloadUrl: {
|
27
27
|
name: :download_url,
|
28
28
|
type: :String,
|
29
|
-
}
|
30
|
-
|
29
|
+
}
|
30
|
+
)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class InventoryMovement < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
TaskID: {
|
11
11
|
name: :task_id,
|
12
12
|
type: :Guid,
|
@@ -22,8 +22,8 @@ module DearInventory
|
|
22
22
|
COGS: {
|
23
23
|
name: :cogs,
|
24
24
|
type: :Numeric,
|
25
|
-
}
|
26
|
-
|
25
|
+
}
|
26
|
+
)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module DearInventory
|
5
|
+
module Models
|
6
|
+
class Request < DearInventory::Model
|
7
|
+
extend T::Sig
|
8
|
+
|
9
|
+
sig { returns(Symbol) }
|
10
|
+
attr_reader :action
|
11
|
+
sig { returns(T.class_of(DearInventory::Model)) }
|
12
|
+
attr_reader :model
|
13
|
+
sig { returns(DearInventory::Parameters) }
|
14
|
+
attr_reader :params
|
15
|
+
sig { returns(String) }
|
16
|
+
attr_reader :uri
|
17
|
+
|
18
|
+
sig { params(parameters: T::Hash[Symbol, T.untyped]).void }
|
19
|
+
def initialize(parameters)
|
20
|
+
@action = T.let(parameters[:action], Symbol)
|
21
|
+
@model = T.let(parameters[:model], T.class_of(DearInventory::Model))
|
22
|
+
@params = T.let(parameters[:params], DearInventory::Parameters)
|
23
|
+
@uri = T.let(parameters[:uri], String)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class Sale < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
ID: {
|
11
11
|
name: :id,
|
12
12
|
type: :Guid,
|
@@ -210,8 +210,8 @@ module DearInventory
|
|
210
210
|
name: :transactions,
|
211
211
|
type: :Array,
|
212
212
|
model: DearInventory::Models::InventoryMovement,
|
213
|
-
}
|
214
|
-
|
213
|
+
}
|
214
|
+
)
|
215
215
|
end
|
216
216
|
end
|
217
217
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class SaleList < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
SaleID: {
|
11
11
|
name: :id,
|
12
12
|
type: :Guid,
|
@@ -126,8 +126,8 @@ module DearInventory
|
|
126
126
|
ExternalID: {
|
127
127
|
name: :external_id,
|
128
128
|
type: :String,
|
129
|
-
}
|
130
|
-
|
129
|
+
}
|
130
|
+
)
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class SaleLists < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
Total: {
|
11
11
|
name: :total,
|
12
12
|
type: :Integer,
|
@@ -19,8 +19,8 @@ module DearInventory
|
|
19
19
|
name: :sale_list,
|
20
20
|
type: :Array,
|
21
21
|
model: DearInventory::Models::SaleList,
|
22
|
-
}
|
23
|
-
|
22
|
+
}
|
23
|
+
)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class CreditNote < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
TaskID: {
|
12
12
|
name: :task_id,
|
13
13
|
type: :Guid,
|
@@ -67,8 +67,8 @@ module DearInventory
|
|
67
67
|
Total: {
|
68
68
|
name: :total,
|
69
69
|
type: :Numeric,
|
70
|
-
}
|
71
|
-
|
70
|
+
}
|
71
|
+
)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class Fulfilment < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
TaskID: {
|
12
12
|
name: :task_id,
|
13
13
|
type: :Guid,
|
@@ -38,8 +38,8 @@ module DearInventory
|
|
38
38
|
name: :ship,
|
39
39
|
type: :Hash,
|
40
40
|
model: DearInventory::Models::Sales::Fulfilments::Ship,
|
41
|
-
}
|
42
|
-
|
41
|
+
}
|
42
|
+
)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -8,7 +8,7 @@ module DearInventory
|
|
8
8
|
class PickPack < DearInventory::Model
|
9
9
|
extend T::Sig
|
10
10
|
|
11
|
-
fields(
|
11
|
+
fields(
|
12
12
|
Status: {
|
13
13
|
name: :status,
|
14
14
|
type: :String,
|
@@ -17,8 +17,8 @@ module DearInventory
|
|
17
17
|
name: :lines,
|
18
18
|
type: :Array,
|
19
19
|
model: DearInventory::Models::Sales::Fulfilments::PickPackLine,
|
20
|
-
}
|
21
|
-
|
20
|
+
}
|
21
|
+
)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -8,7 +8,7 @@ module DearInventory
|
|
8
8
|
class PickPackLine < DearInventory::Model
|
9
9
|
extend T::Sig
|
10
10
|
|
11
|
-
fields(
|
11
|
+
fields(
|
12
12
|
ProductID: {
|
13
13
|
name: :product_id,
|
14
14
|
type: :Guid,
|
@@ -48,8 +48,8 @@ module DearInventory
|
|
48
48
|
WarrantyRegistrationNumber: {
|
49
49
|
name: :warranty_registration_number,
|
50
50
|
type: :String,
|
51
|
-
}
|
52
|
-
|
51
|
+
}
|
52
|
+
)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -8,7 +8,7 @@ module DearInventory
|
|
8
8
|
class Ship < DearInventory::Model
|
9
9
|
extend T::Sig
|
10
10
|
|
11
|
-
fields(
|
11
|
+
fields(
|
12
12
|
Status: {
|
13
13
|
name: :status,
|
14
14
|
type: :String,
|
@@ -20,14 +20,14 @@ module DearInventory
|
|
20
20
|
ShippingAddress: {
|
21
21
|
name: :status,
|
22
22
|
type: :Hash,
|
23
|
-
model: DearInventory::Models::ShippingAddress
|
23
|
+
model: DearInventory::Models::ShippingAddress,
|
24
24
|
},
|
25
25
|
Lines: {
|
26
26
|
name: :lines,
|
27
27
|
type: :Array,
|
28
28
|
model: DearInventory::Models::Sales::Fulfilments::ShipLine,
|
29
|
-
}
|
30
|
-
|
29
|
+
}
|
30
|
+
)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -8,7 +8,7 @@ module DearInventory
|
|
8
8
|
class ShipLine < DearInventory::Model
|
9
9
|
extend T::Sig
|
10
10
|
|
11
|
-
fields(
|
11
|
+
fields(
|
12
12
|
ID: {
|
13
13
|
name: :id,
|
14
14
|
type: :Guid,
|
@@ -36,8 +36,8 @@ module DearInventory
|
|
36
36
|
IsShipped: {
|
37
37
|
name: :is_shipped,
|
38
38
|
type: :Boolean,
|
39
|
-
}
|
40
|
-
|
39
|
+
}
|
40
|
+
)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class Invoice < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
TaskID: {
|
12
12
|
name: :task_id,
|
13
13
|
type: :Guid,
|
@@ -78,8 +78,8 @@ module DearInventory
|
|
78
78
|
Paid: {
|
79
79
|
name: :paid,
|
80
80
|
type: :Numeric,
|
81
|
-
}
|
82
|
-
|
81
|
+
}
|
82
|
+
)
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class Line < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
ProductID: {
|
12
12
|
name: :product_id,
|
13
13
|
type: :Guid,
|
@@ -51,8 +51,8 @@ module DearInventory
|
|
51
51
|
Total: {
|
52
52
|
name: :total,
|
53
53
|
type: :Numeric,
|
54
|
-
}
|
55
|
-
|
54
|
+
}
|
55
|
+
)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class ManualJournal < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
Status: {
|
12
12
|
name: :status,
|
13
13
|
type: :String,
|
@@ -16,8 +16,8 @@ module DearInventory
|
|
16
16
|
name: :lines,
|
17
17
|
type: :Array,
|
18
18
|
model: DearInventory::Models::Sales::ManualJournalLine,
|
19
|
-
}
|
20
|
-
|
19
|
+
}
|
20
|
+
)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class ManualJournalLine < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
Reference: {
|
12
12
|
name: :reference,
|
13
13
|
type: :String,
|
@@ -27,8 +27,8 @@ module DearInventory
|
|
27
27
|
Credit: {
|
28
28
|
name: :credit,
|
29
29
|
type: :String,
|
30
|
-
}
|
31
|
-
|
30
|
+
}
|
31
|
+
)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class Order < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
SaleOrderNumber: {
|
12
12
|
name: :sale_order_number,
|
13
13
|
type: :String,
|
@@ -41,8 +41,8 @@ module DearInventory
|
|
41
41
|
Total: {
|
42
42
|
name: :total,
|
43
43
|
type: :Numeric,
|
44
|
-
}
|
45
|
-
|
44
|
+
}
|
45
|
+
)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class PaymentLine < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
ID: {
|
12
12
|
name: :id,
|
13
13
|
type: :Guid,
|
@@ -35,8 +35,8 @@ module DearInventory
|
|
35
35
|
DateCreated: {
|
36
36
|
name: :date_created,
|
37
37
|
type: :DateTime,
|
38
|
-
}
|
39
|
-
|
38
|
+
}
|
39
|
+
)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class Quote < DearInventory::Model
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
Memo: {
|
12
12
|
name: :memo,
|
13
13
|
type: :String,
|
@@ -42,8 +42,8 @@ module DearInventory
|
|
42
42
|
Total: {
|
43
43
|
name: :total,
|
44
44
|
type: :Numeric,
|
45
|
-
}
|
46
|
-
|
45
|
+
}
|
46
|
+
)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class ShippingAddress < Address
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
Company: {
|
11
11
|
name: :company,
|
12
12
|
type: :String,
|
@@ -18,8 +18,8 @@ module DearInventory
|
|
18
18
|
ShipToOther: {
|
19
19
|
name: :ship_to_other,
|
20
20
|
type: :Boolean,
|
21
|
-
}
|
22
|
-
|
21
|
+
}
|
22
|
+
)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -6,7 +6,7 @@ module DearInventory
|
|
6
6
|
class Transaction < DearInventory::Model
|
7
7
|
extend T::Sig
|
8
8
|
|
9
|
-
fields(
|
9
|
+
fields(
|
10
10
|
TaskID: {
|
11
11
|
name: :task_id,
|
12
12
|
type: :Guid,
|
@@ -34,8 +34,8 @@ module DearInventory
|
|
34
34
|
EffectiveDate: {
|
35
35
|
name: :description,
|
36
36
|
type: :DateTime,
|
37
|
-
}
|
38
|
-
|
37
|
+
}
|
38
|
+
)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -32,22 +32,13 @@ module DearInventory
|
|
32
32
|
|
33
33
|
sig do
|
34
34
|
params(
|
35
|
-
resource_class: T.
|
35
|
+
resource_class: T.class_of(DearInventory::Resource),
|
36
36
|
endpoint: T.nilable(String),
|
37
37
|
params: T::Hash[Symbol, T.untyped]
|
38
38
|
).returns(T.untyped)
|
39
39
|
end
|
40
40
|
def convert(resource_class, endpoint, params)
|
41
|
-
|
42
|
-
params_class = DearInventory::EndpointClass.(
|
43
|
-
class_type: "Parameters",
|
44
|
-
resource_class: resource_class,
|
45
|
-
endpoint: endpoint
|
46
|
-
)
|
47
|
-
params_class = T.cast(
|
48
|
-
params_class,
|
49
|
-
T.class_of(DearInventory::Parameters)
|
50
|
-
)
|
41
|
+
params_class = endpoint_class(resource_class, endpoint)
|
51
42
|
|
52
43
|
convert_with_params_class(
|
53
44
|
endpoint: endpoint, params_class: params_class,
|
@@ -57,6 +48,22 @@ module DearInventory
|
|
57
48
|
|
58
49
|
private
|
59
50
|
|
51
|
+
sig do
|
52
|
+
params(
|
53
|
+
resource_class: T.class_of(DearInventory::Resource),
|
54
|
+
endpoint: T.nilable(String)
|
55
|
+
).returns(T.class_of(DearInventory::Parameters))
|
56
|
+
end
|
57
|
+
def endpoint_class(resource_class, endpoint)
|
58
|
+
params_class = DearInventory::EndpointClass.(
|
59
|
+
class_type: "Parameters",
|
60
|
+
resource_class: resource_class,
|
61
|
+
endpoint: endpoint
|
62
|
+
)
|
63
|
+
T.cast(params_class, T.class_of(DearInventory::Parameters))
|
64
|
+
end
|
65
|
+
|
66
|
+
# rubocop:disable Metrics/MethodLength
|
60
67
|
sig do
|
61
68
|
params(
|
62
69
|
name: Symbol,
|
@@ -81,6 +88,7 @@ module DearInventory
|
|
81
88
|
)
|
82
89
|
end
|
83
90
|
end
|
91
|
+
# rubocop:enable Metrics/MethodLength
|
84
92
|
|
85
93
|
sig do
|
86
94
|
params(
|
@@ -93,7 +101,7 @@ module DearInventory
|
|
93
101
|
def define_enum_method(name, specifications)
|
94
102
|
validator = DearInventory::Validators::Enum
|
95
103
|
options = {
|
96
|
-
values: specifications[:values]
|
104
|
+
values: specifications[:values],
|
97
105
|
}
|
98
106
|
define_method_with_options(name, validator, options)
|
99
107
|
end
|
@@ -107,7 +115,7 @@ module DearInventory
|
|
107
115
|
def define_string_method(name, specifications)
|
108
116
|
validator = DearInventory::Validators::String
|
109
117
|
options = {
|
110
|
-
max_length: specifications[:max_length]
|
118
|
+
max_length: specifications[:max_length],
|
111
119
|
}
|
112
120
|
define_method_with_options(name, validator, options)
|
113
121
|
end
|
@@ -118,7 +126,7 @@ module DearInventory
|
|
118
126
|
validator: T.class_of(DearInventory::Validator),
|
119
127
|
options: T::Hash[
|
120
128
|
Symbol, T.nilable(T.any(Symbol, T::Array[String], T::Boolean))
|
121
|
-
]
|
129
|
+
]
|
122
130
|
).void
|
123
131
|
end
|
124
132
|
def define_method_with_options(name, validator, options)
|
@@ -152,7 +160,7 @@ module DearInventory
|
|
152
160
|
sig do
|
153
161
|
params(
|
154
162
|
params_class: T.nilable(T.class_of(DearInventory::Parameters)),
|
155
|
-
resource_class: DearInventory::Resource,
|
163
|
+
resource_class: T.class_of(DearInventory::Resource),
|
156
164
|
endpoint: T.nilable(String),
|
157
165
|
params: T::Hash[Symbol, T.untyped]
|
158
166
|
).returns(T.nilable(DearInventory::Parameters))
|
@@ -202,7 +210,7 @@ module DearInventory
|
|
202
210
|
sig { params(params: T::Hash[Symbol, T.untyped]).void }
|
203
211
|
def assign_params(params)
|
204
212
|
params.each do |name, value|
|
205
|
-
|
213
|
+
public_send(:"#{name}=", value)
|
206
214
|
end
|
207
215
|
end
|
208
216
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class Index < DearInventory::Parameters
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
id: {
|
12
12
|
property: :ID,
|
13
13
|
type: :String,
|
@@ -27,8 +27,8 @@ module DearInventory
|
|
27
27
|
property: :IncludeTransactions,
|
28
28
|
type: :Boolean,
|
29
29
|
required: false,
|
30
|
-
}
|
31
|
-
|
30
|
+
}
|
31
|
+
)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -7,7 +7,7 @@ module DearInventory
|
|
7
7
|
class Index < DearInventory::Parameters
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
-
fields(
|
10
|
+
fields(
|
11
11
|
page: {
|
12
12
|
property: :Page,
|
13
13
|
type: :Integer,
|
@@ -49,7 +49,7 @@ module DearInventory
|
|
49
49
|
type: :Enum,
|
50
50
|
values: [
|
51
51
|
"NOT AVAILABLE", "DRAFT", "AUTHORISED", "VOIDED", "AUTH_NO_ALLOC",
|
52
|
-
"FULFILLED", "CLOSED"
|
52
|
+
"FULFILLED", "CLOSED",
|
53
53
|
],
|
54
54
|
required: false,
|
55
55
|
},
|
@@ -58,7 +58,7 @@ module DearInventory
|
|
58
58
|
type: :Enum,
|
59
59
|
values: [
|
60
60
|
"VOIDED", "NOT AVAILABLE", "PICKED", "PICKING", "NOT PICKED",
|
61
|
-
"PARTIALLY PICKED"
|
61
|
+
"PARTIALLY PICKED",
|
62
62
|
],
|
63
63
|
required: false,
|
64
64
|
},
|
@@ -67,7 +67,7 @@ module DearInventory
|
|
67
67
|
type: :Enum,
|
68
68
|
values: [
|
69
69
|
"VOIDED", "NOT AVAILABLE", "PACKED", "PACKING", "NOT PACKED",
|
70
|
-
"PARTIALLY PACKED"
|
70
|
+
"PARTIALLY PACKED",
|
71
71
|
],
|
72
72
|
required: false,
|
73
73
|
},
|
@@ -76,7 +76,7 @@ module DearInventory
|
|
76
76
|
type: :Enum,
|
77
77
|
values: [
|
78
78
|
"VOIDED", "NOT AVAILABLE", "SHIPPED", "SHIPPING", "NOT SHIPPED",
|
79
|
-
"PARTIALLY SHIPPED"
|
79
|
+
"PARTIALLY SHIPPED",
|
80
80
|
],
|
81
81
|
required: false,
|
82
82
|
},
|
@@ -111,8 +111,8 @@ module DearInventory
|
|
111
111
|
property: :ReadyForShipping,
|
112
112
|
type: :Boolean,
|
113
113
|
required: false,
|
114
|
-
}
|
115
|
-
|
114
|
+
}
|
115
|
+
)
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
@@ -15,45 +15,28 @@ module DearInventory
|
|
15
15
|
).returns(DearInventory::Response)
|
16
16
|
end
|
17
17
|
def request(action, model:, endpoint: nil, params: {})
|
18
|
-
|
18
|
+
uri = resource_uri(endpoint)
|
19
19
|
params = DearInventory::Parameters.convert(self.class, endpoint, params)
|
20
|
-
options = request_params(action, params)
|
21
20
|
|
22
|
-
|
23
|
-
|
21
|
+
request = DearInventory::Models::Request.new(
|
22
|
+
action: action,
|
23
|
+
model: model,
|
24
|
+
params: params,
|
25
|
+
uri: uri
|
26
|
+
)
|
27
|
+
DearInventory::Request.(request)
|
24
28
|
end
|
25
29
|
|
26
30
|
private
|
27
31
|
|
28
|
-
|
32
|
+
URI_BASE = "https://inventory.dearsystems.com/ExternalApi/v2"
|
29
33
|
|
30
34
|
sig { params(endpoint: T.nilable(String)).returns(String) }
|
31
|
-
def
|
35
|
+
def resource_uri(endpoint)
|
32
36
|
resource = T.must(self.class.name).split("::").last
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
sig { returns(T::Hash[Symbol, String]) }
|
39
|
-
def headers
|
40
|
-
{
|
41
|
-
"Content-Type": "application/json",
|
42
|
-
"api-auth-accountid": DearInventory.config.require(:account_id),
|
43
|
-
"api-auth-applicationkey": DearInventory.config.require(:key),
|
44
|
-
}
|
45
|
-
end
|
46
|
-
|
47
|
-
sig do
|
48
|
-
params(action: Symbol, params: DearInventory::Parameters).
|
49
|
-
returns(T::Hash[Symbol, T.untyped])
|
50
|
-
end
|
51
|
-
def request_params(action, params)
|
52
|
-
if action == :get
|
53
|
-
{ params: params.to_h }
|
54
|
-
else
|
55
|
-
{ json: params.to_h }
|
56
|
-
end
|
37
|
+
uri = "#{URI_BASE}/#{T.must(resource).downcase}"
|
38
|
+
uri += "/#{endpoint}" unless endpoint.nil?
|
39
|
+
uri
|
57
40
|
end
|
58
41
|
end
|
59
42
|
end
|
@@ -6,20 +6,26 @@ module DearInventory
|
|
6
6
|
extend T::Sig
|
7
7
|
extend DearInventory::IsASubclass
|
8
8
|
|
9
|
+
sig { returns(DearInventory::Models::Request) }
|
10
|
+
attr_reader :request
|
11
|
+
sig { returns(HTTP::Response) }
|
12
|
+
attr_reader :response
|
13
|
+
|
9
14
|
sig do
|
10
15
|
params(
|
11
|
-
|
16
|
+
request: DearInventory::Models::Request,
|
12
17
|
response: HTTP::Response
|
13
18
|
).void
|
14
19
|
end
|
15
|
-
def initialize(
|
16
|
-
@
|
20
|
+
def initialize(request:, response:)
|
21
|
+
@request = T.let(request, DearInventory::Models::Request)
|
17
22
|
@response = T.let(response, HTTP::Response)
|
18
23
|
@body = T.let(nil, T.nilable(String))
|
19
24
|
@http_status = T.let(nil, T.nilable(Integer))
|
25
|
+
@model = T.let(nil, T.nilable(DearInventory::Model))
|
20
26
|
@uri = T.let(nil, T.nilable(String))
|
21
27
|
|
22
|
-
assign_values
|
28
|
+
assign_values
|
23
29
|
raise_error unless success?
|
24
30
|
end
|
25
31
|
|
@@ -44,6 +50,17 @@ module DearInventory
|
|
44
50
|
@http_status ||= @response.status.code
|
45
51
|
end
|
46
52
|
|
53
|
+
sig { returns(DearInventory::Response) }
|
54
|
+
def next_page
|
55
|
+
unless T.must(@model).respond_to?(:page)
|
56
|
+
raise DearInventory::NotPaginatedError.new(uri: uri)
|
57
|
+
end
|
58
|
+
|
59
|
+
request = @request.dup
|
60
|
+
T.unsafe(request.params).page = T.unsafe(@model).page + 1
|
61
|
+
DearInventory::Request.(request)
|
62
|
+
end
|
63
|
+
|
47
64
|
sig { returns(T::Boolean) }
|
48
65
|
def success?
|
49
66
|
http_status == 200
|
@@ -56,10 +73,10 @@ module DearInventory
|
|
56
73
|
|
57
74
|
private
|
58
75
|
|
59
|
-
sig {
|
60
|
-
def assign_values
|
61
|
-
@model = model.new(body)
|
62
|
-
model.const_get(:FIELDS).each do |
|
76
|
+
sig { void }
|
77
|
+
def assign_values
|
78
|
+
@model = @request.model.new(body)
|
79
|
+
@request.model.const_get(:FIELDS).each do |_, specifications|
|
63
80
|
define_singleton_method(specifications[:name]) do
|
64
81
|
@model.public_send(specifications[:name])
|
65
82
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dear_inventory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Rice
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -90,16 +90,16 @@ dependencies:
|
|
90
90
|
name: rake
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- - "
|
93
|
+
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
95
|
+
version: 12.3.3
|
96
96
|
type: :development
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
|
-
- - "
|
100
|
+
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
102
|
+
version: 12.3.3
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: rspec
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -222,17 +222,20 @@ files:
|
|
222
222
|
- lib/dear_inventory/config.rb
|
223
223
|
- lib/dear_inventory/environment.rb
|
224
224
|
- lib/dear_inventory/error.rb
|
225
|
+
- lib/dear_inventory/errors/not_paginated.rb
|
225
226
|
- lib/dear_inventory/errors/request.rb
|
226
227
|
- lib/dear_inventory/errors/validation.rb
|
227
228
|
- lib/dear_inventory/lib/date_time.rb
|
228
229
|
- lib/dear_inventory/lib/endpoint_class.rb
|
229
230
|
- lib/dear_inventory/lib/is_a_subclass.rb
|
231
|
+
- lib/dear_inventory/lib/request.rb
|
230
232
|
- lib/dear_inventory/model.rb
|
231
233
|
- lib/dear_inventory/models/additional_attributes.rb
|
232
234
|
- lib/dear_inventory/models/additional_charge.rb
|
233
235
|
- lib/dear_inventory/models/address.rb
|
234
236
|
- lib/dear_inventory/models/attachment.rb
|
235
237
|
- lib/dear_inventory/models/inventory_movement.rb
|
238
|
+
- lib/dear_inventory/models/request.rb
|
236
239
|
- lib/dear_inventory/models/sale.rb
|
237
240
|
- lib/dear_inventory/models/sale_list.rb
|
238
241
|
- lib/dear_inventory/models/sale_lists.rb
|