dear_inventory 1.4.0 → 1.5.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 +13 -4
- data/Gemfile +14 -0
- data/README.md +1 -10
- data/dear_inventory.gemspec +5 -15
- data/lib/dear_inventory/config.rb +12 -25
- data/lib/dear_inventory/environment.rb +1 -2
- data/lib/dear_inventory/error.rb +1 -6
- data/lib/dear_inventory/errors/api_limit.rb +0 -1
- data/lib/dear_inventory/errors/bad_request.rb +0 -1
- data/lib/dear_inventory/errors/no_more_pages.rb +0 -1
- data/lib/dear_inventory/errors/not_paginated.rb +0 -9
- data/lib/dear_inventory/errors/request.rb +1 -11
- data/lib/dear_inventory/errors/validation.rb +0 -1
- data/lib/dear_inventory/lib/date_time.rb +1 -6
- data/lib/dear_inventory/lib/endpoint_class.rb +4 -25
- data/lib/dear_inventory/lib/is_a_subclass.rb +1 -7
- data/lib/dear_inventory/lib/request.rb +10 -35
- data/lib/dear_inventory/lib/strings/urlize.rb +0 -4
- data/lib/dear_inventory/model.rb +26 -59
- data/lib/dear_inventory/models/additional_attributes.rb +0 -3
- data/lib/dear_inventory/models/address.rb +0 -3
- data/lib/dear_inventory/models/advanced_purchase.rb +0 -3
- data/lib/dear_inventory/models/attachment.rb +0 -3
- data/lib/dear_inventory/models/bill_of_materials_product.rb +0 -3
- data/lib/dear_inventory/models/bill_of_materials_service.rb +0 -3
- data/lib/dear_inventory/models/customer.rb +0 -3
- data/lib/dear_inventory/models/customers/address.rb +0 -3
- data/lib/dear_inventory/models/customers/contact.rb +0 -3
- data/lib/dear_inventory/models/customers.rb +0 -3
- data/lib/dear_inventory/models/inventory_movement.rb +0 -3
- data/lib/dear_inventory/models/product.rb +0 -3
- data/lib/dear_inventory/models/product_availability.rb +0 -3
- data/lib/dear_inventory/models/product_availability_results.rb +0 -3
- data/lib/dear_inventory/models/products/movement.rb +0 -3
- data/lib/dear_inventory/models/products.rb +0 -3
- data/lib/dear_inventory/models/purchase.rb +0 -3
- data/lib/dear_inventory/models/purchases/additional_charge.rb +0 -3
- data/lib/dear_inventory/models/purchases/advanced/credit_note.rb +0 -3
- data/lib/dear_inventory/models/purchases/advanced/invoice.rb +0 -3
- data/lib/dear_inventory/models/purchases/advanced/manual_journal.rb +0 -3
- data/lib/dear_inventory/models/purchases/advanced/put_away.rb +0 -3
- data/lib/dear_inventory/models/purchases/advanced/put_away_line.rb +0 -3
- data/lib/dear_inventory/models/purchases/advanced/stock.rb +0 -3
- data/lib/dear_inventory/models/purchases/advanced/stock_line.rb +0 -3
- data/lib/dear_inventory/models/purchases/credit_note.rb +0 -3
- data/lib/dear_inventory/models/purchases/inventory_movement.rb +0 -3
- data/lib/dear_inventory/models/purchases/invoice.rb +0 -3
- data/lib/dear_inventory/models/purchases/invoice_additional_charge.rb +0 -3
- data/lib/dear_inventory/models/purchases/invoice_line.rb +0 -3
- data/lib/dear_inventory/models/purchases/line.rb +0 -3
- data/lib/dear_inventory/models/purchases/manual_journal.rb +0 -3
- data/lib/dear_inventory/models/purchases/manual_journal_line.rb +0 -3
- data/lib/dear_inventory/models/purchases/order.rb +0 -3
- data/lib/dear_inventory/models/purchases/payment_line.rb +0 -3
- data/lib/dear_inventory/models/purchases/stock.rb +0 -3
- data/lib/dear_inventory/models/purchases/stock_line.rb +0 -3
- data/lib/dear_inventory/models/purchases/unstock_line.rb +0 -3
- data/lib/dear_inventory/models/purchases.rb +3 -8
- data/lib/dear_inventory/models/purchases_results.rb +0 -3
- data/lib/dear_inventory/models/reorder_level.rb +0 -3
- data/lib/dear_inventory/models/request.rb +5 -16
- data/lib/dear_inventory/models/sale.rb +0 -3
- data/lib/dear_inventory/models/sales/additional_charge.rb +0 -3
- data/lib/dear_inventory/models/sales/credit_note.rb +0 -3
- data/lib/dear_inventory/models/sales/fulfilment.rb +0 -3
- data/lib/dear_inventory/models/sales/fulfilments/pick_pack.rb +0 -3
- data/lib/dear_inventory/models/sales/fulfilments/pick_pack_line.rb +0 -3
- data/lib/dear_inventory/models/sales/fulfilments/ship.rb +0 -3
- data/lib/dear_inventory/models/sales/fulfilments/ship_line.rb +0 -3
- data/lib/dear_inventory/models/sales/invoice.rb +0 -3
- data/lib/dear_inventory/models/sales/invoice_additional_charge.rb +0 -3
- data/lib/dear_inventory/models/sales/invoice_line.rb +0 -3
- data/lib/dear_inventory/models/sales/line.rb +0 -3
- data/lib/dear_inventory/models/sales/manual_journal.rb +0 -3
- data/lib/dear_inventory/models/sales/manual_journal_line.rb +0 -3
- data/lib/dear_inventory/models/sales/order.rb +0 -3
- data/lib/dear_inventory/models/sales/payment_line.rb +0 -3
- data/lib/dear_inventory/models/sales/quote.rb +0 -3
- data/lib/dear_inventory/models/sales.rb +1 -6
- data/lib/dear_inventory/models/sales_results.rb +0 -3
- data/lib/dear_inventory/models/shipping_address.rb +0 -3
- data/lib/dear_inventory/models/supplier.rb +0 -3
- data/lib/dear_inventory/models/test_request.rb +5 -20
- data/lib/dear_inventory/models/transaction.rb +0 -3
- data/lib/dear_inventory/parameters/advanced_purchase/show.rb +0 -3
- data/lib/dear_inventory/parameters/customer/create.rb +170 -0
- data/lib/dear_inventory/parameters/customer/index.rb +0 -3
- data/lib/dear_inventory/parameters/customer/show.rb +170 -0
- data/lib/dear_inventory/parameters/customer/update.rb +175 -0
- data/lib/dear_inventory/parameters/product/index.rb +0 -3
- data/lib/dear_inventory/parameters/product_availability/index.rb +0 -3
- data/lib/dear_inventory/parameters/purchase/index.rb +0 -3
- data/lib/dear_inventory/parameters/purchase/show.rb +0 -3
- data/lib/dear_inventory/parameters/sale/delete.rb +0 -3
- data/lib/dear_inventory/parameters/sale/index.rb +0 -3
- data/lib/dear_inventory/parameters/sale/show.rb +0 -3
- data/lib/dear_inventory/parameters.rb +16 -97
- data/lib/dear_inventory/resource.rb +4 -15
- data/lib/dear_inventory/resources/advanced_purchase.rb +0 -7
- data/lib/dear_inventory/resources/customer.rb +17 -10
- data/lib/dear_inventory/resources/product.rb +0 -7
- data/lib/dear_inventory/resources/product_availability.rb +1 -9
- data/lib/dear_inventory/resources/purchase.rb +0 -12
- data/lib/dear_inventory/resources/sale.rb +3 -22
- data/lib/dear_inventory/response.rb +25 -73
- data/lib/dear_inventory/test_response.rb +9 -24
- data/lib/dear_inventory/validator.rb +10 -38
- data/lib/dear_inventory/validators/array.rb +15 -0
- data/lib/dear_inventory/validators/boolean.rb +0 -4
- data/lib/dear_inventory/validators/enum.rb +2 -6
- data/lib/dear_inventory/validators/guid.rb +4 -11
- data/lib/dear_inventory/validators/integer.rb +0 -4
- data/lib/dear_inventory/validators/required.rb +0 -4
- data/lib/dear_inventory/validators/string.rb +0 -4
- data/lib/dear_inventory/validators/time.rb +0 -4
- data/lib/dear_inventory/version.rb +1 -2
- data/lib/dear_inventory.rb +6 -12
- metadata +22 -219
- data/sorbet/config +0 -2
- data/sorbet/rbi/gems/addressable.rbi +0 -199
- data/sorbet/rbi/gems/ast.rbi +0 -48
- data/sorbet/rbi/gems/byebug.rbi +0 -1040
- data/sorbet/rbi/gems/coderay.rbi +0 -92
- data/sorbet/rbi/gems/crack.rbi +0 -48
- data/sorbet/rbi/gems/domain_name.rbi +0 -52
- data/sorbet/rbi/gems/dotenv.rbi +0 -68
- data/sorbet/rbi/gems/ffi-compiler.rbi +0 -27
- data/sorbet/rbi/gems/ffi.rbi +0 -560
- data/sorbet/rbi/gems/hashdiff.rbi +0 -66
- data/sorbet/rbi/gems/http-cookie.rbi +0 -93
- data/sorbet/rbi/gems/http-form_data.rbi +0 -76
- data/sorbet/rbi/gems/http-parser.rbi +0 -121
- data/sorbet/rbi/gems/http.rbi +0 -616
- data/sorbet/rbi/gems/jaro_winkler.rbi +0 -15
- data/sorbet/rbi/gems/method_source.rbi +0 -64
- data/sorbet/rbi/gems/parallel.rbi +0 -82
- data/sorbet/rbi/gems/parser.rbi +0 -857
- data/sorbet/rbi/gems/pry-byebug.rbi +0 -155
- data/sorbet/rbi/gems/pry.rbi +0 -1965
- data/sorbet/rbi/gems/public_suffix.rbi +0 -104
- data/sorbet/rbi/gems/rainbow.rbi +0 -118
- data/sorbet/rbi/gems/rake.rbi +0 -646
- data/sorbet/rbi/gems/rspec-core.rbi +0 -1732
- data/sorbet/rbi/gems/rspec-expectations.rbi +0 -388
- data/sorbet/rbi/gems/rspec-mocks.rbi +0 -820
- data/sorbet/rbi/gems/rspec-support.rbi +0 -269
- data/sorbet/rbi/gems/rspec.rbi +0 -15
- data/sorbet/rbi/gems/rubocop-performance.rbi +0 -277
- data/sorbet/rbi/gems/rubocop-rspec.rbi +0 -887
- data/sorbet/rbi/gems/rubocop.rbi +0 -6952
- data/sorbet/rbi/gems/ruby-progressbar.rbi +0 -305
- data/sorbet/rbi/gems/unf.rbi +0 -19
- data/sorbet/rbi/gems/unicode-display_width.rbi +0 -17
- data/sorbet/rbi/gems/vcr.rbi +0 -572
- data/sorbet/rbi/gems/webmock.rbi +0 -569
- data/sorbet/rbi/hidden-definitions/errors.txt +0 -11809
- data/sorbet/rbi/hidden-definitions/hidden.rbi +0 -20623
- data/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +0 -8684
- data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +0 -276
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/gem.rbi +0 -4222
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +0 -111
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +0 -543
- data/sorbet/rbi/todo.rbi +0 -11
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
# typed: strict
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
module DearInventory
|
|
5
4
|
class Sale < Resource
|
|
6
5
|
class << self
|
|
7
|
-
extend T::Sig
|
|
8
|
-
|
|
9
6
|
# Sales
|
|
10
7
|
#
|
|
11
8
|
# @param params [Hash] URL query string parameters that conform to
|
|
12
9
|
# DearInventory::Parameters::Sale::Index
|
|
13
|
-
sig do
|
|
14
|
-
params(params: T::Hash[Symbol, T.untyped]).
|
|
15
|
-
returns(DearInventory::Response)
|
|
16
|
-
end
|
|
17
10
|
def index(params = {})
|
|
18
11
|
new.request(
|
|
19
12
|
:get,
|
|
@@ -29,10 +22,6 @@ module DearInventory
|
|
|
29
22
|
#
|
|
30
23
|
# @param params [Hash] URL query string parameters that conform to
|
|
31
24
|
# DearInventory::Parameters::Sale::Show
|
|
32
|
-
sig do
|
|
33
|
-
params(params: T::Hash[Symbol, T.untyped]).
|
|
34
|
-
returns(DearInventory::Response)
|
|
35
|
-
end
|
|
36
25
|
def show(params = {})
|
|
37
26
|
new.request(
|
|
38
27
|
:get,
|
|
@@ -46,10 +35,6 @@ module DearInventory
|
|
|
46
35
|
#
|
|
47
36
|
# @param params [Hash] URL query string parameters that conform to
|
|
48
37
|
# DearInventory::Parameters::Sale::Delete
|
|
49
|
-
sig do
|
|
50
|
-
params(params: T::Hash[Symbol, T.untyped]).
|
|
51
|
-
returns(DearInventory::Response)
|
|
52
|
-
end
|
|
53
38
|
def delete(params = {})
|
|
54
39
|
new.request(
|
|
55
40
|
:delete,
|
|
@@ -62,14 +47,10 @@ module DearInventory
|
|
|
62
47
|
|
|
63
48
|
private
|
|
64
49
|
|
|
65
|
-
sig { params(endpoint: T.nilable(String)).returns(String) }
|
|
66
50
|
def resource_uri(endpoint)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
when "show", "delete"
|
|
71
|
-
"#{self.class.const_get(:URI_BASE)}/sale"
|
|
72
|
-
end
|
|
51
|
+
return super unless endpoint == "index"
|
|
52
|
+
|
|
53
|
+
"#{self.class.const_get(:URI_BASE)}/salelist"
|
|
73
54
|
end
|
|
74
55
|
end
|
|
75
56
|
end
|
|
@@ -1,46 +1,30 @@
|
|
|
1
|
-
# typed: strict
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
module DearInventory
|
|
5
4
|
class Response
|
|
6
|
-
extend T::Sig
|
|
7
5
|
extend DearInventory::IsASubclass
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
attr_reader :request
|
|
11
|
-
sig { returns(HTTP::Response) }
|
|
12
|
-
attr_reader :response
|
|
7
|
+
attr_reader :request, :response
|
|
13
8
|
|
|
14
|
-
# rubocop:disable Metrics/AbcSize
|
|
15
9
|
# rubocop:disable Metrics/MethodLength
|
|
16
|
-
sig do
|
|
17
|
-
params(
|
|
18
|
-
request: DearInventory::Models::Request,
|
|
19
|
-
response: HTTP::Response,
|
|
20
|
-
num_previous_records: Integer
|
|
21
|
-
).void
|
|
22
|
-
end
|
|
23
10
|
def initialize(request:, response:, num_previous_records: 0)
|
|
24
|
-
@request =
|
|
25
|
-
@response =
|
|
26
|
-
@num_previous_records =
|
|
11
|
+
@request = request
|
|
12
|
+
@response = response
|
|
13
|
+
@num_previous_records = num_previous_records
|
|
27
14
|
|
|
28
|
-
@fields =
|
|
29
|
-
@http_status =
|
|
30
|
-
@load_full_record =
|
|
31
|
-
@num_records_paged =
|
|
32
|
-
@uri =
|
|
15
|
+
@fields = nil
|
|
16
|
+
@http_status = nil
|
|
17
|
+
@load_full_record = nil
|
|
18
|
+
@num_records_paged = nil
|
|
19
|
+
@uri = nil
|
|
33
20
|
|
|
34
21
|
raise_error unless success?
|
|
35
22
|
|
|
36
|
-
|
|
37
|
-
@model = T.let(@request.model.new(body_copy), DearInventory::Model)
|
|
23
|
+
@model = @request.model.new(body)
|
|
38
24
|
assign_values
|
|
39
25
|
end
|
|
40
|
-
# rubocop:enable Metrics/AbcSize
|
|
41
26
|
# rubocop:enable Metrics/MethodLength
|
|
42
27
|
|
|
43
|
-
sig { returns(T::Array[Symbol]) }
|
|
44
28
|
def fields
|
|
45
29
|
@fields ||= begin
|
|
46
30
|
values = @request.model.const_get(:FIELDS).values.map do |field|
|
|
@@ -51,32 +35,27 @@ module DearInventory
|
|
|
51
35
|
end
|
|
52
36
|
end
|
|
53
37
|
|
|
54
|
-
sig { returns(T.nilable(String)) }
|
|
55
38
|
def error
|
|
56
39
|
if body.respond_to?(:fetch)
|
|
57
|
-
body_copy =
|
|
40
|
+
body_copy = body
|
|
58
41
|
return body_copy.fetch("Exception", nil)
|
|
59
42
|
end
|
|
60
43
|
|
|
61
|
-
|
|
44
|
+
body
|
|
62
45
|
end
|
|
63
46
|
|
|
64
|
-
sig { returns(T::Hash[Symbol, String]) }
|
|
65
47
|
def headers
|
|
66
48
|
@response.headers
|
|
67
49
|
end
|
|
68
50
|
|
|
69
|
-
sig { returns(Integer) }
|
|
70
51
|
def http_status
|
|
71
52
|
@http_status ||= @response.status.code
|
|
72
53
|
end
|
|
73
54
|
|
|
74
|
-
sig { returns(T::Boolean) }
|
|
75
55
|
def paginated?
|
|
76
56
|
@model.respond_to?(:page)
|
|
77
57
|
end
|
|
78
58
|
|
|
79
|
-
sig { params(block: T.proc.params(arg0: DearInventory::Model).void).void }
|
|
80
59
|
def each(&block)
|
|
81
60
|
raise_not_paginated unless paginated?
|
|
82
61
|
|
|
@@ -89,51 +68,44 @@ module DearInventory
|
|
|
89
68
|
end
|
|
90
69
|
end
|
|
91
70
|
|
|
92
|
-
sig { returns(DearInventory::Response) }
|
|
93
71
|
def next_page
|
|
94
72
|
raise_not_paginated unless paginated?
|
|
95
73
|
raise DearInventory::NoMorePagesError unless next_page?
|
|
96
74
|
|
|
97
75
|
request = @request.dup
|
|
98
|
-
|
|
76
|
+
request.params.page = @model.page + 1
|
|
99
77
|
|
|
100
78
|
DearInventory::Request.(request, num_previous_records: num_records_paged)
|
|
101
79
|
end
|
|
102
80
|
|
|
103
|
-
sig { returns(T::Boolean) }
|
|
104
81
|
def next_page?
|
|
105
82
|
raise_not_paginated unless paginated?
|
|
106
83
|
|
|
107
|
-
num_records_paged <
|
|
84
|
+
num_records_paged < total
|
|
108
85
|
end
|
|
109
86
|
|
|
110
|
-
sig { returns(Integer) }
|
|
111
87
|
def num_records_paged
|
|
112
88
|
@num_records_paged ||= begin
|
|
113
89
|
raise_not_paginated unless paginated?
|
|
114
90
|
|
|
115
|
-
@num_previous_records +
|
|
91
|
+
@num_previous_records + records.count
|
|
116
92
|
end
|
|
117
93
|
end
|
|
118
94
|
|
|
119
|
-
sig { void }
|
|
120
95
|
def raise_not_paginated
|
|
121
|
-
raise DearInventory::NotPaginatedError.new(uri
|
|
96
|
+
raise DearInventory::NotPaginatedError.new(uri)
|
|
122
97
|
end
|
|
123
98
|
|
|
124
|
-
sig { returns(T::Boolean) }
|
|
125
99
|
def success?
|
|
126
100
|
http_status == 200
|
|
127
101
|
end
|
|
128
102
|
|
|
129
|
-
sig { returns(String) }
|
|
130
103
|
def uri
|
|
131
104
|
@uri ||= @response.uri.to_s
|
|
132
105
|
end
|
|
133
106
|
|
|
134
|
-
|
|
107
|
+
private
|
|
135
108
|
|
|
136
|
-
sig { returns(T.any(T::Hash[String, T.untyped], String)) }
|
|
137
109
|
def body
|
|
138
110
|
string_body = @response.body.to_s
|
|
139
111
|
parsed_body = JSON.parse(string_body)
|
|
@@ -147,59 +119,39 @@ module DearInventory
|
|
|
147
119
|
string_body
|
|
148
120
|
end
|
|
149
121
|
|
|
150
|
-
private
|
|
151
|
-
|
|
152
|
-
sig { void }
|
|
153
122
|
def assign_values
|
|
154
123
|
fields.each { |field| define_alias_method(field) }
|
|
155
124
|
end
|
|
156
125
|
|
|
157
|
-
sig { params(method_name: Symbol).void }
|
|
158
126
|
def define_alias_method(method_name)
|
|
159
127
|
define_singleton_method(method_name) do
|
|
160
128
|
@model.public_send(method_name)
|
|
161
129
|
end
|
|
162
130
|
end
|
|
163
131
|
|
|
164
|
-
API_LIMIT_ERROR =
|
|
165
|
-
|
|
166
|
-
)
|
|
167
|
-
|
|
168
|
-
# rubocop:disable Metrics/AbcSize
|
|
169
|
-
sig { returns(DearInventory::Error) }
|
|
132
|
+
API_LIMIT_ERROR = "You have reached 60 calls per 60 seconds API limit."
|
|
133
|
+
private_constant :API_LIMIT_ERROR
|
|
170
134
|
def raise_error
|
|
171
|
-
if http_status == 400
|
|
172
|
-
raise T.unsafe(DearInventory::BadRequestError).new(error, self)
|
|
173
|
-
end
|
|
135
|
+
raise DearInventory::BadRequestError.new(error, self) if http_status == 400
|
|
174
136
|
|
|
175
|
-
if http_status == 503 && error == API_LIMIT_ERROR
|
|
176
|
-
raise T.unsafe(DearInventory::APILimitError)
|
|
177
|
-
end
|
|
137
|
+
raise DearInventory::APILimitError if http_status == 503 && error == API_LIMIT_ERROR
|
|
178
138
|
|
|
179
|
-
raise
|
|
139
|
+
raise DearInventory::Error.
|
|
180
140
|
new("Unknown error (#{http_status}): #{error}")
|
|
181
141
|
end
|
|
182
|
-
# rubocop:enable Metrics/AbcSize
|
|
183
142
|
|
|
184
|
-
sig do
|
|
185
|
-
params(
|
|
186
|
-
response: DearInventory::Response,
|
|
187
|
-
block: T.proc.params(arg0: DearInventory::Model).void
|
|
188
|
-
).void
|
|
189
|
-
end
|
|
190
143
|
def iterate_over_records(response, block)
|
|
191
|
-
return if
|
|
144
|
+
return if response.records.nil?
|
|
192
145
|
|
|
193
|
-
|
|
146
|
+
response.records.each do |record|
|
|
194
147
|
record = record.full_record if load_full_record?
|
|
195
148
|
block.call(record)
|
|
196
149
|
end
|
|
197
150
|
end
|
|
198
151
|
|
|
199
|
-
sig { returns(T::Boolean) }
|
|
200
152
|
def load_full_record?
|
|
201
153
|
@load_full_record ||=
|
|
202
|
-
|
|
154
|
+
records.first.respond_to?(:full_record)
|
|
203
155
|
end
|
|
204
156
|
end
|
|
205
157
|
end
|
|
@@ -1,42 +1,27 @@
|
|
|
1
|
-
# typed: strict
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
module DearInventory
|
|
5
4
|
class TestResponse < Response
|
|
6
|
-
extend T::Sig
|
|
7
5
|
extend DearInventory::IsASubclass
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
attr_reader :request
|
|
11
|
-
sig { returns(HTTP::Response) }
|
|
12
|
-
attr_reader :response
|
|
7
|
+
attr_reader :request, :response
|
|
13
8
|
|
|
14
|
-
# rubocop:disable Metrics/AbcSize
|
|
15
|
-
sig do
|
|
16
|
-
params(
|
|
17
|
-
request: DearInventory::Models::TestRequest,
|
|
18
|
-
body: T.nilable(T::Hash[String, T.untyped]),
|
|
19
|
-
num_previous_records: Integer
|
|
20
|
-
).void
|
|
21
|
-
end
|
|
22
9
|
def initialize(request:, body:, num_previous_records: 0)
|
|
23
|
-
@request =
|
|
24
|
-
@num_previous_records =
|
|
10
|
+
@request = request
|
|
11
|
+
@num_previous_records = num_previous_records
|
|
25
12
|
|
|
26
|
-
@fields =
|
|
27
|
-
@http_status =
|
|
28
|
-
@load_full_record =
|
|
29
|
-
@num_records_paged =
|
|
30
|
-
@uri =
|
|
13
|
+
@fields = nil
|
|
14
|
+
@http_status = nil
|
|
15
|
+
@load_full_record = nil
|
|
16
|
+
@num_records_paged = nil
|
|
17
|
+
@uri = nil
|
|
31
18
|
|
|
32
19
|
raise_error unless success?
|
|
33
20
|
|
|
34
|
-
@model =
|
|
21
|
+
@model = @request.model.new(body)
|
|
35
22
|
assign_values
|
|
36
23
|
end
|
|
37
|
-
# rubocop:enable Metrics/AbcSize
|
|
38
24
|
|
|
39
|
-
sig { returns(Integer) }
|
|
40
25
|
def http_status
|
|
41
26
|
200
|
|
42
27
|
end
|
|
@@ -1,59 +1,31 @@
|
|
|
1
|
-
# typed: strict
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
module DearInventory
|
|
5
4
|
class Validator
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
DEFAULT_OPTIONS = T.let(
|
|
12
|
-
{
|
|
13
|
-
limit: nil,
|
|
14
|
-
max_length: nil,
|
|
15
|
-
values: nil,
|
|
16
|
-
}.freeze,
|
|
17
|
-
T::Hash[Symbol, T.nilable(T.any(Integer, T::Array[String]))]
|
|
18
|
-
)
|
|
5
|
+
DEFAULT_OPTIONS = {
|
|
6
|
+
limit: nil,
|
|
7
|
+
max_length: nil,
|
|
8
|
+
values: nil,
|
|
9
|
+
}.freeze
|
|
19
10
|
private_constant :DEFAULT_OPTIONS
|
|
20
11
|
|
|
21
|
-
sig do
|
|
22
|
-
params(
|
|
23
|
-
field_name: Symbol,
|
|
24
|
-
value: T.nilable(T.any(Date, Numeric, String, T::Boolean, Time)),
|
|
25
|
-
options: T::Hash[Symbol, T.untyped]
|
|
26
|
-
).void
|
|
27
|
-
end
|
|
28
12
|
def self.call(field_name, value, options: DEFAULT_OPTIONS)
|
|
29
13
|
new(field_name, value, options: options).call
|
|
30
14
|
end
|
|
31
15
|
|
|
32
|
-
sig do
|
|
33
|
-
params(
|
|
34
|
-
field_name: Symbol,
|
|
35
|
-
value: T.nilable(T.any(Date, Numeric, String, T::Boolean, Time)),
|
|
36
|
-
options: T::Hash[Symbol, T.untyped]
|
|
37
|
-
).void
|
|
38
|
-
end
|
|
39
16
|
def initialize(field_name, value, options: DEFAULT_OPTIONS)
|
|
40
|
-
@field_name =
|
|
41
|
-
@value =
|
|
42
|
-
T.let(value, T.nilable(T.any(Date, Numeric, String, T::Boolean, Time)))
|
|
17
|
+
@field_name = field_name
|
|
18
|
+
@value = value
|
|
43
19
|
|
|
44
|
-
@limit =
|
|
45
|
-
@max_length =
|
|
46
|
-
@values =
|
|
20
|
+
@limit = options[:limit]
|
|
21
|
+
@max_length = options[:limit]
|
|
22
|
+
@values = options[:values]
|
|
47
23
|
end
|
|
48
24
|
|
|
49
25
|
private
|
|
50
26
|
|
|
51
|
-
sig { abstract.void }
|
|
52
27
|
def call; end
|
|
53
28
|
|
|
54
|
-
protected
|
|
55
|
-
|
|
56
|
-
sig { params(message: String).void }
|
|
57
29
|
def raise_error(message)
|
|
58
30
|
raise ValidationError, "#{@field_name} is invalid, #{message}"
|
|
59
31
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DearInventory
|
|
4
|
+
module Validators
|
|
5
|
+
class Array < DearInventory::Validator
|
|
6
|
+
def call
|
|
7
|
+
value = instance_variable_get(:@value)
|
|
8
|
+
return if value.nil?
|
|
9
|
+
return if value.is_a?(::Array)
|
|
10
|
+
|
|
11
|
+
raise_error("expected an Array but received #{value.inspect}")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
# typed: strict
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
module DearInventory
|
|
5
4
|
module Validators
|
|
6
5
|
class Boolean < DearInventory::Validator
|
|
7
|
-
extend T::Sig
|
|
8
|
-
|
|
9
|
-
sig { override.void }
|
|
10
6
|
def call
|
|
11
7
|
value = instance_variable_get(:@value)
|
|
12
8
|
return if [true, false, nil].include?(value)
|
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
# typed: strict
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
module DearInventory
|
|
5
4
|
module Validators
|
|
6
5
|
class Enum < DearInventory::Validator
|
|
7
|
-
extend T::Sig
|
|
8
|
-
|
|
9
|
-
sig { override.void }
|
|
10
6
|
def call
|
|
11
7
|
value = instance_variable_get(:@value)
|
|
12
8
|
return if value.nil?
|
|
13
|
-
return if
|
|
9
|
+
return if @values.include?(value)
|
|
14
10
|
|
|
15
11
|
raise_error(
|
|
16
12
|
"expected one of " \
|
|
17
|
-
"#{
|
|
13
|
+
"#{@values.map(&:inspect).join(", ")} " \
|
|
18
14
|
"but received #{value.inspect}"
|
|
19
15
|
)
|
|
20
16
|
end
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
# typed: strict
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
module DearInventory
|
|
5
4
|
module Validators
|
|
6
5
|
class Guid < DearInventory::Validator
|
|
7
|
-
|
|
6
|
+
REGEX = [
|
|
7
|
+
/\A[\da-f]{32}\z/i,
|
|
8
|
+
/\A(urn:uuid:)?[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}\z/i,
|
|
9
|
+
].freeze
|
|
8
10
|
|
|
9
|
-
REGEX = T.let(
|
|
10
|
-
[
|
|
11
|
-
/\A[\da-f]{32}\z/i,
|
|
12
|
-
/\A(urn:uuid:)?[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}\z/i,
|
|
13
|
-
].freeze,
|
|
14
|
-
T::Array[Regexp]
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
sig { override.void }
|
|
18
11
|
def call
|
|
19
12
|
value = instance_variable_get(:@value)
|
|
20
13
|
return if value.nil?
|
data/lib/dear_inventory.rb
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
# typed: strong
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
require "http"
|
|
5
|
-
require "sorbet-runtime"
|
|
6
4
|
|
|
7
5
|
require "dear_inventory/config"
|
|
8
6
|
require "dear_inventory/environment"
|
|
@@ -91,6 +89,7 @@ require "dear_inventory/models/request"
|
|
|
91
89
|
require "dear_inventory/models/test_request"
|
|
92
90
|
|
|
93
91
|
require "dear_inventory/validator"
|
|
92
|
+
require "dear_inventory/validators/array"
|
|
94
93
|
require "dear_inventory/validators/boolean"
|
|
95
94
|
require "dear_inventory/validators/enum"
|
|
96
95
|
require "dear_inventory/validators/guid"
|
|
@@ -101,7 +100,10 @@ require "dear_inventory/validators/time"
|
|
|
101
100
|
|
|
102
101
|
require "dear_inventory/parameters"
|
|
103
102
|
require "dear_inventory/parameters/advanced_purchase/show"
|
|
103
|
+
require "dear_inventory/parameters/customer/create"
|
|
104
104
|
require "dear_inventory/parameters/customer/index"
|
|
105
|
+
require "dear_inventory/parameters/customer/show"
|
|
106
|
+
require "dear_inventory/parameters/customer/update"
|
|
105
107
|
require "dear_inventory/parameters/product/index"
|
|
106
108
|
require "dear_inventory/parameters/product_availability/index"
|
|
107
109
|
require "dear_inventory/parameters/purchase/index"
|
|
@@ -124,21 +126,13 @@ require "dear_inventory/test_response"
|
|
|
124
126
|
require "dear_inventory/version"
|
|
125
127
|
|
|
126
128
|
module DearInventory
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
@config = T.let(Config.new, Config)
|
|
129
|
+
@config = Config.new
|
|
130
130
|
|
|
131
131
|
class << self
|
|
132
|
-
extend T::Sig
|
|
133
|
-
|
|
134
|
-
sig { returns(Config) }
|
|
135
132
|
attr_reader :config
|
|
136
133
|
|
|
137
|
-
|
|
138
|
-
sig { params(block: T.proc.params(config: Config).void).void }
|
|
139
|
-
def configure(&block)
|
|
134
|
+
def configure(&)
|
|
140
135
|
yield config
|
|
141
136
|
end
|
|
142
|
-
# rubocop:enable Lint/UnusedMethodArgument
|
|
143
137
|
end
|
|
144
138
|
end
|