shoptet 0.0.33 → 0.0.37
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/lib/shoptet/api_enumerator.rb +8 -6
- data/lib/shoptet/request.rb +32 -1
- data/lib/shoptet.rb +64 -8
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95d1592f4fec8741cbcc9c8f728175491063e4af6a368c33c740ca1e0e0e961a
|
4
|
+
data.tar.gz: 4aae99fcda2bc56f57deb59eac7a03a7e70fac9a136f81c25ec4f07b95ca6f9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db8d129f920634adf10e57b517c43f386d649194833520ffd3dd19f8b77425f3bf685dba79a0de71f615cfe6b2046456e5e6315f9ffc173646c3e00dcb9fab28
|
7
|
+
data.tar.gz: 8afdd7ef530e7ee1c168aef4dfd5fa5c16faa1c37b91fd597edcc753e832b8a9b7f2155c1edbd6f071d573ec4622edca5cd377859ea8440afd3b39b9859e031c
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Shoptet
|
2
4
|
class ApiEnumerator < SimpleDelegator
|
3
5
|
def initialize base_url, filters, data_key, api
|
@@ -10,10 +12,10 @@ class Shoptet
|
|
10
12
|
first_page.dig('data', @data_key).each { y.yield _1 }
|
11
13
|
|
12
14
|
if total_pages > 1
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
(2..(total_pages - 1)).each do |page|
|
16
|
+
@api.get(base_url, filters.merge(page: page))
|
17
|
+
.dig('data', @data_key)
|
18
|
+
.each { y.yield _1 }
|
17
19
|
end
|
18
20
|
|
19
21
|
last_page.dig('data', @data_key).each { y.yield _1 }
|
@@ -24,13 +26,13 @@ class Shoptet
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def first_page
|
27
|
-
@first_page ||= @api.
|
29
|
+
@first_page ||= @api.get(@base_url, @filters)
|
28
30
|
end
|
29
31
|
|
30
32
|
def last_page
|
31
33
|
return first_page if total_pages < 2
|
32
34
|
|
33
|
-
@last_page ||= @api.
|
35
|
+
@last_page ||= @api.get(@base_url, @filters.merge(page: total_pages))
|
34
36
|
end
|
35
37
|
|
36
38
|
def total_pages
|
data/lib/shoptet/request.rb
CHANGED
@@ -27,7 +27,7 @@ class Shoptet
|
|
27
27
|
parsed_body
|
28
28
|
end
|
29
29
|
|
30
|
-
def self.post
|
30
|
+
def self.post(url, body)
|
31
31
|
request = Net::HTTP::Post.new(url)
|
32
32
|
request.set_form_data(body)
|
33
33
|
|
@@ -35,6 +35,37 @@ class Shoptet
|
|
35
35
|
handle_net_timeouts { http.request(request) }
|
36
36
|
end
|
37
37
|
|
38
|
+
JSON.parse(response.body)
|
39
|
+
rescue JSON::ParseError => e
|
40
|
+
message = "Original message: #{e.message}, response body: #{response.body}"
|
41
|
+
fail Shoptet::NonJSONResponse.new(message)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.post_binary(url, body, headers)
|
45
|
+
request = Net::HTTP::Post.new(url)
|
46
|
+
request.body = body
|
47
|
+
request.content_type = 'appliaction/octet-stream'
|
48
|
+
headers.each do |key, value|
|
49
|
+
request[key] = value
|
50
|
+
end
|
51
|
+
|
52
|
+
response = Net::HTTP.start(url.host, url.port, use_ssl: true) do |http|
|
53
|
+
handle_net_timeouts { http.request(request) }
|
54
|
+
end
|
55
|
+
|
56
|
+
JSON.parse(response.body)
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.delete(url, headers)
|
60
|
+
request = Net::HTTP::Delete.new(url)
|
61
|
+
headers.each do |key, value|
|
62
|
+
request[key] = value
|
63
|
+
end
|
64
|
+
|
65
|
+
response = Net::HTTP.start(url.host, url.port, use_ssl: true) do |http|
|
66
|
+
handle_net_timeouts { http.request(request) }
|
67
|
+
end
|
68
|
+
|
38
69
|
JSON.parse(response.body)
|
39
70
|
end
|
40
71
|
|
data/lib/shoptet.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'delegate'
|
2
4
|
require_relative 'shoptet/request'
|
3
5
|
require_relative 'shoptet/api_enumerator'
|
@@ -13,6 +15,7 @@ class Shoptet
|
|
13
15
|
class ProductNotFound < StandardError; end
|
14
16
|
class SystemMaintenance < StandardError; end
|
15
17
|
class UnknownError < StandardError; end
|
18
|
+
class NonJSONResponse < StandardError; end
|
16
19
|
|
17
20
|
EXPIRED_TOKEN_CODE = 'expired-token'
|
18
21
|
INVALID_TOKEN_CODE = 'invalid-token'
|
@@ -23,7 +26,7 @@ class Shoptet
|
|
23
26
|
end
|
24
27
|
|
25
28
|
def self.version
|
26
|
-
'0.0.
|
29
|
+
'0.0.37'
|
27
30
|
end
|
28
31
|
|
29
32
|
def self.ar_on_token_error(model)
|
@@ -111,12 +114,12 @@ class Shoptet
|
|
111
114
|
end
|
112
115
|
|
113
116
|
def shop_info api_params = {}
|
114
|
-
result =
|
117
|
+
result = get('https://api.myshoptet.com/api/eshop', api_params)
|
115
118
|
result['data']
|
116
119
|
end
|
117
120
|
|
118
121
|
def design_info api_params = {}
|
119
|
-
result =
|
122
|
+
result = get('https://api.myshoptet.com/api/eshop/design', api_params)
|
120
123
|
|
121
124
|
result['data']
|
122
125
|
end
|
@@ -163,17 +166,32 @@ class Shoptet
|
|
163
166
|
end
|
164
167
|
|
165
168
|
def order code, api_params = {}
|
166
|
-
result =
|
169
|
+
result = get("https://api.myshoptet.com/api/orders/#{code}", api_params)
|
167
170
|
result.dig('data', 'order')
|
168
171
|
end
|
169
172
|
|
170
173
|
def product guid, api_params = {}
|
171
|
-
result =
|
174
|
+
result = get("https://api.myshoptet.com/api/products/#{guid}", api_params)
|
172
175
|
result['data']
|
173
176
|
end
|
174
177
|
|
175
178
|
def product_by_code code, api_params = {}
|
176
|
-
result =
|
179
|
+
result = get("https://api.myshoptet.com/api/products/code/#{code}", api_params)
|
180
|
+
result['data']
|
181
|
+
end
|
182
|
+
|
183
|
+
def template_includes
|
184
|
+
result = get('https://api.myshoptet.com/api/template-include')
|
185
|
+
result['data']
|
186
|
+
end
|
187
|
+
|
188
|
+
def set_templates(data)
|
189
|
+
result = post_binary('https://api.myshoptet.com/api/template-include', data)
|
190
|
+
result['data']
|
191
|
+
end
|
192
|
+
|
193
|
+
def delete_template(location)
|
194
|
+
result = delete("https://api.myshoptet.com/api/template-include/#{location}")
|
177
195
|
result['data']
|
178
196
|
end
|
179
197
|
|
@@ -186,7 +204,7 @@ class Shoptet
|
|
186
204
|
result.fetch('access_token')
|
187
205
|
end
|
188
206
|
|
189
|
-
def
|
207
|
+
def get(url, api_params = {}, retry_on_token_error = true)
|
190
208
|
url = URI(url)
|
191
209
|
url.query = URI.encode_www_form(api_params) if api_params.any?
|
192
210
|
|
@@ -199,7 +217,45 @@ class Shoptet
|
|
199
217
|
if token_errors.any?
|
200
218
|
if retry_on_token_error
|
201
219
|
@on_token_error.call(self)
|
202
|
-
|
220
|
+
get(url, api_params, false)
|
221
|
+
else
|
222
|
+
raise Error.new(result)
|
223
|
+
end
|
224
|
+
else
|
225
|
+
result
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def post_binary(url, data, retry_on_token_error = true)
|
230
|
+
url = URI(url)
|
231
|
+
headers = { 'Shoptet-Access-Token' => @api_token,
|
232
|
+
'Content-Type' => 'application/vnd.shoptet.v1.0' }
|
233
|
+
result = Shoptet::Request.post_binary(url, data, headers)
|
234
|
+
token_errors = handle_errors(result)
|
235
|
+
|
236
|
+
if token_errors.any?
|
237
|
+
if retry_on_token_error
|
238
|
+
@on_token_error.call(self)
|
239
|
+
post_binary(url, data, false)
|
240
|
+
else
|
241
|
+
raise Error.new(result)
|
242
|
+
end
|
243
|
+
else
|
244
|
+
result
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def delete(url, retry_on_token_error = true)
|
249
|
+
url = URI(url)
|
250
|
+
headers = { 'Shoptet-Access-Token' => @api_token,
|
251
|
+
'Content-Type' => 'application/vnd.shoptet.v1.0' }
|
252
|
+
result = Shoptet::Request.delete(url, headers)
|
253
|
+
token_errors = handle_errors(result)
|
254
|
+
|
255
|
+
if token_errors.any?
|
256
|
+
if retry_on_token_error
|
257
|
+
@on_token_error.call(self)
|
258
|
+
delete(url, false)
|
203
259
|
else
|
204
260
|
raise Error.new(result)
|
205
261
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoptet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.37
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Premysl Donat
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: irb
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
- !ruby/object:Gem::Version
|
65
65
|
version: '0'
|
66
66
|
requirements: []
|
67
|
-
rubygems_version: 3.2.
|
67
|
+
rubygems_version: 3.2.21
|
68
68
|
signing_key:
|
69
69
|
specification_version: 4
|
70
70
|
summary: API wrapper for interacting with Shoptet api
|