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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/shoptet.rb +62 -30
  3. data/lib/shoptet/request.rb +9 -0
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8facc56cfe2afc649cbad1f5094830d94d83f1f8d3d564e8886f17efe1b5bc87
4
- data.tar.gz: 82c8517d218cc6182c54620e1161428d992a43e70364c23438fb0970bf303a6f
3
+ metadata.gz: 020dcc94bd92d287243ac40e3bf854a9f0e5f4c32670fe221aa7af1a6b785e39
4
+ data.tar.gz: 5d3701df86ba602c16e626b7f703b01c733ef6878a3cfa862217c17cad19890e
5
5
  SHA512:
6
- metadata.gz: 3ff366765e02c7fe423368d0afa62bda693811c96f4f681b490161274228d39e0713cca821d4d49768c17e5f7de51e80a291bad2473e5087ff3bf4f22ccf872b
7
- data.tar.gz: c74cda5f867dd363950b031cd4995fdf9585b843e8f66b11bdd7ec4f5e8e3f728e8340d7cebf796756133b05b3b3678716994692a46b169454e680b8a357f516
6
+ metadata.gz: b060e7a30c1cd96da7f7978231f40648b6a738154a33b0c6b5d8be538edd7e0f2dbfaa29490a16e979337244e9bd432b69e2a0cb3cc604a36d4354ba6c20e3a1
7
+ data.tar.gz: '0599e14ba6550168b2b02b31a8b25cb1452d244e27acb358d7a858473033c6992e0dec4a4cf28cf04d46d6c83c82ee4e06d54a0d00e7a2dc1e4afdda06827cb1'
@@ -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.7'
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'] || []
@@ -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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoptet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Premysl Donat