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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39a9609c9d76f20a78afdbb77a8d776804a3ac85f3a83c49296455ea51a001ff
4
- data.tar.gz: f7368c759f78aa2868e949869bbcc812a5416ccfbafb05b97ae8f7c2a2e6d51a
3
+ metadata.gz: 95d1592f4fec8741cbcc9c8f728175491063e4af6a368c33c740ca1e0e0e961a
4
+ data.tar.gz: 4aae99fcda2bc56f57deb59eac7a03a7e70fac9a136f81c25ec4f07b95ca6f9c
5
5
  SHA512:
6
- metadata.gz: 89c4a47b8458bde5dae9b1e1a0531b926618fa12d4614719775b5c1e01d38d091b2215d9d449fec9425b5124f3cf5355ccfd18bc22e25bac64066a00b66ed024
7
- data.tar.gz: 72641fd75d6533cff81902dc2573d7cfb7f15bf3bcc470050a5c3e750f74cae7b6bc1a71a057673b44f4a90f162804ca036f931f8f327799e7ada2ed978367ed
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
- other_pages = 2..(total_pages - 1)
14
- other_pages.each do |page|
15
- result = @api.request(base_url, filters.merge(page: page))
16
- result.dig('data', @data_key).each { y.yield _1 }
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.request(@base_url, @filters)
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.request(@base_url, @filters.merge(page: total_pages))
35
+ @last_page ||= @api.get(@base_url, @filters.merge(page: total_pages))
34
36
  end
35
37
 
36
38
  def total_pages
@@ -27,7 +27,7 @@ class Shoptet
27
27
  parsed_body
28
28
  end
29
29
 
30
- def self.post url, body
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.33'
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 = request('https://api.myshoptet.com/api/eshop', api_params)
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 = request('https://api.myshoptet.com/api/eshop/design', api_params)
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 = request("https://api.myshoptet.com/api/orders/#{code}", api_params)
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 = request("https://api.myshoptet.com/api/products/#{guid}", api_params)
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 = request("https://api.myshoptet.com/api/products/code/#{code}", api_params)
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 request url, api_params = {}, retry_on_token_error = true
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
- request(url, api_params, false)
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.33
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-05-29 00:00:00.000000000 Z
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.15
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