graphql-extras 0.3.2 → 0.4.2

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 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