shoptet 0.0.7 → 0.0.8

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.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