graphql-fragment_cache 1.17.0 → 1.18.0
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/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
|