shoptet 0.0.33 → 0.0.37

Sign up to get free protection for your applications and to get access to all the features.
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