shoptet 0.0.49 → 0.0.51

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/shoptet/request.rb +34 -0
  3. data/lib/shoptet.rb +64 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f49b5ae15e0f0d8c3ace6ccb788b5bc73e2dd5095f2951b649ada0f55d5e822
4
- data.tar.gz: afbc757b3a4a8857824c6f382662c0f2bd90e5ad8d1043f4f5a5a471505f4dc3
3
+ metadata.gz: 67a5715203ee35a2805467665199d2145191ae320ff223ee4e3ce4b655094912
4
+ data.tar.gz: 210622cc133ea367c2204ae32d045275678515a7dbe653ce42650bf416143c52
5
5
  SHA512:
6
- metadata.gz: 95b7bfa8f9dc1d7d100353adfabe7dd39edd06a58d364688266ea745e4abe7148d60c2c91345e1988ab2832bcd66f1b47a0e0171835f6cda3ff51552c91b2e95
7
- data.tar.gz: eb6fc329d46d3f2b4e2f88b6b1a95e6584d858843414b176845e4e1e391409546ac1a591a59e38d579d3b61da9feb767bc68c4aaed4f76d672ae4e1912fc79b8
6
+ metadata.gz: 9fd716f2d14d1a7ba5444a9d5db67d3ad8fac4d29e8906e0c41cbfc1b98c6779ae4424041a6a46234298d516cceda674846a636b4a74160244189e12412b2487
7
+ data.tar.gz: 3a6625b639db24d653b477e6f16d735a84e8b3a2f0ddc73704af0cb1d09cdf564881d68a0ae7c5e54392311a16143142d829314529a896f28c8b12f8ff767e8c
@@ -56,6 +56,40 @@ class Shoptet
56
56
  JSON.parse(response.body)
57
57
  end
58
58
 
59
+ def self.post_json(url, body, headers)
60
+ request = Net::HTTP::Post.new(url)
61
+ request.body = body.to_json
62
+ headers.each do |key, value|
63
+ request[key] = value
64
+ end
65
+
66
+ response = Net::HTTP.start(url.host, url.port, use_ssl: true) do |http|
67
+ handle_connection_errors { http.request(request) }
68
+ end
69
+
70
+ JSON.parse(response.body)
71
+ rescue JSON::ParserError => e
72
+ message = "Original message: #{e.message}, response body: #{response.body}, code :#{response.code}, headers: #{response.to_hash.to_s}"
73
+ fail Shoptet::NonJSONResponse.new(message)
74
+ end
75
+
76
+ def self.patch(url, body, headers)
77
+ request = Net::HTTP::Patch.new(url)
78
+ request.body = body.to_json
79
+ headers.each do |key, value|
80
+ request[key] = value
81
+ end
82
+
83
+ response = Net::HTTP.start(url.host, url.port, use_ssl: true) do |http|
84
+ handle_connection_errors { http.request(request) }
85
+ end
86
+
87
+ JSON.parse(response.body)
88
+ rescue JSON::ParserError => e
89
+ message = "Original message: #{e.message}, response body: #{response.body}, code :#{response.code}, headers: #{response.to_hash.to_s}"
90
+ fail Shoptet::NonJSONResponse.new(message)
91
+ end
92
+
59
93
  def self.delete(url, headers)
60
94
  request = Net::HTTP::Delete.new(url)
61
95
  headers.each do |key, value|
data/lib/shoptet.rb CHANGED
@@ -28,7 +28,7 @@ class Shoptet
28
28
  end
29
29
 
30
30
  def self.version
31
- '0.0.49'
31
+ '0.0.51'
32
32
  end
33
33
 
34
34
  def self.ar_on_token_error(model)
@@ -205,10 +205,35 @@ class Shoptet
205
205
  result['data']['article']
206
206
  end
207
207
 
208
+ def update_article(id, api_params = {})
209
+ result = patch("https://api.myshoptet.com/api/articles/#{id}", api_params)
210
+ result['data']['article']
211
+ end
212
+
208
213
  def article_sections(api_params = {})
209
214
  enumerize("https://api.myshoptet.com/api/articles/sections", api_params)
210
215
  end
211
216
 
217
+ def register_webhook(event, url)
218
+ data = { data: [{ event: event, url: url }] }
219
+ result = post_json("https://api.myshoptet.com/api/webhooks", data)
220
+ result['data']['webhooks']
221
+ end
222
+
223
+ def snapshot_products(api_params = {})
224
+ result = get('https://api.myshoptet.com/api/products/snapshot', api_params)
225
+ result['data']
226
+ end
227
+
228
+ def job(id)
229
+ result = get("https://api.myshoptet.com/api/system/jobs/#{id}")
230
+ result['data']
231
+ end
232
+
233
+ def webhooks(api_params={})
234
+ enumerize("https://api.myshoptet.com/api/webhooks", api_params)
235
+ end
236
+
212
237
  def new_api_token
213
238
  headers = { 'Authorization' => "Bearer #{@oauth_token}" }
214
239
 
@@ -240,6 +265,44 @@ class Shoptet
240
265
  end
241
266
  end
242
267
 
268
+ def patch(url, data, retry_on_token_error = true)
269
+ url = URI(url)
270
+ headers = { 'Shoptet-Access-Token' => @api_token,
271
+ 'Content-Type' => 'application/vnd.shoptet.v1.0' }
272
+ result = Shoptet::Request.patch(url, data, headers)
273
+ token_errors = handle_errors(result)
274
+
275
+ if token_errors.any?
276
+ if retry_on_token_error
277
+ @on_token_error.call(self)
278
+ patch(url, data, false)
279
+ else
280
+ raise Error.new(result)
281
+ end
282
+ else
283
+ result
284
+ end
285
+ end
286
+
287
+ def post_json(url, data, retry_on_token_error = true)
288
+ url = URI(url)
289
+ headers = { 'Shoptet-Access-Token' => @api_token,
290
+ 'Content-Type' => 'application/vnd.shoptet.v1.0' }
291
+ result = Shoptet::Request.post_json(url, data, headers)
292
+ token_errors = handle_errors(result)
293
+
294
+ if token_errors.any?
295
+ if retry_on_token_error
296
+ @on_token_error.call(self)
297
+ patch(url, data, false)
298
+ else
299
+ raise Error.new(result)
300
+ end
301
+ else
302
+ result
303
+ end
304
+ end
305
+
243
306
  def post_binary(url, data, retry_on_token_error = true)
244
307
  url = URI(url)
245
308
  headers = { 'Shoptet-Access-Token' => @api_token,
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.49
4
+ version: 0.0.51
5
5
  platform: ruby
6
6
  authors:
7
7
  - Premysl Donat
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-26 00:00:00.000000000 Z
11
+ date: 2023-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: irb