graphql-extras 0.3.2 → 0.4.2

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: eb6a2324dfea95555ab147de0f4d79601603e21ca7dde008939795b12d40064c
4
- data.tar.gz: ef735334a0b5be7ac0286c45886aa60d507482b73a95c0af89a2d1b5dfae27cc
3
+ metadata.gz: 8f3927449d4c9cea85828d5df7ea64954fa489c602ba39e35f938248962d65da
4
+ data.tar.gz: 3b9564bc9e6d32832e868c983826d007ad99d490c9316ecd8b20ca6eef4ec121
5
5
  SHA512:
6
- metadata.gz: b412b43cd6d6c3865726770b1bd54d121e5a122fdafcd0f4f0e141edb6cd9e83ca13c47f73530025be3d16498144f97f3ddc40c02897049679bfebad8189ed56
7
- data.tar.gz: '018ccec04e7e67b563e460fcbe7d1649a097087846b488985c34072004bcd2839162e4a3f3131c76718ea99a1d15633bc5c9f7ec3190cef65de203eb6c533a4b'
6
+ metadata.gz: ac5e8a5230c0543d7897ef73ee6634ef44b932adf7af91d6ce1e4f5711955965967ebed75d8b3c23ce97af9e2c24915dc423be3b32aa9af9219f9cd590183acd
7
+ data.tar.gz: 973a08ada1e4e313299c0f8724d338e2b2b405374e7fb91f7791a3a1d2ead7cf2788564367f747aef563b8be7a2e8e258f2eba7cc18acbbed2484637892626b0
@@ -10,7 +10,7 @@ jobs:
10
10
  - name: Setup Ruby
11
11
  uses: actions/setup-ruby@v1
12
12
  with:
13
- ruby-version: 2.6.x
13
+ ruby-version: 3.1.x
14
14
 
15
15
  - name: Install packages
16
16
  run: sudo apt-get install libsqlite3-dev
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`.
@@ -25,8 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.require_paths = ["lib"]
26
26
 
27
27
  spec.add_dependency "activesupport", ">= 5.2"
28
- spec.add_dependency "graphql", "~> 1.12"
29
- spec.add_dependency "graphql-batch", "~> 0.4"
28
+ spec.add_dependency "graphql", [">= 1.12", "< 3"]
30
29
 
31
30
  spec.add_development_dependency "bundler", "~> 2.0"
32
31
  spec.add_development_dependency "rake", "~> 13.0"
@@ -1,7 +1,26 @@
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
+ if ActiveRecord::VERSION::MAJOR >= 7
10
+ preloader = ActiveRecord::Associations::Preloader.new(
11
+ records: records,
12
+ associations: @preload
13
+ )
14
+ preloader.call
15
+ else
16
+ preloader = ActiveRecord::Associations::Preloader.new
17
+ preloader.preload(records, @preload)
18
+ end
19
+
20
+ records
21
+ end
22
+ end
23
+
5
24
  module Preload
6
25
  # @override
7
26
  def initialize(*args, preload: nil, **opts, &block)
@@ -10,13 +29,13 @@ module GraphQL
10
29
  end
11
30
 
12
31
  # @override
13
- def resolve(object, args, ctx)
14
- return super unless @preload
15
-
16
- loader = AssociationLoader.for(@preload)
17
- loader.load(object.object).then do
18
- super(object, args, ctx)
32
+ def resolve(object, args, context)
33
+ if @preload
34
+ loader = context.dataloader.with(PreloadSource, @preload)
35
+ loader.load(object.object)
19
36
  end
37
+
38
+ super
20
39
  end
21
40
  end
22
41
  end
@@ -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 parsed by the `Decimal` library. The Decimal appears in a JSON
38
- response as a string to preserve precision.
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)
@@ -1,5 +1,5 @@
1
1
  module GraphQL
2
2
  module Extras
3
- VERSION = "0.3.2"
3
+ VERSION = "0.4.2"
4
4
  end
5
5
  end
@@ -1,7 +1,6 @@
1
1
  require "graphql/extras/version"
2
2
  require "graphql/extras/types"
3
3
  require "graphql/extras/controller"
4
- require "graphql/extras/association_loader"
5
4
  require "graphql/extras/preload"
6
5
 
7
6
  module GraphQL
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.3.2
4
+ version: 0.4.2
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-02-19 00:00:00.000000000 Z
11
+ date: 2022-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -28,30 +28,22 @@ dependencies:
28
28
  name: graphql
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.12'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '3'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  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
- - - "~>"
44
+ - - "<"
53
45
  - !ruby/object:Gem::Version
54
- version: '0.4'
46
+ version: '3'
55
47
  - !ruby/object:Gem::Dependency
56
48
  name: bundler
57
49
  requirement: !ruby/object:Gem::Requirement
@@ -168,7 +160,6 @@ files:
168
160
  - bin/setup
169
161
  - graphql-extras.gemspec
170
162
  - lib/graphql/extras.rb
171
- - lib/graphql/extras/association_loader.rb
172
163
  - lib/graphql/extras/controller.rb
173
164
  - lib/graphql/extras/preload.rb
174
165
  - lib/graphql/extras/test.rb
@@ -197,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
188
  - !ruby/object:Gem::Version
198
189
  version: '0'
199
190
  requirements: []
200
- rubygems_version: 3.0.3
191
+ rubygems_version: 3.0.3.1
201
192
  signing_key:
202
193
  specification_version: 4
203
194
  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