dear_inventory 0.2.0 → 0.3.0
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 +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
|