graphiti 1.2.42 → 1.2.43

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: a282326a13780606dc7c66a393aecb4815e8230d166c21e522e4f64566fb7abe
4
- data.tar.gz: efc784934b7091bba5839fe20c5052a5ee00198bc9a008f1330ab373ff26e965
3
+ metadata.gz: 6020ab7e3340dafb7ddad630e79456d6e50b581aaa3cd455069ad5a25860fbb5
4
+ data.tar.gz: da8286216aab03780ec61427289aa6fecfb82c6dc2ff374de5cbb4bd223ddbcd
5
5
  SHA512:
6
- metadata.gz: 396020335f1edb7b9a733cceaebecd3213e065567d83ca9c1380198967622a64927e3e9564715f4d3d76619a631005c87535fce7d094600a1d9d1b5cfd0cf42f
7
- data.tar.gz: 64058843e61f8b50f5dfa44ed9835f73012ef6bb5c2c29b2c668d20b213571b59503c790c5ba62044f2300b8f0c3f49fd7159618e0ddc9280b12aee5236bf113
6
+ metadata.gz: 5c6dc240dbad87f9900412ac9afdfa32a20963e79827fcdb4bba94c2f7cac159057e80410f797da42b243dbca14d3753a60a6bfb7df404b16b01d8bad2c3c1d6
7
+ data.tar.gz: f12629255a14d042b311101110a47fbfe4a099a618e40c2af020f33b08d50bf00741d7f78c81cea0031748828774871d0d954be79a7f6c681a33bae33729f166
@@ -244,14 +244,15 @@ module Graphiti
244
244
  # @param scope The scope object we are chaining
245
245
  # @param [Integer] current_page The current page number
246
246
  # @param [Integer] per_page The number of results per page
247
+ # @param [Integer] offset The offset to start from
247
248
  # @return the scope
248
249
  #
249
250
  # @example ActiveRecord default
250
251
  # # via kaminari gem
251
- # def paginate(scope, current_page, per_page)
252
+ # def paginate(scope, current_page, per_page, offset)
252
253
  # scope.page(current_page).per(per_page)
253
254
  # end
254
- def paginate(scope, current_page, per_page)
255
+ def paginate(scope, current_page, per_page, offset)
255
256
  raise "you must override #paginate in an adapter subclass"
256
257
  end
257
258
 
@@ -184,8 +184,11 @@ module Graphiti
184
184
  end
185
185
 
186
186
  # (see Adapters::Abstract#paginate)
187
- def paginate(scope, current_page, per_page)
188
- scope.page(current_page).per(per_page)
187
+ def paginate(scope, current_page, per_page, offset)
188
+ scope = scope.page(current_page) if current_page
189
+ scope = scope.per(per_page) if per_page
190
+ scope = scope.padding(offset) if offset
191
+ scope
189
192
  end
190
193
 
191
194
  # (see Adapters::Abstract#count)
@@ -178,7 +178,7 @@ module Graphiti
178
178
  end
179
179
 
180
180
  # (see Adapters::Abstract#paginate)
181
- def paginate(scope, current_page, per_page)
181
+ def paginate(scope, current_page, per_page, offset)
182
182
  scope
183
183
  end
184
184
 
@@ -30,13 +30,14 @@ module Graphiti
30
30
 
31
31
  uri = URI(@proxy.resource.endpoint[:url].to_s)
32
32
 
33
+ page_params = {
34
+ number: page,
35
+ size: page_size
36
+ }
37
+ page_params[:offset] = offset if offset
38
+
33
39
  # Overwrite the pagination query params with the desired page
34
- uri.query = pagination_params.merge({
35
- page: {
36
- number: page,
37
- size: page_size
38
- }
39
- }).to_query
40
+ uri.query = pagination_params.merge(page: page_params).to_query
40
41
  uri.to_s
41
42
  end
42
43
 
@@ -46,8 +47,11 @@ module Graphiti
46
47
  elsif page_size == 0 || item_count == 0
47
48
  return nil
48
49
  end
49
- @last_page = (item_count / page_size)
50
- @last_page += 1 if item_count % page_size > 0
50
+
51
+ count = item_count
52
+ count = item_count - offset if offset
53
+ @last_page = (count / page_size)
54
+ @last_page += 1 if count % page_size > 0
51
55
  @last_page
52
56
  end
53
57
 
@@ -82,6 +86,14 @@ module Graphiti
82
86
  @current_page ||= (page_param[:number] || 1).to_i
83
87
  end
84
88
 
89
+ def offset
90
+ @offset ||= begin
91
+ if (value = page_param[:offset])
92
+ value.to_i
93
+ end
94
+ end
95
+ end
96
+
85
97
  def page_size
86
98
  @page_size ||= (page_param[:size] ||
87
99
  @proxy.resource.default_page_size ||
@@ -32,10 +32,10 @@ module Graphiti
32
32
  end
33
33
 
34
34
  def pagination_links?
35
- if Graphiti.config.pagination_links_on_demand
36
- [true, "true"].include?(@params[:pagination_links])
37
- elsif action == :find
35
+ if action == :find
38
36
  false
37
+ elsif Graphiti.config.pagination_links_on_demand
38
+ [true, "true"].include?(@params[:pagination_links])
39
39
  else
40
40
  Graphiti.config.pagination_links
41
41
  end
@@ -195,7 +195,7 @@ module Graphiti
195
195
  end
196
196
  elsif nested?(name)
197
197
  hash[name.to_s.split(".").last.to_sym] = value
198
- elsif top_level? && [:number, :size].include?(name.to_sym)
198
+ elsif top_level? && [:number, :size, :offset].include?(name.to_sym)
199
199
  hash[name.to_sym] = value.to_i
200
200
  end
201
201
  end
@@ -171,14 +171,18 @@ module Graphiti
171
171
  type = Graphiti::Types[filter[:type]]
172
172
  array_or_string = [:string, :array].include?(type[:canonical_name])
173
173
  if (arr = value.scan(/\[.*?\]/)).present? && array_or_string
174
- value = arr.map { |json|
175
- begin
176
- JSON.parse(json)
177
- rescue
178
- raise Errors::InvalidJSONArray.new(resource, value)
179
- end
180
- }
181
- value = value[0] if value.length == 1
174
+ begin
175
+ value = arr.map { |json|
176
+ begin
177
+ JSON.parse(json)
178
+ rescue
179
+ raise Errors::InvalidJSONArray.new(resource, value)
180
+ end
181
+ }
182
+ value = value[0] if value.length == 1
183
+ rescue Errors::InvalidJSONArray => e
184
+ raise(e) if type[:canonical_name] == :array
185
+ end
182
186
  else
183
187
  value = parse_string_arrays(value, !!filter[:single])
184
188
  end
@@ -33,12 +33,24 @@ module Graphiti
33
33
 
34
34
  # Apply default pagination proc via the Resource adapter
35
35
  def apply_standard_scope
36
- resource.adapter.paginate(@scope, number, size)
36
+ arity = resource.adapter.method(:paginate)
37
+
38
+ if arity == 4 # backwards-compat
39
+ resource.adapter.paginate(@scope, number, size)
40
+ else
41
+ resource.adapter.paginate(@scope, number, size, offset)
42
+ end
37
43
  end
38
44
 
39
45
  # Apply the custom pagination proc
40
46
  def apply_custom_scope
41
- resource.instance_exec(@scope, number, size, resource.context, &custom_scope)
47
+ resource.instance_exec \
48
+ @scope,
49
+ number,
50
+ size,
51
+ resource.context,
52
+ offset,
53
+ &custom_scope
42
54
  end
43
55
 
44
56
  private
@@ -51,6 +63,12 @@ module Graphiti
51
63
  @page_param ||= (query_hash[:page] || {})
52
64
  end
53
65
 
66
+ def offset
67
+ if (value = page_param[:offset])
68
+ value.to_i
69
+ end
70
+ end
71
+
54
72
  def number
55
73
  (page_param[:number] || 1).to_i
56
74
  end
@@ -1,3 +1,3 @@
1
1
  module Graphiti
2
- VERSION = "1.2.42"
2
+ VERSION = "1.2.43"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphiti
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.42
4
+ version: 1.2.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-09 00:00:00.000000000 Z
11
+ date: 2021-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jsonapi-serializable