shoptet 0.0.7 → 0.0.8
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.rb +62 -30
- data/lib/shoptet/request.rb +9 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 020dcc94bd92d287243ac40e3bf854a9f0e5f4c32670fe221aa7af1a6b785e39
|
4
|
+
data.tar.gz: 5d3701df86ba602c16e626b7f703b01c733ef6878a3cfa862217c17cad19890e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b060e7a30c1cd96da7f7978231f40648b6a738154a33b0c6b5d8be538edd7e0f2dbfaa29490a16e979337244e9bd432b69e2a0cb3cc604a36d4354ba6c20e3a1
|
7
|
+
data.tar.gz: '0599e14ba6550168b2b02b31a8b25cb1452d244e27acb358d7a858473033c6992e0dec4a4cf28cf04d46d6c83c82ee4e06d54a0d00e7a2dc1e4afdda06827cb1'
|
data/lib/shoptet.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
require 'delegate'
|
1
2
|
require_relative 'shoptet/request'
|
2
3
|
|
3
4
|
class Shoptet
|
5
|
+
include Shoptet::UrlHelpers
|
6
|
+
|
4
7
|
class Error < StandardError; end
|
5
8
|
class AddonSuspended < StandardError; end
|
6
9
|
class AddonNotInstalled < StandardError; end
|
@@ -10,8 +13,60 @@ class Shoptet
|
|
10
13
|
api.api_token = api.new_api_token
|
11
14
|
end
|
12
15
|
|
16
|
+
class ApiEnumerator < SimpleDelegator
|
17
|
+
def initialize base_url, filters, data_key, api
|
18
|
+
@base_url = base_url
|
19
|
+
@filters = filters
|
20
|
+
@data_key = data_key || URI(base_url).path.split('/').last
|
21
|
+
@api = api
|
22
|
+
|
23
|
+
@enum = Enumerator.new do |y|
|
24
|
+
first_page.dig('data', @data_key).each { y.yield _1 }
|
25
|
+
|
26
|
+
if total_pages > 1
|
27
|
+
other_pages = 2..(total_pages - 1)
|
28
|
+
other_pages.each do |page|
|
29
|
+
uri = @api.assemble_uri base_url, filters.merge(page: page)
|
30
|
+
result = @api.request uri
|
31
|
+
result.dig('data', @data_key).each { y.yield _1 }
|
32
|
+
end
|
33
|
+
|
34
|
+
last_page.dig('data', @data_key).each { y.yield _1 }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
super @enum
|
39
|
+
end
|
40
|
+
|
41
|
+
def first_page
|
42
|
+
@first_page ||=
|
43
|
+
begin
|
44
|
+
uri = @api.assemble_uri @base_url, @filters
|
45
|
+
@api.request uri
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def total_pages
|
50
|
+
first_page.dig('data', 'paginator', 'pageCount') || 0
|
51
|
+
end
|
52
|
+
|
53
|
+
def last_page
|
54
|
+
return first_page if total_pages < 2
|
55
|
+
|
56
|
+
@last_page ||=
|
57
|
+
begin
|
58
|
+
uri = @api.assemble_uri @base_url, @filters.merge(page: total_pages)
|
59
|
+
@api.request uri
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def size
|
64
|
+
first_page['data']['paginator']['totalCount']
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
13
68
|
def self.version
|
14
|
-
'0.0.
|
69
|
+
'0.0.8'
|
15
70
|
end
|
16
71
|
|
17
72
|
def self.ar_on_token_error(model)
|
@@ -161,35 +216,6 @@ class Shoptet
|
|
161
216
|
result.fetch 'access_token'
|
162
217
|
end
|
163
218
|
|
164
|
-
private
|
165
|
-
|
166
|
-
def assemble_uri base, params = {}
|
167
|
-
u = URI(base)
|
168
|
-
u.query = URI.encode_www_form(params) if params.any?
|
169
|
-
|
170
|
-
u.to_s
|
171
|
-
end
|
172
|
-
|
173
|
-
def enumerize base_uri, filters = {}, data_key = nil
|
174
|
-
data_key ||= URI(base_uri).path.split('/').last
|
175
|
-
uri = assemble_uri base_uri, filters
|
176
|
-
size_proc = -> () { request(uri)['data']['paginator']['totalCount'] }
|
177
|
-
|
178
|
-
Enumerator.new(size_proc) do |y|
|
179
|
-
first_page = request uri
|
180
|
-
total_pages = first_page.dig('data', 'paginator', 'pageCount') || 0
|
181
|
-
other_pages = 2..total_pages
|
182
|
-
|
183
|
-
first_page.dig('data', data_key).each { y.yield _1 }
|
184
|
-
|
185
|
-
other_pages.each do |page|
|
186
|
-
uri = assemble_uri base_uri, filters.merge(page: page)
|
187
|
-
result = request uri
|
188
|
-
result.dig('data', data_key).each { y.yield _1 }
|
189
|
-
end
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
219
|
def request uri, retry_on_token_error = true
|
194
220
|
headers = { 'Shoptet-Access-Token' => @api_token,
|
195
221
|
'Content-Type' => 'application/vnd.shoptet.v1.0' }
|
@@ -209,6 +235,12 @@ class Shoptet
|
|
209
235
|
end
|
210
236
|
end
|
211
237
|
|
238
|
+
private
|
239
|
+
|
240
|
+
def enumerize base_url, filters = {}, data_key = nil
|
241
|
+
ApiEnumerator.new base_url, filters, data_key, self
|
242
|
+
end
|
243
|
+
|
212
244
|
def handle_errors result, uri, headers
|
213
245
|
error = result['error']
|
214
246
|
errors = result['errors'] || []
|
data/lib/shoptet/request.rb
CHANGED
@@ -3,6 +3,15 @@ require 'net/http'
|
|
3
3
|
#TODO: keep_alive_timeout ?
|
4
4
|
|
5
5
|
class Shoptet
|
6
|
+
module UrlHelpers
|
7
|
+
def assemble_uri base, params = {}
|
8
|
+
u = URI(base)
|
9
|
+
u.query = URI.encode_www_form(params) if params.any?
|
10
|
+
|
11
|
+
u.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
6
15
|
class Request
|
7
16
|
def self.get uri, headers
|
8
17
|
attempt ||= 0
|