graphql-extras 0.3.0 → 0.4.1
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/README.md +15 -11
- data/graphql-extras.gemspec +2 -3
- data/lib/graphql/extras.rb +0 -1
- data/lib/graphql/extras/preload.rb +18 -8
- data/lib/graphql/extras/test/schema.rb +5 -1
- data/lib/graphql/extras/types.rb +2 -2
- data/lib/graphql/extras/version.rb +1 -1
- metadata +6 -21
- data/lib/graphql/extras/association_loader.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98e38072429fdb32cbd085ce64d1ac8fa5e295989580b8f2cab3008ef232a7bb
|
4
|
+
data.tar.gz: c7fa03896dd5f5122dff890f5c2e97fcf2d02450a3efd269e14582de4b402a6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 962ff3bb31aaa27d4bac5028fa6dd2400e2330d51d0b2172abd3e7627bbcb206517bc962bc25fcb6687f5660f36403d91e7a0bb20ca0e13087c26ae968cda3e2
|
7
|
+
data.tar.gz: 263a13b184ff89f7f28f60d7b74ab0dc1a454fefb33f27f2ef6fe2e6dca0c2134f4ba828b65e9409f30a80ef3c2fdd692033dac42c333044afac73004dd87be4
|
data/README.md
CHANGED
@@ -14,8 +14,8 @@ A collection of utilities for building GraphQL APIs.
|
|
14
14
|
- [Installation](#installation)
|
15
15
|
- [Usage](#usage)
|
16
16
|
- [GraphQL::Extras::Controller](#graphqlextrascontroller)
|
17
|
-
- [GraphQL::Extras::AssociationLoader](#graphqlextrasassociationloader)
|
18
17
|
- [GraphQL::Extras::Preload](#graphqlextraspreload)
|
18
|
+
- [GraphQL::Extras::PreloadSource](#graphqlextraspreloadsource)
|
19
19
|
- [GraphQL::Extras::Types](#graphqlextrastypes)
|
20
20
|
- [Date](#date)
|
21
21
|
- [DateTime](#datetime)
|
@@ -53,21 +53,15 @@ class GraphqlController < ApplicationController
|
|
53
53
|
end
|
54
54
|
```
|
55
55
|
|
56
|
-
### GraphQL::Extras::AssociationLoader
|
57
|
-
|
58
|
-
This is a subclass of [`GraphQL::Batch::Loader`](https://github.com/Shopify/graphql-batch) that performs eager loading of Active Record associations.
|
59
|
-
|
60
|
-
```ruby
|
61
|
-
loader = GraphQL::Extras::AssociationLoader.for(:blog)
|
62
|
-
loader.load(Post.first)
|
63
|
-
loader.load_many(Post.all)
|
64
|
-
```
|
65
|
-
|
66
56
|
### GraphQL::Extras::Preload
|
67
57
|
|
68
58
|
This allows you to preload associations before resolving fields.
|
69
59
|
|
70
60
|
```ruby
|
61
|
+
class Schema < GraphQL::Schema
|
62
|
+
use GraphQL::Dataloader
|
63
|
+
end
|
64
|
+
|
71
65
|
class BaseField < GraphQL::Schema::Field
|
72
66
|
prepend GraphQL::Extras::Preload
|
73
67
|
end
|
@@ -87,6 +81,16 @@ class PostType < BaseObject
|
|
87
81
|
end
|
88
82
|
```
|
89
83
|
|
84
|
+
### GraphQL::Extras::PreloadSource
|
85
|
+
|
86
|
+
This is a subclass of [`GraphQL::Dataloader::Source`](https://graphql-ruby.org/dataloader/overview.html) that performs eager loading of Active Record associations.
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
loader = dataloader.with(GraphQL::Extras::PreloadSource, :blog)
|
90
|
+
loader.load(Post.first)
|
91
|
+
loader.load_many(Post.all)
|
92
|
+
```
|
93
|
+
|
90
94
|
### GraphQL::Extras::Types
|
91
95
|
|
92
96
|
In your base classes, you should include the `GraphQL::Extras::Types`.
|
data/graphql-extras.gemspec
CHANGED
@@ -10,10 +10,10 @@ Gem::Specification.new do |spec|
|
|
10
10
|
|
11
11
|
spec.summary = %q{Utiltities for building GraphQL APIs.}
|
12
12
|
spec.description = %q{A set of modules and types for buildign GraphQL APIs.}
|
13
|
-
spec.homepage = "https://github.com/
|
13
|
+
spec.homepage = "https://github.com/rzane/graphql-extras"
|
14
14
|
|
15
15
|
spec.metadata["homepage_uri"] = spec.homepage
|
16
|
-
spec.metadata["source_code_uri"] = "https://github.com/
|
16
|
+
spec.metadata["source_code_uri"] = "https://github.com/rzane/graphql-extras"
|
17
17
|
|
18
18
|
# Specify which files should be added to the gem when it is released.
|
19
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -26,7 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
|
27
27
|
spec.add_dependency "activesupport", ">= 5.2"
|
28
28
|
spec.add_dependency "graphql", "~> 1.12"
|
29
|
-
spec.add_dependency "graphql-batch", "~> 0.4"
|
30
29
|
|
31
30
|
spec.add_development_dependency "bundler", "~> 2.0"
|
32
31
|
spec.add_development_dependency "rake", "~> 13.0"
|
data/lib/graphql/extras.rb
CHANGED
@@ -1,7 +1,17 @@
|
|
1
|
-
require "graphql/extras/association_loader"
|
2
|
-
|
3
1
|
module GraphQL
|
4
2
|
module Extras
|
3
|
+
class PreloadSource < GraphQL::Dataloader::Source
|
4
|
+
def initialize(preload)
|
5
|
+
@preload = preload
|
6
|
+
end
|
7
|
+
|
8
|
+
def fetch(records)
|
9
|
+
preloader = ActiveRecord::Associations::Preloader.new
|
10
|
+
preloader.preload(records, @preload)
|
11
|
+
records
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
5
15
|
module Preload
|
6
16
|
# @override
|
7
17
|
def initialize(*args, preload: nil, **opts, &block)
|
@@ -10,13 +20,13 @@ module GraphQL
|
|
10
20
|
end
|
11
21
|
|
12
22
|
# @override
|
13
|
-
def resolve(object, args,
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
loader.load(object.object).then do
|
18
|
-
super(object, args, ctx)
|
23
|
+
def resolve(object, args, context)
|
24
|
+
if @preload
|
25
|
+
loader = context.dataloader.with(PreloadSource, @preload)
|
26
|
+
loader.load(object.object)
|
19
27
|
end
|
28
|
+
|
29
|
+
super
|
20
30
|
end
|
21
31
|
end
|
22
32
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "securerandom"
|
2
2
|
require "active_support/inflector"
|
3
|
-
require "active_support/core_ext/hash
|
3
|
+
require "active_support/core_ext/hash"
|
4
4
|
require "graphql/extras/test/loader"
|
5
5
|
require "graphql/extras/test/response"
|
6
6
|
|
@@ -33,6 +33,10 @@ module GraphQL
|
|
33
33
|
def __execute(schema, query, variables)
|
34
34
|
uploads = {}
|
35
35
|
|
36
|
+
variables = variables.deep_transform_keys do |key|
|
37
|
+
key.to_s.camelize(:lower)
|
38
|
+
end
|
39
|
+
|
36
40
|
variables = variables.deep_transform_values do |value|
|
37
41
|
if value.respond_to? :tempfile
|
38
42
|
id = SecureRandom.uuid
|
data/lib/graphql/extras/types.rb
CHANGED
@@ -34,8 +34,8 @@ module GraphQL
|
|
34
34
|
class Decimal < GraphQL::Schema::Scalar
|
35
35
|
description <<~DESC
|
36
36
|
The `Decimal` scalar type represents signed double-precision fractional
|
37
|
-
values
|
38
|
-
|
37
|
+
values. The Decimal appears in a JSON response as a string to preserve
|
38
|
+
precision.
|
39
39
|
DESC
|
40
40
|
|
41
41
|
def self.coerce_input(value, _context)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-extras
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ray Zane
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.12'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: graphql-batch
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0.4'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0.4'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: bundler
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,7 +154,6 @@ files:
|
|
168
154
|
- bin/setup
|
169
155
|
- graphql-extras.gemspec
|
170
156
|
- lib/graphql/extras.rb
|
171
|
-
- lib/graphql/extras/association_loader.rb
|
172
157
|
- lib/graphql/extras/controller.rb
|
173
158
|
- lib/graphql/extras/preload.rb
|
174
159
|
- lib/graphql/extras/test.rb
|
@@ -177,11 +162,11 @@ files:
|
|
177
162
|
- lib/graphql/extras/test/schema.rb
|
178
163
|
- lib/graphql/extras/types.rb
|
179
164
|
- lib/graphql/extras/version.rb
|
180
|
-
homepage: https://github.com/
|
165
|
+
homepage: https://github.com/rzane/graphql-extras
|
181
166
|
licenses: []
|
182
167
|
metadata:
|
183
|
-
homepage_uri: https://github.com/
|
184
|
-
source_code_uri: https://github.com/
|
168
|
+
homepage_uri: https://github.com/rzane/graphql-extras
|
169
|
+
source_code_uri: https://github.com/rzane/graphql-extras
|
185
170
|
post_install_message:
|
186
171
|
rdoc_options: []
|
187
172
|
require_paths:
|
@@ -197,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
182
|
- !ruby/object:Gem::Version
|
198
183
|
version: '0'
|
199
184
|
requirements: []
|
200
|
-
rubygems_version: 3.0.3
|
185
|
+
rubygems_version: 3.0.3.1
|
201
186
|
signing_key:
|
202
187
|
specification_version: 4
|
203
188
|
summary: Utiltities for building GraphQL APIs.
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require "graphql/batch"
|
2
|
-
|
3
|
-
module GraphQL
|
4
|
-
module Extras
|
5
|
-
class AssociationLoader < GraphQL::Batch::Loader
|
6
|
-
def initialize(preload)
|
7
|
-
@preload = preload
|
8
|
-
end
|
9
|
-
|
10
|
-
def cache_key(record)
|
11
|
-
record.object_id
|
12
|
-
end
|
13
|
-
|
14
|
-
def perform(records)
|
15
|
-
preloader = ActiveRecord::Associations::Preloader.new
|
16
|
-
preloader.preload(records, @preload)
|
17
|
-
|
18
|
-
records.each do |record|
|
19
|
-
fulfill(record, nil) unless fulfilled?(record)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|