graphql-fragment_cache 1.17.0 → 1.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/.rbnext/2.3/graphql/fragment_cache/cache_key_builder.rb +12 -14
- data/lib/.rbnext/2.3/graphql/fragment_cache/memory_store.rb +2 -1
- data/lib/.rbnext/2.7/graphql/fragment_cache/cache_key_builder.rb +12 -14
- data/lib/graphql/fragment_cache/cache_key_builder.rb +12 -14
- data/lib/graphql/fragment_cache/cacher.rb +3 -3
- data/lib/graphql/fragment_cache/field_extension.rb +1 -1
- data/lib/graphql/fragment_cache/memory_store.rb +2 -1
- data/lib/graphql/fragment_cache/object_helpers.rb +3 -3
- data/lib/graphql/fragment_cache/schema/lazy_cache_resolver.rb +1 -1
- data/lib/graphql/fragment_cache/version.rb +1 -1
- data/lib/graphql/fragment_cache.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e48196795d709c0be05c78989abeb3cd3f185f6d0545d4fe3719861dabb4456
|
4
|
+
data.tar.gz: e9efc489b2e3dd907e16db7c63930d8d7251096287c369122401221a97890946
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ef9f0b47cf0c465c692d7624db882b99e746be3412345d2ce5e2b77a8c6754323fe7c784eea345b1a7b91cf07b0c2bec4fc737299f0c97fa3dce5fb5bde0797
|
7
|
+
data.tar.gz: e7024e141fd80a08d30eea830812297b82737c2204c024c4375aacdaff4524baebc44c62506a3df62b947142e57463d0adf714c1f4ff1b4b3ec4d58dee785a5a
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 1.18.0 (2022-12-28)
|
6
|
+
|
7
|
+
- [PR#94](https://github.com/DmitryTsepelev/graphql-ruby-fragment_cache/pull/94) Ruby 3 support ([@DmitryTsepelev][])
|
8
|
+
|
5
9
|
## 1.17.0 (2022-11-09)
|
6
10
|
|
7
11
|
- [PR#92](https://github.com/DmitryTsepelev/graphql-ruby-fragment_cache/pull/92) Make cache keys human-readable ([@jeromedalbert][])
|
@@ -128,7 +128,7 @@ module GraphQL
|
|
128
128
|
|
129
129
|
attr_reader :query, :path, :object, :schema
|
130
130
|
|
131
|
-
def initialize(object: nil,
|
131
|
+
def initialize(query:, path:, object: nil, **options)
|
132
132
|
@object = object
|
133
133
|
@query = query
|
134
134
|
@schema = query.schema
|
@@ -181,23 +181,21 @@ module GraphQL
|
|
181
181
|
end
|
182
182
|
|
183
183
|
def path_cache_key
|
184
|
-
@path_cache_key ||=
|
185
|
-
|
186
|
-
lookahead = query.lookahead
|
184
|
+
@path_cache_key ||= @options.fetch(:path_cache_key) do
|
185
|
+
lookahead = query.lookahead
|
187
186
|
|
188
|
-
|
189
|
-
|
190
|
-
|
187
|
+
path.map { |field_name|
|
188
|
+
# Handle cached fields inside collections:
|
189
|
+
next field_name if field_name.is_a?(Integer)
|
191
190
|
|
192
|
-
|
193
|
-
|
191
|
+
lookahead = lookahead.selection_with_alias(field_name)
|
192
|
+
raise "Failed to look ahead the field: #{field_name}" if lookahead.is_a?(::GraphQL::Execution::Lookahead::NullLookahead)
|
194
193
|
|
195
|
-
|
194
|
+
next lookahead.field.name if lookahead.arguments.empty?
|
196
195
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
end
|
196
|
+
args = lookahead.arguments.map { |_1, _2| "#{_1}:#{traverse_argument(_2)}" }.sort.join(",")
|
197
|
+
"#{lookahead.field.name}(#{args})"
|
198
|
+
}.join("/")
|
201
199
|
end
|
202
200
|
end
|
203
201
|
|
@@ -42,7 +42,8 @@ module GraphQL
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def write(key, value,
|
45
|
+
def write(key, value, options = {})
|
46
|
+
expires_in = options[:expires_in] || default_expires_in
|
46
47
|
key = key.to_s
|
47
48
|
@storage[key] = Entry.new(value: value, expires_at: expires_in ? Time.now + expires_in : nil)
|
48
49
|
end
|
@@ -128,7 +128,7 @@ module GraphQL
|
|
128
128
|
|
129
129
|
attr_reader :query, :path, :object, :schema
|
130
130
|
|
131
|
-
def initialize(object: nil,
|
131
|
+
def initialize(query:, path:, object: nil, **options)
|
132
132
|
@object = object
|
133
133
|
@query = query
|
134
134
|
@schema = query.schema
|
@@ -181,23 +181,21 @@ module GraphQL
|
|
181
181
|
end
|
182
182
|
|
183
183
|
def path_cache_key
|
184
|
-
@path_cache_key ||=
|
185
|
-
|
186
|
-
lookahead = query.lookahead
|
184
|
+
@path_cache_key ||= @options.fetch(:path_cache_key) do
|
185
|
+
lookahead = query.lookahead
|
187
186
|
|
188
|
-
|
189
|
-
|
190
|
-
|
187
|
+
path.map { |field_name|
|
188
|
+
# Handle cached fields inside collections:
|
189
|
+
next field_name if field_name.is_a?(Integer)
|
191
190
|
|
192
|
-
|
193
|
-
|
191
|
+
lookahead = lookahead.selection_with_alias(field_name)
|
192
|
+
raise "Failed to look ahead the field: #{field_name}" if lookahead.is_a?(::GraphQL::Execution::Lookahead::NullLookahead)
|
194
193
|
|
195
|
-
|
194
|
+
next lookahead.field.name if lookahead.arguments.empty?
|
196
195
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
end
|
196
|
+
args = lookahead.arguments.map { |_1, _2| "#{_1}:#{traverse_argument(_2)}" }.sort.join(",")
|
197
|
+
"#{lookahead.field.name}(#{args})"
|
198
|
+
}.join("/")
|
201
199
|
end
|
202
200
|
end
|
203
201
|
|
@@ -128,7 +128,7 @@ module GraphQL
|
|
128
128
|
|
129
129
|
attr_reader :query, :path, :object, :schema
|
130
130
|
|
131
|
-
def initialize(object: nil,
|
131
|
+
def initialize(query:, path:, object: nil, **options)
|
132
132
|
@object = object
|
133
133
|
@query = query
|
134
134
|
@schema = query.schema
|
@@ -181,23 +181,21 @@ module GraphQL
|
|
181
181
|
end
|
182
182
|
|
183
183
|
def path_cache_key
|
184
|
-
@path_cache_key ||=
|
185
|
-
|
186
|
-
lookahead = query.lookahead
|
184
|
+
@path_cache_key ||= @options.fetch(:path_cache_key) do
|
185
|
+
lookahead = query.lookahead
|
187
186
|
|
188
|
-
|
189
|
-
|
190
|
-
|
187
|
+
path.map { |field_name|
|
188
|
+
# Handle cached fields inside collections:
|
189
|
+
next field_name if field_name.is_a?(Integer)
|
191
190
|
|
192
|
-
|
193
|
-
|
191
|
+
lookahead = lookahead.selection_with_alias(field_name)
|
192
|
+
raise "Failed to look ahead the field: #{field_name}" if lookahead.is_a?(::GraphQL::Execution::Lookahead::NullLookahead)
|
194
193
|
|
195
|
-
|
194
|
+
next lookahead.field.name if lookahead.arguments.empty?
|
196
195
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
end
|
196
|
+
args = lookahead.arguments.map { "#{_1}:#{traverse_argument(_2)}" }.sort.join(",")
|
197
|
+
"#{lookahead.field.name}(#{args})"
|
198
|
+
}.join("/")
|
201
199
|
end
|
202
200
|
end
|
203
201
|
|
@@ -47,7 +47,7 @@ module GraphQL
|
|
47
47
|
hash = group.map { |fragment| [fragment.cache_key, fragment.value] }.to_h
|
48
48
|
|
49
49
|
begin
|
50
|
-
FragmentCache.cache_store.write_multi(hash,
|
50
|
+
FragmentCache.cache_store.write_multi(*hash, options)
|
51
51
|
rescue => e
|
52
52
|
raise WriteMultiError.new(e, hash)
|
53
53
|
end
|
@@ -56,9 +56,9 @@ module GraphQL
|
|
56
56
|
|
57
57
|
def persist(query)
|
58
58
|
select_valid_fragments(query).each do |fragment|
|
59
|
-
FragmentCache.cache_store.write(fragment.cache_key, fragment.value,
|
59
|
+
FragmentCache.cache_store.write(fragment.cache_key, fragment.value, fragment.options)
|
60
60
|
rescue => e
|
61
|
-
raise WriteError.new(e, fragment.cache_key, fragment.value)
|
61
|
+
raise WriteError.new(e, fragment.cache_key, fragment.value), e
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -77,7 +77,7 @@ module GraphQL
|
|
77
77
|
cache_fragment_options = @cache_options.merge(object: object_for_key)
|
78
78
|
|
79
79
|
object.cache_fragment(**cache_fragment_options) do
|
80
|
-
resolved_value == NOT_RESOLVED ? yield(object, arguments) : resolved_value
|
80
|
+
(resolved_value == NOT_RESOLVED) ? yield(object, arguments) : resolved_value
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
@@ -42,7 +42,8 @@ module GraphQL
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def write(key, value,
|
45
|
+
def write(key, value, options = {})
|
46
|
+
expires_in = options[:expires_in] || default_expires_in
|
46
47
|
key = key.to_s
|
47
48
|
@storage[key] = Entry.new(value: value, expires_at: expires_in ? Time.now + expires_in : nil)
|
48
49
|
end
|
@@ -24,9 +24,9 @@ module GraphQL
|
|
24
24
|
NO_OBJECT = Object.new
|
25
25
|
|
26
26
|
def cache_fragment(object_to_cache = NO_OBJECT, **options, &block)
|
27
|
-
raise ArgumentError, "Block or argument must be provided" unless
|
27
|
+
raise ArgumentError, "Block or argument must be provided" unless block || object_to_cache != NO_OBJECT
|
28
28
|
unless GraphQL::FragmentCache.enabled
|
29
|
-
return
|
29
|
+
return block ? block.call : object_to_cache
|
30
30
|
end
|
31
31
|
|
32
32
|
unless options.delete(:default_options_merged)
|
@@ -36,7 +36,7 @@ module GraphQL
|
|
36
36
|
if options.key?(:if) || options.key?(:unless)
|
37
37
|
disabled = options.key?(:if) ? !options.delete(:if) : options.delete(:unless)
|
38
38
|
if disabled
|
39
|
-
return
|
39
|
+
return block ? block.call : object_to_cache
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -28,7 +28,7 @@ module GraphQL
|
|
28
28
|
cached = @lazy_state[:resolved_fragments][@fragment]
|
29
29
|
|
30
30
|
if cached
|
31
|
-
return cached == Fragment::NIL_IN_CACHE ? nil : GraphQL::Execution::Interpreter::RawValue.new(cached)
|
31
|
+
return (cached == Fragment::NIL_IN_CACHE) ? nil : GraphQL::Execution::Interpreter::RawValue.new(cached)
|
32
32
|
end
|
33
33
|
|
34
34
|
(@block ? @block.call : @object_to_cache).tap do |resolved_value|
|
@@ -55,7 +55,7 @@ module GraphQL
|
|
55
55
|
@cache_store = store
|
56
56
|
end
|
57
57
|
|
58
|
-
|
58
|
+
alias_method :skip_cache_when_query_has_errors?, :skip_cache_when_query_has_errors
|
59
59
|
|
60
60
|
def graphql_ruby_before_2_0?
|
61
61
|
check_graphql_version "< 2.0.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-fragment_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DmitryTsepelev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|
@@ -170,14 +170,14 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - '='
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 3.
|
173
|
+
version: 3.1.2.1
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - '='
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 3.
|
180
|
+
version: 3.1.2.1
|
181
181
|
description: Fragment cache for graphql-ruby
|
182
182
|
email:
|
183
183
|
- dmitry.a.tsepelev@gmail.com
|
@@ -235,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: '0'
|
237
237
|
requirements: []
|
238
|
-
rubygems_version: 3.
|
238
|
+
rubygems_version: 3.4.1
|
239
239
|
signing_key:
|
240
240
|
specification_version: 4
|
241
241
|
summary: Fragment cache for graphql-ruby
|